57: QAbstractTableModel(parent)
58, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor>>::create())
59, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool>>::create())
60, m_qMapAverageColorOld(QSharedPointer<QMap<QString, QColor>>::create())
61, m_qMapAverageActivationOld(QSharedPointer<QMap<QString, bool>>::create())
64, m_bProjActivated(false)
65, m_bCompActivated(false)
102 if (index.isValid()) {
103 qint32 row = m_qMapIdxRowSelection[index.row()];
106 if (index.column() == 0 && role == Qt::DisplayRole) {
107 return QVariant(m_pEvokedSet->info.ch_names);
112 if (index.column() == 1) {
115 QList<DISPLIB::AvrTypeRowVector> lRowDataPerTrigType;
119 case Qt::DisplayRole: {
124 for (
int i = 0; i < m_matDataFreeze.size(); ++i) {
125 pairItem.first = m_lAvrTypesFreeze.at(i);
126 pairItem.second = m_matDataFreeze.at(i).row(row);
127 lRowDataPerTrigType.append(pairItem);
131 for (
int i = 0; i < m_matData.size(); ++i) {
132 pairItem.first = m_lAvrTypes.at(i);
133 pairItem.second = m_matData.at(i).row(row);
134 lRowDataPerTrigType.append(pairItem);
138 v.setValue(lRowDataPerTrigType);
142 case Qt::BackgroundRole: {
157 if (index.column() == 2) {
159 QList<DISPLIB::AvrTypeRowVectorPair> lRowDataPerTrigType;
166 for (
int i = 0; i < m_matDataFreeze.size(); ++i) {
167 averagedData.first = m_lAvrTypesFreeze.at(i);
168 averagedData.second.first = m_matDataFreeze.at(i).data();
169 averagedData.second.second = m_matDataFreeze.at(i).cols();
171 lRowDataPerTrigType.append(averagedData);
174 for (
int i = 0; i < m_matData.size(); ++i) {
175 averagedData.first = m_lAvrTypes.at(i);
176 averagedData.second.first = m_matData.at(i).data();
177 averagedData.second.second = m_matData.at(i).cols();
179 lRowDataPerTrigType.append(averagedData);
183 v.setValue(lRowDataPerTrigType);
199 if (role != Qt::DisplayRole && role != Qt::TextAlignmentRole) {
203 if (orientation == Qt::Horizontal) {
209 case Qt::DisplayRole:
210 return QVariant(
"data plot");
211 case Qt::TextAlignmentRole:
212 return QVariant(Qt::AlignLeft);
214 return QVariant(
"data plot");
216 }
else if (orientation == Qt::Vertical) {
217 QModelIndex chname = createIndex(section, 0);
219 case Qt::DisplayRole:
220 return QVariant(
data(chname).toString());
252 QStringList emptyExclude;
254 if (m_pEvokedSet->info.bads.size() > 0) {
260 m_fSps = m_pEvokedSet->info.sfreq;
262 m_matSparseProjMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
263 m_matSparseCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
264 m_matSparseProjCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
266 m_matSparseProjMult.setIdentity();
267 m_matSparseCompMult.setIdentity();
268 m_matSparseProjCompMult.setIdentity();
270 m_qMapAverageActivation->clear();
271 m_qMapAverageColor->clear();
272 m_qMapAverageActivationOld->clear();
273 m_qMapAverageColorOld->clear();
299 for (
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
300 bool doProj = m_bProjActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matProj.cols() ? true :
false;
302 bool doComp = m_bCompActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matComp.cols() ? true :
false;
307 m_matData.append(m_matSparseProjCompMult * m_pEvokedSet->evoked.at(i).data);
310 m_matData.append(m_matSparseCompMult * m_pEvokedSet->evoked.at(i).data);
315 m_matData.append(m_matSparseProjMult * m_pEvokedSet->evoked.at(i).data);
318 m_matData.append(m_pEvokedSet->evoked.at(i).data);
322 m_pairBaseline = m_pEvokedSet->evoked.at(i).baseline;
324 m_lAvrTypes.append(m_pEvokedSet->evoked.at(i).comment);
328 QStringList slCurrentAvrComments;
329 int iSizeAvrActivation = m_qMapAverageActivation->size();
330 int iSizeAvrColor = m_qMapAverageColor->size();
332 for (
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
333 slCurrentAvrComments << m_pEvokedSet->evoked.at(i).comment;
335 if (!m_qMapAverageActivation->contains(m_pEvokedSet->evoked.at(i).comment)) {
336 if (m_qMapAverageActivationOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
337 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageActivationOld->value(m_pEvokedSet->evoked.at(i).comment));
339 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment,
true);
343 if (!m_qMapAverageColor->contains(m_pEvokedSet->evoked.at(i).comment)) {
344 if (m_qMapAverageColorOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
345 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageColorOld->value(m_pEvokedSet->evoked.at(i).comment));
347 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, Qt::yellow);
353 QMutableMapIterator<QString, bool> itrActivation(*m_qMapAverageActivation);
354 while (itrActivation.hasNext()) {
355 itrActivation.next();
356 if (!slCurrentAvrComments.contains(itrActivation.key())) {
357 m_qMapAverageActivationOld->insert(itrActivation.key(), itrActivation.value());
358 itrActivation.remove();
362 QMutableMapIterator<QString, QColor> itrColor(*m_qMapAverageColor);
363 while (itrColor.hasNext()) {
365 if (!slCurrentAvrComments.contains(itrColor.key())) {
366 m_qMapAverageColorOld->insert(itrColor.key(), itrColor.value());
372 if (iSizeAvrColor != m_qMapAverageColor->size()) {
376 if (iSizeAvrActivation != m_qMapAverageActivation->size()) {
381 QModelIndex topLeft = this->index(0, 1);
382 QModelIndex bottomRight = this->index(m_pEvokedSet->info.nchan - 1, 1);
384 roles << Qt::DisplayRole;
386 emit dataChanged(topLeft, bottomRight, roles);
636 if (m_pEvokedSet->info.chs.size() > 0) {
637 m_pEvokedSet->info.projs = projs;
638 m_bProjActivated =
false;
639 for (qint32 i = 0; i < projs.size(); ++i) {
640 if (m_pEvokedSet->info.projs[i].active) {
641 m_bProjActivated =
true;
645 m_pEvokedSet->info.make_projector(m_matProj);
650 QStringList emptyExclude;
652 if (m_pEvokedSet->info.bads.size() > 0) {
658 for (qint32 j = 0; j < m_vecBadIdcs.cols(); ++j) {
659 m_matProj.col(m_vecBadIdcs[j]).setZero();
666 qint32 nchan = m_pEvokedSet->info.nchan;
669 typedef Eigen::Triplet<double> T;
670 std::vector<T> tripletList;
671 tripletList.reserve(nchan);
677 tripletList.reserve(m_matProj.rows() * m_matProj.cols());
678 for (i = 0; i < m_matProj.rows(); ++i) {
679 for (k = 0; k < m_matProj.cols(); ++k) {
680 if (m_matProj(i, k) != 0) {
681 tripletList.push_back(T(i, k, m_matProj(i, k)));
686 m_matSparseProjMult = SparseMatrix<double>(m_matProj.rows(), m_matProj.cols());
687 if (tripletList.size() > 0) {
688 m_matSparseProjMult.setFromTriplets(tripletList.begin(), tripletList.end());
692 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
705 if (m_pEvokedSet->info.chs.size() > 0) {
707 m_bCompActivated =
false;
709 m_bCompActivated =
true;
717 m_pEvokedSet->info.make_compensator(0, to, newComp);
722 m_matComp = newComp.
data->data;
727 qint32 nchan = m_pEvokedSet->info.nchan;
730 typedef Eigen::Triplet<double> T;
731 std::vector<T> tripletList;
732 tripletList.reserve(nchan);
735 tripletList.reserve(m_matComp.rows() * m_matComp.cols());
736 for (i = 0; i < m_matComp.rows(); ++i) {
737 for (k = 0; k < m_matComp.cols(); ++k) {
738 if (m_matComp(i, k) != 0) {
739 tripletList.push_back(T(i, k, m_matComp(i, k)));
744 m_matSparseCompMult = SparseMatrix<double>(m_matComp.rows(), m_matComp.cols());
745 if (tripletList.size() > 0) {
746 m_matSparseCompMult.setFromTriplets(tripletList.begin(), tripletList.end());
750 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
758 m_bIsFreezed = !m_bIsFreezed;
761 m_matDataFreeze = m_matData;
762 m_lAvrTypesFreeze = m_lAvrTypes;
766 QModelIndex topLeft = this->index(0, 1);
767 QModelIndex bottomRight = this->index(this->
rowCount(), 1);
769 roles << Qt::DisplayRole;
770 emit dataChanged(topLeft, bottomRight, roles);