v2.0.0
Loading...
Searching...
No Matches
fiff_cov.h
Go to the documentation of this file.
1//=============================================================================================================
27
28#ifndef FIFF_COV_H
29#define FIFF_COV_H
30
31//=============================================================================================================
32// INCLUDES
33//=============================================================================================================
34
35#include "fiff_global.h"
36#include "fiff_proj.h"
37#include "fiff_types.h"
38#include "fiff_info.h"
39
40//=============================================================================================================
41// QT INCLUDES
42//=============================================================================================================
43
44#include <QSharedDataPointer>
45#include <QSharedPointer>
46#include <QString>
47#include <QStringList>
48
49//=============================================================================================================
50// EIGEN INCLUDES
51//=============================================================================================================
52
53#include <Eigen/Core>
54#include <memory>
55
56//=============================================================================================================
57// DEFINE NAMESPACE MNELIB
58//=============================================================================================================
59
60namespace FIFFLIB
61{
62
63//=============================================================================================================
64// FORWARD DECLARATIONS
65//=============================================================================================================
66
67class FiffRawData;
68struct RejectionParams;
69
70//=============================================================================================================
81class FIFFSHARED_EXPORT FiffCov : public QSharedData
82{
83public:
84 using SPtr = QSharedPointer<FiffCov>;
85 using ConstSPtr = QSharedPointer<const FiffCov>;
86 using UPtr = std::unique_ptr<FiffCov>;
87 using ConstUPtr = std::unique_ptr<const FiffCov>;
88 using SDPtr = QSharedDataPointer<FiffCov>;
89
90 //=========================================================================================================
94 FiffCov();
95
96 //=========================================================================================================
102 FiffCov(QIODevice& p_IODevice);
103
104 //=========================================================================================================
113 static bool read(QIODevice& p_IODevice, FiffCov& p_cov);
114
115 //=========================================================================================================
121 FiffCov(const FiffCov& p_FiffCov);
122
123 //=========================================================================================================
127 ~FiffCov();
128
129 //=========================================================================================================
133 void clear();
134
135 //=========================================================================================================
141 inline bool isEmpty() const;
142
143 //=========================================================================================================
154 FiffCov pick_channels(const QStringList& p_include = defaultQStringList, const QStringList& p_exclude = defaultQStringList);
155
156 //=========================================================================================================
165 FiffCov prepare_noise_cov(const FiffInfo& p_info, const QStringList& p_chNames) const;
166
167 //=========================================================================================================
183 FiffCov regularize(const FiffInfo& p_info, double p_fMag = 0.1, double p_fGrad = 0.1, double p_fEeg = 0.1, bool p_bProj = true, QStringList p_exclude = defaultQStringList) const;
184
185 //=========================================================================================================
206 const Eigen::MatrixXi& events,
207 const QList<int>& eventCodes,
208 float tmin,
209 float tmax,
210 float bmin = 0.0f,
211 float bmax = 0.0f,
212 bool doBaseline = false,
213 bool removeMean = true,
214 unsigned int ignoreMask = 0,
215 float delay = 0.0f,
216 const RejectionParams* rej = nullptr);
217
218 //=========================================================================================================
228 static FiffCov compute_from_epochs(const QList<QList<Eigen::MatrixXd>>& epochs,
229 const FiffInfo& info,
230 bool removeMean = true);
231
232 //=========================================================================================================
239 bool save(const QString& fileName) const;
240
241 //=========================================================================================================
249 static FiffCov computeGrandAverage(const QList<FiffCov>& covs);
250
251 //=========================================================================================================
259 FiffCov& operator=(const FiffCov& rhs);
260
261 //=========================================================================================================
270 friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffCov& p_FiffCov);
271
272public:
274 Eigen::VectorXi chClass;
275 bool diag;
277 QStringList names;
278 Eigen::MatrixXd data;
279 QList<FiffProj> projs;
280 QStringList bads;
282 Eigen::VectorXd eig;
283 Eigen::MatrixXd eigvec;
284};
285
286//=============================================================================================================
287// INLINE DEFINITIONS
288//=============================================================================================================
289
290inline bool FiffCov::isEmpty() const
291{
292 return this->dim <= -1;
293}
294
295//=============================================================================================================
296
297inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffCov& p_FiffCov)
298{
299 bool t_bIsShort = true;
300 out << "#### Fiff Covariance ####\n";
301 out << "\tKind: " << p_FiffCov.kind << std::endl;
302 out << "\tdiag: " << p_FiffCov.diag << std::endl;
303 out << "\tdim: " << p_FiffCov.dim << std::endl;
304 out << "\tnames " << p_FiffCov.names.size() << ":\n\t";
305
306 if (t_bIsShort) {
307 qint32 nchan = p_FiffCov.names.size() > 6 ? 6 : p_FiffCov.names.size();
308 for (qint32 i = 0; i < nchan / 2; ++i)
309 out << p_FiffCov.names[i].toUtf8().constData() << " ";
310 out << "... ";
311 for (qint32 i = p_FiffCov.names.size() - nchan / 2; i < p_FiffCov.names.size(); ++i)
312 out << p_FiffCov.names[i].toUtf8().constData() << " ";
313 out << std::endl;
314 }
315
316 out << "\tdata " << p_FiffCov.data.rows() << " x " << p_FiffCov.data.cols() << ":\n\t";
317 if (t_bIsShort) {
318 qint32 nrows = p_FiffCov.data.rows() > 6 ? 6 : p_FiffCov.data.rows();
319 qint32 ncols = p_FiffCov.data.cols() > 6 ? 6 : p_FiffCov.data.cols();
320 for (qint32 i = 0; i < nrows / 2; ++i) {
321 for (qint32 j = 0; j < ncols / 2; ++j)
322 out << p_FiffCov.data(i, j) << " ";
323 out << "... ";
324 for (qint32 j = p_FiffCov.data.cols() - ncols / 2; j < p_FiffCov.data.cols(); ++j)
325 out << p_FiffCov.data(i, j) << " ";
326 out << "\n\t";
327 }
328 out << "...\n\t";
329 for (qint32 i = p_FiffCov.data.rows() - nrows / 2; i < p_FiffCov.data.rows(); ++i) {
330 for (qint32 j = 0; j < ncols / 2; ++j)
331 out << p_FiffCov.data(i, j) << " ";
332 out << "... ";
333 for (qint32 j = p_FiffCov.data.cols() - ncols / 2; j < p_FiffCov.data.cols(); ++j)
334 out << p_FiffCov.data(i, j) << " ";
335 out << "\n\t";
336 }
337 out << "\n";
338 }
339 //Projectors
340 out << "\tprojectors " << p_FiffCov.projs.size() << ":\n";
341 for (qint32 i = 0; i < p_FiffCov.projs.size(); ++i)
342 out << "\t" << p_FiffCov.projs[i];
343
344 //Bads
345 out << "\tbads " << p_FiffCov.bads.size() << ":\n\t";
346 for (qint32 i = 0; i < p_FiffCov.bads.size(); ++i)
347 out << p_FiffCov.bads[i].toUtf8().constData() << " ";
348
349 out << "\n\tfree: " << p_FiffCov.nfree << std::endl;
350
351 out << "\teig " << p_FiffCov.eig.size() << ":\n\t";
352 if (t_bIsShort) {
353 qint32 nrows = p_FiffCov.eig.size() > 6 ? 6 : p_FiffCov.eig.size();
354 for (qint32 i = 0; i < nrows / 2; ++i)
355 out << p_FiffCov.eig[i] << " ";
356 out << "... ";
357 for (qint32 i = p_FiffCov.eig.size() - nrows / 2; i < p_FiffCov.eig.size(); ++i)
358 out << p_FiffCov.eig[i] << " ";
359 out << "\n\t";
360 }
361
362 out << "\n\teigvec " << p_FiffCov.eigvec.rows() << " x " << p_FiffCov.eigvec.cols() << ":\n\t";
363 if (t_bIsShort) {
364 qint32 nrows = p_FiffCov.eigvec.rows() > 6 ? 6 : p_FiffCov.eigvec.rows();
365 qint32 ncols = p_FiffCov.eigvec.cols() > 6 ? 6 : p_FiffCov.eigvec.cols();
366 for (qint32 i = 0; i < nrows / 2; ++i) {
367 for (qint32 j = 0; j < ncols / 2; ++j)
368 out << p_FiffCov.eigvec(i, j) << " ";
369 out << "... ";
370 for (qint32 j = p_FiffCov.eigvec.cols() - ncols / 2; j < p_FiffCov.eigvec.cols(); ++j)
371 out << p_FiffCov.eigvec(i, j) << " ";
372 out << "\n\t";
373 }
374 out << "...\n\t";
375 for (qint32 i = p_FiffCov.eigvec.rows() - nrows / 2; i < p_FiffCov.eigvec.rows(); ++i) {
376 for (qint32 j = 0; j < ncols / 2; ++j)
377 out << p_FiffCov.eigvec(i, j) << " ";
378 out << "... ";
379 for (qint32 j = p_FiffCov.eigvec.cols() - ncols / 2; j < p_FiffCov.eigvec.cols(); ++j)
380 out << p_FiffCov.eigvec(i, j) << " ";
381 out << "\n\t";
382 }
383 out << "\n";
384 }
385 return out;
386}
387} // NAMESPACE
388
389#ifndef metatype_fiffcovsptr
390#define metatype_fiffcovsptr
391Q_DECLARE_METATYPE(QSharedPointer<FIFFLIB::FiffCov>);
392#endif
393
394#ifndef metatype_fiffcov
395#define metatype_fiffcov
397#endif
398
399#endif // FIFF_COV_H
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Export/import macros and build-info accessors for the FIFFLIB shared library.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:44
SSP projection item: a named projection vector set with active/desired flags, parsed from FIFFB_PROJ_...
Q_DECLARE_METATYPE(QSharedPointer< FIFFLIB::FiffCov >)
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.
std::ostream & operator<<(std::ostream &out, const FIFFLIB::FiffCov &p_FiffCov)
Definition fiff_cov.h:297
qint32 fiff_int_t
Definition fiff_types.h:86
FIFF noise / data covariance: matrix, channel names, kind, applied projectors, bads,...
Definition fiff_cov.h:82
QList< FiffProj > projs
Definition fiff_cov.h:279
std::unique_ptr< FiffCov > UPtr
Definition fiff_cov.h:86
fiff_int_t nfree
Definition fiff_cov.h:281
fiff_int_t dim
Definition fiff_cov.h:276
Eigen::MatrixXd eigvec
Definition fiff_cov.h:283
static FiffCov compute_from_epochs(const FiffRawData &raw, const Eigen::MatrixXi &events, const QList< int > &eventCodes, float tmin, float tmax, float bmin=0.0f, float bmax=0.0f, bool doBaseline=false, bool removeMean=true, unsigned int ignoreMask=0, float delay=0.0f, const RejectionParams *rej=nullptr)
bool isEmpty() const
Definition fiff_cov.h:290
friend std::ostream & operator<<(std::ostream &out, const FIFFLIB::FiffCov &p_FiffCov)
Definition fiff_cov.h:297
FiffCov regularize(const FiffInfo &p_info, double p_fMag=0.1, double p_fGrad=0.1, double p_fEeg=0.1, bool p_bProj=true, QStringList p_exclude=defaultQStringList) const
Definition fiff_cov.cpp:310
QSharedDataPointer< FiffCov > SDPtr
Definition fiff_cov.h:88
std::unique_ptr< const FiffCov > ConstUPtr
Definition fiff_cov.h:87
static FiffCov compute_from_epochs(const QList< QList< Eigen::MatrixXd > > &epochs, const FiffInfo &info, bool removeMean=true)
FiffCov pick_channels(const QStringList &p_include=defaultQStringList, const QStringList &p_exclude=defaultQStringList)
Definition fiff_cov.cpp:148
QSharedPointer< FiffCov > SPtr
Definition fiff_cov.h:84
Eigen::VectorXi chClass
Definition fiff_cov.h:274
fiff_int_t kind
Definition fiff_cov.h:273
static FiffCov computeGrandAverage(const QList< FiffCov > &covs)
Definition fiff_cov.cpp:623
FiffCov & operator=(const FiffCov &rhs)
Definition fiff_cov.cpp:443
static bool read(QIODevice &p_IODevice, FiffCov &p_cov)
Definition fiff_cov.cpp:89
QStringList bads
Definition fiff_cov.h:280
QStringList names
Definition fiff_cov.h:277
Eigen::VectorXd eig
Definition fiff_cov.h:282
Eigen::MatrixXd data
Definition fiff_cov.h:278
FiffCov prepare_noise_cov(const FiffInfo &p_info, const QStringList &p_chNames) const
Definition fiff_cov.cpp:176
bool save(const QString &fileName) const
Definition fiff_cov.cpp:597
QSharedPointer< const FiffCov > ConstSPtr
Definition fiff_cov.h:85
Artifact-rejection thresholds for the MNE-C batch averaging pipeline (gradiometer / magnetometer / EE...
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...
Definition fiff_info.h:90
Continuous FIFF raw recording: FiffInfo plus a random-access directory of FIFF_DATA_BUFFER tags.