v2.0.0
Loading...
Searching...
No Matches
dipole_fit_data.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef DIPOLEFITDATA_H
38#define DIPOLEFITDATA_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "../inverse_global.h"
45
46#include <fiff/fiff_types.h>
47#include "analyze_types.h"
48#include <fwd/fwd_types.h>
50#include <fwd/fwd_bem_model.h>
51#include "dipole_forward.h"
52
53//=============================================================================================================
54// EIGEN INCLUDES
55//=============================================================================================================
56
57#include <Eigen/Core>
58
59//=============================================================================================================
60// QT INCLUDES
61//=============================================================================================================
62
63#include <QSharedPointer>
64
65#include <memory>
66
67namespace FIFFLIB { class FiffCoordTrans; }
68
69// ToDo move to cpp
70#define COLUMN_NORM_NONE 0 /* No column normalization requested */
71#define COLUMN_NORM_COMP 1 /* Componentwise normalization */
72#define COLUMN_NORM_LOC 2 /* Dipole locationwise normalization */
73
74//=============================================================================================================
75// DEFINE NAMESPACE INVERSELIB
76//=============================================================================================================
77
78namespace INVERSELIB
79{
80
81// (Replaces *dipoleFitFuncs,dipoleFitFuncsRec struct of MNE-C fit_types.h).
82
86typedef struct {
87 fwdFieldFunc meg_field; /* MEG forward calculation functions */
89 void *meg_client; /* Client data for MEG field computations */
91
92 fwdFieldFunc eeg_pot; /* EEG forward calculation functions */
94 void *eeg_client; /* Client data for EEG field computations */
96} *dipoleFitFuncs,dipoleFitFuncsRec;
97
102 float limit;
104 float *B;
105 double B2;
107};
108
109//=============================================================================================================
110// FORWARD DECLARATIONS
111//=============================================================================================================
112
113class GuessData;
114class ECD;
115
116//=============================================================================================================
123{
124public:
125 typedef QSharedPointer<DipoleFitData> SPtr;
126 typedef QSharedPointer<const DipoleFitData> ConstSPtr;
127
128 //=========================================================================================================
132 explicit DipoleFitData();
133
134 //=========================================================================================================
139 virtual ~DipoleFitData();
140
141 //============================= dipole_fit_setup.c =============================
142
144
145 static std::unique_ptr<MNELIB::MNECovMatrix> ad_hoc_noise(FWDLIB::FwdCoilSet* meg, /* Channel name lists to define which channels are gradiometers */
147 float grad_std,
148 float mag_std,
149 float eeg_std);
150
151 //ToDo move to mneProjOp class
152 static int make_projection(const QList<QString>& projnames,
153 const QList<FIFFLIB::FiffChInfo>& chs,
154 int nch,
155 MNELIB::MNEProjOp* *res);
156
157 static int scale_noise_cov(DipoleFitData* f,int nave);
158
160
162
163 static DipoleFitData* setup_dipole_fit_data( const QString& mriname,
164 const QString& measname,
165 const QString& bemname,
166 Eigen::Vector3f *r0,
168 int accurate_coils,
169 const QString& badname,
170 const QString& noisename,
171 float grad_std,
172 float mag_std,
173 float eeg_std,
174 float mag_reg,
175 float grad_reg,
176 float eeg_reg,
177 int diagnoise,
178 const QList<QString>& projnames,
179 int include_meg,
180 int include_eeg);
181
182 //=========================================================================================================
194 static bool fit_one(DipoleFitData* fit, GuessData* guess, float time, float *B, int verbose, ECD& res);
195
196//============================= dipole_forward.c
197
198 static int compute_dipole_field(DipoleFitData* d, float *rd, int whiten, float **fwd);
199
200 //============================= dipole_forward.c
201
203 float *rd,
204 DipoleForward* old);
205
206public:
207 std::unique_ptr<FIFFLIB::FiffCoordTrans> mri_head_t;
208 std::unique_ptr<FIFFLIB::FiffCoordTrans> meg_head_t;
210 QList<FIFFLIB::FiffChInfo> chs;
211 int nmeg;
212 int neeg;
213 QStringList ch_names;
214 std::unique_ptr<FIFFLIB::FiffSparseMatrix> pick;
215 std::unique_ptr<FWDLIB::FwdCoilSet> meg_coils;
216 std::unique_ptr<FWDLIB::FwdCoilSet> eeg_els;
217 float r0[3];
218 QString bemname;
219
220 std::unique_ptr<FWDLIB::FwdEegSphereModel> eeg_model;
221 std::unique_ptr<FWDLIB::FwdBemModel> bem_model;
222
227
229 std::unique_ptr<MNELIB::MNECovMatrix> noise_orig;
230 std::unique_ptr<MNELIB::MNECovMatrix> noise;
231 int nave;
232 std::unique_ptr<MNELIB::MNEProjOp> proj;
236};
237
238//=============================================================================================================
239// INLINE DEFINITIONS
240//=============================================================================================================
241} //NAMESPACE
242
243#endif // DIPOLEFITDATA_H
Old fiff_type declarations - replace them.
int(* fwdFieldFunc)(float *rd, float *Q, FWDLIB::FwdCoilSet *coils, float *res, void *client)
Definition fwd_types.h:20
int(* fwdVecFieldFunc)(float *rd, FWDLIB::FwdCoilSet *coils, float **res, void *client)
Definition fwd_types.h:21
FwdEegSphereModel class declaration.
FwdBemModel class declaration.
DipoleForward class declaration.
inverse library export/import macros.
#define INVERSESHARED_EXPORT
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).
struct INVERSELIB::dipoleFitFuncs dipoleFitFuncsRec
Coordinate transformation description.
Collection of FwdCoil objects representing a full MEG or EEG sensor array.
Multi-layer spherical head model for EEG forward computation.
Combined MEG/EEG measurement data with inverse operator, field mapping, dipole fitting,...
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,...
static int scale_dipole_fit_noise_cov(DipoleFitData *f, int nave)
static int compute_dipole_field(DipoleFitData *d, float *rd, int whiten, float **fwd)
std::unique_ptr< FIFFLIB::FiffCoordTrans > meg_head_t
static DipoleFitData * 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)
static int select_dipole_fit_noise_cov(DipoleFitData *f, mshMegEegData d)
static std::unique_ptr< MNELIB::MNECovMatrix > ad_hoc_noise(FWDLIB::FwdCoilSet *meg, FWDLIB::FwdCoilSet *eeg, float grad_std, float mag_std, float eeg_std)
std::unique_ptr< MNELIB::MNECovMatrix > noise_orig
std::unique_ptr< FWDLIB::FwdBemModel > bem_model
static int make_projection(const QList< QString > &projnames, const QList< FIFFLIB::FiffChInfo > &chs, int nch, MNELIB::MNEProjOp **res)
std::unique_ptr< FIFFLIB::FiffSparseMatrix > pick
std::unique_ptr< MNELIB::MNECovMatrix > noise
QSharedPointer< DipoleFitData > SPtr
static int setup_forward_model(DipoleFitData *d, MNELIB::MNECTFCompDataSet *comp_data, FWDLIB::FwdCoilSet *comp_coils)
static bool fit_one(DipoleFitData *fit, GuessData *guess, float time, float *B, int verbose, ECD &res)
std::unique_ptr< FWDLIB::FwdCoilSet > meg_coils
QList< FIFFLIB::FiffChInfo > chs
QSharedPointer< const DipoleFitData > ConstSPtr
static int scale_noise_cov(DipoleFitData *f, int nave)
std::unique_ptr< FWDLIB::FwdEegSphereModel > eeg_model
std::unique_ptr< FIFFLIB::FiffCoordTrans > mri_head_t
static DipoleForward * dipole_forward_one(DipoleFitData *d, float *rd, DipoleForward *old)
std::unique_ptr< FWDLIB::FwdCoilSet > eeg_els
std::unique_ptr< MNELIB::MNEProjOp > proj
Stores forward field matrices and source space data for magnetic dipole fitting.
Single equivalent current dipole with position, orientation, amplitude, and goodness-of-fit.
Definition ecd.h:73
Precomputed guess point grid with forward fields for initial dipole position candidates.
Definition guess_data.h:79
Collection of CTF third-order gradient compensation operators.
Projection operator managing a set of linear projection items and the final compiled projector matrix...
Definition mne_proj_op.h:83