MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
hpifit.h
Go to the documentation of this file.
1//=============================================================================================================
37#ifndef HPIFIT_H
38#define HPIFIT_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "../inverse_global.h"
45#include "fiff/fiff_ch_info.h"
46#include "sensorset.h"
47#include "signalmodel.h"
49#include <fiff/fiff_dig_point.h>
51
52//=============================================================================================================
53// EIGEN INCLUDES
54//=============================================================================================================
55
56#include <Eigen/Core>
57
58//=============================================================================================================
59// QT INCLUDES
60//=============================================================================================================
61
62#include <QSharedPointer>
63
64//=============================================================================================================
65// FORWARD DECLARATIONS
66//=============================================================================================================
67
68namespace FWDLIB{
69 class FwdCoil;
70 class FwdCoilSet;
71}
72
73namespace FIFFLIB{
74 class FiffInfo;
75 class FiffCoordTrans;
76 class FiffDigPointSet;
77}
78
79//=============================================================================================================
80// DEFINE NAMESPACE INVERSELIB
81//=============================================================================================================
82
83namespace INVERSELIB
84{
85 class SensorSet;
86 class SignalModel;
87 class HpiModelParameters;
88//=============================================================================================================
89// Declare all structures to be used
90//=============================================================================================================
91
95struct CoilParam {
96 Eigen::MatrixXd pos;
97 Eigen::MatrixXd mom;
98 Eigen::VectorXd dpfiterror;
99 Eigen::VectorXd dpfitnumitr;
100
101 CoilParam(int iNumCoils)
102 : pos(Eigen::MatrixXd(iNumCoils,3)),
103 mom(Eigen::MatrixXd::Zero(iNumCoils,3)),
104 dpfiterror(Eigen::VectorXd::Zero(iNumCoils)),
105 dpfitnumitr(Eigen::VectorXd::Zero(iNumCoils))
106 {}
107};
108
113 QVector<int> hpiFreqs;
114 FIFFLIB::FiffDigPointSet fittedCoils;
115 FIFFLIB::FiffCoordTrans devHeadTrans;
116 QVector<double> errorDistances;
117 Eigen::VectorXd GoF;
118 QString sFilePathDigitzers;
119 bool bIsLargeHeadMovement;
120 float fHeadMovementDistance;
121 float fHeadMovementAngle;
122};
123
124//=============================================================================================================
125// INVERSELIB FORWARD DECLARATIONS
126//=============================================================================================================
127
128//=============================================================================================================
135{
136
137public:
138 typedef QSharedPointer<HPIFit> SPtr;
139 typedef QSharedPointer<const HPIFit> ConstSPtr;
141 //=========================================================================================================
146 explicit HPIFit();
147
148 //=========================================================================================================
154 explicit HPIFit(const SensorSet& sensorSet);
155
156 //=========================================================================================================
162 void checkForUpdate(const SensorSet& sensorSet);
163
164 //=========================================================================================================
175 void fit(const Eigen::MatrixXd& matProjectedData,
176 const Eigen::MatrixXd& matProjectors,
177 const HpiModelParameters& hpiModelParameters,
178 const Eigen::MatrixXd& matCoilsHead,
179 HpiFitResult& hpiFitResult);
180
181 void fit(const Eigen::MatrixXd& matProjectedData,
182 const Eigen::MatrixXd& matProjectors,
183 const HpiModelParameters& hpiModelParameters,
184 const Eigen::MatrixXd& matCoilsHead,
185 const bool bOrderFrequencies,
186 HpiFitResult& hpiFitResult);
187
188 //=========================================================================================================
202 static void storeHeadPosition(float fTime,
203 const Eigen::MatrixXf& matTransDevHead,
204 Eigen::MatrixXd& matPosition,
205 const Eigen::VectorXd& vecGoF,
206 const QVector<double>& vecError);
207
208private:
209
210 //=========================================================================================================
219 Eigen::MatrixXd computeAmplitudes(const Eigen::MatrixXd& matProjectedData,
220 const HpiModelParameters& hpiModelParameters);
221
222 //=========================================================================================================
232 Eigen::MatrixXd computeSeedPoints(const Eigen::MatrixXd& matAmplitudes,
233 const FIFFLIB::FiffCoordTrans& transDevHead,
234 const QVector<double>& vecError,
235 const Eigen::MatrixXd& matCoilsHead);
236
237 //=========================================================================================================
251 CoilParam dipfit(const Eigen::MatrixXd matCoilsSeed,
252 const SensorSet& sensors,
253 const Eigen::MatrixXd &matData,
254 const int iNumCoils,
255 const Eigen::MatrixXd &t_matProjectors,
256 const int iMaxIterations,
257 const float fAbortError);
258
259 //=========================================================================================================
266 Eigen::VectorXd computeGoF(const Eigen::VectorXd& vecDipFitError);
267
268 //=========================================================================================================
279 FIFFLIB::FiffCoordTrans computeDeviceHeadTransformation(const Eigen::MatrixXd& matCoilsDev,
280 const Eigen::MatrixXd& matCoilsHead);
281
282 //=========================================================================================================
291 QVector<double> computeEstimationError(const Eigen::MatrixXd& matCoilsDev,
292 const Eigen::MatrixXd& matCoilsHead,
293 const FIFFLIB::FiffCoordTrans& transDevHead);
294
295 //=========================================================================================================
303 FIFFLIB::FiffDigPointSet getFittedPointSet(const Eigen::MatrixXd& matCoilsDev);
304
305 //=========================================================================================================
314 Eigen::Matrix4d computeTransformation(Eigen::MatrixXd matNH,
315 Eigen::MatrixXd matBT);
316
317 //=========================================================================================================
326 std::vector<int> findCoilOrder(const Eigen::MatrixXd& matCoilsDev,
327 const Eigen::MatrixXd& matCoilsHead);
328
329 //=========================================================================================================
338 Eigen::MatrixXd order(const std::vector<int>& vecOrder,
339 const Eigen::MatrixXd& matToOrder);
340
341 QVector<int> order(const std::vector<int>& vecOrder,
342 const QVector<int>& vecToOrder);
343
344 //=========================================================================================================
354 double objectTrans(const Eigen::MatrixXd& matHeadCoil,
355 const Eigen::MatrixXd& matCoilsDev,
356 const Eigen::MatrixXd& matTrans);
357
358 SensorSet m_sensors;
359 SignalModel m_signalModel;
361};
362
363//=============================================================================================================
364// INLINE DEFINITIONS
365//=============================================================================================================
366
367} //NAMESPACE
368
369#ifndef metatype_HpiFitResult
370#define metatype_HpiFitResult
372#endif
373
374#endif // HPIFIT_H
FiffDigPointSet class declaration.
FiffChInfo class declaration.
FiffCoordTrans class declaration.
FiffDigPoint class declaration.
Q_DECLARE_METATYPE(Eigen::MatrixXf)
SensorSet class declaration.
SignalModel class declaration.
#define INVERSESHARED_EXPORT
Coordinate transformation description.
Holds a set of digitizer points.
HPI Fit algorithms.
Definition hpifit.h:135
QSharedPointer< const HPIFit > ConstSPtr
Definition hpifit.h:139
void fit(const Eigen::MatrixXd &matProjectedData, const Eigen::MatrixXd &matProjectors, const HpiModelParameters &hpiModelParameters, const Eigen::MatrixXd &matCoilsHead, HpiFitResult &hpiFitResult)
QSharedPointer< HPIFit > SPtr
Definition hpifit.h:138
Brief description of this class.
Brief description of this class.
Definition signalmodel.h:74