77: QAbstractTableModel(parent)
80, m_bProjActivated(false)
81, m_bCompActivated(false)
83, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor> >::create())
84, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool> >::create())
85, m_qMapAverageColorOld(QSharedPointer<QMap<QString, QColor> >::create())
86, m_qMapAverageActivationOld(QSharedPointer<QMap<QString, bool> >::create())
122 if(index.isValid()) {
123 qint32 row = m_qMapIdxRowSelection[index.row()];
126 if(index.column() == 0 && role == Qt::DisplayRole) {
127 return QVariant(m_pEvokedSet->info.ch_names);
132 if(index.column()==1) {
135 QList<DISPLIB::AvrTypeRowVector> lRowDataPerTrigType;
139 case Qt::DisplayRole: {
144 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
145 pairItem.first = m_lAvrTypes.at(i);
146 pairItem.second = m_matDataFreeze.at(i).row(row);
147 lRowDataPerTrigType.append(pairItem);
151 for(
int i = 0; i < m_matData.size(); ++i) {
152 pairItem.first = m_lAvrTypes.at(i);
153 pairItem.second = m_matData.at(i).row(row);
154 lRowDataPerTrigType.append(pairItem);
158 v.setValue(lRowDataPerTrigType);
163 case Qt::BackgroundRole: {
180 if(index.column()==2) {
182 QList<DISPLIB::AvrTypeRowVectorPair> lRowDataPerTrigType;
189 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
190 averagedData.first = m_lAvrTypes.at(i);
191 averagedData.second.first = m_matDataFreeze.at(i).data();
192 averagedData.second.second = m_matDataFreeze.at(i).cols();
194 lRowDataPerTrigType.append(averagedData);
197 for(
int i = 0; i < m_matData.size(); ++i) {
198 averagedData.first = m_lAvrTypes.at(i);
199 averagedData.second.first = m_matData.at(i).data();
200 averagedData.second.second = m_matData.at(i).cols();
202 lRowDataPerTrigType.append(averagedData);
206 v.setValue(lRowDataPerTrigType);
222 if(role != Qt::DisplayRole && role != Qt::TextAlignmentRole) {
226 if(orientation == Qt::Horizontal) {
232 case Qt::DisplayRole:
233 return QVariant(
"data plot");
234 case Qt::TextAlignmentRole:
235 return QVariant(Qt::AlignLeft);
237 return QVariant(
"data plot");
240 else if(orientation == Qt::Vertical) {
241 QModelIndex chname = createIndex(section,0);
243 case Qt::DisplayRole:
244 return QVariant(
data(chname).toString());
276 QStringList emptyExclude;
278 if(m_pEvokedSet->info.bads.size() > 0) {
284 m_fSps = m_pEvokedSet->info.sfreq;
286 m_matSparseProjMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
287 m_matSparseCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
288 m_matSparseProjCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
290 m_matSparseProjMult.setIdentity();
291 m_matSparseCompMult.setIdentity();
292 m_matSparseProjCompMult.setIdentity();
294 m_qMapAverageActivation->clear();
295 m_qMapAverageColor->clear();
296 m_qMapAverageActivationOld->clear();
297 m_qMapAverageColorOld->clear();
323 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
324 bool doProj = m_bProjActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matProj.cols() ? true :
false;
326 bool doComp = m_bCompActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matComp.cols() ? true :
false;
331 m_matData.append(m_matSparseProjCompMult * m_pEvokedSet->evoked.at(i).data);
334 m_matData.append(m_matSparseCompMult * m_pEvokedSet->evoked.at(i).data);
339 m_matData.append(m_matSparseProjMult * m_pEvokedSet->evoked.at(i).data);
342 m_matData.append(m_pEvokedSet->evoked.at(i).data);
346 m_pairBaseline = m_pEvokedSet->evoked.at(i).baseline;
348 m_lAvrTypes.append(m_pEvokedSet->evoked.at(i).comment);
352 QStringList slCurrentAvrComments;
353 int iSizeAvrActivation = m_qMapAverageActivation->size();
354 int iSizeAvrColor = m_qMapAverageColor->size();
356 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
357 slCurrentAvrComments << m_pEvokedSet->evoked.at(i).comment;
359 if(!m_qMapAverageActivation->contains(m_pEvokedSet->evoked.at(i).comment)) {
360 if(m_qMapAverageActivationOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
361 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageActivationOld->value(m_pEvokedSet->evoked.at(i).comment));
363 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment,
true);
367 if(!m_qMapAverageColor->contains(m_pEvokedSet->evoked.at(i).comment)) {
368 if(m_qMapAverageColorOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
369 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageColorOld->value(m_pEvokedSet->evoked.at(i).comment));
371 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, Qt::yellow);
377 QMutableMapIterator<QString, bool> itrActivation(*m_qMapAverageActivation);
378 while(itrActivation.hasNext()) {
379 itrActivation.next();
380 if(!slCurrentAvrComments.contains(itrActivation.key())) {
381 m_qMapAverageActivationOld->insert(itrActivation.key(),itrActivation.value());
382 itrActivation.remove();
386 QMutableMapIterator<QString, QColor> itrColor(*m_qMapAverageColor);
387 while(itrColor.hasNext()) {
389 if(!slCurrentAvrComments.contains(itrColor.key())) {
390 m_qMapAverageColorOld->insert(itrColor.key(),itrColor.value());
396 if(iSizeAvrColor != m_qMapAverageColor->size()) {
400 if(iSizeAvrActivation != m_qMapAverageActivation->size()) {
405 QModelIndex topLeft = this->index(0,1);
406 QModelIndex bottomRight = this->index(m_pEvokedSet->info.nchan-1,1);
407 QVector<int> roles; roles << Qt::DisplayRole;
409 emit dataChanged(topLeft, bottomRight, roles);
659 if(m_pEvokedSet->info.chs.size() > 0) {
660 m_pEvokedSet->info.projs = projs;
661 m_bProjActivated =
false;
662 for(qint32 i = 0; i < projs.size(); ++i) {
663 if(m_pEvokedSet->info.projs[i].active) {
664 m_bProjActivated =
true;
668 m_pEvokedSet->info.make_projector(m_matProj);
673 QStringList emptyExclude;
675 if(m_pEvokedSet->info.bads.size() > 0) {
681 for(qint32 j = 0; j < m_vecBadIdcs.cols(); ++j) {
682 m_matProj.col(m_vecBadIdcs[j]).setZero();
689 qint32 nchan = m_pEvokedSet->info.nchan;
692 typedef Eigen::Triplet<double> T;
693 std::vector<T> tripletList;
694 tripletList.reserve(nchan);
700 tripletList.reserve(m_matProj.rows()*m_matProj.cols());
701 for(i = 0; i < m_matProj.rows(); ++i) {
702 for(k = 0; k < m_matProj.cols(); ++k) {
703 if(m_matProj(i,k) != 0) {
704 tripletList.push_back(T(i, k, m_matProj(i,k)));
709 m_matSparseProjMult = SparseMatrix<double>(m_matProj.rows(),m_matProj.cols());
710 if(tripletList.size() > 0) {
711 m_matSparseProjMult.setFromTriplets(tripletList.begin(), tripletList.end());
715 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
728 if(m_pEvokedSet->info.chs.size() > 0)
731 m_bCompActivated =
false;
733 m_bCompActivated =
true;
741 m_pEvokedSet->info.make_compensator(0, to, newComp);
746 m_matComp = newComp.
data->data;
751 qint32 nchan = m_pEvokedSet->info.nchan;
754 typedef Eigen::Triplet<double> T;
755 std::vector<T> tripletList;
756 tripletList.reserve(nchan);
759 tripletList.reserve(m_matComp.rows()*m_matComp.cols());
760 for(i = 0; i < m_matComp.rows(); ++i) {
761 for(k = 0; k < m_matComp.cols(); ++k) {
762 if(m_matComp(i,k) != 0) {
763 tripletList.push_back(T(i, k, m_matComp(i,k)));
768 m_matSparseCompMult = SparseMatrix<double>(m_matComp.rows(),m_matComp.cols());
769 if(tripletList.size() > 0) {
770 m_matSparseCompMult.setFromTriplets(tripletList.begin(), tripletList.end());
774 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
782 m_bIsFreezed = !m_bIsFreezed;
785 m_matDataFreeze = m_matData;
789 QModelIndex topLeft = this->index(0,1);
790 QModelIndex bottomRight = this->index(this->
rowCount(),1);
791 QVector<int> roles; roles << Qt::DisplayRole;
792 emit dataChanged(topLeft, bottomRight, roles);