v2.0.0
Loading...
Searching...
No Matches
rt_averaging.h
Go to the documentation of this file.
1//=============================================================================================================
26
27#ifndef RT_AVERAGING_RTPROCESSING_H
28#define RT_AVERAGING_RTPROCESSING_H
29
30//=============================================================================================================
31// INCLUDES
32//=============================================================================================================
33
34#include "../dsp_global.h"
35
37#include <fiff/fiff_info.h>
38
39//=============================================================================================================
40// QT INCLUDES
41//=============================================================================================================
42
43#include <QThread>
44#include <QSharedPointer>
45#include <QObject>
46
47//=============================================================================================================
48// EIGEN INCLUDES
49//=============================================================================================================
50
51#include <Eigen/Core>
52
53//=============================================================================================================
54// FORWARD DECLARATIONS
55//=============================================================================================================
56
57//=============================================================================================================
58// DEFINE NAMESPACE RTPROCESSINGLIB
59//=============================================================================================================
60
61namespace RTPROCESSINGLIB
62{
63
64//=============================================================================================================
65// RTPROCESSINGLIB FORWARD DECLARATIONS
66//=============================================================================================================
67
68//=============================================================================================================
76class DSPSHARED_EXPORT RtAveragingWorker : public QObject
77{
78 Q_OBJECT
79
80public:
81 //=========================================================================================================
93 RtAveragingWorker(quint32 numAverages,
94 quint32 iPreStimSamples,
95 quint32 iPostStimSamples,
96 qint32 iBaselineFromMSecs,
97 qint32 iBaselineToMSecs,
98 quint32 iTriggerIndex,
99 FIFFLIB::FiffInfo::SPtr pFiffInfo);
100
101 //=========================================================================================================
107 void doWork(const Eigen::MatrixXd& matData);
108
109 //=========================================================================================================
115 void setAverageNumber(qint32 numAve);
116
117 //=========================================================================================================
124 void setPreStim(qint32 samples,
125 qint32 secs);
126
127 //=========================================================================================================
134 void setPostStim(qint32 samples,
135 qint32 secs);
136
137 //=========================================================================================================
143 void setTriggerChIndx(qint32 idx);
144
145 //=========================================================================================================
151 void setArtifactReduction(const QMap<QString, double>& mapThresholds);
152
153 //=========================================================================================================
159 void setBaselineActive(bool activate);
160
161 //=========================================================================================================
168 void setBaselineFrom(int fromSamp,
169 int fromMSec);
170
171 //=========================================================================================================
178 void setBaselineTo(int toSamp,
179 int toMSec);
180
181 //=========================================================================================================
185 void reset();
186
187protected:
188 //=========================================================================================================
194 void doAveraging(const Eigen::MatrixXd& rawSegment);
195
196 void emitEvoked(double dTriggerType,
197 QStringList& lResponsibleTriggerTypes);
198
199 //=========================================================================================================
206 void fillBackBuffer(const Eigen::MatrixXd& data,
207 double dTriggerType);
208
209 //=========================================================================================================
215 void mergeData(double dTriggerType);
216
217 //=========================================================================================================
223 void generateEvoked(double dTriggerType);
224
225 //=========================================================================================================
231 inline bool controlValuesChanged();
232
234
237
240
243
245
247
249
250 QPair<float, float> m_pairBaselineSec;
251 QPair<float, float> m_pairBaselineSamp;
252
255
256 QMap<QString, double> m_mapThresholds;
257 QMap<double, QList<Eigen::MatrixXd>> m_mapStimAve;
258 Eigen::MatrixXd m_matPreHistory;
259 QMap<double, Eigen::MatrixXd> m_mapDataPre;
260 QMap<double, Eigen::MatrixXd> m_mapDataPost;
261 QMap<double, qint32> m_mapMatDataPostIdx;
262 QMap<double, bool> m_mapFillingBackBuffer;
263
264signals:
265 //=========================================================================================================
272 void resultReady(const FIFFLIB::FiffEvokedSet& evokedStimSet,
273 const QStringList& lResponsibleTriggerTypes);
274};
275
276//=============================================================================================================
284class DSPSHARED_EXPORT RtAveraging : public QObject
285{
286 Q_OBJECT
287
288public:
289 typedef QSharedPointer<RtAveraging> SPtr;
290 typedef QSharedPointer<const RtAveraging> ConstSPtr;
291
292 //=========================================================================================================
305 explicit RtAveraging(quint32 numAverages,
306 quint32 iPreStimSamples,
307 quint32 iPostStimSamples,
308 qint32 iBaselineFromMSecs,
309 qint32 iBaselineToMSecs,
310 quint32 iTriggerIndex,
311 FIFFLIB::FiffInfo::SPtr pFiffInfo,
312 QObject* parent = 0);
313
314 //=========================================================================================================
318 ~RtAveraging();
319
320 //=========================================================================================================
326 void append(const Eigen::MatrixXd& data);
327
328 //=========================================================================================================
340 void restart(quint32 numAverages,
341 quint32 iPreStimSamples,
342 quint32 iPostStimSamples,
343 qint32 iBaselineFromMSecs,
344 qint32 iBaselineToMSecs,
345 quint32 iTriggerIndex,
346 FIFFLIB::FiffInfo::SPtr pFiffInfo);
347
348 //=========================================================================================================
352 void stop();
353
354 //=========================================================================================================
360 void setAverageNumber(qint32 numAve);
361
362 //=========================================================================================================
369 void setPreStim(qint32 samples,
370 qint32 secs);
371
372 //=========================================================================================================
379 void setPostStim(qint32 samples,
380 qint32 secs);
381
382 //=========================================================================================================
388 void setTriggerChIndx(qint32 idx);
389
390 //=========================================================================================================
396 void setArtifactReduction(const QMap<QString, double>& mapThresholds);
397
398 //=========================================================================================================
404 void setBaselineActive(bool activate);
405
406 //=========================================================================================================
413 void setBaselineFrom(int fromSamp,
414 int fromMSec);
415
416 //=========================================================================================================
423 void setBaselineTo(int toSamp,
424 int toMSec);
425
426 //=========================================================================================================
430 void reset();
431
432protected:
433 //=========================================================================================================
440 void handleResults(const FIFFLIB::FiffEvokedSet& evokedStimSet,
441 const QStringList& lResponsibleTriggerTypes);
442
444
445signals:
446 void evokedStim(const FIFFLIB::FiffEvokedSet& evokedStimSet,
447 const QStringList& lResponsibleTriggerTypes);
448 void operate(const Eigen::MatrixXd& matData);
449 void averageNumberChanged(qint32 numAve);
450 void averagePreStimChanged(qint32 samples,
451 qint32 secs);
452 void averagePostStimChanged(qint32 samples,
453 qint32 secs);
455 void averageArtifactReductionChanged(const QMap<QString, double>& mapThresholds);
456 void averageBaselineActiveChanged(bool activate);
457 void averageBaselineFromChanged(int fromSamp,
458 int fromMSec);
460 int toMSec);
462};
463
464//=============================================================================================================
465// INLINE DEFINITIONS
466//=============================================================================================================
467
469{
470 bool result = false;
471
473 result = true;
474 }
475
476 return result;
477}
478} // NAMESPACE
479
480#endif // RT_AVERAGING_RTPROCESSING_H
Set of averaged evoked responses sharing a FiffInfo, plus the ave-style category / rejection descript...
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Export/import macros and namespace declaration for the DSP library.
#define DSPSHARED_EXPORT
Definition dsp_global.h:50
void emitEvoked(double dTriggerType, QStringList &lResponsibleTriggerTypes)
void setArtifactReduction(const QMap< QString, double > &mapThresholds)
FIFFLIB::FiffInfo::SPtr m_pFiffInfo
QPair< float, float > m_pairBaselineSamp
RtAveragingWorker(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, qint32 iBaselineFromMSecs, qint32 iBaselineToMSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo)
QMap< double, qint32 > m_mapMatDataPostIdx
QMap< double, Eigen::MatrixXd > m_mapDataPost
void setBaselineTo(int toSamp, int toMSec)
QMap< double, Eigen::MatrixXd > m_mapDataPre
QMap< QString, double > m_mapThresholds
FIFFLIB::FiffEvokedSet m_stimEvokedSet
QPair< float, float > m_pairBaselineSec
void doAveraging(const Eigen::MatrixXd &rawSegment)
QMap< double, bool > m_mapFillingBackBuffer
void doWork(const Eigen::MatrixXd &matData)
void setPostStim(qint32 samples, qint32 secs)
QMap< double, QList< Eigen::MatrixXd > > m_mapStimAve
void resultReady(const FIFFLIB::FiffEvokedSet &evokedStimSet, const QStringList &lResponsibleTriggerTypes)
void fillBackBuffer(const Eigen::MatrixXd &data, double dTriggerType)
void setBaselineFrom(int fromSamp, int fromMSec)
void setPreStim(qint32 samples, qint32 secs)
void mergeData(double dTriggerType)
void generateEvoked(double dTriggerType)
void averageBaselineToChanged(int toSamp, int toMSec)
void setBaselineFrom(int fromSamp, int fromMSec)
void restart(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, qint32 iBaselineFromMSecs, qint32 iBaselineToMSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo)
void averageBaselineActiveChanged(bool activate)
QSharedPointer< const RtAveraging > ConstSPtr
void setPreStim(qint32 samples, qint32 secs)
void averagePostStimChanged(qint32 samples, qint32 secs)
void setBaselineTo(int toSamp, int toMSec)
void averageNumberChanged(qint32 numAve)
QSharedPointer< RtAveraging > SPtr
void averagePreStimChanged(qint32 samples, qint32 secs)
void setAverageNumber(qint32 numAve)
void append(const Eigen::MatrixXd &data)
void averageArtifactReductionChanged(const QMap< QString, double > &mapThresholds)
void handleResults(const FIFFLIB::FiffEvokedSet &evokedStimSet, const QStringList &lResponsibleTriggerTypes)
void setPostStim(qint32 samples, qint32 secs)
void setTriggerChIndx(qint32 idx)
void setBaselineActive(bool activate)
void setArtifactReduction(const QMap< QString, double > &mapThresholds)
void evokedStim(const FIFFLIB::FiffEvokedSet &evokedStimSet, const QStringList &lResponsibleTriggerTypes)
void averageBaselineFromChanged(int fromSamp, int fromMSec)
void averageTriggerChIdxChanged(qint32 idx)
RtAveraging(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, qint32 iBaselineFromMSecs, qint32 iBaselineToMSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo, QObject *parent=0)
void operate(const Eigen::MatrixXd &matData)
Set of FiffEvoked instances sharing one FiffInfo, plus channel-picking and compensation helpers.
QSharedPointer< FiffInfo > SPtr
Definition fiff_info.h:92