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{
62 class FiffSparseMatrix;
63 class 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//=============================================================================================================
89{
90public:
91 typedef QSharedPointer<MNECovMatrix> SPtr;
92 typedef QSharedPointer<const MNECovMatrix> ConstSPtr;
93
94 //=========================================================================================================
105 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);
106
107 //=========================================================================================================
112
113 //=========================================================================================================
120 std::unique_ptr<MNECovMatrix> dup() const;
121
122 //=========================================================================================================
133 static std::unique_ptr<MNECovMatrix> create_dense(int kind,
134 int ncov,
135 const QStringList& names,
136 const Eigen::VectorXd& cov)
137 {
138 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,cov,Eigen::VectorXd(),nullptr));
139 }
140
141 //=========================================================================================================
152 static std::unique_ptr<MNECovMatrix> create_diag(int kind,
153 int ncov,
154 const QStringList& names,
155 const Eigen::VectorXd& cov_diag)
156 {
157 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,Eigen::VectorXd(),cov_diag,nullptr));
158 }
159
160 //=========================================================================================================
171 static std::unique_ptr<MNECovMatrix> create_sparse( int kind,
172 int ncov,
173 const QStringList& names,
175 {
176 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,Eigen::VectorXd(),Eigen::VectorXd(),cov_sparse));
177 }
178
179 //=========================================================================================================
191 static std::unique_ptr<MNECovMatrix> create( int kind,
192 int ncov,
193 const QStringList& names,
194 const Eigen::VectorXd& cov,
195 const Eigen::VectorXd& cov_diag)
196 {
197 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,cov,cov_diag,nullptr));
198 }
199
200 //=========================================================================================================
209 static std::unique_ptr<MNECovMatrix> read(const QString& name, int kind);
210
211 //=========================================================================================================
217 int is_diag() const;
218
219 //=========================================================================================================
226 int add_inv();
227
228 //=========================================================================================================
238 int condition(float rank_threshold, int use_rank);
239
240 //=========================================================================================================
251 int decompose_eigen_small(float p_small, int use_rank);
252
253 //=========================================================================================================
260 int decompose_eigen();
261
262 //=========================================================================================================
272 static int lt_packed_index(int j, int k);
273
274 //=========================================================================================================
284 int classify_channels(const QList<FIFFLIB::FiffChInfo>& chs, int nchan);
285
286 //=========================================================================================================
297 int whiten_vector(Eigen::Ref<Eigen::VectorXf> data, Eigen::Ref<Eigen::VectorXf> whitened_data, int nchan) const;
298
299 //=========================================================================================================
306 void regularize(const Eigen::Vector3f& regs);
307
308 //=========================================================================================================
313 void revert_to_diag();
314
315 //=========================================================================================================
327 std::unique_ptr<MNECovMatrix> pick_chs_omit(const QStringList& new_names,
328 int new_ncov,
329 int omit_meg_eeg,
330 const QList<FIFFLIB::FiffChInfo>& chs) const;
331
332 int kind;
333 int ncov;
334 int nfree;
335 int nproj;
336 int nzero;
337 QStringList names;
338 Eigen::VectorXd cov;
339 Eigen::VectorXd cov_diag;
340 std::unique_ptr<FIFFLIB::FiffSparseMatrix> cov_sparse;
341 Eigen::VectorXd lambda;
342 Eigen::VectorXd inv_lambda;
343 Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> eigen;
344 std::unique_ptr<MNEProjOp> proj;
345 std::unique_ptr<MNESssData> sss;
346 Eigen::VectorXi ch_class;
347 QStringList bads;
348 int nbad;
349};
350
351//=============================================================================================================
352// INLINE DEFINITIONS
353//=============================================================================================================
354} // NAMESPACE MNELIB
355
356#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:69
Container for Signal Space Separation (SSS/Maxwell filtering) expansion coefficients and metadata.