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//=============================================================================================================
90{
91public:
92 //=========================================================================================================
96 virtual ~Fiff(){ }
97
98 //Alphabetic ordered MNE Toolbox fiff_function
99 //=========================================================================================================
114 inline static bool copy_tree(FiffStream::SPtr p_pStreamIn, const FiffId& in_id, const QList<FiffDirNode::SPtr>& p_Nodes, FiffStream::SPtr& p_pStreamOut)
115 {
116 return FiffDirNode::copy_tree(p_pStreamIn, in_id, p_Nodes, p_pStreamOut);
117 }
118
119 //=========================================================================================================
130 inline static void end_block(FiffStream* p_pStream, fiff_int_t kind)
131 {
132 p_pStream->end_block(kind);
133 }
134
135 //=========================================================================================================
145 inline static void end_file(FiffStream* p_pStream)
146 {
147 p_pStream->end_file();
148 }
149
150 //=========================================================================================================
160 inline static void finish_writing_raw(FiffStream* p_pStream)
161 {
162 p_pStream->finish_writing_raw();
163 }
164
165 //=========================================================================================================
178 inline static QList<FiffDirNode::SPtr> dir_tree_find(const FiffDirNode::SPtr& p_Node, fiff_int_t p_kind)
179 {
180 return p_Node->dir_tree_find(p_kind);
181 }
182
183 //=========================================================================================================
195 inline static bool invert_transform(FiffCoordTrans& p_Transform)
196 {
197 return p_Transform.invert_transform();
198 }
199
200 //=========================================================================================================
213 static bool open(QIODevice& p_IODevice, FiffStream::SPtr& p_pStream)
214 {
215 p_pStream = FiffStream::SPtr(new FiffStream(&p_IODevice));
216
217 return p_pStream->open();
218 }
219
220 //=========================================================================================================
233 inline static Eigen::RowVectorXi pick_channels(QStringList& ch_names,
234 const QStringList& include = defaultQStringList,
235 const QStringList& exclude = defaultQStringList)
236 {
237 return FiffInfo::pick_channels(ch_names, include, exclude);
238 }
239
240 //=========================================================================================================
255 const QStringList& include = defaultQStringList,
256 const QStringList& exclude = defaultQStringList)
257 {
258 return orig.pick_channels(include, exclude);
259 }
260
261 //=========================================================================================================
273 inline static bool find_evoked(FiffEvokedSet& orig)
274 {
275 return orig.find_evoked(orig);
276 }
277
278 //=========================================================================================================
291 inline static FiffInfo pick_info(const FiffInfo& info,
292 const Eigen::RowVectorXi &sel = defaultVectorXi)
293 {
294 return info.pick_info(sel);
295 }
296
297 //=========================================================================================================
314 inline static Eigen::RowVectorXi pick_types(FiffInfo &info,
315 bool meg,
316 bool eeg = false,
317 bool stim = false,
318 const QStringList& include = defaultQStringList,
319 const QStringList& exclude = defaultQStringList)
320 {
321 return info.pick_types(meg, eeg, stim, include, exclude);
322 }
323
324 //=========================================================================================================
337 static inline QStringList read_bad_channels(FiffStream::SPtr& p_pStream,
338 FiffDirNode::SPtr& p_Node)
339 {
340 return p_pStream->read_bad_channels(p_Node);
341 }
342
343 //=========================================================================================================
357 static inline QList<FiffCtfComp> read_ctf_comp(FiffStream::SPtr& p_pStream,
358 const FiffDirNode::SPtr& p_Node,
359 const QList<FiffChInfo>& p_Chs)
360 {
361 return p_pStream->read_ctf_comp(p_Node, p_Chs);
362 }
363
364 //=========================================================================================================
384 static inline bool read_evoked(QIODevice& p_IODevice,
385 FiffEvoked& data,
386 QVariant setno = 0,
387 QPair<float,float> baseline = defaultFloatPair,
388 bool proj = true,
389 fiff_int_t p_aspect_kind = FIFFV_ASPECT_AVERAGE)
390 {
391 return FiffEvoked::read(p_IODevice, data, setno, baseline, proj, p_aspect_kind);
392 }
393
394 //=========================================================================================================
403 static inline bool read_evoked_set(QIODevice& p_IODevice, FiffEvokedSet& data)
404 {
405 return FiffEvokedSet::read(p_IODevice, data);
406 }
407
408 //=========================================================================================================
424 static inline bool read_meas_info(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, FiffInfo& p_Info, FiffDirNode::SPtr& p_NodeInfo)
425 {
426 return p_pStream->read_meas_info(p_Node, p_Info, p_NodeInfo);
427 }
428
429 //=========================================================================================================
444 static inline bool read_named_matrix(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat)
445 {
446 return p_pStream->read_named_matrix(p_Node, matkind, mat);
447 }
448
449 //=========================================================================================================
462 static inline QList<FiffProj> read_proj(FiffStream::SPtr& p_pStream, const FiffDirNode::SPtr& p_Node)
463 {
464 return p_pStream->read_proj(p_Node);
465 }
466
467 //=========================================================================================================
484 inline static bool read_raw_segment(FiffRawData& raw,
485 Eigen::MatrixXd& data,
486 Eigen::MatrixXd& times,
487 fiff_int_t from = -1,
488 fiff_int_t to = -1,
489 Eigen::MatrixXi sel = defaultMatrixXi)
490 {
491 return raw.read_raw_segment(data, times, from, to, sel);
492 }
493
511 inline static bool read_raw_segment(FiffRawData& raw,
512 Eigen::MatrixXd& data,
513 Eigen::MatrixXd& times,
514 Eigen::SparseMatrix<double>& mult,
515 fiff_int_t from = -1,
516 fiff_int_t to = -1,
517 Eigen::MatrixXi sel = defaultMatrixXi)
518 {
519 return raw.read_raw_segment(data, times, mult, from, to, sel);
520 }
521
522 //=========================================================================================================
537 inline static bool read_tag(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag, qint64 pos = -1)
538 {
539 return p_pStream->read_tag(p_pTag, pos);
540 }
541
542 //=========================================================================================================
556 static inline bool read_tag_info(FiffStream::SPtr& p_pStream, FiffTag::UPtr& p_pTag)
557 {
558 return p_pStream->read_tag_info(p_pTag);
559 }
560
561 //=========================================================================================================
575 inline static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData& data, bool allow_maxshield = false)
576 {
577 return FiffStream::setup_read_raw(p_IODevice, data, allow_maxshield);
578 }
579
580 //=========================================================================================================
592 inline static QStringList split_name_list(QString p_sNameList)
593 {
594 return FiffStream::split_name_list(p_sNameList);
595 }
596
597 //=========================================================================================================
608 inline static void start_block(FiffStream* p_pStream, fiff_int_t kind)
609 {
610 p_pStream->start_block(kind);
611 }
612
613 //=========================================================================================================
625 inline static FiffStream::SPtr start_file(QIODevice& p_IODevice)
626 {
627 return FiffStream::start_file(p_IODevice);
628 }
629
630 //=========================================================================================================
645 inline static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice,
646 const FiffInfo& info,
647 Eigen::RowVectorXd& cals,
648 Eigen::MatrixXi sel = defaultMatrixXi)
649 {
650 return FiffStream::start_writing_raw(p_IODevice, info, cals, sel);
651 }
652
653 //=========================================================================================================
666 inline static void write_ch_info(FiffStream* p_pStream, const FiffChInfo& ch)
667 {
668 p_pStream->write_ch_info(ch);
669 }
670
671 //=========================================================================================================
682 inline static void write_coord_trans(FiffStream* p_pStream, FiffCoordTrans& trans)
683 {
684 p_pStream->write_coord_trans(trans);
685 }
686
687 //=========================================================================================================
698 inline static void write_ctf_comp(FiffStream* p_pStream, QList<FiffCtfComp>& comps)
699 {
700 p_pStream->write_ctf_comp(comps);
701 }
702
703 //=========================================================================================================
714 inline static void write_dig_point(FiffStream* p_pStream, FiffDigPoint& dig)
715 {
716 p_pStream->write_dig_point(dig);
717 }
718
719 //=========================================================================================================
732 inline static void write_id(FiffStream* p_pStream, fiff_int_t kind, FiffId& id = FiffId::getDefault())
733 {
734 p_pStream->write_id(kind, id);
735 }
736
737 //=========================================================================================================
750 inline static void write_int(FiffStream* p_pStream, fiff_int_t kind, const fiff_int_t* data, fiff_int_t nel = 1)
751 {
752 p_pStream->write_int(kind, data, nel);
753 }
754
755 //=========================================================================================================
768 inline static void write_float(FiffStream* p_pStream, fiff_int_t kind, float* data, fiff_int_t nel = 1)
769 {
770 p_pStream->write_float(kind, data, nel);
771 }
772
773 //=========================================================================================================
785 inline static void write_float_matrix(FiffStream* p_pStream, fiff_int_t kind, Eigen::MatrixXf& mat)
786 {
787 p_pStream->write_float_matrix(kind, mat);
788 }
789
790 //=========================================================================================================
802 inline static void write_name_list(FiffStream* p_pStream, fiff_int_t kind, QStringList& data)
803 {
804 p_pStream->write_name_list(kind, data);
805 }
806
807 //=========================================================================================================
819 inline static void write_named_matrix(FiffStream* p_pStream, fiff_int_t kind,FiffNamedMatrix& mat)
820 {
821 p_pStream->write_named_matrix(kind, mat);
822 }
823
824 //=========================================================================================================
835 inline static void write_proj(FiffStream* p_pStream, QList<FiffProj>& projs)
836 {
837 p_pStream->write_proj(projs);
838 }
839
840 //=========================================================================================================
854 inline static bool write_raw_buffer(FiffStream* p_pStream, const Eigen::MatrixXd& buf, const Eigen::MatrixXd& cals)
855 {
856 return p_pStream->write_raw_buffer(buf, cals);
857 }
858
859 //=========================================================================================================
871 inline static void write_string(FiffStream* p_pStream, fiff_int_t kind, QString& data)
872 {
873 p_pStream->write_string(kind, data);
874 }
875};
876
877//=============================================================================================================
878// INLINE DEFINITIONS
879//=============================================================================================================
880} // NAMESPACE
881
882#endif // FIFF_H
FIFF continuous raw recording: FiffInfo plus a directory of FIFF_DATA_BUFFER tags for random-access s...
Symbolic FIFF tag, block, value, unit and channel-type constants shared across FIFFLIB.
Stim-channel event list (sample, previous value, new value triples) with FIFF read/write helpers.
Matrix paired with row and column name lists, the on-disk form of FIFFB_PROJ_ITEM / FIFFB_MNE_NAMED_M...
SSP projection item: a named projection vector set with active/desired flags, parsed from FIFFB_PROJ_...
Recursive node of the parsed FIFF block tree (FIFFB_* hierarchy with directory entries and children).
Single entry of the FIFF tag directory: kind, type, byte size and absolute file position.
Set of averaged evoked responses sharing a FiffInfo, plus the ave-style category / rejection descript...
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
One entry of the per-buffer raw-data directory: kind, first sample, number of samples and on-disk pos...
#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
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
4x4 affine FIFF coordinate transform (FIFF_COORD_TRANS) annotated with source/destination coordinate-...
FIFF binary tag-stream layer: wraps a QIODevice to read and write FIFF tags, directories,...
Primitive scalar typedefs and forward-compatible aliases backing the FIFF type system.
CTF / 4D Neuroimaging software gradient-compensation matrix block (FIFFB_MNE_CTF_COMP_DATA).
FIFF file I/O, in-memory data structures and high-level readers/writers.
MATLAB-style static facade re-exporting every public FIFFLIB reader/writer for parity with the mne-ma...
Definition fiff.h:90
static bool read_named_matrix(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
Definition fiff.h:444
static QList< FiffProj > read_proj(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node)
Definition fiff.h:462
static void write_ctf_comp(FiffStream *p_pStream, QList< FiffCtfComp > &comps)
Definition fiff.h:698
static bool open(QIODevice &p_IODevice, FiffStream::SPtr &p_pStream)
Definition fiff.h:213
static void write_float(FiffStream *p_pStream, fiff_int_t kind, float *data, fiff_int_t nel=1)
Definition fiff.h:768
static Eigen::RowVectorXi pick_channels(QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:233
static void write_named_matrix(FiffStream *p_pStream, fiff_int_t kind, FiffNamedMatrix &mat)
Definition fiff.h:819
static bool read_meas_info(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, FiffInfo &p_Info, FiffDirNode::SPtr &p_NodeInfo)
Definition fiff.h:424
static void write_dig_point(FiffStream *p_pStream, FiffDigPoint &dig)
Definition fiff.h:714
static void write_int(FiffStream *p_pStream, fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1)
Definition fiff.h:750
static bool read_tag(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag, qint64 pos=-1)
Definition fiff.h:537
static void write_id(FiffStream *p_pStream, fiff_int_t kind, FiffId &id=FiffId::getDefault())
Definition fiff.h:732
static bool read_evoked_set(QIODevice &p_IODevice, FiffEvokedSet &data)
Definition fiff.h:403
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:384
static void end_file(FiffStream *p_pStream)
Definition fiff.h:145
static bool read_tag_info(FiffStream::SPtr &p_pStream, FiffTag::UPtr &p_pTag)
Definition fiff.h:556
static void write_ch_info(FiffStream *p_pStream, const FiffChInfo &ch)
Definition fiff.h:666
static void start_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:608
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, Eigen::RowVectorXd &cals, Eigen::MatrixXi sel=defaultMatrixXi)
Definition fiff.h:645
static void write_proj(FiffStream *p_pStream, QList< FiffProj > &projs)
Definition fiff.h:835
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:484
virtual ~Fiff()
Definition fiff.h:96
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:511
static void write_float_matrix(FiffStream *p_pStream, fiff_int_t kind, Eigen::MatrixXf &mat)
Definition fiff.h:785
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:314
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:114
static void write_name_list(FiffStream *p_pStream, fiff_int_t kind, QStringList &data)
Definition fiff.h:802
static void end_block(FiffStream *p_pStream, fiff_int_t kind)
Definition fiff.h:130
static void finish_writing_raw(FiffStream *p_pStream)
Definition fiff.h:160
static bool find_evoked(FiffEvokedSet &orig)
Definition fiff.h:273
static void write_coord_trans(FiffStream *p_pStream, FiffCoordTrans &trans)
Definition fiff.h:682
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
Definition fiff.h:625
static QStringList read_bad_channels(FiffStream::SPtr &p_pStream, FiffDirNode::SPtr &p_Node)
Definition fiff.h:337
static QList< FiffCtfComp > read_ctf_comp(FiffStream::SPtr &p_pStream, const FiffDirNode::SPtr &p_Node, const QList< FiffChInfo > &p_Chs)
Definition fiff.h:357
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
Definition fiff.h:575
static FiffInfo pick_info(const FiffInfo &info, const Eigen::RowVectorXi &sel=defaultVectorXi)
Definition fiff.h:291
static QStringList split_name_list(QString p_sNameList)
Definition fiff.h:592
static QList< FiffDirNode::SPtr > dir_tree_find(const FiffDirNode::SPtr &p_Node, fiff_int_t p_kind)
Definition fiff.h:178
static FiffEvokedSet pick_channels(FiffEvokedSet &orig, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition fiff.h:254
static bool write_raw_buffer(FiffStream *p_pStream, const Eigen::MatrixXd &buf, const Eigen::MatrixXd &cals)
Definition fiff.h:854
static bool invert_transform(FiffCoordTrans &p_Transform)
Definition fiff.h:195
static void write_string(FiffStream *p_pStream, fiff_int_t kind, QString &data)
Definition fiff.h:871
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:75
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:66
static FiffId & getDefault()
Definition fiff_id.cpp:196
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...
Definition fiff_info.h:88
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.
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:164