103 bool t_bReadMeasBlockStart =
false;
104 bool t_bReadMeasBlockEnd =
false;
105 QString col_names, row_names;
112 while (!t_bReadMeasBlockStart) {
115 qInfo(
"FIFF_BLOCK_START FIFFB_MEAS_INFO");
116 t_bReadMeasBlockStart =
true;
124 bool dev_head_t_read =
false;
125 bool ctf_head_t_read =
false;
127 while (!t_bReadMeasBlockEnd) {
136 p_pFiffInfo->acq_pars = t_pTag->toString();
138 p_pFiffInfo->acq_stim = t_pTag->toString();
145 if (!dev_head_t_read) {
146 p_pFiffInfo->dev_head_t = t_pTag->toCoordTrans();
147 dev_head_t_read =
true;
148 }
else if (!ctf_head_t_read) {
149 p_pFiffInfo->ctf_head_t = t_pTag->toCoordTrans();
150 ctf_head_t_read =
true;
161 p_pFiffInfo->dig.append(t_pTag->toDigPoint());
172 qint32 countProj = p_pFiffInfo->projs.size();
175 switch (t_pTag->kind) {
178 p_pFiffInfo->projs.append(proj);
179 p_pFiffInfo->projs[countProj].desc = t_pTag->toString();
182 p_pFiffInfo->projs[countProj].kind = *(t_pTag->toInt());
185 p_pFiffInfo->projs[countProj].data->ncol = *(t_pTag->toInt());
188 p_pFiffInfo->projs[countProj].data->nrow = *(t_pTag->toInt());
191 p_pFiffInfo->projs[countProj].active = *(t_pTag->toInt());
198 p_pFiffInfo->projs[countProj].data->data = t_pTag->toFloatMatrix().transpose().cast<
double>();
206 for (qint32 i = 0; i < p_pFiffInfo->projs.size(); ++i) {
207 if (p_pFiffInfo->projs[i].data->data.rows() != p_pFiffInfo->projs[i].data->nrow)
208 p_pFiffInfo->projs[i].data->data.transposeInPlace();
219 qint32 countComp = p_pFiffInfo->comps.size();
222 switch (t_pTag->kind) {
225 p_pFiffInfo->comps.append(comp);
226 p_pFiffInfo->comps[countComp].ctfkind = *(t_pTag->toInt());
228 if (p_pFiffInfo->comps[countComp].ctfkind == 1194410578)
229 p_pFiffInfo->comps[countComp].kind = 1;
230 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194476114)
231 p_pFiffInfo->comps[countComp].kind = 2;
232 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194541650)
233 p_pFiffInfo->comps[countComp].kind = 3;
234 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194479433)
235 p_pFiffInfo->comps[countComp].kind = 4;
236 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194544969)
237 p_pFiffInfo->comps[countComp].kind = 5;
239 p_pFiffInfo->comps[countComp].kind = p_pFiffInfo->comps[countComp].ctfkind;
242 p_pFiffInfo->comps[countComp].save_calibrated = *(t_pTag->toInt());
245 p_pFiffInfo->comps[countComp].data->nrow = *(t_pTag->toInt());
248 p_pFiffInfo->comps[countComp].data->ncol = *(t_pTag->toInt());
251 row_names = t_pTag->toString();
252 if (!row_names.isEmpty())
256 col_names = t_pTag->toString();
257 if (!col_names.isEmpty())
262 p_pFiffInfo->comps[countComp].data->data = t_pTag->toFloatMatrix().transpose().cast<
double>();
282 switch (t_pTag->kind) {
284 p_pFiffInfo->sfreq = *(t_pTag->toFloat());
287 p_pFiffInfo->linefreq = *(t_pTag->toFloat());
290 p_pFiffInfo->highpass = *(t_pTag->toFloat());
293 p_pFiffInfo->lowpass = *(t_pTag->toFloat());
296 p_pFiffInfo->nchan = *(t_pTag->toInt());
299 p_pFiffInfo->meas_date[0] = t_pTag->toInt()[0];
300 p_pFiffInfo->meas_date[1] = t_pTag->toInt()[1];
303 p_pFiffInfo->proj_id = *t_pTag->toInt();
306 p_pFiffInfo->proj_name = t_pTag->toString();
309 p_pFiffInfo->xplotter_layout = t_pTag->toString();
312 p_pFiffInfo->experimenter = t_pTag->toString();
315 p_pFiffInfo->description = t_pTag->toString();
318 p_pFiffInfo->gantry_angle = *t_pTag->toInt();
321 p_pFiffInfo->utc_offset = t_pTag->toString();
326 p_pFiffInfo->chs.append(t_pTag->toChInfo());
330 qInfo(
"FIFF_BLOCK_END FIFFB_MEAS_INFO");
331 t_bReadMeasBlockEnd =
true;
339 for (qint32 c = 0; c < p_pFiffInfo->nchan; ++c)
340 p_pFiffInfo->ch_names << p_pFiffInfo->chs[c].ch_name;
341 calibrateCompensators(*p_pFiffInfo);
353 bool t_bReadMeasBlockStart =
false;
354 bool t_bReadMeasBlockEnd =
false;
355 QString col_names, row_names;
362 while (!t_bReadMeasBlockStart) {
365 qInfo(
"FIFF_BLOCK_START FIFFB_MEAS_INFO");
366 t_bReadMeasBlockStart =
true;
374 bool dev_head_t_read =
false;
375 bool ctf_head_t_read =
false;
377 while (!t_bReadMeasBlockEnd) {
386 p_pFiffInfo->acq_pars = t_pTag->toString();
388 p_pFiffInfo->acq_stim = t_pTag->toString();
395 if (!dev_head_t_read) {
396 p_pFiffInfo->dev_head_t = t_pTag->toCoordTrans();
397 dev_head_t_read =
true;
398 }
else if (!ctf_head_t_read) {
399 p_pFiffInfo->ctf_head_t = t_pTag->toCoordTrans();
400 ctf_head_t_read =
true;
411 p_pFiffInfo->dig.append(t_pTag->toDigPoint());
412 p_pDigData->points.append(t_pTag->toDigPoint());
415 p_pDigData->coord_frame = *t_pTag->toInt();
427 qint32 countProj = p_pFiffInfo->projs.size();
430 switch (t_pTag->kind) {
433 p_pFiffInfo->projs.append(proj);
434 p_pFiffInfo->projs[countProj].desc = t_pTag->toString();
437 p_pFiffInfo->projs[countProj].kind = *(t_pTag->toInt());
440 p_pFiffInfo->projs[countProj].data->ncol = *(t_pTag->toInt());
443 p_pFiffInfo->projs[countProj].data->nrow = *(t_pTag->toInt());
446 p_pFiffInfo->projs[countProj].active = *(t_pTag->toInt());
453 p_pFiffInfo->projs[countProj].data->data = t_pTag->toFloatMatrix().transpose().cast<
double>();
461 for (qint32 i = 0; i < p_pFiffInfo->projs.size(); ++i) {
462 if (p_pFiffInfo->projs[i].data->data.rows() != p_pFiffInfo->projs[i].data->nrow)
463 p_pFiffInfo->projs[i].data->data.transposeInPlace();
474 qint32 countComp = p_pFiffInfo->comps.size();
477 switch (t_pTag->kind) {
480 p_pFiffInfo->comps.append(comp);
481 p_pFiffInfo->comps[countComp].ctfkind = *(t_pTag->toInt());
483 if (p_pFiffInfo->comps[countComp].ctfkind == 1194410578)
484 p_pFiffInfo->comps[countComp].kind = 1;
485 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194476114)
486 p_pFiffInfo->comps[countComp].kind = 2;
487 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194541650)
488 p_pFiffInfo->comps[countComp].kind = 3;
489 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194479433)
490 p_pFiffInfo->comps[countComp].kind = 4;
491 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194544969)
492 p_pFiffInfo->comps[countComp].kind = 5;
494 p_pFiffInfo->comps[countComp].kind = p_pFiffInfo->comps[countComp].ctfkind;
497 p_pFiffInfo->comps[countComp].save_calibrated = *(t_pTag->toInt());
500 p_pFiffInfo->comps[countComp].data->nrow = *(t_pTag->toInt());
503 p_pFiffInfo->comps[countComp].data->ncol = *(t_pTag->toInt());
506 row_names = t_pTag->toString();
507 if (!row_names.isEmpty())
511 col_names = t_pTag->toString();
512 if (!col_names.isEmpty())
517 p_pFiffInfo->comps[countComp].data->data = t_pTag->toFloatMatrix().transpose().cast<
double>();
537 switch (t_pTag->kind) {
539 p_pFiffInfo->sfreq = *(t_pTag->toFloat());
542 p_pFiffInfo->linefreq = *(t_pTag->toFloat());
545 p_pFiffInfo->highpass = *(t_pTag->toFloat());
548 p_pFiffInfo->lowpass = *(t_pTag->toFloat());
551 p_pFiffInfo->nchan = *(t_pTag->toInt());
554 p_pFiffInfo->meas_date[0] = t_pTag->toInt()[0];
555 p_pFiffInfo->meas_date[1] = t_pTag->toInt()[1];
558 p_pFiffInfo->proj_id = *t_pTag->toInt();
561 p_pFiffInfo->proj_name = t_pTag->toString();
564 p_pFiffInfo->xplotter_layout = t_pTag->toString();
567 p_pFiffInfo->experimenter = t_pTag->toString();
570 p_pFiffInfo->description = t_pTag->toString();
573 p_pFiffInfo->gantry_angle = *t_pTag->toInt();
576 p_pFiffInfo->utc_offset = t_pTag->toString();
581 p_pFiffInfo->chs.append(t_pTag->toChInfo());
585 qInfo(
"FIFF_BLOCK_END FIFFB_MEAS_INFO");
586 t_bReadMeasBlockEnd =
true;
594 for (qint32 c = 0; c < p_pFiffInfo->nchan; ++c)
595 p_pFiffInfo->ch_names << p_pFiffInfo->chs[c].ch_name;
596 calibrateCompensators(*p_pFiffInfo);
598 p_pDigData->npoint = p_pDigData->points.size();
600 for (
int k = 0; k < p_pDigData->npoint; k++) {
601 p_pDigData->active.append(1);
602 p_pDigData->discard.append(0);
605 return MetaData(p_pFiffInfo, p_pDigData);