v2.0.0
Loading...
Searching...
No Matches
fiff_stream.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef FIFF_STREAM_H
38#define FIFF_STREAM_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "fiff_global.h"
45#include "fiff_types.h"
46#include "fiff_id.h"
47
48#include "fiff_dir_node.h"
49#include "fiff_dir_entry.h"
50
51//=============================================================================================================
52// EIGEN INCLUDES
53//=============================================================================================================
54
55#include <Eigen/Core>
56#include <Eigen/SparseCore>
57
58//=============================================================================================================
59// QT INCLUDES
60//=============================================================================================================
61
62#include <QByteArray>
63#include <QDataStream>
64#include <QIODevice>
65#include <QList>
66#include <QSharedPointer>
67#include <QString>
68#include <QStringList>
69
70//=============================================================================================================
71// DEFINE NAMESPACE FIFFLIB
72//=============================================================================================================
73
74namespace FIFFLIB
75{
76
77//=============================================================================================================
78// FORWARD DECLARATIONS
79//=============================================================================================================
80
81class FiffStream;
82class FiffTag;
83class FiffCtfComp;
84class FiffRawData;
85class FiffInfo;
86class FiffInfoBase;
87class FiffCov;
88class FiffProj;
89class FiffEvokedSet;
90class FiffNamedMatrix;
91class FiffDigPoint;
92class FiffChInfo;
93class FiffChPos;
94class FiffCoordTrans;
96
97//=============================================================================================================
104
105class FIFFSHARED_EXPORT FiffStream : public QDataStream
106{
107public:
108 typedef QSharedPointer<FiffStream> SPtr;
109 typedef QSharedPointer<const FiffStream> ConstSPtr;
110
111 //=========================================================================================================
117 explicit FiffStream(QIODevice *p_pIODevice);
118
119 //=========================================================================================================
126 explicit FiffStream(QByteArray * a, QIODevice::OpenMode mode);
127
128 //=========================================================================================================
134 QString streamName();
135
136 //=========================================================================================================
142 FiffId id() const;
143
144 //=========================================================================================================
151 QList<FiffDirEntry::SPtr>& dir();
152
153 //=========================================================================================================
160 const QList<FiffDirEntry::SPtr>& dir() const;
161
162 //=========================================================================================================
168 int nent() const;
169
170 //=========================================================================================================
177 const FiffDirNode::SPtr& dirtree() const;
178
179 //=========================================================================================================
189
190 //=========================================================================================================
194 void end_file();
195
196 //=========================================================================================================
201 void finish_writing_raw();
202
203 //=========================================================================================================
214 bool get_evoked_entries(const QList<FiffDirNode::SPtr> &evoked_node, QStringList &comments, QList<fiff_int_t> &aspect_kinds, QString &t);
215
216 //=========================================================================================================
222// using QFile::open;
223
224 //=========================================================================================================
232 bool open(QIODevice::OpenModeFlag mode = QIODevice::ReadOnly);
233
234 //=========================================================================================================
241 bool close();
242
243 //=========================================================================================================
251 FiffDirNode::SPtr make_subtree(QList<FiffDirEntry::SPtr>& dentry);
252
253 //=========================================================================================================
265 QStringList read_bad_channels(const FiffDirNode::SPtr& p_Node);
266
267 //=========================================================================================================
279 bool read_cov(const FiffDirNode::SPtr& p_Node, fiff_int_t cov_kind, FiffCov& p_covData);
280
281 //=========================================================================================================
292 QList<FiffCtfComp> read_ctf_comp(const FiffDirNode::SPtr& p_Node, const QList<FiffChInfo>& p_Chs);
293
294 //=========================================================================================================
305 bool read_digitizer_data(const FiffDirNode::SPtr& p_Node, FiffDigitizerData& p_digData);
306
307 //=========================================================================================================
320 bool read_meas_info(const FiffDirNode::SPtr& p_Node, FiffInfo& p_Info, FiffDirNode::SPtr& p_NodeInfo);
321
322 //=========================================================================================================
333 bool read_meas_info_base(const FiffDirNode::SPtr& p_Node, FiffInfoBase& p_InfoForward);
334
335 //=========================================================================================================
347 bool read_named_matrix(const FiffDirNode::SPtr& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat);
348
349 //=========================================================================================================
357 QList<FiffProj> read_proj(const FiffDirNode::SPtr& p_Node);
358
359 //=========================================================================================================
369 bool read_tag_data(QSharedPointer<FiffTag>& p_pTag, fiff_long_t pos = -1);
370
371 //=========================================================================================================
381 fiff_long_t read_tag_info(QSharedPointer<FiffTag>& p_pTag, bool p_bDoSkip = true);
382
383 //=========================================================================================================
392 bool read_rt_tag(QSharedPointer<FiffTag>& p_pTag);
393
394 //=========================================================================================================
404 bool read_tag(QSharedPointer<FiffTag>& p_pTag,
405 fiff_long_t pos = -1);
406
407 //=========================================================================================================
419 static bool setup_read_raw(QIODevice &p_IODevice,
420 FiffRawData& data,
421 bool allow_maxshield = true,
422 bool is_littleEndian = false);
423
424 //=========================================================================================================
434 static QStringList split_name_list(QString p_sNameList);
435
436 //=========================================================================================================
445
446 //=========================================================================================================
454 static FiffStream::SPtr start_file(QIODevice& p_IODevice);
455
456 //=========================================================================================================
464 static FiffStream::SPtr open_update(QIODevice& p_IODevice);
465
466 //=========================================================================================================
480 static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice,
481 const FiffInfo& info,
482 Eigen::RowVectorXd& cals,
483 Eigen::MatrixXi sel = defaultMatrixXi,
484 bool bResetRange = true);
485
486 //=========================================================================================================
496 fiff_long_t write_tag(const QSharedPointer<FiffTag>& p_pTag, fiff_long_t pos = -1);
497
498 //=========================================================================================================
509
510 //=========================================================================================================
518 fiff_long_t write_ch_pos(const FiffChPos& chpos);
519
520 //=========================================================================================================
529
530 //=========================================================================================================
538 fiff_long_t write_cov(const FiffCov &p_FiffCov);
539
540 //=========================================================================================================
550 fiff_long_t write_ctf_comp(const QList<FiffCtfComp>& comps);
551
552 //=========================================================================================================
563
564 //=========================================================================================================
576
577 //=========================================================================================================
587 fiff_long_t write_dir_entries(const QList<FiffDirEntry::SPtr>& dir, fiff_long_t pos = -1);
588
589 //=========================================================================================================
599 fiff_long_t write_double(fiff_int_t kind, const double* data, fiff_int_t nel = 1);
600
601 //=========================================================================================================
612
613 //=========================================================================================================
621 fiff_long_t write_info_base(const FiffInfoBase & p_FiffInfoBase);
622
623 //=========================================================================================================
635
636 //=========================================================================================================
647 fiff_long_t write_int_matrix(fiff_int_t kind, const Eigen::MatrixXi& mat);
648
649 //=========================================================================================================
659 fiff_long_t write_float(fiff_int_t kind, const float* data, fiff_int_t nel = 1);
660
661 //=========================================================================================================
670 fiff_long_t write_float_matrix(fiff_int_t kind, const Eigen::MatrixXf& mat);
671
672 //=========================================================================================================
683 fiff_long_t write_float_sparse_ccs(fiff_int_t kind, const Eigen::SparseMatrix<float>& mat);
684
685 //=========================================================================================================
696 fiff_long_t write_float_sparse_rcs(fiff_int_t kind, const Eigen::SparseMatrix<float>& mat);
697
698 //=========================================================================================================
709 fiff_long_t write_name_list(fiff_int_t kind, const QStringList& data);
710
711 //=========================================================================================================
723
724 //=========================================================================================================
736 fiff_long_t write_evoked_set(const FiffEvokedSet& p_FiffEvokedSet);
737
738 //=========================================================================================================
748 fiff_long_t write_proj(const QList<FiffProj>& projs);
749
750 //=========================================================================================================
761 bool write_raw_buffer(const Eigen::MatrixXd& buf, const Eigen::RowVectorXd& cals);
762
763 //=========================================================================================================
774 bool write_raw_buffer(const Eigen::MatrixXd& buf, const Eigen::SparseMatrix<double>& mult);
775
776 //=========================================================================================================
787 bool write_raw_buffer(const Eigen::MatrixXd& buf);
788
789 //=========================================================================================================
798 fiff_long_t write_string(fiff_int_t kind, const QString& data);
799
800 //=========================================================================================================
807 void write_rt_command(fiff_int_t command, const QString& data);
808
809private:
810 //=========================================================================================================
818 bool check_beginning(QSharedPointer<FiffTag>& p_pTag);
819
820 //=========================================================================================================
828 QList<FiffDirEntry::SPtr> make_dir(bool *ok=nullptr);
829
830private:
831
832// char *file_name; /**< Name of the file. */ -> Use streamName() instead
833// FILE *fd; /**< The normal file descriptor. */ -> file descitpion is part of the stream: stream->device()
834 FiffId m_id;
835 QList<FiffDirEntry::SPtr> m_dir;
836// int nent; /**< How many entries?. */ -> Use nent() instead
837 FiffDirNode::SPtr m_dirtree;
838// char *ext_file_name; /**< Name of the file holding the external data. */
839// FILE *ext_fd; /**< The file descriptor of the above file if open . */
840
841};
842} // NAMESPACE
843
844#endif // FIFF_STREAM_H
Fiff library export/import macros.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:52
#define FIFFV_NEXT_SEQ
FiffDirEntry class declaration.
FiffDirNode class declaration, which provides fiff dir tree processing methods.
FiffId class declaration.
Old fiff_type declarations - replace them.
void write_coord_trans(FiffStream::SPtr &t_pStream, const FiffCoordTrans &trans)
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
qint32 fiff_int_t
Definition fiff_types.h:89
qint64 fiff_long_t
Definition fiff_types.h:91
Channel info descriptor.
Measurement channel position and coil type.
Definition fiff_ch_pos.h:67
Coordinate transformation description.
covariance data
Definition fiff_cov.h:84
CTF software compensation data.
Digitization point description.
Digitization points container and description.
QSharedPointer< FiffDirNode > SPtr
Universally unique identifier.
Definition fiff_id.h:67
static FiffId & getDefault()
Definition fiff_id.cpp:210
FIFF measurement file information.
Definition fiff_info.h:85
light measurement info
SSP projector data.
Definition fiff_proj.h:82
FIFF raw measurement data.
FIFF File I/O routines.
fiff_long_t write_tag(const QSharedPointer< FiffTag > &p_pTag, fiff_long_t pos=-1)
bool write_raw_buffer(const Eigen::MatrixXd &buf, const Eigen::RowVectorXd &cals)
fiff_long_t write_cov(const FiffCov &p_FiffCov)
bool read_cov(const FiffDirNode::SPtr &p_Node, fiff_int_t cov_kind, FiffCov &p_covData)
fiff_long_t write_dir_entries(const QList< FiffDirEntry::SPtr > &dir, fiff_long_t pos=-1)
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)
bool read_tag(QSharedPointer< FiffTag > &p_pTag, fiff_long_t pos=-1)
fiff_long_t write_int_matrix(fiff_int_t kind, const Eigen::MatrixXi &mat)
bool read_meas_info_base(const FiffDirNode::SPtr &p_Node, FiffInfoBase &p_InfoForward)
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)
QList< FiffCtfComp > read_ctf_comp(const FiffDirNode::SPtr &p_Node, const QList< FiffChInfo > &p_Chs)
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_float_sparse_rcs(fiff_int_t kind, const Eigen::SparseMatrix< float > &mat)
QSharedPointer< const FiffStream > ConstSPtr
fiff_long_t write_ch_pos(const FiffChPos &chpos)
bool write_raw_buffer(const Eigen::MatrixXd &buf, const Eigen::SparseMatrix< double > &mult)
void write_rt_command(fiff_int_t command, const QString &data)
bool get_evoked_entries(const QList< FiffDirNode::SPtr > &evoked_node, QStringList &comments, QList< fiff_int_t > &aspect_kinds, QString &t)
bool read_tag_data(QSharedPointer< FiffTag > &p_pTag, fiff_long_t pos=-1)
fiff_long_t write_name_list(fiff_int_t kind, const QStringList &data)
bool read_meas_info(const FiffDirNode::SPtr &p_Node, FiffInfo &p_Info, FiffDirNode::SPtr &p_NodeInfo)
bool open(QIODevice::OpenModeFlag mode=QIODevice::ReadOnly)
bool write_raw_buffer(const Eigen::MatrixXd &buf)
fiff_long_t read_tag_info(QSharedPointer< FiffTag > &p_pTag, bool p_bDoSkip=true)
fiff_long_t write_named_matrix(fiff_int_t kind, const FiffNamedMatrix &mat)
bool read_rt_tag(QSharedPointer< FiffTag > &p_pTag)
FiffStream(QIODevice *p_pIODevice)
FiffId id() const
static QStringList split_name_list(QString p_sNameList)
fiff_long_t write_string(fiff_int_t kind, const QString &data)
QStringList read_bad_channels(const FiffDirNode::SPtr &p_Node)
fiff_long_t write_evoked_set(const FiffEvokedSet &p_FiffEvokedSet)
const FiffDirNode::SPtr & dirtree() const
bool read_digitizer_data(const FiffDirNode::SPtr &p_Node, FiffDigitizerData &p_digData)
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, Eigen::RowVectorXd &cals, Eigen::MatrixXi sel=defaultMatrixXi, bool bResetRange=true)
fiff_long_t write_dir_pointer(fiff_int_t dirpos, fiff_long_t pos=-1, fiff_int_t next=FIFFV_NEXT_SEQ)
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
fiff_long_t write_info_base(const FiffInfoBase &p_FiffInfoBase)
fiff_long_t end_block(fiff_int_t kind, fiff_int_t next=FIFFV_NEXT_SEQ)
fiff_long_t write_float_sparse_ccs(fiff_int_t kind, const Eigen::SparseMatrix< float > &mat)
fiff_long_t write_ch_info(const FiffChInfo &ch)
fiff_long_t write_ctf_comp(const QList< FiffCtfComp > &comps)
fiff_long_t write_double(fiff_int_t kind, const double *data, fiff_int_t nel=1)
QList< FiffProj > read_proj(const FiffDirNode::SPtr &p_Node)
static FiffStream::SPtr open_update(QIODevice &p_IODevice)
FiffDirNode::SPtr make_subtree(QList< FiffDirEntry::SPtr > &dentry)
bool read_named_matrix(const FiffDirNode::SPtr &p_Node, fiff_int_t matkind, FiffNamedMatrix &mat)
QSharedPointer< FiffStream > SPtr
QList< FiffDirEntry::SPtr > & dir()
FIFF data tag.
Definition fiff_tag.h:152