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_dir_entry.h"
42#include "fiff_named_matrix.h"
43#include "fiff_tag.h"
44#include "fiff_types.h"
45#include "fiff_proj.h"
46#include "fiff_ctf_comp.h"
47#include "fiff_info.h"
48#include "fiff_raw_data.h"
49#include "fiff_raw_dir.h"
50#include "fiff_stream.h"
51#include "fiff_evoked_set.h"
52#include "fiff_events.h"
53
54//=============================================================================================================
55// EIGEN INCLUDES
56//=============================================================================================================
57
58#include <Eigen/Core>
59
60//=============================================================================================================
61// QT INCLUDES
62//=============================================================================================================
63
64#include <QIODevice>
65#include <QList>
66#include <QStringList>
67
68//=============================================================================================================
69// DEFINE NAMESPACE FIFFLIB
70//=============================================================================================================
71
72namespace FIFFLIB
73{
74
75//=============================================================================================================
76// FORWARD DECLARATIONS
77//=============================================================================================================
78
79//=============================================================================================================
92{
93public:
94 //=========================================================================================================
98 virtual ~Fiff()
99 {
100 }
101
102 //Alphabetic ordered MNE Toolbox fiff_function
103 //=========================================================================================================
118 inline static bool copy_tree(FiffStream::SPtr p_pStreamIn, const FiffId& in_id, const QList<FiffDirNode::SPtr>& p_Nodes, FiffStream::SPtr& p_pStreamOut)
119 {
120 return FiffDirNode::copy_tree(p_pStreamIn, in_id, p_Nodes, p_pStreamOut);
121 }
122
123 //=========================================================================================================
134 inline static void end_block(FiffStream* p_pStream, fiff_int_t kind)
135 {
136 p_pStream->end_block(kind);
137 }
138
139 //=========================================================================================================
149 inline static void end_file(FiffStream* p_pStream)
150 {
151 p_pStream->end_file();
152 }
153
154 //=========================================================================================================
164 inline static void finish_writing_raw(FiffStream* p_pStream)
165 {
166 p_pStream->finish_writing_raw();
167 }
168
169 //=========================================================================================================
182 inline static QList<FiffDirNode::SPtr> dir_tree_find(const FiffDirNode::SPtr& p_Node, fiff_int_t p_kind)
183 {
184 return p_Node->dir_tree_find(p_kind);
185 }
186
187 //=========================================================================================================
199 inline static bool invert_transform(FiffCoordTrans& p_Transform)
200 {
201 return p_Transform.invert_transform();
202 }
203
204 //=========================================================================================================
217 static bool open(QIODevice& p_IODevice, FiffStream::SPtr& p_pStream)
218 {
219 p_pStream = FiffStream::SPtr(new FiffStream(&p_IODevice));
220
221 return p_pStream->open();
222 }
223
224 //=========================================================================================================
237 inline static Eigen::RowVectorXi pick_channels(QStringList& ch_names,
238 const QStringList& include = defaultQStringList,
239 const QStringList& exclude = defaultQStringList)
240 {
241 return FiffInfo::pick_channels(ch_names, include, exclude);
242 }
243
244 //=========================================================================================================
259 const QStringList& include = defaultQStringList,
260 const QStringList& exclude = defaultQStringList)
261 {
262 return orig.pick_channels(include, exclude);
263 }
264
265 //=========================================================================================================
277 inline static bool find_evoked(FiffEvokedSet& orig)
278 {
279 return orig.find_evoked(orig);
280 }
281
282 //=========================================================================================================
295 inline static FiffInfo pick_info(const FiffInfo& info,
296 const Eigen::RowVectorXi& sel = defaultVectorXi)
297 {
298 return info.pick_info(sel);
299 }
300
301 //=========================================================================================================
318 inline static Eigen::RowVectorXi pick_types(FiffInfo& info,
319 bool meg,
320 bool eeg = false,
321 bool stim = false,
322 const QStringList& include = defaultQStringList,
323 const QStringList& exclude = defaultQStringList)
324 {
325 return info.pick_types(meg, eeg, stim, include, exclude);
326 }
327
328 //=========================================================================================================
341 static inline QStringList read_bad_channels(FiffStream::SPtr& p_pStream,
342 FiffDirNode::SPtr& p_Node)
343 {
344 return p_pStream->read_bad_channels(p_Node);
345 }
346
347 //=========================================================================================================
361 static inline QList<FiffCtfComp> read_ctf_comp(FiffStream::SPtr& p_pStream,
362 const FiffDirNode::SPtr& p_Node,
363 const QList<FiffChInfo>& p_Chs)
364 {
365 return p_pStream->read_ctf_comp(p_Node, p_Chs);
366 }
367
368 //=========================================================================================================
388 static inline bool read_evoked(QIODevice& p_IODevice,
389 FiffEvoked& data,
390 QVariant setno = 0,
391 QPair<float, float> baseline = defaultFloatPair,
392 bool proj = true,
393 fiff_int_t p_aspect_kind = FIFFV_ASPECT_AVERAGE)
394 {
395 return FiffEvoked::read(p_IODevice, data, setno, baseline, proj, p_aspect_kind);
396 }
397
398 //=========================================================================================================
407 static inline bool read_evoked_set(QIODevice& p_IODevice, FiffEvokedSet& data)
408 {
409 return FiffEvokedSet::read(p_IODevice, data);
410 }
411
412 //=========================================================================================================
428 static inline bool read_meas_info(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, FiffInfo& p_Info, FiffDirNode::SPtr& p_NodeInfo)
429 {
430 return p_pStream->read_meas_info(p_Node, p_Info, p_NodeInfo);
431 }
432
433 //=========================================================================================================
448 static inline bool read_named_matrix(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat)
449 {
450 return p_pStream->read_named_matrix(p_Node, matkind, mat);
451 }
452
453 //=========================================================================================================
466 static inline QList<FiffProj> read_proj(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node)
467 {
468 return p_pStream->read_proj(p_Node);
469 }
470
471 //=========================================================================================================
488 inline static bool read_raw_segment(FiffRawData& raw,
489 Eigen::MatrixXd& data,
490 Eigen::MatrixXd& times,
491 fiff_int_t from = -1,
492 fiff_int_t to = -1,
493 Eigen::MatrixXi sel = defaultMatrixXi)
494 {
495 return raw.read_raw_segment(data, times, from, to, sel);
496 }
497
515 inline static bool read_raw_segment(FiffRawData& raw,
516 Eigen::MatrixXd& data,
517 Eigen::MatrixXd& times,
518 Eigen::SparseMatrix<double>& mult,
519 fiff_int_t from = -1,
520 fiff_int_t to = -1,
521 Eigen::MatrixXi sel = defaultMatrixXi)
522 {
523 return raw.read_raw_segment(data, times, mult, from, to, sel);
524 }
525
526 //=========================================================================================================
541 inline static bool read_tag(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag, qint64 pos = -1)
542 {
543 return p_pStream->read_tag(p_pTag, pos);
544 }
545
546 //=========================================================================================================
560 static inline bool read_tag_info(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag)
561 {
562 return p_pStream->read_tag_info(p_pTag);
563 }
564
565 //=========================================================================================================
579 inline static bool setup_read_raw(QIODevice& p_IODevice, FiffRawData& data, bool allow_maxshield = false)
580 {
581 return FiffStream::setup_read_raw(p_IODevice, data, allow_maxshield);
582 }
583
584 //=========================================================================================================
596 inline static QStringList split_name_list(QString p_sNameList)
597 {
598 return FiffStream::split_name_list(p_sNameList);
599 }
600
601 //=========================================================================================================
612 inline static void start_block(FiffStream* p_pStream, fiff_int_t kind)
613 {
614 p_pStream->start_block(kind);
615 }
616
617 //=========================================================================================================
629 inline static FiffStream::SPtr start_file(QIODevice& p_IODevice)
630 {
631 return FiffStream::start_file(p_IODevice);
632 }
633
634 //=========================================================================================================
649 inline static FiffStream::SPtr start_writing_raw(QIODevice& p_IODevice,
650 const FiffInfo& info,
651 Eigen::RowVectorXd& cals,
652 Eigen::MatrixXi sel = defaultMatrixXi)
653 {
654 return FiffStream::start_writing_raw(p_IODevice, info, cals, sel);
655 }
656
657 //=========================================================================================================
670 inline static void write_ch_info(FiffStream* p_pStream, const FiffChInfo& ch)
671 {
672 p_pStream->write_ch_info(ch);
673 }
674
675 //=========================================================================================================
686 inline static void write_coord_trans(FiffStream* p_pStream, FiffCoordTrans& trans)
687 {
688 p_pStream->write_coord_trans(trans);
689 }
690
691 //=========================================================================================================
702 inline static void write_ctf_comp(FiffStream* p_pStream, QList<FiffCtfComp>& comps)
703 {
704 p_pStream->write_ctf_comp(comps);
705 }
706
707 //=========================================================================================================
718 inline static void write_dig_point(FiffStream* p_pStream, FiffDigPoint& dig)
719 {
720 p_pStream->write_dig_point(dig);
721 }
722
723 //=========================================================================================================
736 inline static void write_id(FiffStream* p_pStream, fiff_int_t kind, FiffId& id = FiffId::getDefault())
737 {
738 p_pStream->write_id(kind, id);
739 }
740
741 //=========================================================================================================
754 inline static void write_int(FiffStream* p_pStream, fiff_int_t kind, const fiff_int_t* data, fiff_int_t nel = 1)
755 {
756 p_pStream->write_int(kind, data, nel);
757 }
758
759 //=========================================================================================================
772 inline static void write_float(FiffStream* p_pStream, fiff_int_t kind, float* data, fiff_int_t nel = 1)
773 {
774 p_pStream->write_float(kind, data, nel);
775 }
776
777 //=========================================================================================================
789 inline static void write_float_matrix(FiffStream* p_pStream, fiff_int_t kind, Eigen::MatrixXf& mat)
790 {
791 p_pStream->write_float_matrix(kind, mat);
792 }
793
794 //=========================================================================================================
806 inline static void write_name_list(FiffStream* p_pStream, fiff_int_t kind, QStringList& data)
807 {
808 p_pStream->write_name_list(kind, data);
809 }
810
811 //=========================================================================================================
823 inline static void write_named_matrix(FiffStream* p_pStream, fiff_int_t kind, FiffNamedMatrix& mat)
824 {
825 p_pStream->write_named_matrix(kind, mat);
826 }
827
828 //=========================================================================================================
839 inline static void write_proj(FiffStream* p_pStream, QList<FiffProj>& projs)
840 {
841 p_pStream->write_proj(projs);
842 }
843
844 //=========================================================================================================
858 inline static bool write_raw_buffer(FiffStream* p_pStream, const Eigen::MatrixXd& buf, const Eigen::MatrixXd& cals)
859 {
860 return p_pStream->write_raw_buffer(buf, cals);
861 }
862
863 //=========================================================================================================
875 inline static void write_string(FiffStream* p_pStream, fiff_int_t kind, QString& data)
876 {
877 p_pStream->write_string(kind, data);
878 }
879};
880
881//=============================================================================================================
882// INLINE DEFINITIONS
883//=============================================================================================================
884} // NAMESPACE
885
886#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...
4x4 affine FIFF coordinate transform (FIFF_COORD_TRANS) annotated with source/destination coordinate-...
#define FIFFV_ASPECT_AVERAGE
Definition fiff_file.h:431
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:92
static bool read_named_matrix(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
Definition fiff.h:448
static QList< FiffProj > read_proj(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node)
Definition fiff.h:466
static void write_ctf_comp(FiffStream *p_pStream, QList< FiffCtfComp > &comps)
Definition fiff.h:702
static bool open(QIODevice &p_IODevice, FiffStream::SPtr &p_pStream)
Definition fiff.h:217
static void write_float(FiffStream *p_pStream, fiff_int_t kind, float *data, fiff_int_t nel=1)
Definition fiff.h:772
static Eigen::RowVectorXi pick_channels(QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:237
static void write_named_matrix(FiffStream *p_pStream, fiff_int_t kind, FiffNamedMatrix &mat)
Definition fiff.h:823
static bool read_meas_info(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, FiffInfo &p_Info, FiffDirNode::SPtr &p_NodeInfo)
Definition fiff.h:428
static void write_dig_point(FiffStream *p_pStream, FiffDigPoint &dig)
Definition fiff.h:718
static void write_int(FiffStream *p_pStream, fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1)
Definition fiff.h:754
static bool read_tag(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag, qint64 pos=-1)
Definition fiff.h:541
static void write_id(FiffStream *p_pStream, fiff_int_t kind, FiffId &id=FiffId::getDefault())
Definition fiff.h:736
static bool read_evoked_set(QIODevice &p_IODevice, FiffEvokedSet &data)
Definition fiff.h:407
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:388
static void end_file(FiffStream *p_pStream)
Definition fiff.h:149
static bool read_tag_info(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag)
Definition fiff.h:560
static void write_ch_info(FiffStream *p_pStream, const FiffChInfo &ch)
Definition fiff.h:670
static void start_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:612
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, Eigen::RowVectorXd &cals, Eigen::MatrixXi sel=defaultMatrixXi)
Definition fiff.h:649
static void write_proj(FiffStream *p_pStream, QList< FiffProj > &projs)
Definition fiff.h:839
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:488
virtual ~Fiff()
Definition fiff.h:98
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:515
static void write_float_matrix(FiffStream *p_pStream, fiff_int_t kind, Eigen::MatrixXf &mat)
Definition fiff.h:789
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:318
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:118
static void write_name_list(FiffStream *p_pStream, fiff_int_t kind, QStringList &data)
Definition fiff.h:806
static void end_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:134
static void finish_writing_raw(FiffStream *p_pStream)
Definition fiff.h:164
static bool find_evoked(FiffEvokedSet &orig)
Definition fiff.h:277
static void write_coord_trans(FiffStream *p_pStream, FiffCoordTrans &trans)
Definition fiff.h:686
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
Definition fiff.h:629
static QStringList read_bad_channels(FiffStream::SPtr &p_pStream, FiffDirNode::SPtr &p_Node)
Definition fiff.h:341
static QList< FiffCtfComp > read_ctf_comp(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, const QList< FiffChInfo > &p_Chs)
Definition fiff.h:361
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
Definition fiff.h:579
static FiffInfo pick_info(const FiffInfo &info, const Eigen::RowVectorXi &sel=defaultVectorXi)
Definition fiff.h:295
static QStringList split_name_list(QString p_sNameList)
Definition fiff.h:596
static QList< FiffDirNode::SPtr > dir_tree_find(const FiffDirNode::SPtr &p_Node, fiff_int_t p_kind)
Definition fiff.h:182
static FiffEvokedSet pick_channels(FiffEvokedSet &orig, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:258
static bool write_raw_buffer(FiffStream *p_pStream, const Eigen::MatrixXd &buf, const Eigen::MatrixXd &cals)
Definition fiff.h:858
static bool invert_transform(FiffCoordTrans &p_Transform)
Definition fiff.h:199
static void write_string(FiffStream *p_pStream, fiff_int_t kind, QString &data)
Definition fiff.h:875
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