44: QAbstractTableModel(parent)
51, m_bInitialized(false)
59 if (!m_qMapIdxRowSelection.empty())
60 return m_qMapIdxRowSelection.size();
76 if (role != Qt::DisplayRole && role != Qt::BackgroundRole)
79 if (index.isValid()) {
80 qint32 r = m_qMapIdxRowSelection[index.row()];
83 if (index.column() == 0 && role == Qt::DisplayRole)
85 return QVariant(m_pFiffInfo->chs[r].ch_name);
88 if (index.column() == 1) {
92 case Qt::DisplayRole: {
94 const MatrixXd&
data = m_bIsFreezed ? m_dataCurrentFreeze : m_dataCurrent;
96 if (r < 0 || r >=
data.rows()) {
99 v.setValue(RowVectorXd(
data.row(r)));
102 case Qt::BackgroundRole: {
125 if (role != Qt::DisplayRole && role != Qt::TextAlignmentRole)
128 if (orientation == Qt::Horizontal) {
134 case Qt::DisplayRole:
135 return QVariant(
"data plot");
136 case Qt::TextAlignmentRole:
137 return QVariant(Qt::AlignLeft);
139 return QVariant(
"data plot");
141 }
else if (orientation == Qt::Vertical) {
142 QModelIndex chname = createIndex(section, 0);
144 case Qt::DisplayRole:
145 return QVariant(
data(chname).toString());
167 m_iScaleType = ScaleType;
174 m_dataCurrent =
data;
176 if (m_vecFreqScale.size() != m_dataCurrent.cols() && m_pFiffInfo) {
177 double freqRes = (m_pFiffInfo->sfreq / 2) / m_dataCurrent.cols();
179 m_vecFreqScale.resize(1, m_dataCurrent.cols());
182 for (qint32 i = 0; i < m_dataCurrent.cols(); ++i) {
184 m_vecFreqScale[i] = log10(currFreq + k);
186 m_vecFreqScale[i] = currFreq;
191 double max = m_vecFreqScale.maxCoeff();
192 m_vecFreqScale /= max;
194 m_vecFreqScaleBound = m_vecFreqScale;
196 m_iUpperFrqIdx = m_vecFreqScale.size() - 1;
198 m_bInitialized =
true;
202 QModelIndex topLeft = this->index(0, 1);
203 QModelIndex bottomRight = this->index(m_dataCurrent.rows() - 1, 1);
205 roles << Qt::DisplayRole;
206 emit dataChanged(topLeft, bottomRight, roles);
215 m_qMapIdxRowSelection.clear();
218 for (qint32 i = 0; i < selection.size(); ++i) {
219 if (selection[i] < m_pFiffInfo->chs.size()) {
220 m_qMapIdxRowSelection.insert(count, selection[i]);
236 m_qMapIdxRowSelection.clear();
238 for (qint32 i = 0; i < m_pFiffInfo->chs.size(); ++i)
239 m_qMapIdxRowSelection.insert(i, i);
250 m_bIsFreezed = !m_bIsFreezed;
253 m_dataCurrentFreeze = m_dataCurrent;
256 QModelIndex topLeft = this->index(0, 1);
257 QModelIndex bottomRight = this->index(m_dataCurrent.rows() - 1, 1);
259 roles << Qt::DisplayRole;
260 emit dataChanged(topLeft, bottomRight, roles);
267 if (!m_bInitialized) {
273 double nf = m_pFiffInfo->sfreq / 2;
276 m_iUpperFrqIdx = m_vecFreqScale.size() - 1;
279 for (qint32 i = 0; i < m_vecFreqScale.size(); ++i) {
280 float val = m_vecFreqScale[i] * nf;
281 if (val < fLowerFrqBound) {
285 if (val > fUpperFrqBound) {
292 m_vecFreqScaleBound = m_vecFreqScale;
293 for (qint32 i = 0; i < m_vecFreqScaleBound.size(); ++i) {
294 m_vecFreqScaleBound[i] = (m_vecFreqScaleBound[i] - m_vecFreqScale[m_iLowerFrqIdx]) / (m_vecFreqScale[m_iUpperFrqIdx] - m_vecFreqScale[m_iLowerFrqIdx]);
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
QAbstractTableModel storing per-channel FFT magnitudes for DISPLIB::SpectrumView.
FIFF file I/O, in-memory data structures and high-level readers/writers.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
void newSelection(QList< qint32 > selection)
void setBoundaries(float fLowerFrqBound, float fUpperFrqBound)
FrequencySpectrumModel(QObject *parent=0)
void selectRows(const QList< qint32 > &selection)
void addData(const Eigen::MatrixXd &data)
void toggleFreeze(const QModelIndex &index)
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
void setInfo(QSharedPointer< FIFFLIB::FiffInfo > &info)
virtual QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
void setScaleType(qint8 ScaleType)
QSharedPointer< FiffInfo > SPtr