56: QAbstractTableModel(parent)
59, m_bProjActivated(false)
60, m_bCompActivated(false)
62, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor> >::create())
63, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool> >::create())
64, m_qMapAverageColorOld(QSharedPointer<QMap<QString, QColor> >::create())
65, m_qMapAverageActivationOld(QSharedPointer<QMap<QString, bool> >::create())
101 if(index.isValid()) {
102 qint32 row = m_qMapIdxRowSelection[index.row()];
105 if(index.column() == 0 && role == Qt::DisplayRole) {
106 return QVariant(m_pEvokedSet->info.ch_names);
111 if(index.column()==1) {
114 QList<DISPLIB::AvrTypeRowVector> lRowDataPerTrigType;
118 case Qt::DisplayRole: {
123 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
124 pairItem.first = m_lAvrTypes.at(i);
125 pairItem.second = m_matDataFreeze.at(i).row(row);
126 lRowDataPerTrigType.append(pairItem);
130 for(
int i = 0; i < m_matData.size(); ++i) {
131 pairItem.first = m_lAvrTypes.at(i);
132 pairItem.second = m_matData.at(i).row(row);
133 lRowDataPerTrigType.append(pairItem);
137 v.setValue(lRowDataPerTrigType);
142 case Qt::BackgroundRole: {
159 if(index.column()==2) {
161 QList<DISPLIB::AvrTypeRowVectorPair> lRowDataPerTrigType;
168 for(
int i = 0; i < m_matDataFreeze.size(); ++i) {
169 averagedData.first = m_lAvrTypes.at(i);
170 averagedData.second.first = m_matDataFreeze.at(i).data();
171 averagedData.second.second = m_matDataFreeze.at(i).cols();
173 lRowDataPerTrigType.append(averagedData);
176 for(
int i = 0; i < m_matData.size(); ++i) {
177 averagedData.first = m_lAvrTypes.at(i);
178 averagedData.second.first = m_matData.at(i).data();
179 averagedData.second.second = m_matData.at(i).cols();
181 lRowDataPerTrigType.append(averagedData);
185 v.setValue(lRowDataPerTrigType);
201 if(role != Qt::DisplayRole && role != Qt::TextAlignmentRole) {
205 if(orientation == Qt::Horizontal) {
211 case Qt::DisplayRole:
212 return QVariant(
"data plot");
213 case Qt::TextAlignmentRole:
214 return QVariant(Qt::AlignLeft);
216 return QVariant(
"data plot");
219 else if(orientation == Qt::Vertical) {
220 QModelIndex chname = createIndex(section,0);
222 case Qt::DisplayRole:
223 return QVariant(
data(chname).toString());
255 QStringList emptyExclude;
257 if(m_pEvokedSet->info.bads.size() > 0) {
263 m_fSps = m_pEvokedSet->info.sfreq;
265 m_matSparseProjMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
266 m_matSparseCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
267 m_matSparseProjCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(),m_pEvokedSet->info.chs.size());
269 m_matSparseProjMult.setIdentity();
270 m_matSparseCompMult.setIdentity();
271 m_matSparseProjCompMult.setIdentity();
273 m_qMapAverageActivation->clear();
274 m_qMapAverageColor->clear();
275 m_qMapAverageActivationOld->clear();
276 m_qMapAverageColorOld->clear();
302 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
303 bool doProj = m_bProjActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matProj.cols() ? true :
false;
305 bool doComp = m_bCompActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matComp.cols() ? true :
false;
310 m_matData.append(m_matSparseProjCompMult * m_pEvokedSet->evoked.at(i).data);
313 m_matData.append(m_matSparseCompMult * m_pEvokedSet->evoked.at(i).data);
318 m_matData.append(m_matSparseProjMult * m_pEvokedSet->evoked.at(i).data);
321 m_matData.append(m_pEvokedSet->evoked.at(i).data);
325 m_pairBaseline = m_pEvokedSet->evoked.at(i).baseline;
327 m_lAvrTypes.append(m_pEvokedSet->evoked.at(i).comment);
331 QStringList slCurrentAvrComments;
332 int iSizeAvrActivation = m_qMapAverageActivation->size();
333 int iSizeAvrColor = m_qMapAverageColor->size();
335 for(
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
336 slCurrentAvrComments << m_pEvokedSet->evoked.at(i).comment;
338 if(!m_qMapAverageActivation->contains(m_pEvokedSet->evoked.at(i).comment)) {
339 if(m_qMapAverageActivationOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
340 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageActivationOld->value(m_pEvokedSet->evoked.at(i).comment));
342 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment,
true);
346 if(!m_qMapAverageColor->contains(m_pEvokedSet->evoked.at(i).comment)) {
347 if(m_qMapAverageColorOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
348 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageColorOld->value(m_pEvokedSet->evoked.at(i).comment));
350 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, Qt::yellow);
356 QMutableMapIterator<QString, bool> itrActivation(*m_qMapAverageActivation);
357 while(itrActivation.hasNext()) {
358 itrActivation.next();
359 if(!slCurrentAvrComments.contains(itrActivation.key())) {
360 m_qMapAverageActivationOld->insert(itrActivation.key(),itrActivation.value());
361 itrActivation.remove();
365 QMutableMapIterator<QString, QColor> itrColor(*m_qMapAverageColor);
366 while(itrColor.hasNext()) {
368 if(!slCurrentAvrComments.contains(itrColor.key())) {
369 m_qMapAverageColorOld->insert(itrColor.key(),itrColor.value());
375 if(iSizeAvrColor != m_qMapAverageColor->size()) {
379 if(iSizeAvrActivation != m_qMapAverageActivation->size()) {
384 QModelIndex topLeft = this->index(0,1);
385 QModelIndex bottomRight = this->index(m_pEvokedSet->info.nchan-1,1);
386 QVector<int> roles; roles << Qt::DisplayRole;
388 emit dataChanged(topLeft, bottomRight, roles);
638 if(m_pEvokedSet->info.chs.size() > 0) {
639 m_pEvokedSet->info.projs = projs;
640 m_bProjActivated =
false;
641 for(qint32 i = 0; i < projs.size(); ++i) {
642 if(m_pEvokedSet->info.projs[i].active) {
643 m_bProjActivated =
true;
647 m_pEvokedSet->info.make_projector(m_matProj);
652 QStringList emptyExclude;
654 if(m_pEvokedSet->info.bads.size() > 0) {
660 for(qint32 j = 0; j < m_vecBadIdcs.cols(); ++j) {
661 m_matProj.col(m_vecBadIdcs[j]).setZero();
668 qint32 nchan = m_pEvokedSet->info.nchan;
671 typedef Eigen::Triplet<double> T;
672 std::vector<T> tripletList;
673 tripletList.reserve(nchan);
679 tripletList.reserve(m_matProj.rows()*m_matProj.cols());
680 for(i = 0; i < m_matProj.rows(); ++i) {
681 for(k = 0; k < m_matProj.cols(); ++k) {
682 if(m_matProj(i,k) != 0) {
683 tripletList.push_back(T(i, k, m_matProj(i,k)));
688 m_matSparseProjMult = SparseMatrix<double>(m_matProj.rows(),m_matProj.cols());
689 if(tripletList.size() > 0) {
690 m_matSparseProjMult.setFromTriplets(tripletList.begin(), tripletList.end());
694 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
707 if(m_pEvokedSet->info.chs.size() > 0)
710 m_bCompActivated =
false;
712 m_bCompActivated =
true;
720 m_pEvokedSet->info.make_compensator(0, to, newComp);
725 m_matComp = newComp.
data->data;
730 qint32 nchan = m_pEvokedSet->info.nchan;
733 typedef Eigen::Triplet<double> T;
734 std::vector<T> tripletList;
735 tripletList.reserve(nchan);
738 tripletList.reserve(m_matComp.rows()*m_matComp.cols());
739 for(i = 0; i < m_matComp.rows(); ++i) {
740 for(k = 0; k < m_matComp.cols(); ++k) {
741 if(m_matComp(i,k) != 0) {
742 tripletList.push_back(T(i, k, m_matComp(i,k)));
747 m_matSparseCompMult = SparseMatrix<double>(m_matComp.rows(),m_matComp.cols());
748 if(tripletList.size() > 0) {
749 m_matSparseCompMult.setFromTriplets(tripletList.begin(), tripletList.end());
753 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
761 m_bIsFreezed = !m_bIsFreezed;
764 m_matDataFreeze = m_matData;
768 QModelIndex topLeft = this->index(0,1);
769 QModelIndex bottomRight = this->index(this->
rowCount(),1);
770 QVector<int> roles; roles << Qt::DisplayRole;
771 emit dataChanged(topLeft, bottomRight, roles);