MNE-CPP  beta 1.0
fiff.h
Go to the documentation of this file.
1 //=============================================================================================================
38 #ifndef FIFF_H
39 #define FIFF_H
40 
41 
42 //*************************************************************************************************************
43 //=============================================================================================================
44 // FIFF INCLUDES
45 //=============================================================================================================
46 
47 #include "fiff_global.h"
48 #include "fiff_constants.h"
49 #include "fiff_coord_trans.h"
50 #include "fiff_dir_tree.h"
51 #include "fiff_dir_entry.h"
52 #include "fiff_named_matrix.h"
53 #include "fiff_tag.h"
54 #include "fiff_types.h"
55 #include "fiff_proj.h"
56 #include "fiff_ctf_comp.h"
57 #include "fiff_info.h"
58 #include "fiff_raw_data.h"
59 #include "fiff_raw_dir.h"
60 #include "fiff_stream.h"
61 #include "fiff_evoked_set.h"
62 #include "fiff_io.h"
63 
64 //*************************************************************************************************************
65 //=============================================================================================================
66 // Eigen INCLUDES
67 //=============================================================================================================
68 
69 #include <Eigen/Core>
70 
71 
72 //*************************************************************************************************************
73 //=============================================================================================================
74 // STL INCLUDES
75 //=============================================================================================================
76 
77 #include <iostream>
78 
79 
80 //*************************************************************************************************************
81 //=============================================================================================================
82 // QT INCLUDES
83 //=============================================================================================================
84 
85 #include <QDataStream>
86 #include <QDebug>
87 #include <QFile>
88 #include <QIODevice>
89 #include <QList>
90 #include <QStringList>
91 
92 
93 //*************************************************************************************************************
94 //=============================================================================================================
95 // DEFINE NAMESPACE FIFFLIB
96 //=============================================================================================================
97 
98 namespace FIFFLIB
99 {
100 
101 //*************************************************************************************************************
102 //=============================================================================================================
103 // USED NAMESPACES
104 //=============================================================================================================
105 
106 using namespace Eigen;
107 
108 
109 //=============================================================================================================
117 {
118 public:
119  //=========================================================================================================
123  virtual ~Fiff(){ }
124 
125  //Alphabetic ordered MNE Toolbox fiff_function
126  //=========================================================================================================
143  inline static bool copy_tree(FiffStream::SPtr p_pStreamIn, FiffId& in_id, QList<FiffDirTree>& p_Nodes, FiffStream::SPtr p_pStreamOut)
144  {
145  return FiffDirTree::copy_tree(p_pStreamIn, in_id, p_Nodes, p_pStreamOut);
146  }
147 
148  //=========================================================================================================
161  inline static void end_block(FiffStream* p_pStream, fiff_int_t kind)
162  {
163  p_pStream->end_block(kind);
164  }
165 
166  //=========================================================================================================
178  inline static void end_file(FiffStream* p_pStream)
179  {
180  p_pStream->end_file();
181  }
182 
183  //=========================================================================================================
195  inline static void finish_writing_raw(FiffStream* p_pStream)
196  {
197  p_pStream->finish_writing_raw();
198  }
199 
200  //=========================================================================================================
215  inline static QList<FiffDirTree> dir_tree_find(FiffDirTree& p_Node, fiff_int_t p_kind)
216  {
217  return p_Node.dir_tree_find(p_kind);
218  }
219 
220  //=========================================================================================================
234  inline static bool invert_transform(FiffCoordTrans& p_Transform)
235  {
236  return p_Transform.invert_transform();
237  }
238 
239  //=========================================================================================================
254  inline static qint32 make_dir_tree(FiffStream* p_pStream, QList<FiffDirEntry>& p_Dir, FiffDirTree& p_Tree, qint32 start = 0)
255  {
256  return FiffDirTree::make_dir_tree(p_pStream, p_Dir, p_Tree, start);
257  }
258 
259  //=========================================================================================================
276  static bool open(QIODevice& p_IODevice, FiffStream::SPtr& p_pStream, FiffDirTree& p_Tree, QList<FiffDirEntry>& p_Dir)
277  {
278  p_pStream = FiffStream::SPtr(new FiffStream(&p_IODevice));
279 
280  return p_pStream->open(p_Tree, p_Dir);
281  }
282 
283  //=========================================================================================================
298  inline static RowVectorXi pick_channels(QStringList& ch_names, const QStringList& include = defaultQStringList, const QStringList& exclude = defaultQStringList)
299  {
300  return FiffInfo::pick_channels(ch_names, include, exclude);
301  }
302 
303  //=========================================================================================================
319  inline static FiffEvokedSet pick_channels(FiffEvokedSet& orig, const QStringList& include = defaultQStringList, const QStringList& exclude = defaultQStringList)
320  {
321  return orig.pick_channels(include, exclude);
322  }
323 
324  //=========================================================================================================
338  inline static bool find_evoked(FiffEvokedSet& orig)
339  {
340  return orig.find_evoked(orig);
341  }
342 
343  //=========================================================================================================
358  inline static FiffInfo pick_info(const FiffInfo& info, const RowVectorXi &sel = defaultVectorXi)
359  {
360  return info.pick_info(sel);
361  }
362 
363  //=========================================================================================================
382  inline static RowVectorXi pick_types(FiffInfo &info, bool meg, bool eeg = false, bool stim = false, const QStringList& include = defaultQStringList, const QStringList& exclude = defaultQStringList)
383  {
384  return info.pick_types(meg, eeg, stim, include, exclude);
385  }
386 
387  //=========================================================================================================
402  static inline QStringList read_bad_channels(FiffStream* p_pStream, FiffDirTree& p_Node)
403  {
404  return p_pStream->read_bad_channels(p_Node);
405  }
406 
407  //=========================================================================================================
423  static inline QList<FiffCtfComp> read_ctf_comp(FiffStream* p_pStream, const FiffDirTree& p_Node, const QList<FiffChInfo>& p_Chs)
424  {
425  return p_pStream->read_ctf_comp(p_Node, p_Chs);
426  }
427 
428  //=========================================================================================================
450  static inline bool read_evoked(QIODevice& p_IODevice, FiffEvoked& data, QVariant setno = 0, QPair<QVariant,QVariant> baseline = defaultVariantPair, bool proj = true, fiff_int_t p_aspect_kind = FIFFV_ASPECT_AVERAGE)
451  {
452  return FiffEvoked::read(p_IODevice, data, setno, baseline, proj, p_aspect_kind);
453  }
454 
455  //=========================================================================================================
464  static inline bool read_evoked_set(QIODevice& p_IODevice, FiffEvokedSet& data)
465  {
466  return FiffEvokedSet::read(p_IODevice, data);
467  }
468 
469  //=========================================================================================================
487  static inline bool read_meas_info(FiffStream* p_pStream, FiffDirTree& p_Node, FiffInfo& p_Info, FiffDirTree& p_NodeInfo)
488  {
489  return p_pStream->read_meas_info(p_Node, p_Info, p_NodeInfo);
490  }
491 
492  //=========================================================================================================
509  static inline bool read_named_matrix(FiffStream* p_pStream, const FiffDirTree& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat)
510  {
511  return p_pStream->read_named_matrix(p_Node, matkind, mat);
512  }
513 
514  //=========================================================================================================
529  static inline QList<FiffProj> read_proj(FiffStream* p_pStream, const FiffDirTree& p_Node)
530  {
531  return p_pStream->read_proj(p_Node);
532  }
533 
534  //=========================================================================================================
553  inline static bool read_raw_segment(FiffRawData& raw, MatrixXd& data, MatrixXd& times, fiff_int_t from = -1, fiff_int_t to = -1, MatrixXi sel = defaultMatrixXi)
554  {
555  return raw.read_raw_segment(data, times, from, to, sel);
556  }
557 
577  inline static bool read_raw_segment(FiffRawData& raw, MatrixXd& data, MatrixXd& times, SparseMatrix<double>& mult, fiff_int_t from = -1, fiff_int_t to = -1, MatrixXi sel = defaultMatrixXi)
578  {
579  return raw.read_raw_segment(data, times, mult, from, to, sel);
580  }
581 
582  //=========================================================================================================
599  inline static bool read_tag(FiffStream* p_pStream, FiffTag::SPtr& p_pTag, qint64 pos = -1)
600  {
601  return FiffTag::read_tag(p_pStream, p_pTag, pos);
602  }
603 
604  //=========================================================================================================
620  static inline bool read_tag_info(FiffStream* p_pStream, FiffTag::SPtr& p_pTag)
621  {
622  return FiffTag::read_tag_info(p_pStream, p_pTag);
623  }
624 
625  //=========================================================================================================
641  inline static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData& data, bool allow_maxshield = false)
642  {
643  return FiffStream::setup_read_raw(p_IODevice, data, allow_maxshield);
644  }
645 
646  //=========================================================================================================
660  inline static QStringList split_name_list(QString p_sNameList)
661  {
662  return FiffStream::split_name_list(p_sNameList);
663  }
664 
665  //=========================================================================================================
678  inline static void start_block(FiffStream* p_pStream, fiff_int_t kind)
679  {
680  p_pStream->start_block(kind);
681  }
682 
683  //=========================================================================================================
697  inline static FiffStream::SPtr start_file(QIODevice& p_IODevice)
698  {
699  return FiffStream::start_file(p_IODevice);
700  }
701 
702  //=========================================================================================================
719  inline static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo& info, RowVectorXd& cals, MatrixXi sel = defaultMatrixXi)
720  {
721  return FiffStream::start_writing_raw(p_IODevice, info, cals, sel);
722  }
723 
724  //=========================================================================================================
739  inline static void write_ch_info(FiffStream* p_pStream, FiffChInfo* ch)
740  {
741  p_pStream->write_ch_info(ch);
742  }
743 
744  //=========================================================================================================
757  inline static void write_coord_trans(FiffStream* p_pStream, FiffCoordTrans& trans)
758  {
759  p_pStream->write_coord_trans(trans);
760  }
761 
762  //=========================================================================================================
775  inline static void write_ctf_comp(FiffStream* p_pStream, QList<FiffCtfComp>& comps)
776  {
777  p_pStream->write_ctf_comp(comps);
778  }
779 
780  //=========================================================================================================
793  inline static void write_dig_point(FiffStream* p_pStream, FiffDigPoint& dig)
794  {
795  p_pStream->write_dig_point(dig);
796  }
797 
798  //=========================================================================================================
813  inline static void write_id(FiffStream* p_pStream, fiff_int_t kind, FiffId& id = defaultFiffId)
814  {
815  p_pStream->write_id(kind, id);
816  }
817 
818  //=========================================================================================================
833  inline static void write_int(FiffStream* p_pStream, fiff_int_t kind, const fiff_int_t* data, fiff_int_t nel = 1)
834  {
835  p_pStream->write_int(kind, data, nel);
836  }
837 
838  //=========================================================================================================
853  inline static void write_float(FiffStream* p_pStream, fiff_int_t kind, float* data, fiff_int_t nel = 1)
854  {
855  p_pStream->write_float(kind, data, nel);
856  }
857 
858  //=========================================================================================================
872  inline static void write_float_matrix(FiffStream* p_pStream, fiff_int_t kind, MatrixXf& mat)
873  {
874  p_pStream->write_float_matrix(kind, mat);
875  }
876 
877  //=========================================================================================================
891  inline static void write_name_list(FiffStream* p_pStream, fiff_int_t kind, QStringList& data)
892  {
893  p_pStream->write_name_list(kind, data);
894  }
895 
896  //=========================================================================================================
910  inline static void write_named_matrix(FiffStream* p_pStream, fiff_int_t kind,FiffNamedMatrix& mat)
911  {
912  p_pStream->write_named_matrix(kind, mat);
913  }
914 
915  //=========================================================================================================
928  inline static void write_proj(FiffStream* p_pStream, QList<FiffProj>& projs)
929  {
930  p_pStream->write_proj(projs);
931  }
932 
933  //=========================================================================================================
949  inline static bool write_raw_buffer(FiffStream* p_pStream, const MatrixXd& buf, const MatrixXd& cals)
950  {
951  return p_pStream->write_raw_buffer(buf, cals);
952  }
953 
954  //=========================================================================================================
968  inline static void write_string(FiffStream* p_pStream, fiff_int_t kind, QString& data)
969  {
970  p_pStream->write_string(kind, data);
971  }
972 
973 };
974 
975 //*************************************************************************************************************
976 //=============================================================================================================
977 // INLINE DEFINITIONS
978 //=============================================================================================================
979 
980 
981 } // NAMESPACE
982 
983 #endif // FIFF_H
FiffEvokedSet pick_channels(const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList) const
static bool read_raw_segment(FiffRawData &raw, MatrixXd &data, MatrixXd &times, fiff_int_t from=-1, fiff_int_t to=-1, MatrixXi sel=defaultMatrixXi)
Definition: fiff.h:553
static void end_file(FiffStream *p_pStream)
Definition: fiff.h:178
void write_string(fiff_int_t kind, const QString &data)
static bool copy_tree(QSharedPointer< FiffStream > p_pStreamIn, FiffId &in_id, QList< FiffDirTree > &p_Nodes, QSharedPointer< FiffStream > p_pStreamOut)
virtual ~Fiff()
Definition: fiff.h:123
FIFF measurement file information.
Definition: fiff_info.h:96
FiffDirEntry class declaration.
bool write_raw_buffer(const MatrixXd &buf, const RowVectorXd &cals)
static bool read_tag_info(FiffStream *p_pStream, FiffTag::SPtr &p_pTag, bool p_bDoSkip=true)
Definition: fiff_tag.cpp:137
QList< FiffCtfComp > read_ctf_comp(const FiffDirTree &p_Node, const QList< FiffChInfo > &p_Chs)
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
static void write_ctf_comp(FiffStream *p_pStream, QList< FiffCtfComp > &comps)
Definition: fiff.h:775
static RowVectorXi pick_channels(QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition: fiff.h:298
FiffProj class declaration.
Old fiff_type declarations - replace them.
Implementation of a generic Fiff IO interface.
static QList< FiffProj > read_proj(FiffStream *p_pStream, const FiffDirTree &p_Node)
Definition: fiff.h:529
static bool find_evoked(FiffEvokedSet &orig)
Definition: fiff.h:338
QStringList read_bad_channels(const FiffDirTree &p_Node)
static QStringList split_name_list(QString p_sNameList)
QList< FiffDirTree > dir_tree_find(fiff_int_t p_kind) const
static void write_proj(FiffStream *p_pStream, QList< FiffProj > &projs)
Definition: fiff.h:928
Digitization point description.
void write_named_matrix(fiff_int_t kind, const FiffNamedMatrix &mat)
QList< FiffProj > read_proj(const FiffDirTree &p_Node)
FiffDirTree class declaration, which provides fiff dir tree processing methods.
static bool open(QIODevice &p_IODevice, FiffStream::SPtr &p_pStream, FiffDirTree &p_Tree, QList< FiffDirEntry > &p_Dir)
Definition: fiff.h:276
Universially unique identifier.
Definition: fiff_id.h:78
static qint32 make_dir_tree(FiffStream *p_pStream, QList< FiffDirEntry > &p_Dir, FiffDirTree &p_Tree, qint32 start=0)
static qint32 make_dir_tree(FiffStream *p_pStream, QList< FiffDirEntry > &p_Dir, FiffDirTree &p_Tree, qint32 start=0)
Definition: fiff.h:254
static QStringList split_name_list(QString p_sNameList)
Definition: fiff.h:660
FiffInfo pick_info(const RowVectorXi &sel=defaultVectorXi) const
Definition: fiff_info.cpp:300
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
Definition: fiff.h:641
static bool read_tag_info(FiffStream *p_pStream, FiffTag::SPtr &p_pTag)
Definition: fiff.h:620
QSharedPointer< FiffTag > SPtr
Definition: fiff_tag.h:166
static void write_coord_trans(FiffStream *p_pStream, FiffCoordTrans &trans)
Definition: fiff.h:757
static void write_int(FiffStream *p_pStream, fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1)
Definition: fiff.h:833
static bool read_raw_segment(FiffRawData &raw, MatrixXd &data, MatrixXd &times, SparseMatrix< double > &mult, fiff_int_t from=-1, fiff_int_t to=-1, MatrixXi sel=defaultMatrixXi)
Definition: fiff.h:577
FiffNamedMatrix class declaration.
Fiff constants.
static void write_dig_point(FiffStream *p_pStream, FiffDigPoint &dig)
Definition: fiff.h:793
FiffRawDir class declaration.
static bool read_tag(FiffStream *p_pStream, FiffTag::SPtr &p_pTag, qint64 pos=-1)
Definition: fiff_tag.cpp:204
static QStringList read_bad_channels(FiffStream *p_pStream, FiffDirTree &p_Node)
Definition: fiff.h:402
The Fiff class provides static wrapper functions to stay consistent with mne matlab toolbox Note: avo...
Definition: fiff.h:116
static void write_ch_info(FiffStream *p_pStream, FiffChInfo *ch)
Definition: fiff.h:739
static bool invert_transform(FiffCoordTrans &p_Transform)
Definition: fiff.h:234
evoked data
Definition: fiff_evoked.h:91
static void start_block(FiffStream *p_pStream, fiff_int_t kind)
Definition: fiff.h:678
static bool read_evoked_set(QIODevice &p_IODevice, FiffEvokedSet &data)
Definition: fiff.h:464
static RowVectorXi pick_types(FiffInfo &info, bool meg, bool eeg=false, bool stim=false, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition: fiff.h:382
static void write_string(FiffStream *p_pStream, fiff_int_t kind, QString &data)
Definition: fiff.h:968
void write_dig_point(const FiffDigPoint &dig)
QSharedPointer< FiffStream > SPtr
Definition: fiff_stream.h:132
FIFF raw measurement data.
Definition: fiff_raw_data.h:94
bool read_named_matrix(const FiffDirTree &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
static bool read(QIODevice &p_IODevice, FiffEvokedSet &p_FiffEvokedSet, QPair< QVariant, QVariant > baseline=defaultVariantPair, bool proj=true)
void write_float(fiff_int_t kind, const float *data, fiff_int_t nel=1)
FiffInfo class declaration.
static bool read_tag(FiffStream *p_pStream, FiffTag::SPtr &p_pTag, qint64 pos=-1)
Definition: fiff.h:599
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
static void write_float(FiffStream *p_pStream, fiff_int_t kind, float *data, fiff_int_t nel=1)
Definition: fiff.h:853
bool read_raw_segment(MatrixXd &data, MatrixXd &times, fiff_int_t from=-1, fiff_int_t to=-1, const RowVectorXi &sel=defaultRowVectorXi)
static void end_block(FiffStream *p_pStream, fiff_int_t kind)
Definition: fiff.h:161
void write_int(fiff_int_t kind, const fiff_int_t *data, fiff_int_t nel=1)
void start_block(fiff_int_t kind)
static void write_id(FiffStream *p_pStream, fiff_int_t kind, FiffId &id=defaultFiffId)
Definition: fiff.h:813
static QList< FiffCtfComp > read_ctf_comp(FiffStream *p_pStream, const FiffDirTree &p_Node, const QList< FiffChInfo > &p_Chs)
Definition: fiff.h:423
FiffCtfComp class declaration.
#define FIFFSHARED_EXPORT
Definition: fiff_global.h:58
FiffStream class declaration.
void write_ctf_comp(const QList< FiffCtfComp > &comps)
Directory tree structure.
Definition: fiff_dir_tree.h:80
#define FIFFV_ASPECT_AVERAGE
Channel info descriptor.
Definition: fiff_ch_info.h:87
void write_ch_info(FiffChInfo *ch)
static void finish_writing_raw(FiffStream *p_pStream)
Definition: fiff.h:195
Fiff library export/import macros.
Definition: fiff.h:98
RowVectorXi pick_types(const QString meg, bool eeg=false, bool stim=false, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList) const
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, RowVectorXd &cals, MatrixXi sel=defaultMatrixXi)
Definition: fiff.h:719
FiffEvokedSet class declaration.
bool find_evoked(const FiffEvokedSet &p_FiffEvokedSet) const
void write_proj(const QList< FiffProj > &projs)
void write_coord_trans(const FiffCoordTrans &trans)
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
Definition: fiff.h:697
static bool read_meas_info(FiffStream *p_pStream, FiffDirTree &p_Node, FiffInfo &p_Info, FiffDirTree &p_NodeInfo)
Definition: fiff.h:487
void write_float_matrix(fiff_int_t kind, const MatrixXf &mat)
Coordinate transformation description.
void write_id(fiff_int_t kind, const FiffId &id=defaultFiffId)
static void write_name_list(FiffStream *p_pStream, fiff_int_t kind, QStringList &data)
Definition: fiff.h:891
static FiffEvokedSet pick_channels(FiffEvokedSet &orig, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
Definition: fiff.h:319
FiffRawData class declaration.
static bool read_evoked(QIODevice &p_IODevice, FiffEvoked &data, QVariant setno=0, QPair< QVariant, QVariant > baseline=defaultVariantPair, bool proj=true, fiff_int_t p_aspect_kind=FIFFV_ASPECT_AVERAGE)
Definition: fiff.h:450
static bool copy_tree(FiffStream::SPtr p_pStreamIn, FiffId &in_id, QList< FiffDirTree > &p_Nodes, FiffStream::SPtr p_pStreamOut)
Definition: fiff.h:143
FiffTag class declaration, which provides fiff tag I/O and processing methods.
evoked data set
static QList< FiffDirTree > dir_tree_find(FiffDirTree &p_Node, fiff_int_t p_kind)
Definition: fiff.h:215
void write_name_list(fiff_int_t kind, const QStringList &data)
static void write_float_matrix(FiffStream *p_pStream, fiff_int_t kind, MatrixXf &mat)
Definition: fiff.h:872
static FiffInfo pick_info(const FiffInfo &info, const RowVectorXi &sel=defaultVectorXi)
Definition: fiff.h:358
FIFF File I/O routines.
Definition: fiff_stream.h:129
void end_block(fiff_int_t kind)
static bool write_raw_buffer(FiffStream *p_pStream, const MatrixXd &buf, const MatrixXd &cals)
Definition: fiff.h:949
static RowVectorXi pick_channels(const QStringList &ch_names, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList)
static bool read_named_matrix(FiffStream *p_pStream, const FiffDirTree &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
Definition: fiff.h:509
static void write_named_matrix(FiffStream *p_pStream, fiff_int_t kind, FiffNamedMatrix &mat)
Definition: fiff.h:910
FiffCoordTrans class declaration.
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, RowVectorXd &cals, MatrixXi sel=defaultMatrixXi)
bool read_meas_info(const FiffDirTree &p_Node, FiffInfo &p_Info, FiffDirTree &p_NodeInfo)
static bool read(QIODevice &p_IODevice, FiffEvoked &p_FiffEvoked, QVariant setno=0, QPair< QVariant, QVariant > baseline=defaultVariantPair, bool proj=true, fiff_int_t p_aspect_kind=FIFFV_ASPECT_AVERAGE)