v2.0.0
Loading...
Searching...
No Matches
rt_inv_op.cpp
Go to the documentation of this file.
1//=============================================================================================================
12
13//=============================================================================================================
14// INCLUDES
15//=============================================================================================================
16
17#include "rt_inv_op.h"
18
19#include <fiff/fiff_info.h>
20
23
24//=============================================================================================================
25// QT INCLUDES
26//=============================================================================================================
27
28#include <QDebug>
29
30//=============================================================================================================
31// EIGEN INCLUDES
32//=============================================================================================================
33
34#include <Eigen/Core>
35
36//=============================================================================================================
37// USED NAMESPACES
38//=============================================================================================================
39
40using namespace RTPROCESSINGLIB;
41using namespace Eigen;
42using namespace MNELIB;
43using namespace FIFFLIB;
44
45//=============================================================================================================
46// DEFINE MEMBER METHODS RtInvOpWorker
47//=============================================================================================================
48
49void RtInvOpWorker::doWork(const RtInvOpInput &inputData)
50{
51 if(this->thread()->isInterruptionRequested()) {
52 return;
53 }
54
55 // Restrict forward solution as necessary for MEG
56 MNEForwardSolution forwardMeg = inputData.pFwd->pick_types(true, false);
57
58 MNEInverseOperator invOpMeg(*inputData.pFiffInfo.data(),
59 forwardMeg,
60 inputData.noiseCov,
61 0.2f,
62 0.8f);
63
64 emit resultReady(invOpMeg);
65}
66
67//=============================================================================================================
68// DEFINE MEMBER METHODS RtInvOp
69//=============================================================================================================
70
73 QObject *parent)
74: QObject(parent)
75, m_pFiffInfo(p_pFiffInfo)
76, m_pFwd(p_pFwd)
77{
78 RtInvOpWorker *worker = new RtInvOpWorker;
79 worker->moveToThread(&m_workerThread);
80
81 connect(&m_workerThread, &QThread::finished,
82 worker, &QObject::deleteLater);
83
84 connect(this, &RtInvOp::operate,
85 worker, &RtInvOpWorker::doWork);
86
87 connect(worker, &RtInvOpWorker::resultReady,
89
90 m_workerThread.start();
91
92 qRegisterMetaType<RtInvOpInput>("RtInvOpInput");
93}
94
95//=============================================================================================================
96
98{
99 stop();
100}
101
102//=============================================================================================================
103
105{
106 RtInvOpInput inputData;
107 inputData.noiseCov = noiseCov;
108 inputData.pFiffInfo = m_pFiffInfo;
109 inputData.pFwd = m_pFwd;
110
111 emit operate(inputData);
112}
113
114//=============================================================================================================
115
116void RtInvOp::setFwdSolution(QSharedPointer<MNELIB::MNEForwardSolution> pFwd)
117{
118 m_pFwd = pFwd;
119}
120
121//=============================================================================================================
122
124{
125 emit invOperatorCalculated(invOp);
126}
127
128//=============================================================================================================
129
131{
132 stop();
133
134 RtInvOpWorker *worker = new RtInvOpWorker;
135 worker->moveToThread(&m_workerThread);
136
137 connect(&m_workerThread, &QThread::finished,
138 worker, &QObject::deleteLater);
139
140 connect(this, &RtInvOp::operate,
141 worker, &RtInvOpWorker::doWork);
142
143 connect(worker, &RtInvOpWorker::resultReady,
145
146 m_workerThread.start();
147}
148
149//=============================================================================================================
150
152{
153 m_workerThread.requestInterruption();
154 m_workerThread.quit();
155 m_workerThread.wait();
156}
Pre-computed inverse operator (whitened SVD of the forward model) for MNE/dSPM/sLORETA.
Forward solution (gain matrix mapping source dipoles to sensor measurements).
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Real-time recomputation of the linear inverse operator from updated noise covariance.
Core MNE data structures (source spaces, source estimates, hemispheres).
FIFF file I/O, in-memory data structures and high-level readers/writers.
Input bundle for the real-time inverse operator worker containing noise covariance,...
Definition rt_inv_op.h:70
FIFFLIB::FiffCov noiseCov
Definition rt_inv_op.h:73
QSharedPointer< FIFFLIB::FiffInfo > pFiffInfo
Definition rt_inv_op.h:71
QSharedPointer< MNELIB::MNEForwardSolution > pFwd
Definition rt_inv_op.h:72
Background worker thread that recomputes the MNE inverse operator when covariance updates arrive.
Definition rt_inv_op.h:83
void doWork(const RtInvOpInput &inputData)
Definition rt_inv_op.cpp:49
void resultReady(const MNELIB::MNEInverseOperator &invOp)
RtInvOp(QSharedPointer< FIFFLIB::FiffInfo > &p_pFiffInfo, QSharedPointer< MNELIB::MNEForwardSolution > &p_pFwd, QObject *parent=0)
Definition rt_inv_op.cpp:71
QSharedPointer< MNELIB::MNEForwardSolution > m_pFwd
Definition rt_inv_op.h:173
void append(const FIFFLIB::FiffCov &noiseCov)
void handleResults(const MNELIB::MNEInverseOperator &invOp)
void setFwdSolution(QSharedPointer< MNELIB::MNEForwardSolution > pFwd)
void invOperatorCalculated(const MNELIB::MNEInverseOperator &invOp)
QSharedPointer< FIFFLIB::FiffInfo > m_pFiffInfo
Definition rt_inv_op.h:172
void operate(const RtInvOpInput &inputData)
FIFF noise / data covariance: matrix, channel names, kind, applied projectors, bads,...
Definition fiff_cov.h:79
QSharedPointer< FiffInfo > SPtr
Definition fiff_info.h:90
In-memory representation of an -fwd.fif forward solution.
QSharedPointer< MNEForwardSolution > SPtr
MNE-style inverse operator.