68#define MALLOC_60(x,t) (t *)malloc((x)*sizeof(t))
70#define ALLOC_CMATRIX_60(x,y) mne_cmatrix_60((x),(y))
72#define FREE_60(x) if ((char *)(x) != NULL) free((char *)(x))
74#define FREE_CMATRIX_60(m) mne_free_cmatrix_60((m))
84static void matrix_error_60 (
int kind,
int nr,
int nc)
87 printf(
"Failed to allocate memory pointers for a %d x %d matrix\n",nr,nc);
89 printf(
"Failed to allocate memory for a %d x %d matrix\n",nr,nc);
91 printf(
"Allocation error for a %d x %d matrix\n",nr,nc);
92 if (
sizeof(
void *) == 4) {
93 printf(
"This is probably because you seem to be using a computer with 32-bit architecture.\n");
94 printf(
"Please consider moving to a 64-bit platform.");
96 printf(
"Cannot continue. Sorry.\n");
107 if (!m) matrix_error_60(1,nr,nc);
109 if (!whole) matrix_error_60(2,nr,nc);
120using namespace Eigen;
168 printf(
"Field computation function is missing in fwd_comp_field_vec");
195 VectorXf resVec = Map<VectorXf>(res, coils->
ncoil);
198 Map<VectorXf>(res, coils->
ncoil) = resVec;
229 QList<FiffChInfo> chs;
230 QList<FiffChInfo> compchs;
245 if (!coils || coils->
ncoil <= 0) {
246 printf(
"Coil data missing in fwd_make_ctf_comp_coils");
253 for (k = 0; k < coils->
ncoil; k++) {
255 coil = coils->
coils[k];
256 chs[k].ch_name = coil->
chname;
257 chs[k].chpos.coil_type = coil->
type;
260 nchan = coils->
ncoil;
265 compchs[k].ch_name = coil->
chname;
266 compchs[k].chpos.coil_type = coil->
type;
271 res =
set->make_comp(chs,nchan,compchs,ncomp);
301 qWarning(
"No coils to duplicate");
332 printf(
"Field computation function is missing in fwd_comp_field_vec");
358 for (k = 0; k < 3; k++) {
359 VectorXf resVec = Map<VectorXf>(res[k], coils->
ncoil);
363 Map<VectorXf>(res[k], coils->
ncoil) = resVec;
378 qCritical(
"Field and gradient computation function is missing in fwd_comp_field_grad");
407 int ncoil = coils->
ncoil;
410 VectorXf resVec = Map<VectorXf>(res, ncoil);
411 VectorXf workVec = Map<VectorXf>(comp->
work, ncomp_coil);
414 Map<VectorXf>(res, ncoil) = resVec;
416 VectorXf xgradVec = Map<VectorXf>(xgrad, ncoil);
417 VectorXf vw0Vec = Map<VectorXf>(comp->
vec_work[0], ncomp_coil);
420 Map<VectorXf>(xgrad, ncoil) = xgradVec;
422 VectorXf ygradVec = Map<VectorXf>(ygrad, ncoil);
423 VectorXf vw1Vec = Map<VectorXf>(comp->
vec_work[1], ncomp_coil);
426 Map<VectorXf>(ygrad, ncoil) = ygradVec;
428 VectorXf zgradVec = Map<VectorXf>(zgrad, ncoil);
429 VectorXf vw2Vec = Map<VectorXf>(comp->
vec_work[2], ncomp_coil);
432 Map<VectorXf>(zgrad, ncoil) = zgradVec;
Old fiff_type declarations - replace them.
MNECTFCompDataSet class declaration.
int(* fwdFieldFunc)(float *rd, float *Q, FWDLIB::FwdCoilSet *coils, float *res, void *client)
int(* fwdVecFieldFunc)(float *rd, FWDLIB::FwdCoilSet *coils, float **res, void *client)
int(* fwdFieldGradFunc)(float *rd, float *Q, FWDLIB::FwdCoilSet *coils, float *res, float *xgrad, float *ygrad, float *zgrad, void *client)
FwdCompData class declaration.
float ** mne_cmatrix_60(int nr, int nc)
#define ALLOC_CMATRIX_60(x, y)
#define FREE_CMATRIX_60(m)
void mne_free_cmatrix_60(float **m)
void(* fwdUserFreeFunc)(void *)
Core MNE data structures (source spaces, source estimates, hemispheres).
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
Forward modelling (BEM, MEG/EEG lead fields).
Single MEG or EEG sensor coil with integration points, weights, and coordinate frame.
Collection of FwdCoil objects representing a full MEG or EEG sensor array.
MNELIB::MNECTFCompDataSet * set
fwdVecFieldFunc vec_field
static void fwd_free_comp_data(void *d)
fwdFieldGradFunc field_grad
static int fwd_make_ctf_comp_coils(MNELIB::MNECTFCompDataSet *set, FwdCoilSet *coils, FwdCoilSet *comp_coils)
static FwdCompData * fwd_make_comp_data(MNELIB::MNECTFCompDataSet *set, FwdCoilSet *coils, FwdCoilSet *comp_coils, fwdFieldFunc field, fwdVecFieldFunc vec_field, fwdFieldGradFunc field_grad, void *client, fwdUserFreeFunc client_free)
static int fwd_comp_field_grad(float *rd, float *Q, FwdCoilSet *coils, float *res, float *xgrad, float *ygrad, float *zgrad, void *client)
static int fwd_comp_field_vec(float *rd, FwdCoilSet *coils, float **res, void *client)
static int fwd_comp_field(float *rd, float *Q, FwdCoilSet *coils, float *res, void *client)
fwdUserFreeFunc client_free
Collection of CTF third-order gradient compensation operators.
std::unique_ptr< MNECTFCompData > current
int apply(int do_it, Eigen::VectorXf &data, const Eigen::VectorXf &compdata)