81#if defined(_WIN32) || defined(_WIN64)
82#define snprintf _snprintf
83#define vsnprintf _vsnprintf
84#define strcasecmp _stricmp
85#define strncasecmp _strnicmp
88#define MIN(a,b) ((a) < (b) ? (a) : (b))
89#define MAX(a,b) ((a) > (b) ? (a) : (b))
91#define MALLOC_9(x,t) (t *)malloc((x)*sizeof(t))
92#define REALLOC_9(x,y,t) (t *)((x == NULL) ? malloc((y)*sizeof(t)) : realloc((x),(y)*sizeof(t)))
94#define FREE_9(x) if ((char *)(x) != NULL) free((char *)(x))
96#define ALLOC_CMATRIX_9(x,y) mne_cmatrix_9((x),(y))
98#define FREE_CMATRIX_9(m) mne_free_cmatrix_9((m))
102 for (
int i = 0; i < m; ++i)
103 for (
int j = 0; j < n; ++j)
104 to_mat[i][j] = from_mat(i,j);
120static void matrix_error_9(
int kind,
int nr,
int nc)
124 printf(
"Failed to allocate memory pointers for a %d x %d matrix\n",nr,nc);
126 printf(
"Failed to allocate memory for a %d x %d matrix\n",nr,nc);
128 printf(
"Allocation error for a %d x %d matrix\n",nr,nc);
129 if (
sizeof(
void *) == 4) {
130 printf(
"This is probably because you seem to be using a computer with 32-bit architecture.\n");
131 printf(
"Please consider moving to a 64-bit platform.");
133 printf(
"Cannot continue. Sorry.\n");
145 if (!m) matrix_error_9(1,nr,nc);
147 if (!whole) matrix_error_9(2,nr,nc);
186 for (k = 0; k < this_buf->
nbuf; k++)
215 if (!s.isEmpty() && s.size() > 0) {
220 nlistp = list.size();
229 int nlist = list.size();
231 if (nlist == 0 || list.isEmpty())
234 for (
int k = 0; k < nlist-1; k++) {
238 res += list[nlist-1];
252 for (
int k = 0; k < nch; k++)
253 names.append(chs[k].ch_name);
281 if (tmp_node->parent == NULL)
283 tmp_node = tmp_node->parent;
298 if (tmp_node->parent == NULL)
300 tmp_node = tmp_node->parent;
302 for (k = 0; k < tmp_node->nchild(); k++)
304 return (tmp_node->children[k]);
320 if (tmp_node->parent == NULL)
322 tmp_node = tmp_node->parent;
333 QList<FiffDirEntry::SPtr> ent = start->dir;
334 for (k = 0; k < start->nent(); k++)
336 if (stream->read_tag(t_pTag,ent[k]->pos)) {
337 return t_pTag->toString();
340 return QString(
"No comment");
345 QString& namep,
int *typep)
350 QList<FiffDirEntry::SPtr> ent = start->dir;
351 QString res =
"unknown";
354 for (k = 0; k < start->nent(); k++)
356 if (stream->read_tag(t_pTag,ent[k]->pos)) {
357 type = *t_pTag->toInt();
366 res =
"single trace";
375 res =
"alt. average";
378 res =
"power density spectrum";
381 res =
"dipole amplitudes";
402 if (!(meas_info = find_meas_info_9(node))) {
405 for (k = 0; k < meas_info->nent();k++) {
406 kind = meas_info->dir[k]->kind;
407 pos = meas_info->dir[k]->pos;
410 if (stream->read_tag(t_pTag,pos)) {
412 time_t time = meas_date->
secs;
415 ltime = localtime(&time);
417 (void)strftime(res,
MAXDATE,
"%x %X",ltime);
433 QList<FIFFLIB::FiffChInfo>& chp,
441 QList<FIFFLIB::FiffChInfo> ch;
446 QList<FiffDirNode::SPtr> hpi;
457 if (!(meas = find_meas_9(node))) {
458 printf (
"Meas. block not found!");
461 if (!(meas_info = find_meas_info_9(node))) {
462 printf (
"Meas. info not found!");
468 if (!meas->id.isEmpty()) {
470 (*id)->version = meas->id.version;
471 (*id)->machid[0] = meas->id.machid[0];
472 (*id)->machid[1] = meas->id.machid[1];
473 (*id)->time = meas->id.time;
480 for (k = 0; k < meas_info->nent(); k++) {
481 kind = meas_info->dir[k]->kind;
482 pos = meas_info->dir[k]->pos;
486 if (!stream->read_tag(t_pTag,pos))
488 *nchan = *t_pTag->toInt();
490 for (j = 0; j < *nchan; j++) {
494 to_find = to_find + *nchan - 1;
498 if (!stream->read_tag(t_pTag,pos))
500 *sfreq = *t_pTag->toFloat();
505 if (!stream->read_tag(t_pTag,pos))
510 **meas_date = *(
FiffTime*)t_pTag->data();
514 if (!stream->read_tag(t_pTag,pos))
516 *lowpass = *t_pTag->toFloat();
521 if (!stream->read_tag(t_pTag,pos))
523 *highpass = *t_pTag->toFloat();
529 if (!stream->read_tag(t_pTag,pos))
532 this_ch = t_pTag->toChInfo();
534 qCritical (
"FIFF_CH_INFO : scan # out of range!");
538 ch[this_ch.
scanNo-1] = this_ch;
543 if (!stream->read_tag(t_pTag,pos))
562 if (hpi.size() > 0 && trans->
isEmpty())
563 for (k = 0; k < hpi[0]->nent(); k++)
565 if (!stream->read_tag(t_pTag,hpi[0]->dir[k]->pos))
578 *lowpass = *sfreq/2.0;
586 printf (
"Not all essential tags were found!");
612 while (node != NULL) {
613 for (k = 0; k < node->nent(); k++)
615 kind_1 = node->dir[k]->kind;
616 pos = node->dir[k]->pos;
617 if (kind_1 == kind) {
619 if (!stream->read_tag(t_pTag,pos)) {
626 for(
int k = 0; k < t_pTag->size(); ++k )
627 tmp[k] = tmp_current[k];
634 if (node == high_node)
678 nave = *(
int *)tempb;
680 if (find_between (stream,tmp_node,tmp_node->parent,
684 sfreq = *(
float *)tempb;
687 if (find_between (stream,tmp_node,tmp_node->parent,
691 akind = *(
int *)tempb;
698 tmp_node = tmp_node->parent;
701 for (k = 0; k < tmp_node->dir_tree.size(); k++) {
702 kind = tmp_node->dir_tree[k]->kind;
703 pos = tmp_node->dir_tree[k]->pos;
707 if (!stream->read_tag(t_pTag,pos))
709 first = *t_pTag->toInt(); to_find--;
713 if (!stream->read_tag(t_pTag,pos))
715 last = *t_pTag->toInt(); to_find--;
719 if (!stream->read_tag(t_pTag,pos))
721 my_nsamp = *t_pTag->toInt(); to_find--;
725 if (!stream->read_tag(t_pTag,pos))
727 my_tmin = *t_pTag->toFloat(); to_find--;
730 if (!stream->read_tag(t_pTag,pos))
732 qDebug() <<
"TODO: check whether artefs contains the right stuff -> use MatrixXi instead";
733 artefs = t_pTag->toInt();
734 nartef = t_pTag->size()/(3*
sizeof(int));
739 printf (
"Not all essential tags were found!");
742 if (first != -1 && last != -1) {
743 nsamp = (last)-(first)+1;
744 tmin = (first)/(sfreq);
746 else if (my_tmin != -1 && my_nsamp != -1) {
751 printf(
"Not enough data for time scale definition!");
764 QList<FiffChInfo>& chp)
770 QList<FiffChInfo> new_ch;
771 int new_nchan = *nchan;
778 if (!(evoked_node = find_evoked(node))) {
784 if(evoked_node->find_tag(stream,
FIFF_NCHAN, t_pTag))
785 new_nchan = *t_pTag->toInt();
789 for (k = 0; k < evoked_node->nent(); k++) {
790 kind = evoked_node->dir[k]->kind;
791 pos = evoked_node->dir[k]->pos;
793 if (new_ch.isEmpty()) {
795 for (
int i = 0; i < to_find; i++) {
799 if (!stream->read_tag(t_pTag,pos))
802 this_ch = t_pTag->toChInfo();
803 if (this_ch.
scanNo <= 0 || this_ch.
scanNo > new_nchan) {
804 printf (
"FIFF_CH_INFO : scan # out of range!");
808 new_ch[this_ch.
scanNo-1] = this_ch;
813 printf(
"All channels were not specified "
814 "at the FIFFB_EVOKED level.");
823 if (!new_ch.isEmpty()) {
831static void unpack_data(
double offset,
838 for (k = 0; k < nsamp; k++)
839 orig[k] = scale * packed[k] + offset;
845 int nchan,
int nsamp)
854 float **epochs = NULL;
858 for (k = 0, ch = 0; k < node->nent() && ch < nchan; k++) {
859 kind = node->dir[k]->kind;
860 pos = node->dir[k]->pos;
862 if (!stream->read_tag(t_pTag,pos))
866 printf(
"Epochs in matrix should be floats!");
871 QVector<qint32> dims;
872 t_pTag->getMatrixDimensions(ndim, dims);
875 printf(
"Data matrix dimension should be two!");
878 if (dims[0] != nsamp) {
879 printf(
"Incorrect number of samples in data matrix!");
882 if (dims[1] != nchan) {
883 printf(
"Incorrect number of channels in data matrix!");
886 MatrixXf tmp_epochs = t_pTag->toFloatMatrix().transpose();
896 offset = ((
float *)t_pTag->data())[0];
897 scale = ((
float *)t_pTag->data())[1];
898 packed = (
short *)(((
float *)t_pTag->data())+2);
899 unpack_data(offset,scale,packed,nsamp,epochs[ch++]);
902 memcpy(epochs[ch++],t_pTag->data(),nsamp*
sizeof(
float));
904 printf (
"Unknown data packing type!");
914 printf (
"All epochs were not found!");
926 QList<FiffDirNode::SPtr>& nodesp,
928 QStringList* commentsp)
933 QList<FiffDirNode::SPtr> evoked;
934 QList<FiffDirNode::SPtr> meas;
935 QList<FiffDirNode::SPtr> nodes;
936 int evoked_count,count;
937 QString part,type,meas_date;
938 QStringList comments;
947 meas = stream->dirtree()->dir_tree_find(
FIFFB_MEAS);
951 for (count = 0,p = 0; p < meas.size(); p++) {
956 for (evoked_count = 0, j = 0; j < evoked.size(); j++) {
957 for (k = 0; k < evoked[j]->nchild(); k++) {
966 types =
REALLOC_9(types,count+evoked_count+1,
int);
970 for (j = 0; j < evoked.size(); j++)
971 for (k = 0; k < evoked[j]->nchild(); k++)
973 meas_date = get_meas_date(stream,evoked[j]);
974 part = get_comment(stream,evoked[j]);
975 get_aspect_name_type(stream,evoked[j]->children[k],type,types+count);
976 if (!meas_date.isEmpty()) {
977 comments.append(QString(
"%1>%2>%3").arg(meas_date).arg(part).arg(type));
980 comments.append(QString(
"%1>%2").arg(part).arg(type));
982 nodes.append(evoked[j]->children[k]);
990 *commentsp = comments;
992 *aspect_typesp = NULL;
1000 *commentsp = comments;
1004 *aspect_typesp = types;
1014 QList<FiffDirNode::SPtr> evoked;
1019static void remove_artefacts (
float *resp,
1032 for (k = 0; k < nartef; k++) {
1039 start = artefs[3*k+1];
1040 end = artefs[3*k+2];
1041 start =
MAX(0,
MIN(start,nsamp));
1042 end =
MAX(0,
MIN(end,nsamp));
1048 a = resp[end] - resp[start];
1049 for (j = 0; j <=start; j++)
1050 resp[j] = resp[j] + a;
1051 for (j = start+1 ; j < end; j++)
1052 resp[j] = resp[end];
1055 a = (resp[end]-resp[start])/(end-start);
1056 b = (resp[start]*end - resp[end]*start)/(end-start);
1057 for (j = start+1 ; j < end; j++)
1071 QList<FiffChInfo>& chsp,
1091 QList<FiffDirNode::SPtr> evoked;
1094 QStringList comments;
1097 QList<FiffChInfo> chs;
1100 float **epochs = NULL;
1107 float highpass = 0.0;
1116 printf (
"Evoked response selector must be positive!");
1126 evoked =
mne_find_evoked(stream,(commentp == NULL) ? NULL : &comments);
1127 if (!evoked.size()) {
1128 printf (
"No evoked response data available here");
1132 nset = evoked.size();
1135 start = evoked[setno];
1138 printf (
"Too few evoked response data sets (how come?)");
1144 if (get_meas_info (stream,
1161 if (get_evoked_essentials(stream,start,sfreq,
1162 tmin,nsamp,nave,aspect_kind,
1163 artefs,nartef) == -1)
1168 if (get_evoked_optional(stream,
1176 if ((epochs = get_epochs(stream,start,nchan,nsamp)) == NULL)
1181 for (k = 0; k < nartef; k++) {
1182 qDebug() <<
"TODO: Artefact Vectors do not contain the right stuff!";
1183 artefs[2*k+1] = artefs[2*k+1] - sfreq*tmin;
1184 artefs[2*k+2] = artefs[2*k+2] - sfreq*tmin;
1186 for (k = 0; k < nchan; k++) {
1188 for (j = 0; j < nsamp; j++)
1189 epoch[j] = chs[k].cal*epoch[j];
1190 remove_artefacts(epoch,nsamp,artefs,nartef);
1200 *epochsp = epochs; epochs = NULL;
1205 *commentp = comments[setno];
1206 comments[setno] =
"";
1209 *highpassp = highpass;
1211 *lowpassp = lowpass;
1219 *aspect_kindp = aspect_kind;
1225 *meas_datep = meas_date;
1255 secs =
id->time.secs;
1256 ltime = localtime(&secs);
1257 (void)strftime(buf,
MAXBUF,
"%c",ltime);
1264 QList<FiffChInfo>& megp,
1266 QList<FiffChInfo>& meg_compp,
1268 QList<FiffChInfo>& eegp,
1280 QList<FiffChInfo> chs;
1282 QList<FiffChInfo> meg;
1284 QList<FiffChInfo> meg_comp;
1286 QList<FiffChInfo> eeg;
1289 QList<FiffDirNode::SPtr> nodes;
1302 if (nodes.size() == 0) {
1304 if (nodes.size() == 0) {
1305 qCritical (
"Could not find the channel information.");
1311 for (k = 0; k < info->nent(); k++) {
1312 kind = info->dir[k]->kind;
1313 pos = info->dir[k]->pos;
1316 if (!stream->read_tag(t_pTag,pos))
1318 nchan = *t_pTag->toInt();
1320 for (j = 0; j < nchan; j++) {
1328 if(!stream->read_tag(t_pTag, pos))
1331 *
id = *(
fiffId)t_pTag->data();
1335 if(!stream->read_tag(t_pTag, pos))
1344 if(!stream->read_tag(t_pTag, pos))
1347 this_ch = t_pTag->toChInfo();
1349 printf (
"FIFF_CH_INFO : scan # out of range %d (%d)!",this_ch.
scanNo,nchan);
1353 chs[this_ch.
scanNo-1] = this_ch;
1359 qCritical(
"Some of the channel information was missing.");
1362 if (t.
isEmpty() && meg_head_t != NULL) {
1368 qCritical(
"MEG -> head coordinate transformation not found.");
1375 for (k = 0; k < nchan; k++) {
1380 meg_comp.append(chs[k]);
1395 meg_compp = meg_comp;
1397 *nmeg_compp = nmeg_comp;
1409 if (meg_head_t == NULL) {
1430 QList<FiffDirNode::SPtr> temp;
1436 if (pNode->isEmpty())
1437 node = stream->dirtree();
1442 if (temp.size() > 0) {
1447 names = t_pTag->toString();
1512 for (k = 0; k <
nset; k++)
1527 float sfreq,tmin,tmax;
1541 else if (bmin > tmax)
1544 for (b1 = 0; b1/
sfreq + tmin < bmin; b1++)
1548 else if (b1 > this->
current->np)
1553 else if (bmax > tmax)
1556 for (b2 = this->
current->np; b2/
sfreq + tmin > bmax; b2--)
1560 else if (b2 > this->
current->np)
1565 for (c = 0; c < this->nchan; c++) {
1566 for (s = b1, ave = 0.0; s < b2; s++)
1569 this->
current->baselines[c] += ave;
1570 for (s = 0; s < this->
current->np; s++)
1571 data[s][c] = data[s][c] - ave;
1573 qDebug() <<
"TODO: Check comments content";
1574 printf(
"\t%s : using baseline %7.1f ... %7.1f ms\n",
1575 this->
current->comment.toUtf8().constData() ? this->current->comment.toUtf8().constData() :
"unknown",
1576 1000*(tmin+b1/
sfreq),
1577 1000*(tmin+b2/
sfreq));
1588 const QStringList& namesp,
1598 QList<FiffChInfo>
chs;
1599 int nchan_file,nsamp;
1600 float dtmin,dtmax,
sfreq;
1602 float **data = NULL;
1609 QString stim14_name;
1623 float *source,tmin,tmax;
1630 if (stim14_name.isEmpty() || stim14_name.size() == 0)
1637 names =
op->eigen_fields->collist;
1641 names =
fwd->collist;
1648 if (names.isEmpty())
1676 printf(
"\tWarning: data set consistency check is still in the works.\n");
1684 for (k = 0; k <
nchan; k++)
1686 for (c = 0; c < nchan_file; c++) {
1687 for (k = 0; k <
nchan; k++) {
1688 if (sel[k] == -1 && QString::compare(
chs[c].ch_name,names[k]) == 0) {
1693 if (QString::compare(stim14_name,
chs[c].ch_name) == 0) {
1697 for (k = 0; k <
nchan; k++)
1699 printf(
"All channels needed were not in the MEG/EEG data file "
1700 "(first missing: %s).",names[k].toUtf8().constData());
1706 for (c = 0,
nchan = 0; c < nchan_file; c++) {
1711 if (QString::compare(stim14_name,
chs[c].ch_name) == 0) {
1722 dtmax = dtmin + (np-1)/
sfreq;
1728 printf(
"\tData time range: %8.1f ... %8.1f ms\n",1000*tmin,1000*tmax);
1735 new_data->
meas_id = id;
id = NULL;
1755 new_data->
meg_head_t = std::make_unique<FiffCoordTrans>(t);
1757 printf(
"\tUsing MEG <-> head transform from the present data set\n");
1759 if (
op != NULL &&
op->mri_head_t && !
op->mri_head_t->isEmpty()) {
1760 new_data->
mri_head_t = std::make_unique<FiffCoordTrans>(*
op->mri_head_t);
1761 printf(
"\tPicked MRI <-> head transform from the inverse operator\n");
1766 for (k = 0; k <
nchan; k++) {
1768 new_data->
chs[k] =
chs[sel[k]];
1774 new_data->
proj =
op->proj->dup();
1778 printf(
"\tLoaded projection from %s:\n",name.toUtf8().data());
1779 QTextStream errStream(stderr);
1783 if (!new_data->
comp)
1785 if (new_data->
comp->ncomp > 0)
1786 printf(
"\tRead %d compensation data sets from %s\n",new_data->
comp->ncomp,name.toUtf8().data());
1795 for (k = 0; k < new_data->
nchan; k++)
1799 for (b = 0; b < new_data->
nbad; b++) {
1800 for (k = 0; k < new_data->
nchan; k++) {
1801 if (QString::compare(new_data->
chs[k].ch_name,new_data->
badlist[b],Qt::CaseInsensitive) == 0) {
1807 printf(
"\t%d bad channels read from %s%s",new_data->
nbad,name.toUtf8().data(),new_data->
nbad > 0 ?
":\n" :
"\n");
1808 if (new_data->
nbad > 0) {
1810 for (k = 0; k < new_data->
nbad; k++)
1811 printf(
"%s%c",new_data->
badlist[k].toUtf8().constData(),k < new_data->
nbad-1 ?
' ' :
'\n');
1820 dataset->
tmin = tmin;
1822 dataset->
first = n1;
1824 dataset->
nave = nave;
1825 dataset->
kind = aspect_kind;
1827 dataset->
comment = comment; comment.clear();
1832 for (k = 0; k <
nchan; k++) {
1833 source = data[sel[k]];
1837 for (p = 0; p < np; p++)
1838 dataset->
data[p][k] = source[p+n1];
1846 source = data[stim14];
1847 for (p = 0; p < np; p++)
1848 dataset->
stim14[p] = source[p+n1]/
chs[stim14].cal;
1850 new_data->
sets.append(dataset); dataset = NULL;
1855 printf(
"\t%s dataset %s from %s\n",
1856 add_to ?
"Added" :
"Loaded",
1857 new_data->
sets[new_data->
nset-1]->comment.toUtf8().constData() ? new_data->
sets[new_data->
nset-1]->comment.toUtf8().constData() :
"unknown",name.toUtf8().data());
1864 if (res == NULL && !add_to)
1878 const QStringList& namesp,
#define FIFFV_COORD_DEVICE
#define FIFF_MNE_CH_NAME_LIST
#define FIFFB_MNE_PARENT_MEAS_FILE
#define FIFFB_MNE_BAD_CHANNELS
#define FIFFV_ARTEF_NOJUMP
#define FIFF_PARENT_BLOCK_ID
#define FIFF_FIRST_SAMPLE
#define FIFFV_ASPECT_AVERAGE
#define FIFFV_ASPECT_DIPOLE_WAVE
#define FIFFV_ASPECT_SUBAVERAGE
#define FIFFV_ASPECT_SAMPLE
#define FIFFV_ASPECT_STD_ERR
#define FIFF_ARTEF_REMOVAL
#define FIFFV_ASPECT_ALTAVERAGE
#define FIFFV_ASPECT_POWER_DENSITY
#define FIFFV_ASPECT_SINGLE
Old fiff_type declarations - replace them.
FiffCoordTrans class declaration.
Legacy MNE-C constants and common typedefs.
#define MNE_ENV_TRIGGER_CH
Environment variable overriding the trigger channel name.
#define MNE_DEFAULT_TRIGGER_CH
Default digital trigger channel name.
MNENamedMatrix class declaration.
MNE Meas Data Set (MNEMeasDataSet) class declaration.
MNE Meas Data (MNEMeasData) class declaration.
int mne_read_meg_comp_eeg_ch_info_9(const QString &name, QList< FiffChInfo > &megp, int *nmegp, QList< FiffChInfo > &meg_compp, int *nmeg_compp, QList< FiffChInfo > &eegp, int *neegp, FiffCoordTrans *meg_head_t, fiffId *idp)
int mne_find_evoked_types_comments(FiffStream::SPtr &stream, QList< FiffDirNode::SPtr > &nodesp, int **aspect_typesp, QStringList *commentsp)
#define REALLOC_9(x, y, t)
int mne_read_bad_channel_list_from_node_9(FiffStream::SPtr &stream, const FiffDirNode::SPtr &pNode, QStringList &listp, int &nlistp)
void mne_free_cmatrix_9(float **m)
QString mne_channel_names_to_string_9(const QList< FIFFLIB::FiffChInfo > &chs, int nch)
#define FREE_CMATRIX_9(m)
char * mne_format_file_id(fiffId id)
void mne_channel_names_to_name_list_9(const QList< FIFFLIB::FiffChInfo > &chs, int nch, QStringList &listp, int &nlistp)
void fromFloatEigenMatrix_9(const Eigen::MatrixXf &from_mat, float **&to_mat, const int m, const int n)
#define ALLOC_CMATRIX_9(x, y)
QList< FiffDirNode::SPtr > mne_find_evoked(FiffStream::SPtr &stream, QStringList *commentsp)
void mne_ch_selection_free_9(mneChSelection s)
int mne_read_bad_channel_list_9(const QString &name, QStringList &listp, int &nlistp)
void mne_free_ring_buffer_9(void *thisp)
float ** mne_cmatrix_9(int nr, int nc)
int mne_read_evoked(const QString &name, int setno, int *nchanp, int *nsampp, float *tminp, float *sfreqp, QList< FiffChInfo > &chsp, float ***epochsp, QString *commentp, float *highpassp, float *lowpassp, int *navep, int *aspect_kindp, FiffCoordTrans *transp, fiffId *idp, FiffTime **meas_datep)
QString mne_name_list_to_string_9(const QStringList &list)
void mne_string_to_name_list_9(const QString &s, QStringList &listp, int &nlistp)
Core MNE data structures (source spaces, source estimates, hemispheres).
MNEChSelection * mneChSelection
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
FiffId * fiffId
Backward-compatible pointer typedef for the old fiffId pointer.
FiffDirEntry * fiffDirEntry
Backward-compatible pointer typedef for the old fiffDirEntry pointer.
FiffId fiffIdRec
Backward-compatible typedef for the old fiffIdRec struct.
unsigned char fiff_byte_t
Inverse source estimation (MNE, dSPM, sLORETA, dipole fitting).
struct INVERSELIB::ringBufBuf_9 ringBufBufRec_9
struct INVERSELIB::ringBuf_9 ringBufRec_9
Coordinate transformation description.
QSharedPointer< FiffDirNode > SPtr
static QStringList split_name_list(QString p_sNameList)
QSharedPointer< FiffStream > SPtr
QSharedPointer< FiffTag > SPtr
Time stamp record storing seconds and microseconds since epoch.
MNE inverse operator combining noise covariance, forward solution, and source covariance for source e...
Single ring buffer entry holding a float array and a pointer to its matrix view.
Circular buffer managing a fixed-size pool of ringBufBuf_9 entries for streaming data reuse.
static MNEMeasData * mne_read_meas_data_add(const QString &name, int set, MNEInverseOperator *op, MNELIB::MNENamedMatrix *fwd, const QStringList &namesp, int nnamesp, MNEMeasData *add_to)
std::unique_ptr< FIFFLIB::FiffCoordTrans > mri_head_t
void adjust_baselines(float bmin, float bmax)
QList< FIFFLIB::FiffChInfo > chs
MNELIB::MNENamedMatrix * fwd
FIFFLIB::FiffTime meas_date
QList< MNEMeasDataSet * > sets
static MNEMeasData * mne_read_meas_data(const QString &name, int set, MNEInverseOperator *op, MNELIB::MNENamedMatrix *fwd, const QStringList &namesp, int nnamesp)
std::unique_ptr< MNELIB::MNECTFCompDataSet > comp
std::unique_ptr< FIFFLIB::FiffCoordTrans > meg_head_t
MNELIB::mneChSelection chsel
Single measurement epoch or average within MNEMeasData, including data matrix and projectors.
QStringList chspick_nospace
static std::unique_ptr< MNECTFCompDataSet > read(const QString &name)
A dense matrix with named rows and columns.
static MNEProjOp * read(const QString &name)
void report(QTextStream &out, const char *tag)
static FiffCoordTrans readMeasTransform(const QString &name)
static FiffCoordTrans readFromTag(const QSharedPointer< FiffTag > &tag)
MNE Inverse Operator (MNEInverseOperator) class declaration.