v2.0.0
Loading...
Searching...
No Matches
fiff.h
Go to the documentation of this file.
1//=============================================================================================================
29
30#ifndef FIFF_H
31#define FIFF_H
32
33//=============================================================================================================
34// INCLUDES
35//=============================================================================================================
36
37#include "fiff_global.h"
38#include "fiff_constants.h"
39#include "fiff_coord_trans.h"
40#include "fiff_dir_node.h"
41#include "fiff_explain.h"
42#include "fiff_dir_entry.h"
43#include "fiff_named_matrix.h"
44#include "fiff_tag.h"
45#include "fiff_types.h"
46#include "fiff_proj.h"
47#include "fiff_ctf_comp.h"
48#include "fiff_info.h"
49#include "fiff_raw_data.h"
50#include "fiff_raw_dir.h"
51#include "fiff_stream.h"
52#include "fiff_evoked_set.h"
53#include "fiff_events.h"
54
55//=============================================================================================================
56// EIGEN INCLUDES
57//=============================================================================================================
58
59#include <Eigen/Core>
60
61//=============================================================================================================
62// QT INCLUDES
63//=============================================================================================================
64
65#include <QIODevice>
66#include <QList>
67#include <QStringList>
68
69//=============================================================================================================
70// DEFINE NAMESPACE FIFFLIB
71//=============================================================================================================
72
73namespace FIFFLIB
74{
75
76//=============================================================================================================
77// FORWARD DECLARATIONS
78//=============================================================================================================
79
80//=============================================================================================================
93{
94public:
95 //=========================================================================================================
99 virtual ~Fiff()
100 {
101 }
102
103 //Alphabetic ordered MNE Toolbox fiff_function
104 //=========================================================================================================
119 inline static bool copy_tree(FiffStream::SPtr p_pStreamIn, const FiffId& in_id, const QList<FiffDirNode::SPtr>& p_Nodes, FiffStream::SPtr& p_pStreamOut)
120 {
121 return FiffDirNode::copy_tree(p_pStreamIn, in_id, p_Nodes, p_pStreamOut);
122 }
123
124 //=========================================================================================================
135 inline static void end_block(FiffStream* p_pStream, fiff_int_t kind)
136 {
137 p_pStream->end_block(kind);
138 }
139
140 //=========================================================================================================
150 inline static void end_file(FiffStream* p_pStream)
151 {
152 p_pStream->end_file();
153 }
154
155 //=========================================================================================================
165 inline static void finish_writing_raw(FiffStream* p_pStream)
166 {
167 p_pStream->finish_writing_raw();
168 }
169
170 //=========================================================================================================
183 inline static QList<FiffDirNode::SPtr> dir_tree_find(const FiffDirNode::SPtr& p_Node, fiff_int_t p_kind)
184 {
185 return p_Node->dir_tree_find(p_kind);
186 }
187
188 //=========================================================================================================
200 inline static bool invert_transform(FiffCoordTrans& p_Transform)
201 {
202 return p_Transform.invert_transform();
203 }
204
205 //=========================================================================================================
218 static bool open(QIODevice& p_IODevice, FiffStream::SPtr& p_pStream)
219 {
220 p_pStream = FiffStream::SPtr(new FiffStream(&p_IODevice));
221
222 return p_pStream->open();
223 }
224
225 //=========================================================================================================
238 inline static Eigen::RowVectorXi pick_channels(QStringList& ch_names,
239 const QStringList& include = defaultQStringList,
240 const QStringList& exclude = defaultQStringList)
241 {
242 return FiffInfo::pick_channels(ch_names, include, exclude);
243 }
244
245 //=========================================================================================================
260 const QStringList& include = defaultQStringList,
261 const QStringList& exclude = defaultQStringList)
262 {
263 return orig.pick_channels(include, exclude);
264 }
265
266 //=========================================================================================================
278 inline static bool find_evoked(FiffEvokedSet& orig)
279 {
280 return orig.find_evoked(orig);
281 }
282
283 //=========================================================================================================
296 inline static FiffInfo pick_info(const FiffInfo& info,
297 const Eigen::RowVectorXi& sel = defaultVectorXi)
298 {
299 return info.pick_info(sel);
300 }
301
302 //=========================================================================================================
319 inline static Eigen::RowVectorXi pick_types(FiffInfo& info,
320 bool meg,
321 bool eeg = false,
322 bool stim = false,
323 const QStringList& include = defaultQStringList,
324 const QStringList& exclude = defaultQStringList)
325 {
326 return info.pick_types(meg, eeg, stim, include, exclude);
327 }
328
329 //=========================================================================================================
342 static inline QStringList read_bad_channels(FiffStream::SPtr& p_pStream,
343 FiffDirNode::SPtr& p_Node)
344 {
345 return p_pStream->read_bad_channels(p_Node);
346 }
347
348 //=========================================================================================================
362 static inline QList<FiffCtfComp> read_ctf_comp(FiffStream::SPtr& p_pStream,
363 const FiffDirNode::SPtr& p_Node,
364 const QList<FiffChInfo>& p_Chs)
365 {
366 return p_pStream->read_ctf_comp(p_Node, p_Chs);
367 }
368
369 //=========================================================================================================
389 static inline bool read_evoked(QIODevice& p_IODevice,
390 FiffEvoked& data,
391 QVariant setno = 0,
392 QPair<float, float> baseline = defaultFloatPair,
393 bool proj = true,
394 fiff_int_t p_aspect_kind = FIFFV_ASPECT_AVERAGE)
395 {
396 return FiffEvoked::read(p_IODevice, data, setno, baseline, proj, p_aspect_kind);
397 }
398
399 //=========================================================================================================
408 static inline bool read_evoked_set(QIODevice& p_IODevice, FiffEvokedSet& data)
409 {
410 return FiffEvokedSet::read(p_IODevice, data);
411 }
412
413 //=========================================================================================================
429 static inline bool read_meas_info(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, FiffInfo& p_Info, FiffDirNode::SPtr& p_NodeInfo)
430 {
431 return p_pStream->read_meas_info(p_Node, p_Info, p_NodeInfo);
432 }
433
434 //=========================================================================================================
449 static inline bool read_named_matrix(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat)
450 {
451 return p_pStream->read_named_matrix(p_Node, matkind, mat);
452 }
453
454 //=========================================================================================================
467 static inline QList<FiffProj> read_proj(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node)
468 {
469 return p_pStream->read_proj(p_Node);
470 }
471
472 //=========================================================================================================
489 inline static bool read_raw_segment(FiffRawData& raw,
490 Eigen::MatrixXd& data,
491 Eigen::MatrixXd& times,
492 fiff_int_t from = -1,
493 fiff_int_t to = -1,
494 Eigen::MatrixXi sel = defaultMatrixXi)
495 {
496 return raw.read_raw_segment(data, times, from, to, sel);
497 }
498
516 inline static bool read_raw_segment(FiffRawData& raw,
517 Eigen::MatrixXd& data,
518 Eigen::MatrixXd& times,
519 Eigen::SparseMatrix<double>& mult,
520 fiff_int_t from = -1,
521 fiff_int_t to = -1,
522 Eigen::MatrixXi sel = defaultMatrixXi)
523 {
524 return raw.read_raw_segment(data, times, mult, from, to, sel);
525 }
526
527 //=========================================================================================================
542 inline static bool read_tag(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag, qint64 pos = -1)
543 {
544 return p_pStream->read_tag(p_pTag, pos);
545 }
546
547 //=========================================================================================================
561 static inline bool read_tag_info(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag)
562 {
563 return p_pStream->read_tag_info(p_pTag);
564 }
565
566 //=========================================================================================================
580 inline static bool setup_read_raw(QIODevice& p_IODevice, FiffRawData& data, bool allow_maxshield = false)
581 {
582 return FiffStream::setup_read_raw(p_IODevice, data, allow_maxshield);
583 }
584
585 //=========================================================================================================
597 inline static QStringList split_name_list(QString p_sNameList)
598 {
599 return FiffStream::split_name_list(p_sNameList);
600 }
601
602 //=========================================================================================================
613 inline static void start_block(FiffStream* p_pStream, fiff_int_t kind)
614 {
615 p_pStream->start_block(kind);
616 }
617
618 //=========================================================================================================
630 inline static FiffStream::SPtr start_file(QIODevice& p_IODevice)
631 {
632 return FiffStream::start_file(p_IODevice);
633 }
634
635 //=========================================================================================================
650 inline static FiffStream::SPtr start_writing_raw(QIODevice& p_IODevice,
651 const FiffInfo& info,
652 Eigen::RowVectorXd& cals,
653 Eigen::MatrixXi sel = defaultMatrixXi)
654 {
655 return FiffStream::start_writing_raw(p_IODevice, info, cals, sel);
656 }
657
658 //=========================================================================================================
671 inline static void write_ch_info(FiffStream* p_pStream, const FiffChInfo& ch)
672 {
673 p_pStream->write_ch_info(ch);
674 }
675
676 //=========================================================================================================
687 inline static void write_coord_trans(FiffStream* p_pStream, FiffCoordTrans& trans)
688 {
689 p_pStream->write_coord_trans(trans);
690 }
691
692 //=========================================================================================================
703 inline static void write_ctf_comp(FiffStream* p_pStream, QList<FiffCtfComp>& comps)
704 {
705 p_pStream->write_ctf_comp(comps);
706 }
707
708 //=========================================================================================================
719 inline static void write_dig_point(FiffStream* p_pStream, FiffDigPoint& dig)
720 {
721 p_pStream->write_dig_point(dig);
722 }
723
724 //=========================================================================================================
737 inline static void write_id(FiffStream* p_pStream, fiff_int_t kind, FiffId& id = FiffId::getDefault())
738 {
739 p_pStream->write_id(kind, id);
740 }
741
742 //=========================================================================================================
755 inline static void write_int(FiffStream* p_pStream, fiff_int_t kind, const fiff_int_t* data, fiff_int_t nel = 1)
756 {
757 p_pStream->write_int(kind, data, nel);
758 }
759
760 //=========================================================================================================
773 inline static void write_float(FiffStream* p_pStream, fiff_int_t kind, float* data, fiff_int_t nel = 1)
774 {
775 p_pStream->write_float(kind, data, nel);
776 }
777
778 //=========================================================================================================
790 inline static void write_float_matrix(FiffStream* p_pStream, fiff_int_t kind, Eigen::MatrixXf& mat)
791 {
792 p_pStream->write_float_matrix(kind, mat);
793 }
794
795 //=========================================================================================================
807 inline static void write_name_list(FiffStream* p_pStream, fiff_int_t kind, QStringList& data)
808 {
809 p_pStream->write_name_list(kind, data);
810 }
811
812 //=========================================================================================================
824 inline static void write_named_matrix(FiffStream* p_pStream, fiff_int_t kind, FiffNamedMatrix& mat)
825 {
826 p_pStream->write_named_matrix(kind, mat);
827 }
828
829 //=========================================================================================================
840 inline static void write_proj(FiffStream* p_pStream, QList<FiffProj>& projs)
841 {
842 p_pStream->write_proj(projs);
843 }
844
845 //=========================================================================================================
859 inline static bool write_raw_buffer(FiffStream* p_pStream, const Eigen::MatrixXd& buf, const Eigen::MatrixXd& cals)
860 {
861 return p_pStream->write_raw_buffer(buf, cals);
862 }
863
864 //=========================================================================================================
876 inline static void write_string(FiffStream* p_pStream, fiff_int_t kind, QString& data)
877 {
878 p_pStream->write_string(kind, data);
879 }
880};
881
882//=============================================================================================================
883// INLINE DEFINITIONS
884//=============================================================================================================
885} // NAMESPACE
886
887#endif // FIFF_H
Symbolic FIFF tag, block, value, unit and channel-type constants shared across FIFFLIB.
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
Set of averaged evoked responses sharing a FiffInfo, plus the ave-style category / rejection descript...
FIFF binary tag-stream layer: wraps a QIODevice to read and write FIFF tags, directories,...
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Human-readable names of FIFF tag kinds, block kinds, units, unit multipliers and channel kinds.
4x4 affine FIFF coordinate transform (FIFF_COORD_TRANS) annotated with source/destination coordinate-...
constexpr auto FIFFV_ASPECT_AVERAGE
Definition fiff_file.h:429
Export/import macros and build-info accessors for the FIFFLIB shared library.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:44
Recursive node of the parsed FIFF block tree (FIFFB_* hierarchy with directory entries and children).
One entry of the per-buffer raw-data directory: kind, first sample, number of samples and on-disk pos...
Matrix paired with row and column name lists, the on-disk form of FIFFB_PROJ_ITEM / FIFFB_MNE_NAMED_M...
Stim-channel event list (sample, previous value, new value triples) with FIFF read/write helpers.
Single entry of the FIFF tag directory: kind, type, byte size and absolute file position.
SSP projection item: a named projection vector set with active/desired flags, parsed from FIFFB_PROJ_...
FIFF continuous raw recording: FiffInfo plus a directory of FIFF_DATA_BUFFER tags for random-access s...
CTF / 4D Neuroimaging software gradient-compensation matrix block (FIFFB_MNE_CTF_COMP_DATA).
Primitive scalar typedefs and forward-compatible aliases backing the FIFF type system.
FIFF file I/O, in-memory data structures and high-level readers/writers.
qint32 fiff_int_t
Definition fiff_types.h:86
MATLAB-style static facade re-exporting every public FIFFLIB reader/writer for parity with the mne-ma...
Definition fiff.h:93
static bool read_named_matrix(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
Definition fiff.h:449
static QList< FiffProj > read_proj(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node)
Definition fiff.h:467
static void write_ctf_comp(FiffStream *p_pStream, QList< FiffCtfComp > &comps)
Definition fiff.h:703
static bool open(QIODevice &p_IODevice, FiffStream::SPtr &p_pStream)
Definition fiff.h:218
static void write_float(FiffStream *p_pStream, fiff_int_t kind, float *data, fiff_int_t nel=1)
Definition fiff.h:773
static Eigen::RowVectorXi pick_channels(QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:238
static void write_named_matrix(FiffStream *p_pStream, fiff_int_t kind, FiffNamedMatrix &mat)
Definition fiff.h:824
static bool read_meas_info(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, FiffInfo &p_Info, FiffDirNode::SPtr &p_NodeInfo)
Definition fiff.h:429
static void write_dig_point(FiffStream *p_pStream, FiffDigPoint &dig)
Definition fiff.h:719
static void write_int(FiffStream *p_pStream, fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1)
Definition fiff.h:755
static bool read_tag(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag, qint64 pos=-1)
Definition fiff.h:542
static void write_id(FiffStream *p_pStream, fiff_int_t kind, FiffId &id=FiffId::getDefault())
Definition fiff.h:737
static bool read_evoked_set(QIODevice &p_IODevice, FiffEvokedSet &data)
Definition fiff.h:408
static bool read_evoked(QIODevice &p_IODevice, FiffEvoked &data, QVariant setno=0, QPair< float, float > baseline=defaultFloatPair, bool proj=true, fiff_int_t p_aspect_kind=FIFFV_ASPECT_AVERAGE)
Definition fiff.h:389
static void end_file(FiffStream *p_pStream)
Definition fiff.h:150
static bool read_tag_info(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag)
Definition fiff.h:561
static void write_ch_info(FiffStream *p_pStream, const FiffChInfo &ch)
Definition fiff.h:671
static void start_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:613
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, Eigen::RowVectorXd &cals, Eigen::MatrixXi sel=defaultMatrixXi)
Definition fiff.h:650
static void write_proj(FiffStream *p_pStream, QList< FiffProj > &projs)
Definition fiff.h:840
static bool read_raw_segment(FiffRawData &raw, Eigen::MatrixXd &data, Eigen::MatrixXd &times, fiff_int_t from=-1, fiff_int_t to=-1, Eigen::MatrixXi sel=defaultMatrixXi)
Definition fiff.h:489
virtual ~Fiff()
Definition fiff.h:99
static bool read_raw_segment(FiffRawData &raw, Eigen::MatrixXd &data, Eigen::MatrixXd &times, Eigen::SparseMatrix< double > &mult, fiff_int_t from=-1, fiff_int_t to=-1, Eigen::MatrixXi sel=defaultMatrixXi)
Definition fiff.h:516
static void write_float_matrix(FiffStream *p_pStream, fiff_int_t kind, Eigen::MatrixXf &mat)
Definition fiff.h:790
static Eigen::RowVectorXi pick_types(FiffInfo &info, bool meg, bool eeg=false, bool stim=false, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:319
static bool copy_tree(FiffStream::SPtr p_pStreamIn, const FiffId &in_id, const QList< FiffDirNode::SPtr > &p_Nodes, FiffStream::SPtr &p_pStreamOut)
Definition fiff.h:119
static void write_name_list(FiffStream *p_pStream, fiff_int_t kind, QStringList &data)
Definition fiff.h:807
static void end_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:135
static void finish_writing_raw(FiffStream *p_pStream)
Definition fiff.h:165
static bool find_evoked(FiffEvokedSet &orig)
Definition fiff.h:278
static void write_coord_trans(FiffStream *p_pStream, FiffCoordTrans &trans)
Definition fiff.h:687
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
Definition fiff.h:630
static QStringList read_bad_channels(FiffStream::SPtr &p_pStream, FiffDirNode::SPtr &p_Node)
Definition fiff.h:342
static QList< FiffCtfComp > read_ctf_comp(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, const QList< FiffChInfo > &p_Chs)
Definition fiff.h:362
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
Definition fiff.h:580
static FiffInfo pick_info(const FiffInfo &info, const Eigen::RowVectorXi &sel=defaultVectorXi)
Definition fiff.h:296
static QStringList split_name_list(QString p_sNameList)
Definition fiff.h:597
static QList< FiffDirNode::SPtr > dir_tree_find(const FiffDirNode::SPtr &p_Node, fiff_int_t p_kind)
Definition fiff.h:183
static FiffEvokedSet pick_channels(FiffEvokedSet &orig, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:259
static bool write_raw_buffer(FiffStream *p_pStream, const Eigen::MatrixXd &buf, const Eigen::MatrixXd &cals)
Definition fiff.h:859
static bool invert_transform(FiffCoordTrans &p_Transform)
Definition fiff.h:200
static void write_string(FiffStream *p_pStream, fiff_int_t kind, QString &data)
Definition fiff.h:876
Per-channel FIFF descriptor: identifiers, kind, calibration, coil type, channel-frame coil position a...
Labelled 4x4 FIFF affine: source frame, destination frame, rotation, translation and cached inverse.
One digitizer point: kind (cardinal/HPI/EEG/extra), ident, 3D position in FIFFV_COORD_HEAD.
QSharedPointer< FiffDirNode > SPtr
static bool copy_tree(QSharedPointer< FiffStream > &p_pStreamIn, const FiffId &in_id, const QList< QSharedPointer< FiffDirNode > > &p_Nodes, QSharedPointer< FiffStream > &p_pStreamOut)
Single averaged evoked response: time axis, data, baseline, channel info and averaging metadata.
Definition fiff_evoked.h:77
static bool read(QIODevice &p_IODevice, FiffEvoked &p_FiffEvoked, QVariant setno=0, QPair< float, float > t_baseline=defaultFloatPair, bool proj=true, fiff_int_t p_aspect_kind=FIFFV_ASPECT_AVERAGE)
Set of FiffEvoked instances sharing one FiffInfo, plus channel-picking and compensation helpers.
bool find_evoked(const FiffEvokedSet &p_FiffEvokedSet) const
FiffEvokedSet pick_channels(const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList) const
static bool read(QIODevice &p_IODevice, FiffEvokedSet &p_FiffEvokedSet, QPair< float, float > baseline=defaultFloatPair, bool proj=true)
128-bit FIFF identifier: hardware machine ID plus creation time, stamped on every file and block.
Definition fiff_id.h:69
static FiffId & getDefault()
Definition fiff_id.cpp:197
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...
Definition fiff_info.h:90
FiffInfo pick_info(const Eigen::RowVectorXi &sel=defaultVectorXi) const
static Eigen::RowVectorXi pick_channels(const QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Eigen::RowVectorXi pick_types(const QString meg, bool eeg=false, bool stim=false, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList) const
FIFF named matrix: dense / sparse Eigen matrix plus row-name and column-name string lists.
Continuous FIFF raw recording: FiffInfo plus a random-access directory of FIFF_DATA_BUFFER tags.
bool read_raw_segment(Eigen::MatrixXd &data, Eigen::MatrixXd &times, fiff_int_t from=-1, fiff_int_t to=-1, const Eigen::RowVectorXi &sel=defaultRowVectorXi, bool do_debug=false) const
FIFF tag-stream reader/writer: wraps a QIODevice and exposes typed read_* / write_* methods for every...
bool write_raw_buffer(const Eigen::MatrixXd &buf, const Eigen::RowVectorXd &cals)
fiff_long_t start_block(fiff_int_t kind)
fiff_long_t write_float_matrix(fiff_int_t kind, const Eigen::MatrixXf &mat)
fiff_long_t write_proj(const QList< FiffProj > &projs)
QSharedPointer< FiffStream > SPtr
fiff_long_t write_dig_point(const FiffDigPoint &dig)
fiff_long_t write_int(fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1, fiff_int_t next=FIFFV_NEXT_SEQ)
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=true, bool is_littleEndian=false)
fiff_long_t write_float(fiff_int_t kind, const float *data, fiff_int_t nel=1)
fiff_long_t write_id(fiff_int_t kind, const FiffId &id=FiffId::getDefault())
fiff_long_t write_coord_trans(const FiffCoordTrans &trans)
fiff_long_t write_name_list(fiff_int_t kind, const QStringList &data)
fiff_long_t write_named_matrix(fiff_int_t kind, const FiffNamedMatrix &mat)
static QStringList split_name_list(QString p_sNameList)
fiff_long_t write_string(fiff_int_t kind, const QString &data)
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, Eigen::RowVectorXd &cals, Eigen::MatrixXi sel=defaultMatrixXi, bool bResetRange=true)
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
fiff_long_t end_block(fiff_int_t kind, fiff_int_t next=FIFFV_NEXT_SEQ)
fiff_long_t write_ch_info(const FiffChInfo &ch)
fiff_long_t write_ctf_comp(const QList< FiffCtfComp > &comps)
std::unique_ptr< FiffTag > UPtr
Definition fiff_tag.h:165