48#define _USE_MATH_DEFINES
75#define MALLOC_36(x,t) (t *)malloc((x)*sizeof(t))
76#define REALLOC_36(x,y,t) (t *)((x == NULL) ? malloc((y)*sizeof(t)) : realloc((x),(y)*sizeof(t)))
78#define ALLOC_CMATRIX_36(x,y) mne_cmatrix_36((x),(y))
80#if defined(_WIN32) || defined(_WIN64)
81#define snprintf _snprintf
82#define vsnprintf _vsnprintf
83#define strcasecmp _stricmp
84#define strncasecmp _strnicmp
87static void matrix_error(
int kind,
int nr,
int nc)
91 printf(
"Failed to allocate memory pointers for a %d x %d matrix\n",nr,nc);
93 printf(
"Failed to allocate memory for a %d x %d matrix\n",nr,nc);
95 printf(
"Allocation error for a %d x %d matrix\n",nr,nc);
96 if (
sizeof(
void *) == 4) {
97 printf(
"This is probably because you seem to be using a computer with 32-bit architecture.\n");
98 printf(
"Please consider moving to a 64-bit platform.");
100 printf(
"Cannot continue. Sorry.\n");
112 if (!m) matrix_error(1,nr,nc);
114 if (!whole) matrix_error(2,nr,nc);
121#define FREE_36(x) if ((char *)(x) != NULL) free((char *)(x))
123#define FREE_CMATRIX_36(m) mne_free_cmatrix_36((m))
153 :
entries(static_cast<size_t>(nslots))
164 e.
user->resize(0, 0);
165 res->resize(nrow, ncol);
178 if (list == NULL || nlist == 0)
180 for (k = 0; k < nlist; k++) {
182 printf(
"%d %s\n",k,list[k]);
199 if (!s.isEmpty() && s.size() > 0) {
204 nlistp = list.size();
213 int nlist = list.size();
215 if (nlist == 0 || list.isEmpty())
218 for (
int k = 0; k < nlist-1; k++) {
222 res += list[nlist-1];
236 for (
int k = 0; k < nch; k++)
237 names.append(chs[k].ch_name);
271 :
freq_resp(static_cast<size_t>(resp_size), 1.0f)
307 printf(
"##################### DEBUG Error: FFT analysis needs to be implemented");
318 printf(
"##################### DEBUG Error: FFT synthesis needs to be implemented");
331 printf(
"Incorrect data length in apply_filter");
348 if (dc_offset != 0.0) {
350 data[k] = data[k] - dc_offset;
364 n = ns % 2 == 0 ? ns/2 : (ns+1)/2;
373 data[p] = data[p]*freq_resp[0]; p++;
377 for (k = 1 ; k < n ; k++) {
378 data[p] = data[p]*freq_resp[k]; p++;
379 data[p] = data[p]*freq_resp[k]; p++;
385 data[p] = data[p]*freq_resp[k];
394 int *highpass_effective)
401 int highpasss,lowpasss;
402 int highpass_widths,lowpass_widths;
403 float lowpass,highpass,lowpass_width,highpass_width;
405 float pi4 =
M_PI/4.0;
410 auto filter_data = std::make_unique<FilterData>(resp_size);
411 *highpass_effective =
FALSE;
413 for (f = 0; f < 2; f++) {
418 freq_resp = f == 0 ? filter_data->freq_resp.data() : filter_data->eog_freq_resp.data();
422 highpasss = ((resp_size-1)*highpass)/(0.5*sfreq);
423 lowpasss = ((resp_size-1)*lowpass)/(0.5*sfreq);
425 lowpass_widths = ((resp_size-1)*lowpass_width)/(0.5*sfreq);
426 lowpass_widths = (lowpass_widths+1)/2;
429 highpass_widths = ((resp_size-1)*highpass_width)/(0.5*sfreq);
430 highpass_widths = (highpass_widths+1)/2;
436 printf(
"filter : %7.3f ... %6.1f Hz bins : %d ... %d of %d hpw : %d lpw : %d\n",
445 if (highpasss > highpass_widths + 1) {
449 for (k = 0; k < highpasss-w+1; k++)
451 for (k = -w+1, s = highpasss-w+1; k < w; k++, s++) {
452 if (s >= 0 && s < resp_size) {
453 c = cos(pi4*(k*mult+add));
454 freq_resp[s] = freq_resp[s]*c*c;
457 *highpass_effective =
TRUE;
460 *highpass_effective = *highpass_effective || (filter.
highpass == 0.0);
462 if (lowpass_widths > 0) {
466 for (k = -w+1, s = lowpasss-w+1; k < w; k++, s++) {
467 if (s >= 0 && s < resp_size) {
468 c = cos(pi4*(k*mult+add));
469 freq_resp[s] = freq_resp[s]*c*c;
472 for (k = s; k < resp_size; k++)
476 for (k = lowpasss; k < resp_size; k++)
480 if (*highpass_effective)
481 printf(
"Highpass filter will work as specified.\n");
483 printf(
"NOTE: Highpass filter omitted due to a too low corner frequency.\n");
486 printf(
"NOTE: Filter is presently switched off.\n");
499 const QList<FIFFLIB::FiffChInfo>& chs,
518 for (c = 0; c < nchan; c++)
527 for (c = 0; c < npick; c++)
528 mult[c] = chs[pickno[c]].cal*chs[pickno[c]].range;
532 if (!stream->read_tag(t_pTag,ent->pos))
536 if ((
int)(t_pTag->size()/(
sizeof(
fiff_float_t)*nchan)) != nsamp) {
537 printf(
"Incorrect number of samples in buffer.");
540 qDebug() <<
"ToDo: Check whether this_samplef contains the right stuff!!! - use VectorXf instead";
541 this_samplef = t_pTag->toFloat();
542 for (s = 0; s < nsamp; s++, this_samplef += nchan) {
543 for (c = 0; c < npick; c++)
544 data(c,s) = mult[c]*this_samplef[pickno[c]];
548 if ((
int)(t_pTag->size()/(
sizeof(
fiff_short_t)*nchan)) != nsamp) {
549 printf(
"Incorrect number of samples in buffer.");
552 qDebug() <<
"ToDo: Check whether this_samples contains the right stuff!!! - use VectorXi instead";
554 for (s = 0; s < nsamp; s++, this_samples += nchan) {
555 for (c = 0; c < npick; c++)
556 data(c,s) = mult[c]*this_samples[pickno[c]];
560 if ((
int)(t_pTag->size()/(
sizeof(
fiff_int_t)*nchan)) != nsamp) {
561 printf(
"Incorrect number of samples in buffer.");
564 qDebug() <<
"ToDo: Check whether this_sample contains the right stuff!!! - use VectorXi instead";
565 this_sample = t_pTag->toInt();
566 for (s = 0; s < nsamp; s++, this_sample += nchan) {
567 for (c = 0; c < npick; c++)
568 data(c,s) = mult[c]*this_sample[pickno[c]];
572 printf(
"We are not prepared to handle raw data type: %d",ent->type);
595 QList<FiffDirNode::SPtr> temp;
601 if (pNode->isEmpty())
602 node = stream->dirtree();
607 if (temp.size() > 0) {
612 names = t_pTag->toString();
649 for (i = 0; i < mat->
m; i++) {
651 for (j = mat->
ptrs[i]; j < mat->ptrs[i+1]; j++)
652 res[i] += mat->
data[j]*vector[mat->
inds[j]];
657 for (i = 0; i < mat->
m; i++)
659 for (i = 0; i < mat->
n; i++)
660 for (j = mat->
ptrs[i]; j < mat->ptrs[i+1]; j++)
661 res[mat->
inds[j]] += mat->
data[j]*vector[i];
665 qWarning(
"mne_sparse_vec_mult2: unknown sparse matrix storage type: %d",mat->
coding);
682 for (i = 0; i < mat->
m; i++) {
683 for (k = 0; k < ncol; k++) {
685 for (j = mat->
ptrs[i]; j < mat->ptrs[i+1]; j++)
686 val += mat->
data[j]*mult(mat->
inds[j],k);
692 for (k = 0; k < ncol; k++) {
693 for (i = 0; i < mat->
m; i++)
695 for (i = 0; i < mat->
n; i++)
696 for (j = mat->
ptrs[i]; j < mat->ptrs[i+1]; j++)
697 res[mat->
inds[j]][k] += mat->
data[j]*mult(i,k);
701 qWarning(
"mne_sparse_mat_mult2: unknown sparse matrix storage type: %d",mat->
coding);
707#define APPROX_RING_BUF_SIZE (600*1024*1024)
784 int highpass_effective;
793 firstsamp < this->
nsamp + this->first_samp;
794 firstsamp = firstsamp +
filter->size)
797 printf(
"%d filter buffers needed\n",nfilt_buf);
800 for (k = 0, firstsamp = this->
first_samp-
filter->taper_size; k < nfilt_buf; k++,
801 firstsamp = firstsamp +
filter->size) {
809 filt_bufs[k].ch_filtered = Eigen::VectorXi::Zero(this->
info->nchan);
812 nring_buf = approx_ring_buf_size/((2*
filter->taper_size+
filter->size)*
813 this->
info->nchan*
sizeof(float));
814 this->
filt_ring = std::make_unique<RingBuffer>(nring_buf);
828 printf(
"Cannot load a skip");
831 if (buf->
vals.size() == 0) {
839 printf(
"Read buffer %d .. %d\n",buf->
firsts,buf->
lasts);
871 if (buf->
vals.size() == 0)
877 Eigen::MatrixXf dataMat = buf->
vals;
880 std::swap(
comp->current,
comp->undo);
885 std::swap(
comp->current,
comp->undo);
888 std::swap(
comp->current,
comp->undo);
894 if (
comp->apply_transpose(
TRUE, dataMat) !=
OK)
916 int k,s,p,start,c,fills;
922 float **deriv_vals = NULL;
927 for (s = 0, p = firsts; p <
first_samp; s++, p++) {
929 for (c = 0; c < sel->
nchan; c++)
932 for (c = 0; c <
info->nchan; c++)
944 for (c = 0, need_some =
FALSE; c < sel->
nchan; c++) {
956 for (k = 0, this_buf =
bufs.data(), s = 0; k < (
int)
bufs.size(); k++, this_buf++) {
957 if (this_buf->
lasts >= firsts) {
958 start = firsts - this_buf->
firsts;
962 for (p = start; p < this_buf->
ns && ns > 0; p++, ns--, s++) {
964 for (c = 0; c < sel->
nchan; c++)
965 if (sel->
pick[c] >= 0)
969 for (c = 0; c <
info->nchan; c++)
991 if (deriv_ns < this_buf->ns || nderiv !=
deriv_matched->deriv_data->nrow) {
995 deriv_ns = this_buf->
ns;
1002 for (c = 0; c < sel->
nchan; c++) {
1006 if (sel->
pick[c] >= 0) {
1007 for (p = start, s2 = s, ns2 = ns; p < this_buf->
ns && ns2 > 0; p++, ns2--, s2++)
1008 picked[c][s2] = this_buf->
vals(sel->
pick[c], p);
1015 for (p = start, s2 = s, ns2 = ns; p < this_buf->
ns && ns2 > 0; p++, ns2--, s2++)
1016 picked[c][s2] = values[p];
1021 for (c = 0; c <
info->nchan; c++)
1022 for (p = start, s2 = s, ns2 = ns; p < this_buf->
ns && ns2 > 0; p++, ns2--, s2++)
1023 picked[c][s2] = this_buf->
vals(c, p);
1037 for (; ns > 0; ns--, s++) {
1039 for (c = 0; c < sel->
nchan; c++)
1040 picked[c][s] = picked[c][fills];
1042 for (c = 0; c <
info->nchan; c++)
1043 picked[c][s] = picked[c][fills];
1047 for (; ns > 0; ns--, s++) {
1049 for (c = 0; c < sel->
nchan; c++)
1052 for (c = 0; c <
info->nchan; c++)
1067 int k,s,p,start,c,fills;
1071 float *deriv_pvalues = NULL;
1077 for (s = 0, p = firsts; p <
first_samp; s++, p++) {
1079 for (c = 0; c < sel->
nchan; c++)
1082 for (c = 0; c <
info->nchan; c++)
1091 for (k = 0, this_buf =
bufs.data(); k < (
int)
bufs.size(); k++, this_buf++) {
1092 if (this_buf->
lasts >= firsts) {
1093 start = firsts - this_buf->
firsts;
1097 for (p = start; p < this_buf->
ns && ns > 0; p++, ns--, s++) {
1099 for (c = 0; c < sel->
nchan; c++)
1100 if (sel->
pick[c] >= 0)
1104 for (c = 0; c <
info->nchan; c++)
1123 values = &this_buf->
vals;
1126 for (p = start; p < this_buf->
ns && ns > 0; p++, ns--, s++) {
1127 for (c = 0; c <
info->nchan; c++)
1128 pvalues[c] = (*values)(c,p);
1130 qWarning()<<
"Error";
1136 for (c = 0; c < sel->
nchan; c++) {
1140 if (sel->
pick[c] >= 0)
1141 picked[c][s] = pvalues[sel->
pick[c]];
1146 picked[c][s] = deriv_pvalues[sel->
pick_deriv[c]];
1150 for (c = 0; c <
info->nchan; c++) {
1151 picked[c][s] = pvalues[c];
1167 for (; ns > 0; ns--, s++) {
1169 for (c = 0; c < sel->
nchan; c++)
1170 picked[c][s] = picked[c][fills];
1172 for (c = 0; c <
info->nchan; c++)
1173 picked[c][s] = picked[c][fills];
1177 for (; ns > 0; ns--, s++) {
1179 for (c = 0; c < sel->
nchan; c++)
1182 for (c = 0; c <
info->nchan; c++)
1201 if (buf->
vals.size() == 0) {
1209 for (k = 0; k < buf->
nchan; k++) {
1211 vals[k] = buf->
vals.row(k).data() +
filter->taper_size;
1220 printf(
"Loaded filtered buffer %d...%d %d %d last = %d\n",
1235 int bs1,bs2,s1,s2,lasts;
1238 float **deriv_vals = NULL;
1249 for (s = 0; s < ns; s++)
1250 for (c = 0; c < sel->
nchan; c++)
1254 for (s = 0; s < ns; s++)
1255 for (c = 0; c <
info->nchan; c++)
1258 lasts = firsts + ns - 1;
1274 filter_was =
filter->filter_on;
1278 for (k = 0, this_buf =
filt_bufs.data(); k < (
int)
filt_bufs.size(); k++, this_buf++) {
1279 if (this_buf->
lasts >= firsts)
1282 for (; k < (int)
filt_bufs.size() && this_buf->
firsts <= lasts; k++, this_buf++) {
1284 printf(
"this_buf (%d): %d..%d\n",k,this_buf->
firsts,this_buf->
lasts);
1295 for (c = 0; c < sel->
nchan; c++) {
1296 if (sel->
pick[c] >= 0) {
1304 else if (dc.size() > 0)
1305 dc_offset = dc[sel->
pick[c]];
1307 dc_offset,
info->chInfo[sel->
pick[c]].kind) !=
OK) {
1308 filter->filter_on = filter_was;
1312 filter->filter_on = filter_was;
1321 for (c = 0; c < der->
deriv_data->ncol; c++) {
1322 if (der->
in_use[c] > 0 &&
1330 else if (dc.size() > 0)
1333 dc_offset,
info->chInfo[c].kind) !=
OK) {
1334 filter->filter_on = filter_was;
1338 filter->filter_on = filter_was;
1347 for (c = 0; c <
info->nchan; c++) {
1355 else if (dc.size() > 0)
1358 dc_offset,
info->chInfo[c].kind) !=
OK) {
1359 filter->filter_on = filter_was;
1363 filter->filter_on = filter_was;
1370 if (firsts >= this_buf->
firsts) {
1371 bs1 = firsts - this_buf->
firsts;
1376 s1 = this_buf->
firsts - firsts;
1378 if (lasts >= this_buf->
lasts) {
1380 s2 = this_buf->
lasts - lasts + ns;
1383 bs2 = lasts - this_buf->
lasts + this_buf->
ns;
1387 printf(
"buf : %d..%d %d\n",bs1,bs2,bs2-bs1);
1388 printf(
"dest : %d..%d %d\n",s1,s2,s2-s1);
1398 if (deriv_ns < this_buf->ns || nderiv !=
deriv_matched->deriv_data->nrow) {
1402 deriv_ns = this_buf->
ns;
1407 for (c = 0; c < sel->
nchan; c++) {
1411 if (sel->
pick[c] >= 0) {
1412 values = this_buf->
vals.row(sel->
pick[c]).data();
1413 for (s = s1, bs = bs1; s < s2; s++, bs++)
1414 picked[c][s] += values[bs];
1418 for (s = s1, bs = bs1; s < s2; s++, bs++)
1419 picked[c][s] += values[bs];
1424 for (c = 0; c <
info->nchan; c++) {
1425 values = this_buf->
vals.row(c).data();
1426 for (s = s1, bs = bs1; s < s2; s++, bs++)
1427 picked[c][s] += values[bs];
1445 int allow_maxshield,
1452 std::unique_ptr<MNERawInfo>
info;
1453 std::unique_ptr<MNERawData> data;
1460 QList<FiffDirEntry::SPtr> dir0;
1464 int k, b, nbuf, ndir, nnames;
1465 int current_dir0 = 0;
1472 for (k = 0; k <
info->nchan; k++) {
1473 ch =
info->chInfo.at(k);
1475 if (std::fabs(1.0 - ch.
range) > 1e-5) {
1485 printf(
"Ch %s unit multiplier %d -> 0\n",ch.
ch_name.toLatin1().data(),ch.
unit_mul);
1494 data = std::make_unique<MNERawData>();
1495 data->filename = name;
1497 data->info = std::move(
info);
1505 if (nnames != data->info->nchan) {
1506 printf(
"Channel names were not translated correctly into a name list");
1514 if (data->comp->ncomp > 0)
1515 printf(
"Read %d compensation data sets from %s\n",data->comp->ncomp,data->filename.toUtf8().constData());
1517 printf(
"No compensation data in %s\n",data->filename.toUtf8().constData());
1520 qWarning() <<
"err_print_error()";
1525 data->comp_now = data->comp_file;
1527 data->comp_now = comp_set;
1531 printf(
"Cannot do compensation because compensation data are missing");
1534 }
else if (data->comp->set_compensation(data->comp_now,
1537 QList<FIFFLIB::FiffChInfo>(),
1545 printf(
"SSS data read from %s :\n",data->filename.toUtf8().constData());
1546 QTextStream errStream(stderr);
1547 data->sss->print(errStream);
1550 printf(
"No SSS data in %s\n",data->filename.toUtf8().constData());
1556 dir0 = data->info->rawDir;
1557 ndir = data->info->ndir;
1564 if (!
stream->read_tag(t_pTag,dir0[current_dir0]->pos))
1566 data->first_samp = *t_pTag->toInt();
1574 if (!
stream->read_tag(t_pTag,dir0[current_dir0]->pos))
1576 nsamp_skip = data->info->buf_size*(*t_pTag->toInt());
1577 printf(
"Data skip of %d samples in the beginning\n",nsamp_skip);
1583 if (!
stream->read_tag(t_pTag,dir0[current_dir0]->pos))
1585 data->first_samp += *t_pTag->toInt();
1590 data->omit_samp = data->first_samp + nsamp_skip;
1591 data->omit_samp_old = nsamp_skip;
1592 data->first_samp = 0;
1595 data->first_samp = data->first_samp + nsamp_skip;
1598 else if (omit_skip) {
1599 data->omit_samp = data->first_samp;
1600 data->first_samp = 0;
1603 printf(
"data->first_samp = %d\n",data->first_samp);
1609 for (k = 0, nbuf = 0; k < ndir; k++)
1613 data->bufs.resize(nbuf);
1616 for (k = 0, nbuf = 0; k < ndir; k++)
1619 data->bufs[nbuf].ns = 0;
1620 data->bufs[nbuf].ent = dir0[k];
1621 data->bufs[nbuf].nchan = data->info->nchan;
1623 data->bufs[nbuf].valid =
FALSE;
1624 data->bufs[nbuf].comp_status = data->comp_file;
1628 for (k = 0; k < nbuf; k++) {
1629 dir = data->bufs[k].ent;
1634 data->bufs[k].ns = dir->size/(data->info->nchan*
sizeof(
fiff_float_t));
1636 data->bufs[k].ns = dir->size/(data->info->nchan*
sizeof(
fiff_int_t));
1638 printf(
"We are not prepared to handle raw data type: %d",dir->type);
1645 if (!
stream->read_tag(t_pTag,dir->pos))
1647 data->bufs[k].ns = data->info->buf_size*(*t_pTag->toInt());
1649 data->bufs[k].firsts = k == 0 ? data->first_samp : data->bufs[k-1].lasts + 1;
1650 data->bufs[k].lasts = data->bufs[k].firsts + data->bufs[k].ns - 1;
1651 data->nsamp += data->bufs[k].ns;
1657 data->bad = Eigen::VectorXi::Zero(data->info->nchan);
1658 data->offsets = Eigen::VectorXf::Zero(data->info->nchan);
1664 for (b = 0; b < data->nbad; b++) {
1665 for (k = 0; k < data->info->nchan; k++) {
1666 if (QString::compare(data->info->chInfo[k].ch_name,data->badlist[b],Qt::CaseInsensitive) == 0) {
1667 data->bad[k] =
TRUE;
1672 printf(
"%d bad channels read from %s%s",data->nbad,name.toUtf8().constData(),data->nbad > 0 ?
":\n" :
"\n");
1673 if (data->nbad > 0) {
1675 for (k = 0; k < data->nbad; k++)
1676 printf(
"%s%c",data->badlist[k].toUtf8().constData(),k < data->
nbad-1 ?
' ' :
'\n');
1683 nbuf = approx_ring_buf_size/(data->info->buf_size*data->info->nchan*
sizeof(float));
1684 data->ring = std::make_unique<RingBuffer>(nbuf);
1688 data->filter = std::make_unique<MNEFilterDef>(
filter);
1689 data->setup_filter_bufs();
1694 if (data->pick_data(NULL,data->first_samp,1,vals) ==
FAIL)
1696 data->first_sample_val.resize(data->info->nchan);
1697 for (k = 0; k < data->info->nchan; k++)
1698 data->first_sample_val[k] = vals[k][0];
1700 printf(
"Initial dc offsets determined\n");
1702 printf(
"Raw data file %s:\n",name.toUtf8().constData());
1703 printf(
"\tnchan = %d\n",data->info->nchan);
1704 printf(
"\tnsamp = %d\n",data->nsamp);
1705 printf(
"\tsfreq = %-8.3f Hz\n",data->info->sfreq);
1706 printf(
"\tlength = %-8.3f sec\n",data->nsamp/data->info->sfreq);
1708 return data.release();
#define FIFF_MNE_CH_NAME_LIST
#define FIFFB_MNE_BAD_CHANNELS
#define FIFF_FIRST_SAMPLE
#define FIFFV_SSS_JOB_NOTHING
MNERawData class declaration.
#define MNE_DEFAULT_TRIGGER_CH
Default digital trigger channel name.
#define FREE_CMATRIX_36(m)
void mne_fft_syn(float *data, int np, std::vector< float > &)
void mne_string_to_name_list(const QString &s, QStringList &listp, int &nlistp)
int mne_sparse_vec_mult2(FiffSparseMatrix *mat, float *vector, float *res)
void mne_channel_names_to_name_list(const QList< FIFFLIB::FiffChInfo > &chs, int nch, QStringList &listp, int &nlistp)
QString mne_name_list_to_string(const QStringList &list)
int mne_sparse_mat_mult2(FiffSparseMatrix *mat, const MNERawBufDef::RowMajorMatrixXf &mult, int ncol, float **res)
int mne_apply_filter(const MNEFilterDef &filter, FilterData *d, float *data, int ns, int zero_pad, float dc_offset, int kind)
int mne_read_bad_channel_list(const QString &name, QStringList &listp, int &nlistp)
void mne_free_cmatrix_36(float **m)
float ** mne_cmatrix_36(int nr, int nc)
#define APPROX_RING_BUF_SIZE
QString mne_channel_names_to_string(const QList< FIFFLIB::FiffChInfo > &chs, int nch)
void mne_free_name_list_36(char **list, int nlist)
int mne_read_bad_channel_list_from_node(FiffStream::SPtr &stream, const FiffDirNode::SPtr &pNode, QStringList &listp, int &nlistp)
int mne_compare_filters(const MNEFilterDef &f1, const MNEFilterDef &f2)
int mne_read_raw_buffer_t(FiffStream::SPtr &stream, const FiffDirEntry::SPtr &ent, MNERawBufDef::RowMajorMatrixXf &data, int nchan, int nsamp, const QList< FIFFLIB::FiffChInfo > &chs, int *pickno, int npick)
void mne_fft_ana(float *data, int np, std::vector< float > &)
std::unique_ptr< FilterData > mne_create_filter_response(const MNEFilterDef &filter, float sfreq, int *highpass_effective)
#define ALLOC_CMATRIX_36(x, y)
Core MNE data structures (source spaces, source estimates, hemispheres).
MNEChSelection * mneChSelection
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
QSharedPointer< FiffDirEntry > SPtr
QSharedPointer< FiffDirNode > SPtr
FIFF sparse matrix storage.
FIFFLIB::fiff_int_t coding
static QStringList split_name_list(QString p_sNameList)
QSharedPointer< FiffStream > SPtr
QSharedPointer< FiffTag > SPtr
Eigen::VectorXi pick_deriv
QStringList chspick_nospace
static std::unique_ptr< MNECTFCompDataSet > read(const QString &name)
static QString explain_comp(int kind)
static int get_comp(const QList< FIFFLIB::FiffChInfo > &chs, int nch)
static int map_comp_kind(int grad)
One item in a derivation data set.
std::unique_ptr< MNESparseNamedMatrix > deriv_data
Definition of one raw data buffer within a FIFF file.
FIFFLIB::FiffDirEntry::SPtr ent
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > RowMajorMatrixXf
Eigen::VectorXi ch_filtered
void allocate(int nrow, int ncol, MNERawBufDef::RowMajorMatrixXf *res)
std::vector< Entry > entries
MNERawBufDef::RowMajorMatrixXf * user
Pre-computed frequency-domain filter state used for FFT-based raw data filtering.
FilterData(int resp_size)
std::vector< float > eog_freq_resp
std::vector< float > freq_resp
std::vector< float > precalc
int load_one_filt_buf(MNERawBufDef *buf)
std::unique_ptr< MNELIB::MNEProjOp > proj
std::unique_ptr< MNELIB::MNECTFCompDataSet > comp
std::unique_ptr< FilterData > filter_data
void add_filter_response(int *highpass_effective)
int compensate_buffer(MNERawBufDef *buf)
int pick_data_proj(mneChSelection sel, int firsts, int ns, float **picked)
std::unique_ptr< RingBuffer > filt_ring
std::unique_ptr< MNELIB::MNERawInfo > info
std::unique_ptr< MNELIB::MNEDeriv > deriv_matched
unsigned int dig_trigger_mask
std::vector< MNELIB::MNERawBufDef > filt_bufs
static MNERawData * open_file_comp(const QString &name, int omit_skip, int allow_maxshield, const MNEFilterDef &filter, int comp_set)
std::unique_ptr< MNEFilterDef > filter
int load_one_buffer(MNERawBufDef *buf)
Eigen::VectorXf first_sample_val
std::unique_ptr< MNEEventList > event_list
std::unique_ptr< MNELIB::MNEDerivSet > deriv
std::vector< MNELIB::MNERawBufDef > bufs
int pick_data(mneChSelection sel, int firsts, int ns, float **picked)
FIFFLIB::FiffStream::SPtr stream
std::unique_ptr< MNELIB::MNESssData > sss
static MNERawData * open_file(const QString &name, int omit_skip, int allow_maxshield, const MNEFilterDef &filter)
int pick_data_filt(mneChSelection sel, int firsts, int ns, float **picked)
std::unique_ptr< RingBuffer > ring
static int load(const QString &name, int allow_maxshield, std::unique_ptr< MNERawInfo > &infop)
static MNESssData * read(const QString &name)