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 quint32 iBaselineFromMSecs,
97 quint32 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 //=========================================================================================================
203 void fillFrontBuffer(const Eigen::MatrixXd& data,
204 double dTriggerType);
205
206 void emitEvoked(double dTriggerType,
207 QStringList& lResponsibleTriggerTypes);
208
209 //=========================================================================================================
216 void fillBackBuffer(const Eigen::MatrixXd& data,
217 double dTriggerType);
218
219 //=========================================================================================================
225 void mergeData(double dTriggerType);
226
227 //=========================================================================================================
233 void generateEvoked(double dTriggerType);
234
235 //=========================================================================================================
241 inline bool controlValuesChanged();
242
244
247
250
253
255
257
259
260 QPair<float, float> m_pairBaselineSec;
261 QPair<float, float> m_pairBaselineSamp;
262
265
266 QMap<QString, double> m_mapThresholds;
267 QMap<double, QList<Eigen::MatrixXd>> m_mapStimAve;
268 QMap<double, Eigen::MatrixXd> m_mapDataPre;
269 QMap<double, Eigen::MatrixXd> m_mapDataPost;
270 QMap<double, qint32> m_mapMatDataPostIdx;
271 QMap<double, bool> m_mapFillingBackBuffer;
272
273signals:
274 //=========================================================================================================
281 void resultReady(const FIFFLIB::FiffEvokedSet& evokedStimSet,
282 const QStringList& lResponsibleTriggerTypes);
283};
284
285//=============================================================================================================
293class DSPSHARED_EXPORT RtAveraging : public QObject
294{
295 Q_OBJECT
296
297public:
298 typedef QSharedPointer<RtAveraging> SPtr;
299 typedef QSharedPointer<const RtAveraging> ConstSPtr;
300
301 //=========================================================================================================
314 explicit RtAveraging(quint32 numAverages,
315 quint32 iPreStimSamples,
316 quint32 iPostStimSamples,
317 quint32 iBaselineFromSecs,
318 quint32 iBaselineToSecs,
319 quint32 iTriggerIndex,
320 FIFFLIB::FiffInfo::SPtr pFiffInfo,
321 QObject* parent = 0);
322
323 //=========================================================================================================
327 ~RtAveraging();
328
329 //=========================================================================================================
335 void append(const Eigen::MatrixXd& data);
336
337 //=========================================================================================================
349 void restart(quint32 numAverages,
350 quint32 iPreStimSamples,
351 quint32 iPostStimSamples,
352 quint32 iBaselineFromSecs,
353 quint32 iBaselineToSecs,
354 quint32 iTriggerIndex,
355 FIFFLIB::FiffInfo::SPtr pFiffInfo);
356
357 //=========================================================================================================
361 void stop();
362
363 //=========================================================================================================
369 void setAverageNumber(qint32 numAve);
370
371 //=========================================================================================================
378 void setPreStim(qint32 samples,
379 qint32 secs);
380
381 //=========================================================================================================
388 void setPostStim(qint32 samples,
389 qint32 secs);
390
391 //=========================================================================================================
397 void setTriggerChIndx(qint32 idx);
398
399 //=========================================================================================================
405 void setArtifactReduction(const QMap<QString, double>& mapThresholds);
406
407 //=========================================================================================================
413 void setBaselineActive(bool activate);
414
415 //=========================================================================================================
422 void setBaselineFrom(int fromSamp,
423 int fromMSec);
424
425 //=========================================================================================================
432 void setBaselineTo(int toSamp,
433 int toMSec);
434
435 //=========================================================================================================
439 void reset();
440
441protected:
442 //=========================================================================================================
449 void handleResults(const FIFFLIB::FiffEvokedSet& evokedStimSet,
450 const QStringList& lResponsibleTriggerTypes);
451
453
454signals:
455 void evokedStim(const FIFFLIB::FiffEvokedSet& evokedStimSet,
456 const QStringList& lResponsibleTriggerTypes);
457 void operate(const Eigen::MatrixXd& matData);
458 void averageNumberChanged(qint32 numAve);
459 void averagePreStimChanged(qint32 samples,
460 qint32 secs);
461 void averagePostStimChanged(qint32 samples,
462 qint32 secs);
464 void averageArtifactReductionChanged(const QMap<QString, double>& mapThresholds);
465 void averageBaselineActiveChanged(bool activate);
466 void averageBaselineFromChanged(int fromSamp,
467 int fromMSec);
469 int toMSec);
471};
472
473//=============================================================================================================
474// INLINE DEFINITIONS
475//=============================================================================================================
476
478{
479 bool result = false;
480
482 result = true;
483 }
484
485 return result;
486}
487} // NAMESPACE
488
489#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)
void fillFrontBuffer(const Eigen::MatrixXd &data, double dTriggerType)
FIFFLIB::FiffInfo::SPtr m_pFiffInfo
QPair< float, float > m_pairBaselineSamp
QMap< double, qint32 > m_mapMatDataPostIdx
QMap< double, Eigen::MatrixXd > m_mapDataPost
RtAveragingWorker(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, quint32 iBaselineFromMSecs, quint32 iBaselineToMSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo)
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 averageBaselineActiveChanged(bool activate)
RtAveraging(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, quint32 iBaselineFromSecs, quint32 iBaselineToSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo, QObject *parent=0)
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)
void restart(quint32 numAverages, quint32 iPreStimSamples, quint32 iPostStimSamples, quint32 iBaselineFromSecs, quint32 iBaselineToSecs, quint32 iTriggerIndex, FIFFLIB::FiffInfo::SPtr pFiffInfo)
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