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);
367 void markChBad(QModelIndex ch,
bool status);
376 void markChBad(QModelIndexList chlist,
bool status);
387 void triggerInfoChanged(
const QMap<double, QColor>& colorMap,
bool active, QString triggerCh,
double threshold);
425 inline const QMap<qint32, float>&
getScaling()
const;
564 std::function<std::vector<int>(
int,
int)> getFn);
573 static void doFilterPerChannelRTMSA(QPair<QList<UTILSLIB::FilterKernel>, QPair<int, Eigen::RowVectorXd>>& channelDataTime);
582 void filterDataBlock(
const Eigen::MatrixXd&
data,
int iDataIndex);
588 void startNewSweep();
596 bool m_bProjActivated;
597 bool m_bCompActivated;
598 bool m_bSpharaActivated;
600 bool m_bDrawFilterFront;
601 bool m_bPerformFiltering;
602 bool m_bTriggerDetectionActive;
604 double m_dTriggerThreshold;
606 qint32 m_iDownsampling;
607 qint32 m_iMaxSamples;
608 qint32 m_iCurrentSample;
609 qint32 m_iCurrentStartingSample;
610 qint32 m_iCurrentSampleFreeze;
611 qint32 m_iMaxFilterLength;
612 qint32 m_iCurrentBlockSize;
613 int m_iCurrentTriggerChIndex;
614 int m_iDistanceTimerSpacer;
615 int m_iDetectedTriggers;
617 QString m_sCurrentTriggerCh;
618 QString m_sFilterChannelType;
620 QSharedPointer<FIFFLIB::FiffInfo> m_pFiffInfo;
622 Eigen::RowVectorXi m_vecBadIdcs;
623 Eigen::VectorXd m_vecLastBlockFirstValuesFiltered;
624 Eigen::VectorXd m_vecLastBlockFirstValuesRaw;
630 Eigen::MatrixXd m_matOverlap;
632 Eigen::VectorXi m_vecIndicesFirstVV;
633 Eigen::VectorXi m_vecIndicesSecondVV;
634 Eigen::VectorXi m_vecIndicesFirstBabyMEG;
635 Eigen::VectorXi m_vecIndicesSecondBabyMEG;
636 Eigen::VectorXi m_vecIndicesFirstEEG;
638 Eigen::SparseMatrix<double> m_matSparseSpharaMult;
639 Eigen::SparseMatrix<double> m_matSparseProjCompMult;
640 Eigen::SparseMatrix<double> m_matSparseProjMult;
641 Eigen::SparseMatrix<double> m_matSparseCompMult;
643 Eigen::MatrixXd m_matProj;
644 Eigen::MatrixXd m_matComp;
646 Eigen::MatrixXd m_matSpharaVVGradLoaded;
647 Eigen::MatrixXd m_matSpharaVVMagLoaded;
648 Eigen::MatrixXd m_matSpharaBabyMEGInnerLoaded;
649 Eigen::MatrixXd m_matSpharaBabyMEGOuterLoaded;
650 Eigen::MatrixXd m_matSpharaEEGLoaded;
652 QMap<double, QColor> m_qMapTriggerColor;
653 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTrigger;
654 QList<int> m_lTriggerChannelIndices;
655 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerFreeze;
656 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerOld;
657 QMap<int, QList<QPair<int, double>>> m_qMapDetectedTriggerOldFreeze;
658 QMap<qint32, float> m_qMapChScaling;
659 QList<UTILSLIB::FilterKernel> m_filterKernel;
660 QStringList m_filterChannelList;
661 QMap<qint32, qint32> m_qMapIdxRowSelection;
663 QColor m_colBackground;
665 std::function<void(
int)> m_fnAddEvent;
666 std::function<std::vector<int>(
int,
int)> m_fnGetEventSamples;
689 void triggerDetected(
int numberDetectedTriggers,
const QMap<
int, QList<QPair<int, double>>>& mapDetectedTriggers);
698 return m_iMaxSamples;
706 return m_iCurrentSampleFreeze;
709 if (!m_filterKernel.isEmpty() && m_bPerformFiltering) {
710 return m_iCurrentSample - m_iMaxFilterLength / 2;
713 return m_iCurrentSample;
720 if (row > m_vecLastBlockFirstValuesFiltered.rows() || row > m_vecLastBlockFirstValuesRaw.rows())
723 if (!m_filterKernel.isEmpty())
724 return m_vecLastBlockFirstValuesFiltered[row];
726 return m_vecLastBlockFirstValuesRaw[row];
733 return m_qMapIdxRowSelection;
754 return m_qMapChScaling;
761 if (m_bTriggerDetectionActive) {
762 return m_qMapTriggerColor;
765 QMap<double, QColor> map;
773 QList<QPair<int, double>> triggerIndices;
776 return m_qMapDetectedTriggerFreeze[m_iCurrentTriggerChIndex];
778 if (m_bTriggerDetectionActive) {
779 return m_qMapDetectedTrigger[m_iCurrentTriggerChIndex];
781 return triggerIndices;
788 QList<QPair<int, double>> triggerIndices;
791 return m_qMapDetectedTriggerOldFreeze[m_iCurrentTriggerChIndex];
793 if (m_bTriggerDetectionActive) {
794 return m_qMapDetectedTriggerOld[m_iCurrentTriggerChIndex];
796 return triggerIndices;
804 return ((1000) / m_iDistanceTimerSpacer) - 1;
811 return m_dTriggerThreshold;
818 return m_sCurrentTriggerCh;
825 return m_iCurrentTriggerChIndex;
832 return m_bTriggerDetectionActive;
839 if (!m_filterKernel.isEmpty())
840 return m_iMaxFilterLength / 2;
849 return m_iCurrentStartingSample;
853#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
854#ifndef metatype_rowvectorpair
855#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 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,...