MNE-CPP  0.1.9
A Framework for Electrophysiology
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 
45 #include <fiff/fiff_evoked_set.h>
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 
70 namespace RTPROCESSINGLIB
71 {
72 
73 //=============================================================================================================
74 // RTPROCESSINGLIB FORWARD DECLARATIONS
75 //=============================================================================================================
76 
77 //=============================================================================================================
84 {
85  Q_OBJECT
86 
87 public:
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 
194 protected:
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 
236  qint32 m_iNumAverages;
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;
266 signals:
267  //=========================================================================================================
274  void resultReady(const FIFFLIB::FiffEvokedSet& evokedStimSet,
275  const QStringList& lResponsibleTriggerTypes);
276 };
277 
278 //=============================================================================================================
284 class RTPROCESINGSHARED_EXPORT RtAveraging : public QObject
285 {
286  Q_OBJECT
287 
288 public:
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 
432 protected:
433  //=========================================================================================================
437  void handleResults(const FIFFLIB::FiffEvokedSet& evokedStimSet,
438  const QStringList& lResponsibleTriggerTypes);
439 
440  QThread m_workerThread;
442 signals:
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 
469  if(m_iNewPreStimSamples != m_iPreStimSamples
470  || m_iNewPostStimSamples != m_iPostStimSamples
471  || m_iNewTriggerIndex != m_iTriggerChIndex) {
472  result = true;
473  }
474 
475  return result;
476 }
477 } // NAMESPACE
478 
479 #endif // RTAVERAGING_RTPROCESSING_H
QMap< double, Eigen::MatrixXd > m_mapDataPost
Definition: rtaveraging.h:262
Real-time averaging.
Definition: rtaveraging.h:284
QMap< double, Eigen::MatrixXd > m_mapDataPre
Definition: rtaveraging.h:261
QMap< double, QList< Eigen::MatrixXd > > m_mapStimAve
Definition: rtaveraging.h:260
Real-time averaging worker.
Definition: rtaveraging.h:83
evoked data set
FiffEvokedSet class declaration.
QSharedPointer< const RtAveraging > ConstSPtr
Definition: rtaveraging.h:290
QSharedPointer< RtAveraging > SPtr
Definition: rtaveraging.h:289
#define RTPROCESINGSHARED_EXPORT
QPair< float, float > m_pairBaselineSec
Definition: rtaveraging.h:253
QMap< double, bool > m_mapFillingBackBuffer
Definition: rtaveraging.h:264
QPair< float, float > m_pairBaselineSamp
Definition: rtaveraging.h:254
realtime library export/import macros.
QMap< double, qint32 > m_mapMatDataPostIdx
Definition: rtaveraging.h:263
FIFFLIB::FiffInfo::SPtr m_pFiffInfo
Definition: rtaveraging.h:256
FIFFLIB::FiffEvokedSet m_stimEvokedSet
Definition: rtaveraging.h:257
FiffInfo class declaration.
QSharedPointer< FiffInfo > SPtr
Definition: fiff_info.h:87
QMap< QString, double > m_mapThresholds
Definition: rtaveraging.h:259