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#include <memory>
70
71//=============================================================================================================
72// DEFINE NAMESPACE FIFFLIB
73//=============================================================================================================
74
75namespace FIFFLIB
76{
77
78//=============================================================================================================
79// FORWARD DECLARATIONS
80//=============================================================================================================
81
82class FiffStream;
83class FiffTag;
84class FiffCtfComp;
85class FiffRawData;
86class FiffInfo;
87class FiffInfoBase;
88class FiffCov;
89class FiffProj;
90class FiffEvokedSet;
91class FiffNamedMatrix;
92class FiffDigPoint;
93class FiffChInfo;
94class FiffChPos;
95class FiffCoordTrans;
97
98//=============================================================================================================
105
106class FIFFSHARED_EXPORT FiffStream : public QDataStream
107{
108public:
109 using SPtr = QSharedPointer<FiffStream>;
110 using ConstSPtr = QSharedPointer<const FiffStream>;
111 using UPtr = std::unique_ptr<FiffStream>;
112 using ConstUPtr = std::unique_ptr<const FiffStream>;
113
114 //=========================================================================================================
120 explicit FiffStream(QIODevice *p_pIODevice);
121
122 //=========================================================================================================
129 explicit FiffStream(QByteArray * a, QIODevice::OpenMode mode);
130
131 //=========================================================================================================
137 QString streamName();
138
139 //=========================================================================================================
145 FiffId id() const;
146
147 //=========================================================================================================
154 QList<FiffDirEntry::SPtr>& dir();
155
156 //=========================================================================================================
163 const QList<FiffDirEntry::SPtr>& dir() const;
164
165 //=========================================================================================================
171 int nent() const;
172
173 //=========================================================================================================
180 const FiffDirNode::SPtr& dirtree() const;
181
182 //=========================================================================================================
192
193 //=========================================================================================================
197 void end_file();
198
199 //=========================================================================================================
204 void finish_writing_raw();
205
206 //=========================================================================================================
217 bool get_evoked_entries(const QList<FiffDirNode::SPtr> &evoked_node, QStringList &comments, QList<fiff_int_t> &aspect_kinds, QString &t);
218
219 //=========================================================================================================
225// using QFile::open;
226
227 //=========================================================================================================
235 bool open(QIODevice::OpenModeFlag mode = QIODevice::ReadOnly);
236
237 //=========================================================================================================
244 bool close();
245
246 //=========================================================================================================
254 FiffDirNode::SPtr make_subtree(QList<FiffDirEntry::SPtr>& dentry);
255
256 //=========================================================================================================
268 QStringList read_bad_channels(const FiffDirNode::SPtr& p_Node);
269
270 //=========================================================================================================
276 void write_bad_channels(const QStringList& bads);
277
278 //=========================================================================================================
292 bool attach_env(const QString& workingDir, const QString& command);
293
294 //=========================================================================================================
306 bool read_cov(const FiffDirNode::SPtr& p_Node, fiff_int_t cov_kind, FiffCov& p_covData);
307
308 //=========================================================================================================
319 QList<FiffCtfComp> read_ctf_comp(const FiffDirNode::SPtr& p_Node, const QList<FiffChInfo>& p_Chs);
320
321 //=========================================================================================================
332 bool read_digitizer_data(const FiffDirNode::SPtr& p_Node, FiffDigitizerData& p_digData);
333
334 //=========================================================================================================
347 bool read_meas_info(const FiffDirNode::SPtr& p_Node, FiffInfo& p_Info, FiffDirNode::SPtr& p_NodeInfo);
348
349 //=========================================================================================================
360 bool read_meas_info_base(const FiffDirNode::SPtr& p_Node, FiffInfoBase& p_InfoForward);
361
362 //=========================================================================================================
374 bool read_named_matrix(const FiffDirNode::SPtr& p_Node, fiff_int_t matkind, FiffNamedMatrix& mat);
375
376 //=========================================================================================================
384 QList<FiffProj> read_proj(const FiffDirNode::SPtr& p_Node);
385
386 //=========================================================================================================
396 bool read_tag_data(std::unique_ptr<FiffTag>& p_pTag, fiff_long_t pos = -1);
397
398 //=========================================================================================================
408 fiff_long_t read_tag_info(std::unique_ptr<FiffTag>& p_pTag, bool p_bDoSkip = true);
409
410 //=========================================================================================================
419 bool read_rt_tag(std::unique_ptr<FiffTag>& p_pTag);
420
421 //=========================================================================================================
431 bool read_tag(std::unique_ptr<FiffTag>& p_pTag,
432 fiff_long_t pos = -1);
433
434 //=========================================================================================================
446 static bool setup_read_raw(QIODevice &p_IODevice,
447 FiffRawData& data,
448 bool allow_maxshield = true,
449 bool is_littleEndian = false);
450
451 //=========================================================================================================
461 static QStringList split_name_list(QString p_sNameList);
462
463 //=========================================================================================================
472
473 //=========================================================================================================
481 static FiffStream::SPtr start_file(QIODevice& p_IODevice);
482
483 //=========================================================================================================
491 static FiffStream::SPtr open_update(QIODevice& p_IODevice);
492
493 //=========================================================================================================
507 static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice,
508 const FiffInfo& info,
509 Eigen::RowVectorXd& cals,
510 Eigen::MatrixXi sel = defaultMatrixXi,
511 bool bResetRange = true);
512
513 //=========================================================================================================
523 fiff_long_t write_tag(const std::unique_ptr<FiffTag>& p_pTag, fiff_long_t pos = -1);
524
525 //=========================================================================================================
536
537 //=========================================================================================================
545 fiff_long_t write_ch_pos(const FiffChPos& chpos);
546
547 //=========================================================================================================
556
557 //=========================================================================================================
565 fiff_long_t write_cov(const FiffCov &p_FiffCov);
566
567 //=========================================================================================================
577 fiff_long_t write_ctf_comp(const QList<FiffCtfComp>& comps);
578
579 //=========================================================================================================
590
591 //=========================================================================================================
603
604 //=========================================================================================================
614 fiff_long_t write_dir_entries(const QList<FiffDirEntry::SPtr>& dir, fiff_long_t pos = -1);
615
616 //=========================================================================================================
626 fiff_long_t write_double(fiff_int_t kind, const double* data, fiff_int_t nel = 1);
627
628 //=========================================================================================================
639
640 //=========================================================================================================
648 fiff_long_t write_info_base(const FiffInfoBase & p_FiffInfoBase);
649
650 //=========================================================================================================
662
663 //=========================================================================================================
674 fiff_long_t write_int_matrix(fiff_int_t kind, const Eigen::MatrixXi& mat);
675
676 //=========================================================================================================
686 fiff_long_t write_float(fiff_int_t kind, const float* data, fiff_int_t nel = 1);
687
688 //=========================================================================================================
697 fiff_long_t write_float_matrix(fiff_int_t kind, const Eigen::MatrixXf& mat);
698
699 //=========================================================================================================
710 fiff_long_t write_float_sparse_ccs(fiff_int_t kind, const Eigen::SparseMatrix<float>& mat);
711
712 //=========================================================================================================
723 fiff_long_t write_float_sparse_rcs(fiff_int_t kind, const Eigen::SparseMatrix<float>& mat);
724
725 //=========================================================================================================
736 fiff_long_t write_name_list(fiff_int_t kind, const QStringList& data);
737
738 //=========================================================================================================
750
751 //=========================================================================================================
763 fiff_long_t write_evoked_set(const FiffEvokedSet& p_FiffEvokedSet);
764
765 //=========================================================================================================
775 fiff_long_t write_proj(const QList<FiffProj>& projs);
776
777 //=========================================================================================================
788 bool write_raw_buffer(const Eigen::MatrixXd& buf, const Eigen::RowVectorXd& cals);
789
790 //=========================================================================================================
801 bool write_raw_buffer(const Eigen::MatrixXd& buf, const Eigen::SparseMatrix<double>& mult);
802
803 //=========================================================================================================
814 bool write_raw_buffer(const Eigen::MatrixXd& buf);
815
816 //=========================================================================================================
825 fiff_long_t write_string(fiff_int_t kind, const QString& data);
826
827 //=========================================================================================================
834 void write_rt_command(fiff_int_t command, const QString& data);
835
836private:
837 //=========================================================================================================
845 bool check_beginning(std::unique_ptr<FiffTag>& p_pTag);
846
847 //=========================================================================================================
855 QList<FiffDirEntry::SPtr> make_dir(bool *ok=nullptr);
856
857private:
858
859// char *file_name; /**< Name of the file. */ -> Use streamName() instead
860// FILE *fd; /**< The normal file descriptor. */ -> file descitpion is part of the stream: stream->device()
861 FiffId m_id;
862 QList<FiffDirEntry::SPtr> m_dir;
863// int nent; /**< How many entries?. */ -> Use nent() instead
864 FiffDirNode::SPtr m_dirtree;
865// char *ext_file_name; /**< Name of the file holding the external data. */
866// FILE *ext_fd; /**< The file descriptor of the above file if open . */
867
868};
869} // NAMESPACE
870
871#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.
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:68
Coordinate transformation description.
covariance data
Definition fiff_cov.h:85
CTF software compensation data.
Digitization point description.
Digitization points container and description.
QSharedPointer< FiffDirNode > SPtr
Universally unique identifier.
Definition fiff_id.h:68
static FiffId & getDefault()
Definition fiff_id.cpp:211
FIFF measurement file information.
Definition fiff_info.h:86
light measurement info
SSP projector data.
Definition fiff_proj.h:83
FIFF raw measurement data.
FIFF File I/O routines.
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)
std::unique_ptr< const FiffStream > ConstUPtr
QSharedPointer< const FiffStream > ConstSPtr
fiff_long_t write_int_matrix(fiff_int_t kind, const Eigen::MatrixXi &mat)
QSharedPointer< FiffStream > SPtr
bool read_rt_tag(std::unique_ptr< FiffTag > &p_pTag)
std::unique_ptr< FiffStream > UPtr
bool read_tag_data(std::unique_ptr< FiffTag > &p_pTag, fiff_long_t pos=-1)
bool read_meas_info_base(const FiffDirNode::SPtr &p_Node, FiffInfoBase &p_InfoForward)
fiff_long_t write_tag(const std::unique_ptr< FiffTag > &p_pTag, fiff_long_t pos=-1)
void write_bad_channels(const QStringList &bads)
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)
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)
fiff_long_t write_coord_trans(const FiffCoordTrans &trans)
bool get_evoked_entries(const QList< FiffDirNode::SPtr > &evoked_node, QStringList &comments, QList< fiff_int_t > &aspect_kinds, QString &t)
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)
fiff_long_t read_tag_info(std::unique_ptr< FiffTag > &p_pTag, bool p_bDoSkip=true)
bool write_raw_buffer(const Eigen::MatrixXd &buf)
fiff_long_t write_named_matrix(fiff_int_t kind, const FiffNamedMatrix &mat)
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)
bool read_tag(std::unique_ptr< FiffTag > &p_pTag, fiff_long_t pos=-1)
fiff_long_t write_double(fiff_int_t kind, const double *data, fiff_int_t nel=1)
bool attach_env(const QString &workingDir, const QString &command)
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)
QList< FiffDirEntry::SPtr > & dir()
FIFF data tag.
Definition fiff_tag.h:153