v2.0.0
Loading...
Searching...
No Matches
inv_dipole_fit_data.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef INV_DIPOLE_FIT_DATA_H
38#define INV_DIPOLE_FIT_DATA_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "../inv_global.h"
45
46#include <fiff/fiff_types.h>
47#include <fwd/fwd_types.h>
49#include <fwd/fwd_bem_model.h>
50#include "inv_dipole_forward.h"
51
52//=============================================================================================================
53// EIGEN INCLUDES
54//=============================================================================================================
55
56#include <Eigen/Core>
57
58//=============================================================================================================
59// QT INCLUDES
60//=============================================================================================================
61
62#include <QSharedPointer>
63
64#include <memory>
65
66namespace FIFFLIB { class FiffCoordTrans; }
67namespace MNELIB { class MNEMeasData; }
68
69constexpr int COLUMN_NORM_NONE = 0;
70constexpr int COLUMN_NORM_COMP = 1;
71constexpr int COLUMN_NORM_LOC = 2;
72
73//=============================================================================================================
74// DEFINE NAMESPACE INVLIB
75//=============================================================================================================
76
77namespace INVLIB
78{
79
80// (Replaces *dipoleFitFuncs,dipoleFitFuncsRec struct of MNE-C fit_types.h).
81
102
107
112 float limit;
114 float *B;
115 double B2;
117};
118
119//=============================================================================================================
120// FORWARD DECLARATIONS
121//=============================================================================================================
122
123class InvGuessData;
124class InvEcd;
125
126//=============================================================================================================
141{
142public:
143 typedef QSharedPointer<InvDipoleFitData> SPtr;
144 typedef QSharedPointer<const InvDipoleFitData> ConstSPtr;
145
146 //=========================================================================================================
150 explicit InvDipoleFitData();
151
152 //=========================================================================================================
157 virtual ~InvDipoleFitData();
158
159 //=========================================================================================================
175
176 //=========================================================================================================
193 static std::unique_ptr<MNELIB::MNECovMatrix> ad_hoc_noise(FWDLIB::FwdCoilSet* meg,
195 float grad_std,
196 float mag_std,
197 float eeg_std);
198
199 //=========================================================================================================
212 static int scale_noise_cov(InvDipoleFitData* f, int nave);
213
214 //=========================================================================================================
228
229 //=========================================================================================================
251 int nave,
252 const int* sels);
253
254 //=========================================================================================================
285 const QString& mriname,
286 const QString& measname,
287 const QString& bemname,
288 Eigen::Vector3f *r0,
290 int accurate_coils,
291 const QString& badname,
292 const QString& noisename,
293 float grad_std,
294 float mag_std,
295 float eeg_std,
296 float mag_reg,
297 float grad_reg,
298 float eeg_reg,
299 int diagnoise,
300 const QList<QString>& projnames,
301 int include_meg,
302 int include_eeg);
303
304 //=========================================================================================================
319 static bool fit_one(InvDipoleFitData* fit, InvGuessData* guess, float time, Eigen::Ref<Eigen::VectorXf> B, int verbose, InvEcd& res);
320
321 //=========================================================================================================
337 static int compute_dipole_field(InvDipoleFitData& d, const Eigen::Vector3f& rd, int whiten, Eigen::Ref<Eigen::MatrixXf> fwd);
338
339 //=========================================================================================================
356 const Eigen::Vector3f& rd,
357 InvDipoleForward* old);
358
359public:
360 std::unique_ptr<FIFFLIB::FiffCoordTrans> mri_head_t;
361 std::unique_ptr<FIFFLIB::FiffCoordTrans> meg_head_t;
363 QList<FIFFLIB::FiffChInfo> chs;
364 int nmeg;
365 int neeg;
366 QStringList ch_names;
367 std::unique_ptr<FIFFLIB::FiffSparseMatrix> pick;
368 std::unique_ptr<FWDLIB::FwdCoilSet> meg_coils;
369 std::unique_ptr<FWDLIB::FwdCoilSet> eeg_els;
370 Eigen::Vector3f r0;
371 QString bemname;
372
373 std::unique_ptr<FWDLIB::FwdEegSphereModel> eeg_model;
374 std::unique_ptr<FWDLIB::FwdBemModel> bem_model;
375
376 std::unique_ptr<dipoleFitFuncsRec> sphere_funcs;
377 std::unique_ptr<dipoleFitFuncsRec> bem_funcs;
379 std::unique_ptr<dipoleFitFuncsRec> mag_dipole_funcs;
380
382 std::unique_ptr<MNELIB::MNECovMatrix> noise_orig;
383 std::unique_ptr<MNELIB::MNECovMatrix> noise;
384 int nave;
385 std::unique_ptr<MNELIB::MNEProjOp> proj;
389};
390
391//=============================================================================================================
392// INLINE DEFINITIONS
393//=============================================================================================================
394} //NAMESPACE
395
396#endif // INV_DIPOLE_FIT_DATA_H
constexpr int COLUMN_NORM_NONE
constexpr int COLUMN_NORM_COMP
constexpr int COLUMN_NORM_LOC
InvDipoleForward class declaration.
inverse library export/import macros.
#define INVSHARED_EXPORT
Definition inv_global.h:52
Old fiff_type declarations - replace them.
Forward library type definitions.
std::function< int(const Eigen::Vector3f &rd, FWDLIB::FwdCoilSet &coils, Eigen::Ref< Eigen::MatrixXf > res, void *client)> fwdVecFieldFunc
Definition fwd_types.h:55
std::function< int(const Eigen::Vector3f &rd, const Eigen::Vector3f &Q, FWDLIB::FwdCoilSet &coils, Eigen::Ref< Eigen::VectorXf > res, void *client)> fwdFieldFunc
Definition fwd_types.h:53
FwdEegSphereModel class declaration.
FwdBemModel class declaration.
Core MNE data structures (source spaces, source estimates, hemispheres).
void(* mneUserFreeFunc)(void *)
Generic destructor callback for user-attached data.
Definition mne_types.h:91
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
Inverse source estimation (MNE, dSPM, sLORETA, dipole fitting).
dipoleFitFuncsRec * dipoleFitFuncs
Pointer alias for dipoleFitFuncsRec, used throughout the dipole fitting module.
Coordinate transformation description.
Collection of FwdCoil objects representing a full MEG or EEG sensor array.
Multi-layer spherical head model for EEG forward computation.
Forward field computation function pointers and client data for MEG and EEG dipole fitting.
MNELIB::mneUserFreeFunc eeg_client_free
MNELIB::mneUserFreeFunc meg_client_free
Workspace for the dipole fitting objective function, holding forward model, measured field,...
std::unique_ptr< FWDLIB::FwdEegSphereModel > eeg_model
QSharedPointer< const InvDipoleFitData > ConstSPtr
std::unique_ptr< FWDLIB::FwdCoilSet > meg_coils
static InvDipoleFitData * setup_dipole_fit_data(const QString &mriname, const QString &measname, const QString &bemname, Eigen::Vector3f *r0, FWDLIB::FwdEegSphereModel *eeg_model, int accurate_coils, const QString &badname, const QString &noisename, float grad_std, float mag_std, float eeg_std, float mag_reg, float grad_reg, float eeg_reg, int diagnoise, const QList< QString > &projnames, int include_meg, int include_eeg)
Master setup: read all inputs and build a ready-to-use fit workspace.
std::unique_ptr< FIFFLIB::FiffCoordTrans > mri_head_t
static int scale_dipole_fit_noise_cov(InvDipoleFitData *f, int nave)
Scale dipole-fit noise covariance for a given number of averages.
std::unique_ptr< MNELIB::MNEProjOp > proj
static InvDipoleForward * dipole_forward_one(InvDipoleFitData *d, const Eigen::Vector3f &rd, InvDipoleForward *old)
Compute the forward solution for a single dipole position.
QSharedPointer< InvDipoleFitData > SPtr
std::unique_ptr< MNELIB::MNECovMatrix > noise
std::unique_ptr< dipoleFitFuncsRec > bem_funcs
static int scale_noise_cov(InvDipoleFitData *f, int nave)
Scale the noise-covariance matrix for a given number of averages.
std::unique_ptr< FIFFLIB::FiffSparseMatrix > pick
std::unique_ptr< dipoleFitFuncsRec > sphere_funcs
static bool fit_one(InvDipoleFitData *fit, InvGuessData *guess, float time, Eigen::Ref< Eigen::VectorXf > B, int verbose, InvEcd &res)
Fit a single dipole to the given data.
static int compute_dipole_field(InvDipoleFitData &d, const Eigen::Vector3f &rd, int whiten, Eigen::Ref< Eigen::MatrixXf > fwd)
Compute the forward field for a dipole at the given location.
static int setup_forward_model(InvDipoleFitData *d, MNELIB::MNECTFCompDataSet *comp_data, FWDLIB::FwdCoilSet *comp_coils)
Set up the sphere-model and (optionally) BEM forward functions.
QList< FIFFLIB::FiffChInfo > chs
std::unique_ptr< FWDLIB::FwdBemModel > bem_model
static int select_dipole_fit_noise_cov(InvDipoleFitData *f, MNELIB::MNEMeasData *meas, int nave, const int *sels)
Select and weight the noise-covariance for the active channel set.
std::unique_ptr< FWDLIB::FwdCoilSet > eeg_els
std::unique_ptr< dipoleFitFuncsRec > mag_dipole_funcs
static std::unique_ptr< MNELIB::MNECovMatrix > ad_hoc_noise(FWDLIB::FwdCoilSet *meg, FWDLIB::FwdCoilSet *eeg, float grad_std, float mag_std, float eeg_std)
Create an ad-hoc diagonal noise-covariance matrix.
std::unique_ptr< MNELIB::MNECovMatrix > noise_orig
std::unique_ptr< FIFFLIB::FiffCoordTrans > meg_head_t
Stores forward field matrices and SVD decomposition for magnetic dipole fitting.
Single equivalent current dipole with position, orientation, amplitude, and goodness-of-fit.
Definition inv_ecd.h:73
Precomputed guess point grid with forward fields for initial dipole position candidates.
Collection of CTF third-order gradient compensation operators.
Measurement data container for MNE inverse and dipole-fit computations.