v2.0.0
Loading...
Searching...
No Matches
mne_cov_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef MNECOVMATRIX_H
38#define MNECOVMATRIX_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "mne_global.h"
45
46//=============================================================================================================
47// EIGEN INCLUDES
48//=============================================================================================================
49
50#include <Eigen/Core>
51
52//=============================================================================================================
53// STL INCLUDES
54//=============================================================================================================
55
56#include <memory>
57
58//=============================================================================================================
59// QT INCLUDES
60//=============================================================================================================
61
62#include <QSharedPointer>
63#include <QStringList>
64
68#define MNE_COV_CH_UNKNOWN -1
69#define MNE_COV_CH_MEG_MAG 0
70#define MNE_COV_CH_MEG_GRAD 1
71#define MNE_COV_CH_EEG 2
72
73//=============================================================================================================
74// FORWARD DECLARATIONS
75//=============================================================================================================
76
77namespace FIFFLIB
78{
79 class FiffSparseMatrix;
80 class FiffChInfo;
81}
82
83//=============================================================================================================
84// DEFINE NAMESPACE MNELIB
85//=============================================================================================================
86
87namespace MNELIB
88{
89
90//=============================================================================================================
91// MNELIB FORWARD DECLARATIONS
92//=============================================================================================================
93
94class MNEProjOp;
95class MNESssData;
96
97//=============================================================================================================
106{
107public:
108 typedef QSharedPointer<MNECovMatrix> SPtr;
109 typedef QSharedPointer<const MNECovMatrix> ConstSPtr;
110
111 //=========================================================================================================
122 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);
123
124 //=========================================================================================================
129
130 //=========================================================================================================
137 std::unique_ptr<MNECovMatrix> dup() const;
138
139 //=========================================================================================================
150 static std::unique_ptr<MNECovMatrix> create_dense(int kind,
151 int ncov,
152 const QStringList& names,
153 const Eigen::VectorXd& cov)
154 {
155 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,cov,Eigen::VectorXd(),nullptr));
156 }
157
158 //=========================================================================================================
169 static std::unique_ptr<MNECovMatrix> create_diag(int kind,
170 int ncov,
171 const QStringList& names,
172 const Eigen::VectorXd& cov_diag)
173 {
174 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,Eigen::VectorXd(),cov_diag,nullptr));
175 }
176
177 //=========================================================================================================
188 static std::unique_ptr<MNECovMatrix> create_sparse( int kind,
189 int ncov,
190 const QStringList& names,
192 {
193 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,Eigen::VectorXd(),Eigen::VectorXd(),cov_sparse));
194 }
195
196 //=========================================================================================================
208 static std::unique_ptr<MNECovMatrix> create( int kind,
209 int ncov,
210 const QStringList& names,
211 const Eigen::VectorXd& cov,
212 const Eigen::VectorXd& cov_diag)
213 {
214 return std::unique_ptr<MNECovMatrix>(new MNECovMatrix(kind,ncov,names,cov,cov_diag,nullptr));
215 }
216
217 //=========================================================================================================
226 static std::unique_ptr<MNECovMatrix> read(const QString& name, int kind);
227
228 //=========================================================================================================
234 int is_diag() const;
235
236 //=========================================================================================================
243 int add_inv();
244
245 //=========================================================================================================
255 int condition(float rank_threshold, int use_rank);
256
257 //=========================================================================================================
268 int decompose_eigen_small(float p_small, int use_rank);
269
270 //=========================================================================================================
277 int decompose_eigen();
278
279 //=========================================================================================================
289 static int lt_packed_index(int j, int k);
290
291 //=========================================================================================================
301 int classify_channels(const QList<FIFFLIB::FiffChInfo>& chs, int nchan);
302
303 //=========================================================================================================
314 int whiten_vector(Eigen::Ref<Eigen::VectorXf> data, Eigen::Ref<Eigen::VectorXf> whitened_data, int nchan) const;
315
316 //=========================================================================================================
323 void regularize(const Eigen::Vector3f& regs);
324
325 //=========================================================================================================
330 void revert_to_diag();
331
332 //=========================================================================================================
344 std::unique_ptr<MNECovMatrix> pick_chs_omit(const QStringList& new_names,
345 int new_ncov,
346 int omit_meg_eeg,
347 const QList<FIFFLIB::FiffChInfo>& chs) const;
348
349 int kind;
350 int ncov;
351 int nfree;
352 int nproj;
353 int nzero;
354 QStringList names;
355 Eigen::VectorXd cov;
356 Eigen::VectorXd cov_diag;
357 std::unique_ptr<FIFFLIB::FiffSparseMatrix> cov_sparse;
358 Eigen::VectorXd lambda;
359 Eigen::VectorXd inv_lambda;
360 Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> eigen;
361 std::unique_ptr<MNEProjOp> proj;
362 std::unique_ptr<MNESssData> sss;
363 Eigen::VectorXi ch_class;
364 QStringList bads;
365 int nbad;
366};
367
368//=============================================================================================================
369// INLINE DEFINITIONS
370//=============================================================================================================
371} // NAMESPACE MNELIB
372
373#endif // MNECOVMATRIX_H
mne library export/import macros.
#define MNESHARED_EXPORT
Definition mne_global.h:52
Core MNE data structures (source spaces, source estimates, hemispheres).
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
FIFF sparse matrix storage.
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:87
Container for Signal Space Separation (SSS/Maxwell filtering) expansion coefficients and metadata.