MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
rtaveraging.h
Go to the documentation of this file.
1//=============================================================================================================
36#ifndef RTAVERAGING_RTPROCESSING_H
37#define RTAVERAGING_RTPROCESSING_H
38
39//=============================================================================================================
40// INCLUDES
41//=============================================================================================================
42
43#include "rtprocessing_global.h"
44
46#include <fiff/fiff_info.h>
47
48//=============================================================================================================
49// QT INCLUDES
50//=============================================================================================================
51
52#include <QThread>
53#include <QSharedPointer>
54#include <QObject>
55
56//=============================================================================================================
57// EIGEN INCLUDES
58//=============================================================================================================
59
60#include <Eigen/Core>
61
62//=============================================================================================================
63// FORWARD DECLARATIONS
64//=============================================================================================================
65
66//=============================================================================================================
67// DEFINE NAMESPACE RTPROCESSINGLIB
68//=============================================================================================================
69
70namespace RTPROCESSINGLIB
71{
72
73//=============================================================================================================
74// RTPROCESSINGLIB FORWARD DECLARATIONS
75//=============================================================================================================
76
77//=============================================================================================================
84{
85 Q_OBJECT
86
87public:
88 //=========================================================================================================
100 RtAveragingWorker(quint32 numAverages,
101 quint32 iPreStimSamples,
102 quint32 iPostStimSamples,
103 quint32 iBaselineFromMSecs,
104 quint32 iBaselineToMSecs,
105 quint32 iTriggerIndex,
106 FIFFLIB::FiffInfo::SPtr pFiffInfo);
107
108 //=========================================================================================================
114 void doWork(const Eigen::MatrixXd& matData);
115
116 //=========================================================================================================
122 void setAverageNumber(qint32 numAve);
123
124 //=========================================================================================================
131 void setPreStim(qint32 samples,
132 qint32 secs);
133
134 //=========================================================================================================
141 void setPostStim(qint32 samples,
142 qint32 secs);
143
144 //=========================================================================================================
150 void setTriggerChIndx(qint32 idx);
151
152 //=========================================================================================================
158 void setArtifactReduction(const QMap<QString, double> &mapThresholds);
159
160 //=========================================================================================================
166 void setBaselineActive(bool activate);
167
168 //=========================================================================================================
175 void setBaselineFrom(int fromSamp,
176 int fromMSec);
177
178 //=========================================================================================================
185 void setBaselineTo(int toSamp,
186 int toMSec);
187
188 //=========================================================================================================
192 void reset();
193
194protected:
195 //=========================================================================================================
199 void doAveraging(const Eigen::MatrixXd& rawSegment);
200
201 //=========================================================================================================
205 void fillFrontBuffer(const Eigen::MatrixXd& data,
206 double dTriggerType);
207
208 void emitEvoked(double dTriggerType,
209 QStringList& lResponsibleTriggerTypes);
210
211 //=========================================================================================================
215 void fillBackBuffer(const Eigen::MatrixXd& data,
216 double dTriggerType);
217
218 //=========================================================================================================
222 void mergeData(double dTriggerType);
223
224 //=========================================================================================================
228 void generateEvoked(double dTriggerType);
229
230 //=========================================================================================================
234 inline bool controlValuesChanged();
235
253 QPair<float,float> m_pairBaselineSec;
254 QPair<float,float> m_pairBaselineSamp;
259 QMap<QString,double> m_mapThresholds;
260 QMap<double,QList<Eigen::MatrixXd> > m_mapStimAve;
261 QMap<double,Eigen::MatrixXd> m_mapDataPre;
262 QMap<double,Eigen::MatrixXd> m_mapDataPost;
263 QMap<double,qint32> m_mapMatDataPostIdx;
264 QMap<double,bool> m_mapFillingBackBuffer;
266signals:
267 //=========================================================================================================
274 void resultReady(const FIFFLIB::FiffEvokedSet& evokedStimSet,
275 const QStringList& lResponsibleTriggerTypes);
276};
277
278//=============================================================================================================
285{
286 Q_OBJECT
287
288public:
289 typedef QSharedPointer<RtAveraging> SPtr;
290 typedef QSharedPointer<const RtAveraging> ConstSPtr;
292 //=========================================================================================================
305 explicit RtAveraging(quint32 numAverages,
306 quint32 iPreStimSamples,
307 quint32 iPostStimSamples,
308 quint32 iBaselineFromSecs,
309 quint32 iBaselineToSecs,
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 quint32 iBaselineFromSecs,
344 quint32 iBaselineToSecs,
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 //=========================================================================================================
437 void handleResults(const FIFFLIB::FiffEvokedSet& evokedStimSet,
438 const QStringList& lResponsibleTriggerTypes);
439
442signals:
443 void evokedStim(const FIFFLIB::FiffEvokedSet& evokedStimSet,
444 const QStringList& lResponsibleTriggerTypes);
445 void operate(const Eigen::MatrixXd& matData);
446 void averageNumberChanged(qint32 numAve);
447 void averagePreStimChanged(qint32 samples,
448 qint32 secs);
449 void averagePostStimChanged(qint32 samples,
450 qint32 secs);
451 void averageTriggerChIdxChanged(qint32 idx);
452 void averageArtifactReductionChanged(const QMap<QString, double> &mapThresholds);
453 void averageBaselineActiveChanged(bool activate);
454 void averageBaselineFromChanged(int fromSamp,
455 int fromMSec);
456 void averageBaselineToChanged(int toSamp,
457 int toMSec);
458 void averageResetRequested();
459};
460
461//=============================================================================================================
462// INLINE DEFINITIONS
463//=============================================================================================================
464
466{
467 bool result = false;
468
472 result = true;
473 }
474
475 return result;
476}
477} // NAMESPACE
478
479#endif // RTAVERAGING_RTPROCESSING_H
realtime library export/import macros.
#define RTPROCESINGSHARED_EXPORT
FiffInfo class declaration.
FiffEvokedSet class declaration.
QSharedPointer< FiffInfo > SPtr
Definition fiff_info.h:87
Real-time averaging worker.
Definition rtaveraging.h:84
FIFFLIB::FiffInfo::SPtr m_pFiffInfo
QPair< float, float > m_pairBaselineSec
QMap< double, bool > m_mapFillingBackBuffer
QPair< float, float > m_pairBaselineSamp
FIFFLIB::FiffEvokedSet m_stimEvokedSet
QMap< double, Eigen::MatrixXd > m_mapDataPre
QMap< double, QList< Eigen::MatrixXd > > m_mapStimAve
QMap< double, qint32 > m_mapMatDataPostIdx
QMap< double, Eigen::MatrixXd > m_mapDataPost
QMap< QString, double > m_mapThresholds
void resultReady(const FIFFLIB::FiffEvokedSet &evokedStimSet, const QStringList &lResponsibleTriggerTypes)
Real-time averaging.
QSharedPointer< const RtAveraging > ConstSPtr
QSharedPointer< RtAveraging > SPtr