24#ifndef RTFIFFRAWVIEWMODEL_H
25#define RTFIFFRAWVIEWMODEL_H
42#include <QAbstractTableModel>
43#include <QSharedPointer>
54#include <Eigen/SparseCore>
81typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>
MatrixXdR;
97 typedef QSharedPointer<RtFiffRawViewModel>
SPtr;
98 typedef QSharedPointer<const RtFiffRawViewModel>
ConstSPtr;
123 virtual int rowCount(
const QModelIndex& parent = QModelIndex())
const;
133 virtual int columnCount(
const QModelIndex& parent = QModelIndex())
const;
144 virtual QVariant
data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const;
156 virtual QVariant
headerData(
int section, Qt::Orientation orientation,
int role = Qt::DisplayRole)
const;
164 void setFiffInfo(QSharedPointer<FIFFLIB::FiffInfo>& p_pFiffInfo);
254 inline const QMap<qint32, qint32>&
getIdxSelMap()
const;
262 void selectRows(
const QList<qint32>& selection);
270 void hideRows(
const QList<qint32>& selection);
292 void setScaling(
const QMap<qint32, float>& p_qMapChScaling);
326 void updateSpharaOptions(
const QString& sSytemType,
int nBaseFctsFirst,
int nBaseFctsSecond);
334 void setFilter(QList<UTILSLIB::FilterKernel> filterData);
375 void markChBad(QModelIndex ch,
bool status);
384 void markChBad(QModelIndexList chlist,
bool status);
395 void triggerInfoChanged(
const QMap<double, QColor>& colorMap,
bool active, QString triggerCh,
double threshold);
433 inline const QMap<qint32, float>&
getScaling()
const;
572 std::function<std::vector<int>(
int,
int)> getFn);
581 static void doFilterPerChannelRTMSA(QPair<QList<UTILSLIB::FilterKernel>, QPair<int, Eigen::RowVectorXd>>& channelDataTime);
587 void filterDataBlock();
596 void filterDataBlock(
const Eigen::MatrixXd&
data,
int iDataIndex);
602 void startNewSweep();
610 bool m_bProjActivated;
611 bool m_bCompActivated;
612 bool m_bSpharaActivated;
614 bool m_bDrawFilterFront;
615 bool m_bPerformFiltering;
616 bool m_bTriggerDetectionActive;
618 double m_dTriggerThreshold;
620 qint32 m_iDownsampling;
621 qint32 m_iMaxSamples;
622 qint32 m_iCurrentSample;
623 qint32 m_iCurrentStartingSample;
624 qint32 m_iCurrentSampleFreeze;
625 qint32 m_iMaxFilterLength;
626 qint32 m_iCurrentBlockSize;
627 int m_iCurrentTriggerChIndex;
628 int m_iDistanceTimerSpacer;
629 int m_iDetectedTriggers;
631 QString m_sCurrentTriggerCh;
632 QString m_sFilterChannelType;
634 QSharedPointer<FIFFLIB::FiffInfo> m_pFiffInfo;
636 Eigen::RowVectorXi m_vecBadIdcs;
637 Eigen::VectorXd m_vecLastBlockFirstValuesFiltered;
638 Eigen::VectorXd m_vecLastBlockFirstValuesRaw;
644 Eigen::MatrixXd m_matOverlap;
646 Eigen::VectorXi m_vecIndicesFirstVV;
647 Eigen::VectorXi m_vecIndicesSecondVV;
648 Eigen::VectorXi m_vecIndicesFirstBabyMEG;
649 Eigen::VectorXi m_vecIndicesSecondBabyMEG;
650 Eigen::VectorXi m_vecIndicesFirstEEG;
652 Eigen::SparseMatrix<double> m_matSparseSpharaMult;
653 Eigen::SparseMatrix<double> m_matSparseProjCompMult;
654 Eigen::SparseMatrix<double> m_matSparseProjMult;
655 Eigen::SparseMatrix<double> m_matSparseCompMult;
657 Eigen::MatrixXd m_matProj;
658 Eigen::MatrixXd m_matComp;
660 Eigen::MatrixXd m_matSpharaVVGradLoaded;
661 Eigen::MatrixXd m_matSpharaVVMagLoaded;
662 Eigen::MatrixXd m_matSpharaBabyMEGInnerLoaded;
663 Eigen::MatrixXd m_matSpharaBabyMEGOuterLoaded;
664 Eigen::MatrixXd m_matSpharaEEGLoaded;
666 QMap<double, QColor> m_qMapTriggerColor;
667 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTrigger;
668 QList<int> m_lTriggerChannelIndices;
669 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerFreeze;
670 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerOld;
671 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerOldFreeze;
672 QMap<qint32, float> m_qMapChScaling;
673 QList<UTILSLIB::FilterKernel> m_filterKernel;
674 QStringList m_filterChannelList;
675 QStringList m_visibleChannelList;
676 QMap<qint32, qint32> m_qMapIdxRowSelection;
678 QColor m_colBackground;
680 std::function<void(
int)> m_fnAddEvent;
681 std::function<std::vector<int>(
int,
int)> m_fnGetEventSamples;
704 void triggerDetected(
int numberDetectedTriggers,
const QMap<
int, QList<QPair<int, double>>>& mapDetectedTriggers);
713 return m_iMaxSamples;
721 return m_iCurrentSampleFreeze;
724 if (!m_filterKernel.isEmpty() && m_bPerformFiltering) {
725 return m_iCurrentSample - m_iMaxFilterLength / 2;
728 return m_iCurrentSample;
735 if (row > m_vecLastBlockFirstValuesFiltered.rows() || row > m_vecLastBlockFirstValuesRaw.rows())
738 if (!m_filterKernel.isEmpty())
739 return m_vecLastBlockFirstValuesFiltered[row];
741 return m_vecLastBlockFirstValuesRaw[row];
748 return m_qMapIdxRowSelection;
769 return m_qMapChScaling;
776 if (m_bTriggerDetectionActive) {
777 return m_qMapTriggerColor;
780 QMap<double, QColor> map;
788 QList<QPair<int, double>> triggerIndices;
791 return m_qMapDetectedTriggerFreeze[m_iCurrentTriggerChIndex];
793 if (m_bTriggerDetectionActive) {
794 return m_qMapDetectedTrigger[m_iCurrentTriggerChIndex];
796 return triggerIndices;
803 QList<QPair<int, double>> triggerIndices;
806 return m_qMapDetectedTriggerOldFreeze[m_iCurrentTriggerChIndex];
808 if (m_bTriggerDetectionActive) {
809 return m_qMapDetectedTriggerOld[m_iCurrentTriggerChIndex];
811 return triggerIndices;
819 return ((1000) / m_iDistanceTimerSpacer) - 1;
826 return m_dTriggerThreshold;
833 return m_sCurrentTriggerCh;
840 return m_iCurrentTriggerChIndex;
847 return m_bTriggerDetectionActive;
854 if (!m_filterKernel.isEmpty())
855 return m_iMaxFilterLength / 2;
864 return m_iCurrentStartingSample;
868#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
869#ifndef metatype_rowvectorpair
870#define metatype_rowvectorpair
Q_DECLARE_METATYPE(Eigen::MatrixXf)
MatrixXi selectRows(const MatrixXi &events, const std::vector< bool > &keep)
SSP projection item: a named projection vector set with active/desired flags, parsed from FIFFB_PROJ_...
Primitive scalar typedefs and forward-compatible aliases backing the FIFF type system.
Export macros and build-info hooks for the DISPLIB shared library.
#define DISPSHARED_EXPORT
Linear-phase FIR filter kernel with overlap-add FFT convolution back-end.
FIFF file I/O, in-memory data structures and high-level readers/writers.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXdR
QPair< const double *, qint32 > RowVectorPair
void updateSpharaActivation(bool state)
double getTriggerThreshold() const
void addEvent(int iSample)
int getNumberOfTimeSpacers() const
double getLastBlockFirstValue(int row) const
const QMap< qint32, float > & getScaling() const
int getCurrentOverlapAddDelay() const
void setBackgroundColor(const QColor &color)
void distanceTimeSpacerChanged(int value)
void setFilter(QList< UTILSLIB::FilterKernel > filterData)
void newSelection(const QList< qint32 > &selection)
FIFFLIB::fiff_int_t getKind(qint32 row) const
QSharedPointer< RtFiffRawViewModel > SPtr
QSharedPointer< const RtFiffRawViewModel > ConstSPtr
void setSamplingInfo(float sps, int T, bool bSetZero=false)
qint32 getMaxSamples() const
double getValueAtColumn(int iRow, int iColumn) const
void markChBad(QModelIndex ch, bool status)
RtFiffRawViewModel(QObject *parent=0)
void windowSizeChanged(int windowSize)
void createFilterChannelList(QStringList channelNames)
void setFilterChannelType(const QString &channelType)
Eigen::MatrixXd getLastBlock()
void setFiffInfo(QSharedPointer< FIFFLIB::FiffInfo > &p_pFiffInfo)
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
QList< QPair< int, double > > getDetectedTriggers() const
bool triggerDetectionActive() const
void toggleFreeze(const QModelIndex &index)
void hideRows(const QList< qint32 > &selection)
void setEventCallbacks(std::function< void(int)> addFn, std::function< std::vector< int >(int, int)> getFn)
void updateSpharaOptions(const QString &sSytemType, int nBaseFctsFirst, int nBaseFctsSecond)
void setScaling(const QMap< qint32, float > &p_qMapChScaling)
void setFilterActive(bool state)
int getCurrentTriggerIndex() const
QString getTriggerName() const
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
FIFFLIB::fiff_int_t getCoil(qint32 row) const
virtual QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
int getFirstSampleOffset() const
void updateCompensator(int to)
const QMap< qint32, qint32 > & getIdxSelMap() const
void triggerDetected(int numberDetectedTriggers, const QMap< int, QList< QPair< int, double > > > &mapDetectedTriggers)
QMap< double, QColor > getTriggerColor() const
FIFFLIB::fiff_int_t getUnit(qint32 row) const
int getSampleAtColumn(int iColumn) const
std::vector< int > getEventsToDisplay(int iBegin, int iEnd) const
void triggerInfoChanged(const QMap< double, QColor > &colorMap, bool active, QString triggerCh, double threshold)
void resetTriggerCounter()
void updateProjection(const QList< FIFFLIB::FiffProj > &projs)
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
qint32 getCurrentSampleIndex() const
QList< QPair< int, double > > getDetectedTriggersOld() const
void addData(const QList< Eigen::MatrixXd > &data)
double getMaxValueFromRawViewModel(int row) const
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...