MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
rthpis.cpp
Go to the documentation of this file.
1//=============================================================================================================
35//=============================================================================================================
36// INCLUDES
37//=============================================================================================================
38
39#include "rthpis.h"
40
43#include <fiff/fiff_info.h>
44
45//=============================================================================================================
46// EIGEN INCLUDES
47//=============================================================================================================
48
49//=============================================================================================================
50// QT INCLUDES
51//=============================================================================================================
52
53#include <QElapsedTimer>
54
55//=============================================================================================================
56// USED NAMESPACES
57//=============================================================================================================
58
59using namespace RTPROCESSINGLIB;
60using namespace FIFFLIB;
61using namespace Eigen;
62using namespace INVERSELIB;
63
64//=============================================================================================================
65// DEFINE MEMBER METHODS RtHpiWorker
66//=============================================================================================================
67
69{
70 m_pHpiFit = QSharedPointer<INVERSELIB::HPIFit>(new HPIFit(sensorSet));
71}
72
73void RtHpiWorker::doWork(const Eigen::MatrixXd& matData,
74 const Eigen::MatrixXd& matProjectors,
75 const HpiModelParameters& hpiModelParameters,
76 const Eigen::MatrixXd& matCoilsHead)
77{
78 if(this->thread()->isInterruptionRequested()) {
79 return;
80 }
81
82 //Perform actual fitting
83 HpiFitResult fitResult;
84 fitResult.devHeadTrans.from = 1;
85 fitResult.devHeadTrans.to = 4;
86
87 m_pHpiFit->fit(matData,
88 matProjectors,
89 hpiModelParameters,
90 matCoilsHead,
91 fitResult);
92
93 emit resultReady(fitResult);
94}
95
96//=============================================================================================================
97// DEFINE MEMBER METHODS RtHpi
98//=============================================================================================================
99
100RtHpi::RtHpi(const SensorSet sensorSet, QObject *parent)
101: QObject(parent),
102 m_sensorSet(sensorSet)
103{
104 qRegisterMetaType<INVERSELIB::HpiFitResult>("INVERSELIB::HpiFitResult");
105 qRegisterMetaType<QVector<int> >("QVector<int>");
106 qRegisterMetaType<QSharedPointer<FIFFLIB::FiffInfo> >("QSharedPointer<FIFFLIB::FiffInfo>");
107 qRegisterMetaType<Eigen::MatrixXd>("Eigen::MatrixXd");
108
109 RtHpiWorker *worker = new RtHpiWorker(m_sensorSet);
110 worker->moveToThread(&m_workerThread);
111
112 connect(&m_workerThread, &QThread::finished,
113 worker, &QObject::deleteLater);
114
115 connect(this, &RtHpi::operate,
116 worker, &RtHpiWorker::doWork);
117
118 connect(worker, &RtHpiWorker::resultReady,
119 this, &RtHpi::handleResults);
120
121 m_workerThread.start();
122}
123
124//=============================================================================================================
125
127{
128 stop();
129}
130
131//=============================================================================================================
132
133void RtHpi::append(const MatrixXd &data)
134{
135 if(m_modelParameters.iNHpiCoils() >= 3) {
136 emit operate(data,
138 m_modelParameters,
140 } else {
141 qWarning() << "[RtHpi::append] Not enough coil frequencies set. At least three frequencies are needed.";
142 }
143}
144
145//=============================================================================================================
146
148{
149 m_modelParameters = hpiModelParameters;
150}
151
152//=============================================================================================================
153
154void RtHpi::setProjectionMatrix(const Eigen::MatrixXd& matProjectors)
155{
156 m_matProjectors = matProjectors;
157}
158
159//=============================================================================================================
160
161void RtHpi::setHpiDigitizer(const Eigen::MatrixXd& matCoilsHead)
162{
163 m_matCoilsHead = matCoilsHead;
164}
165
166//=============================================================================================================
167
169{
170 emit newHpiFitResultAvailable(fitResult);
171}
172
173//=============================================================================================================
174
176{
177 stop();
178
179 RtHpiWorker *worker = new RtHpiWorker(m_sensorSet);
180 worker->moveToThread(&m_workerThread);
181
182 connect(&m_workerThread, &QThread::finished,
183 worker, &QObject::deleteLater);
184
185 connect(this, &RtHpi::operate,
186 worker, &RtHpiWorker::doWork);
187
188 connect(worker, &RtHpiWorker::resultReady,
189 this, &RtHpi::handleResults);
190
191 m_workerThread.start();
192}
193
194//=============================================================================================================
195
197{
198 m_workerThread.requestInterruption();
199 m_workerThread.quit();
200 m_workerThread.wait();
201}
RtHpi class declaration.
FiffInfo class declaration.
SensorSet class declaration.
HPIFit class declaration.
HPI Fit algorithms.
Definition hpifit.h:135
Brief description of this class.
Real-time HPI worker.
Definition rthpis.h:90
void doWork(const Eigen::MatrixXd &matData, const Eigen::MatrixXd &matProjectors, const INVERSELIB::HpiModelParameters &hpiModelParameters, const Eigen::MatrixXd &matCoilsHead)
Definition rthpis.cpp:73
QSharedPointer< INVERSELIB::HPIFit > m_pHpiFit
Definition rthpis.h:119
RtHpiWorker(const INVERSELIB::SensorSet sensorSet)
Definition rthpis.cpp:68
Eigen::MatrixXd m_matCoilsHead
Definition rthpis.h:207
void setHpiDigitizer(const Eigen::MatrixXd &matCoilsHead)
Definition rthpis.cpp:161
void setModelParameters(INVERSELIB::HpiModelParameters hpiModelParameters)
Definition rthpis.cpp:147
void append(const Eigen::MatrixXd &data)
Definition rthpis.cpp:133
void handleResults(const INVERSELIB::HpiFitResult &fitResult)
Definition rthpis.cpp:168
RtHpi(const INVERSELIB::SensorSet sensorSet, QObject *parent=0)
Definition rthpis.cpp:100
void setProjectionMatrix(const Eigen::MatrixXd &matProjectors)
Definition rthpis.cpp:154
Eigen::MatrixXd m_matProjectors
Definition rthpis.h:208