v2.0.0
Loading...
Searching...
No Matches
mne_cov_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
19
20#ifndef MNECOVMATRIX_H
21#define MNECOVMATRIX_H
22
23//=============================================================================================================
24// INCLUDES
25//=============================================================================================================
26
27#include "mne_global.h"
28
29//=============================================================================================================
30// EIGEN INCLUDES
31//=============================================================================================================
32
33#include <Eigen/Core>
34
35//=============================================================================================================
36// STL INCLUDES
37//=============================================================================================================
38
39#include <memory>
40
41//=============================================================================================================
42// QT INCLUDES
43//=============================================================================================================
44
45#include <QSharedPointer>
46#include <QStringList>
47
51#define MNE_COV_CH_UNKNOWN -1
52#define MNE_COV_CH_MEG_MAG 0
53#define MNE_COV_CH_MEG_GRAD 1
54#define MNE_COV_CH_EEG 2
55
56//=============================================================================================================
57// FORWARD DECLARATIONS
58//=============================================================================================================
59
60namespace FIFFLIB
61{
62class FiffSparseMatrix;
63class FiffChInfo;
64}
65
66//=============================================================================================================
67// DEFINE NAMESPACE MNELIB
68//=============================================================================================================
69
70namespace MNELIB
71{
72
73//=============================================================================================================
74// MNELIB FORWARD DECLARATIONS
75//=============================================================================================================
76
77class MNEProjOp;
78class MNESssData;
79
80//=============================================================================================================
91{
92public:
93 typedef QSharedPointer<MNECovMatrix> SPtr;
94 typedef QSharedPointer<const MNECovMatrix> ConstSPtr;
95
96 //=========================================================================================================
107 MNECovMatrix(int p_kind, int p_ncov, const QStringList& p_names, const Eigen::VectorXd& p_cov, const Eigen::VectorXd& p_cov_diag, FIFFLIB::FiffSparseMatrix* p_cov_sparse);
108
109 //=========================================================================================================
114
115 //=========================================================================================================
122 std::unique_ptr<MNECovMatrix> dup() const;
123
124 //=========================================================================================================
135 static std::unique_ptr<MNECovMatrix> create_dense(int kind,
136 int ncov,
137 const QStringList& names,
138 const Eigen::VectorXd& cov)
139 {
140 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind, ncov, names, cov, Eigen::VectorXd(), nullptr));
141 }
142
143 //=========================================================================================================
154 static std::unique_ptr<MNECovMatrix> create_diag(int kind,
155 int ncov,
156 const QStringList& names,
157 const Eigen::VectorXd& cov_diag)
158 {
159 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind, ncov, names, Eigen::VectorXd(), cov_diag, nullptr));
160 }
161
162 //=========================================================================================================
173 static std::unique_ptr<MNECovMatrix> create_sparse(int kind,
174 int ncov,
175 const QStringList& names,
177 {
178 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind, ncov, names, Eigen::VectorXd(), Eigen::VectorXd(), cov_sparse));
179 }
180
181 //=========================================================================================================
193 static std::unique_ptr<MNECovMatrix> create(int kind,
194 int ncov,
195 const QStringList& names,
196 const Eigen::VectorXd& cov,
197 const Eigen::VectorXd& cov_diag)
198 {
199 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind, ncov, names, cov, cov_diag, nullptr));
200 }
201
202 //=========================================================================================================
211 static std::unique_ptr<MNECovMatrix> read(const QString& name, int kind);
212
213 //=========================================================================================================
219 int is_diag() const;
220
221 //=========================================================================================================
228 int add_inv();
229
230 //=========================================================================================================
240 int condition(float rank_threshold, int use_rank);
241
242 //=========================================================================================================
253 int decompose_eigen_small(float p_small, int use_rank);
254
255 //=========================================================================================================
262 int decompose_eigen();
263
264 //=========================================================================================================
274 static int lt_packed_index(int j, int k);
275
276 //=========================================================================================================
286 int classify_channels(const QList<FIFFLIB::FiffChInfo>& chs, int nchan);
287
288 //=========================================================================================================
299 int whiten_vector(Eigen::Ref<Eigen::VectorXf> data, Eigen::Ref<Eigen::VectorXf> whitened_data, int nchan) const;
300
301 //=========================================================================================================
308 void regularize(const Eigen::Vector3f& regs);
309
310 //=========================================================================================================
315 void revert_to_diag();
316
317 //=========================================================================================================
329 std::unique_ptr<MNECovMatrix> pick_chs_omit(const QStringList& new_names,
330 int new_ncov,
331 int omit_meg_eeg,
332 const QList<FIFFLIB::FiffChInfo>& chs) const;
333
334 int kind;
335 int ncov;
336 int nfree;
337 int nproj;
338 int nzero;
339 QStringList names;
340 Eigen::VectorXd cov;
341 Eigen::VectorXd cov_diag;
342 std::unique_ptr<FIFFLIB::FiffSparseMatrix> cov_sparse;
343 Eigen::VectorXd lambda;
344 Eigen::VectorXd inv_lambda;
345 Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> eigen;
346 std::unique_ptr<MNEProjOp> proj;
347 std::unique_ptr<MNESssData> sss;
348 Eigen::VectorXi ch_class;
349 QStringList bads;
350 int nbad;
351};
352
353//=============================================================================================================
354// INLINE DEFINITIONS
355//=============================================================================================================
356} // NAMESPACE MNELIB
357
358#endif // MNECOVMATRIX_H
MNELIB shared-library export/import macros and library build metadata.
#define MNESHARED_EXPORT
Definition mne_global.h:40
Core MNE data structures (source spaces, source estimates, hemispheres).
FIFF file I/O, in-memory data structures and high-level readers/writers.
Sparse FIFF matrix: CCS or RCS storage with the value / index / pointer triple as written by FiffStre...
Eigen::VectorXd inv_lambda
std::unique_ptr< FIFFLIB::FiffSparseMatrix > cov_sparse
Eigen::VectorXd lambda
static std::unique_ptr< MNECovMatrix > create_sparse(int kind, int ncov, const QStringList &names, FIFFLIB::FiffSparseMatrix *cov_sparse)
std::unique_ptr< MNEProjOp > proj
static std::unique_ptr< MNECovMatrix > create_diag(int kind, int ncov, const QStringList &names, const Eigen::VectorXd &cov_diag)
static std::unique_ptr< MNECovMatrix > create_dense(int kind, int ncov, const QStringList &names, const Eigen::VectorXd &cov)
QSharedPointer< const MNECovMatrix > ConstSPtr
std::unique_ptr< MNECovMatrix > dup() const
MNECovMatrix(int p_kind, int p_ncov, const QStringList &p_names, const Eigen::VectorXd &p_cov, const Eigen::VectorXd &p_cov_diag, FIFFLIB::FiffSparseMatrix *p_cov_sparse)
std::unique_ptr< MNESssData > sss
Eigen::VectorXd cov
Eigen::VectorXd cov_diag
static std::unique_ptr< MNECovMatrix > create(int kind, int ncov, const QStringList &names, const Eigen::VectorXd &cov, const Eigen::VectorXd &cov_diag)
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > eigen
Eigen::VectorXi ch_class
QSharedPointer< MNECovMatrix > SPtr
Projection operator managing a set of linear projection items and the final compiled projector matrix...
Definition mne_proj_op.h:71
Container for Signal Space Separation (SSS/Maxwell filtering) expansion coefficients and metadata.