56: QAbstractTableModel(parent)
57, m_qMapAverageColor(QSharedPointer<QMap<QString, QColor>>::create())
58, m_qMapAverageActivation(QSharedPointer<QMap<QString, bool>>::create())
59, m_qMapAverageColorOld(QSharedPointer<QMap<QString, QColor>>::create())
60, m_qMapAverageActivationOld(QSharedPointer<QMap<QString, bool>>::create())
63, m_bProjActivated(false)
64, m_bCompActivated(false)
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_lAvrTypesFreeze.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);
141 case Qt::BackgroundRole: {
156 if (index.column() == 2) {
158 QList<DISPLIB::AvrTypeRowVectorPair> lRowDataPerTrigType;
165 for (
int i = 0; i < m_matDataFreeze.size(); ++i) {
166 averagedData.first = m_lAvrTypesFreeze.at(i);
167 averagedData.second.first = m_matDataFreeze.at(i).data();
168 averagedData.second.second = m_matDataFreeze.at(i).cols();
170 lRowDataPerTrigType.append(averagedData);
173 for (
int i = 0; i < m_matData.size(); ++i) {
174 averagedData.first = m_lAvrTypes.at(i);
175 averagedData.second.first = m_matData.at(i).data();
176 averagedData.second.second = m_matData.at(i).cols();
178 lRowDataPerTrigType.append(averagedData);
182 v.setValue(lRowDataPerTrigType);
198 if (role != Qt::DisplayRole && role != Qt::TextAlignmentRole) {
202 if (orientation == Qt::Horizontal) {
208 case Qt::DisplayRole:
209 return QVariant(
"data plot");
210 case Qt::TextAlignmentRole:
211 return QVariant(Qt::AlignLeft);
213 return QVariant(
"data plot");
215 }
else if (orientation == Qt::Vertical) {
216 QModelIndex chname = createIndex(section, 0);
218 case Qt::DisplayRole:
219 return QVariant(
data(chname).toString());
251 QStringList emptyExclude;
253 if (m_pEvokedSet->info.bads.size() > 0) {
259 m_fSps = m_pEvokedSet->info.sfreq;
261 m_matSparseProjMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
262 m_matSparseCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
263 m_matSparseProjCompMult = SparseMatrix<double>(m_pEvokedSet->info.chs.size(), m_pEvokedSet->info.chs.size());
265 m_matSparseProjMult.setIdentity();
266 m_matSparseCompMult.setIdentity();
267 m_matSparseProjCompMult.setIdentity();
269 m_qMapAverageActivation->clear();
270 m_qMapAverageColor->clear();
271 m_qMapAverageActivationOld->clear();
272 m_qMapAverageColorOld->clear();
298 for (
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
299 bool doProj = m_bProjActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matProj.cols() ? true :
false;
301 bool doComp = m_bCompActivated && m_pEvokedSet->evoked.at(i).data.cols() > 0 && m_pEvokedSet->evoked.at(i).data.rows() == m_matComp.cols() ? true :
false;
306 m_matData.append(m_matSparseProjCompMult * m_pEvokedSet->evoked.at(i).data);
309 m_matData.append(m_matSparseCompMult * m_pEvokedSet->evoked.at(i).data);
314 m_matData.append(m_matSparseProjMult * m_pEvokedSet->evoked.at(i).data);
317 m_matData.append(m_pEvokedSet->evoked.at(i).data);
321 m_pairBaseline = m_pEvokedSet->evoked.at(i).baseline;
323 m_lAvrTypes.append(m_pEvokedSet->evoked.at(i).comment);
327 QStringList slCurrentAvrComments;
328 int iSizeAvrActivation = m_qMapAverageActivation->size();
329 int iSizeAvrColor = m_qMapAverageColor->size();
331 for (
int i = 0; i < m_pEvokedSet->evoked.size(); ++i) {
332 slCurrentAvrComments << m_pEvokedSet->evoked.at(i).comment;
334 if (!m_qMapAverageActivation->contains(m_pEvokedSet->evoked.at(i).comment)) {
335 if (m_qMapAverageActivationOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
336 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageActivationOld->value(m_pEvokedSet->evoked.at(i).comment));
338 m_qMapAverageActivation->insert(m_pEvokedSet->evoked.at(i).comment,
true);
342 if (!m_qMapAverageColor->contains(m_pEvokedSet->evoked.at(i).comment)) {
343 if (m_qMapAverageColorOld->contains(m_pEvokedSet->evoked.at(i).comment)) {
344 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, m_qMapAverageColorOld->value(m_pEvokedSet->evoked.at(i).comment));
346 m_qMapAverageColor->insert(m_pEvokedSet->evoked.at(i).comment, Qt::yellow);
352 QMutableMapIterator<QString, bool> itrActivation(*m_qMapAverageActivation);
353 while (itrActivation.hasNext()) {
354 itrActivation.next();
355 if (!slCurrentAvrComments.contains(itrActivation.key())) {
356 m_qMapAverageActivationOld->insert(itrActivation.key(), itrActivation.value());
357 itrActivation.remove();
361 QMutableMapIterator<QString, QColor> itrColor(*m_qMapAverageColor);
362 while (itrColor.hasNext()) {
364 if (!slCurrentAvrComments.contains(itrColor.key())) {
365 m_qMapAverageColorOld->insert(itrColor.key(), itrColor.value());
371 if (iSizeAvrColor != m_qMapAverageColor->size()) {
375 if (iSizeAvrActivation != m_qMapAverageActivation->size()) {
380 QModelIndex topLeft = this->index(0, 1);
381 QModelIndex bottomRight = this->index(m_pEvokedSet->info.nchan - 1, 1);
383 roles << Qt::DisplayRole;
385 emit dataChanged(topLeft, bottomRight, roles);
635 if (m_pEvokedSet->info.chs.size() > 0) {
636 m_pEvokedSet->info.projs = projs;
637 m_bProjActivated =
false;
638 for (qint32 i = 0; i < projs.size(); ++i) {
639 if (m_pEvokedSet->info.projs[i].active) {
640 m_bProjActivated =
true;
644 m_pEvokedSet->info.make_projector(m_matProj);
649 QStringList emptyExclude;
651 if (m_pEvokedSet->info.bads.size() > 0) {
657 for (qint32 j = 0; j < m_vecBadIdcs.cols(); ++j) {
658 m_matProj.col(m_vecBadIdcs[j]).setZero();
665 qint32 nchan = m_pEvokedSet->info.nchan;
668 typedef Eigen::Triplet<double> T;
669 std::vector<T> tripletList;
670 tripletList.reserve(nchan);
676 tripletList.reserve(m_matProj.rows() * m_matProj.cols());
677 for (i = 0; i < m_matProj.rows(); ++i) {
678 for (k = 0; k < m_matProj.cols(); ++k) {
679 if (m_matProj(i, k) != 0) {
680 tripletList.push_back(T(i, k, m_matProj(i, k)));
685 m_matSparseProjMult = SparseMatrix<double>(m_matProj.rows(), m_matProj.cols());
686 if (tripletList.size() > 0) {
687 m_matSparseProjMult.setFromTriplets(tripletList.begin(), tripletList.end());
691 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
704 if (m_pEvokedSet->info.chs.size() > 0) {
706 m_bCompActivated =
false;
708 m_bCompActivated =
true;
716 m_pEvokedSet->info.make_compensator(0, to, newComp);
721 m_matComp = newComp.
data->data;
726 qint32 nchan = m_pEvokedSet->info.nchan;
729 typedef Eigen::Triplet<double> T;
730 std::vector<T> tripletList;
731 tripletList.reserve(nchan);
734 tripletList.reserve(m_matComp.rows() * m_matComp.cols());
735 for (i = 0; i < m_matComp.rows(); ++i) {
736 for (k = 0; k < m_matComp.cols(); ++k) {
737 if (m_matComp(i, k) != 0) {
738 tripletList.push_back(T(i, k, m_matComp(i, k)));
743 m_matSparseCompMult = SparseMatrix<double>(m_matComp.rows(), m_matComp.cols());
744 if (tripletList.size() > 0) {
745 m_matSparseCompMult.setFromTriplets(tripletList.begin(), tripletList.end());
749 m_matSparseProjCompMult = m_matSparseProjMult * m_matSparseCompMult;
757 m_bIsFreezed = !m_bIsFreezed;
760 m_matDataFreeze = m_matData;
761 m_lAvrTypesFreeze = m_lAvrTypes;
765 QModelIndex topLeft = this->index(0, 1);
766 QModelIndex bottomRight = this->index(this->
rowCount(), 1);
768 roles << Qt::DisplayRole;
769 emit dataChanged(topLeft, bottomRight, roles);