76: QAbstractTableModel(parent)
79, m_bProjActivated(false)
80, m_bCompActivated(false)
82, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor> >::create())
83, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool> >::create())
84, m_qMapAverageColorOld(QSharedPointer<QMap<QString, QColor> >::create())
85, m_qMapAverageActivationOld(QSharedPointer<QMap<QString, bool> >::create())
121 if(index.isValid()) {
122 qint32 row = m_qMapIdxRowSelection[index.row()];
125 if(index.column() == 0 && role == Qt::DisplayRole) {
126 return QVariant(m_pEvokedSet->info.ch_names);
131 if(index.column()==1) {
134 QList<DISPLIB::AvrTypeRowVector> lRowDataPerTrigType;
138 case Qt::DisplayRole: {
143 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
144 pairItem.first = m_lAvrTypes.at(i);
145 pairItem.second = m_matDataFreeze.at(i).row(row);
146 lRowDataPerTrigType.append(pairItem);
150 for(
int i = 0; i < m_matData.size(); ++i) {
151 pairItem.first = m_lAvrTypes.at(i);
152 pairItem.second = m_matData.at(i).row(row);
153 lRowDataPerTrigType.append(pairItem);
157 v.setValue(lRowDataPerTrigType);
162 case Qt::BackgroundRole: {
179 if(index.column()==2) {
181 QList<DISPLIB::AvrTypeRowVectorPair> lRowDataPerTrigType;
188 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
189 averagedData.first = m_lAvrTypes.at(i);
190 averagedData.second.first = m_matDataFreeze.at(i).data();
191 averagedData.second.second = m_matDataFreeze.at(i).cols();
193 lRowDataPerTrigType.append(averagedData);
196 for(
int i = 0; i < m_matData.size(); ++i) {
197 averagedData.first = m_lAvrTypes.at(i);
198 averagedData.second.first = m_matData.at(i).data();
199 averagedData.second.second = m_matData.at(i).cols();
201 lRowDataPerTrigType.append(averagedData);
205 v.setValue(lRowDataPerTrigType);
221 if(role != Qt::DisplayRole && role != Qt::TextAlignmentRole) {
225 if(orientation == Qt::Horizontal) {
231 case Qt::DisplayRole:
232 return QVariant(
"data plot");
233 case Qt::TextAlignmentRole:
234 return QVariant(Qt::AlignLeft);
236 return QVariant(
"data plot");
239 else if(orientation == Qt::Vertical) {
240 QModelIndex chname = createIndex(section,0);
242 case Qt::DisplayRole:
243 return QVariant(
data(chname).toString());
275 QStringList emptyExclude;
277 if(m_pEvokedSet->info.bads.size() > 0) {
283 m_fSps = m_pEvokedSet->info.sfreq;
285 m_matSparseProjMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
286 m_matSparseCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
287 m_matSparseProjCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
289 m_matSparseProjMult.setIdentity();
290 m_matSparseCompMult.setIdentity();
291 m_matSparseProjCompMult.setIdentity();
293 m_qMapAverageActivation->clear();
294 m_qMapAverageColor->clear();
295 m_qMapAverageActivationOld->clear();
296 m_qMapAverageColorOld->clear();
322 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
323 bool doProj = m_bProjActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matProj.cols() ? true :
false;
325 bool doComp = m_bCompActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matComp.cols() ? true :
false;
330 m_matData.append(m_matSparseProjCompMult * m_pEvokedSet->evoked.at(i).data);
333 m_matData.append(m_matSparseCompMult * m_pEvokedSet->evoked.at(i).data);
338 m_matData.append(m_matSparseProjMult * m_pEvokedSet->evoked.at(i).data);
341 m_matData.append(m_pEvokedSet->evoked.at(i).data);
345 m_pairBaseline = m_pEvokedSet->evoked.at(i).baseline;
347 m_lAvrTypes.append(m_pEvokedSet->evoked.at(i).comment);
351 QStringList slCurrentAvrComments;
352 int iSizeAvrActivation = m_qMapAverageActivation->size();
353 int iSizeAvrColor = m_qMapAverageColor->size();
355 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
356 slCurrentAvrComments << m_pEvokedSet->evoked.at(i).comment;
358 if(!m_qMapAverageActivation->contains(m_pEvokedSet->evoked.at(i).comment)) {
359 if(m_qMapAverageActivationOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
360 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageActivationOld->value(m_pEvokedSet->evoked.at(i).comment));
362 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment,
true);
366 if(!m_qMapAverageColor->contains(m_pEvokedSet->evoked.at(i).comment)) {
367 if(m_qMapAverageColorOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
368 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageColorOld->value(m_pEvokedSet->evoked.at(i).comment));
370 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, Qt::yellow);
376 QMutableMapIterator<QString, bool> itrActivation(*m_qMapAverageActivation);
377 while(itrActivation.hasNext()) {
378 itrActivation.next();
379 if(!slCurrentAvrComments.contains(itrActivation.key())) {
380 m_qMapAverageActivationOld->insert(itrActivation.key(),itrActivation.value());
381 itrActivation.remove();
385 QMutableMapIterator<QString, QColor> itrColor(*m_qMapAverageColor);
386 while(itrColor.hasNext()) {
388 if(!slCurrentAvrComments.contains(itrColor.key())) {
389 m_qMapAverageColorOld->insert(itrColor.key(),itrColor.value());
395 if(iSizeAvrColor != m_qMapAverageColor->size()) {
399 if(iSizeAvrActivation != m_qMapAverageActivation->size()) {
404 QModelIndex topLeft = this->index(0,1);
405 QModelIndex bottomRight = this->index(m_pEvokedSet->info.nchan-1,1);
406 QVector<int> roles; roles << Qt::DisplayRole;
408 emit dataChanged(topLeft, bottomRight, roles);
658 if(m_pEvokedSet->info.chs.size() > 0) {
659 m_pEvokedSet->info.projs = projs;
660 m_bProjActivated =
false;
661 for(qint32 i = 0; i < projs.size(); ++i) {
662 if(m_pEvokedSet->info.projs[i].active) {
663 m_bProjActivated =
true;
667 m_pEvokedSet->info.make_projector(m_matProj);
672 QStringList emptyExclude;
674 if(m_pEvokedSet->info.bads.size() > 0) {
680 for(qint32 j = 0; j < m_vecBadIdcs.cols(); ++j) {
681 m_matProj.col(m_vecBadIdcs[j]).setZero();
688 qint32 nchan = m_pEvokedSet->info.nchan;
691 typedef Eigen::Triplet<double> T;
692 std::vector<T> tripletList;
693 tripletList.reserve(nchan);
699 tripletList.reserve(m_matProj.rows()*m_matProj.cols());
700 for(i = 0; i < m_matProj.rows(); ++i) {
701 for(k = 0; k < m_matProj.cols(); ++k) {
702 if(m_matProj(i,k) != 0) {
703 tripletList.push_back(T(i, k, m_matProj(i,k)));
708 m_matSparseProjMult = SparseMatrix<double>(m_matProj.rows(),m_matProj.cols());
709 if(tripletList.size() > 0) {
710 m_matSparseProjMult.setFromTriplets(tripletList.begin(), tripletList.end());
714 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
727 if(m_pEvokedSet->info.chs.size() > 0)
730 m_bCompActivated =
false;
732 m_bCompActivated =
true;
740 m_pEvokedSet->info.make_compensator(0, to, newComp);
745 m_matComp = newComp.
data->data;
750 qint32 nchan = m_pEvokedSet->info.nchan;
753 typedef Eigen::Triplet<double> T;
754 std::vector<T> tripletList;
755 tripletList.reserve(nchan);
758 tripletList.reserve(m_matComp.rows()*m_matComp.cols());
759 for(i = 0; i < m_matComp.rows(); ++i) {
760 for(k = 0; k < m_matComp.cols(); ++k) {
761 if(m_matComp(i,k) != 0) {
762 tripletList.push_back(T(i, k, m_matComp(i,k)));
767 m_matSparseCompMult = SparseMatrix<double>(m_matComp.rows(),m_matComp.cols());
768 if(tripletList.size() > 0) {
769 m_matSparseCompMult.setFromTriplets(tripletList.begin(), tripletList.end());
773 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
781 m_bIsFreezed = !m_bIsFreezed;
784 m_matDataFreeze = m_matData;
788 QModelIndex topLeft = this->index(0,1);
789 QModelIndex bottomRight = this->index(this->
rowCount(),1);
790 QVector<int> roles; roles << Qt::DisplayRole;
791 emit dataChanged(topLeft, bottomRight, roles);