v2.0.0
Loading...
Searching...
No Matches
mne_inverse_operator.h
Go to the documentation of this file.
1//=============================================================================================================
37
38#ifndef MNE_INVERSE_OPERATOR_H
39#define MNE_INVERSE_OPERATOR_H
40
41//=============================================================================================================
42// INCLUDES
43//=============================================================================================================
44
45#include "mne_global.h"
46#include "mne_source_spaces.h"
47#include "mne_forwardsolution.h"
48
49#include <fiff/fiff_types.h>
51#include <fiff/fiff_proj.h>
52#include <fiff/fiff_cov.h>
53#include <fiff/fiff_info.h>
54
55#include <utils/mnemath.h>
56
57//=============================================================================================================
58// EIGEN INCLUDES
59//=============================================================================================================
60
61#include <Eigen/Core>
62
63//=============================================================================================================
64// QT INCLUDES
65//=============================================================================================================
66
67#include <QList>
68
69//=============================================================================================================
70// FORWARD DECLARATIONS
71//=============================================================================================================
72
73namespace FSLIB
74{
75 class Label;
76}
77
78//=============================================================================================================
79// DEFINE NAMESPACE MNELIB
80//=============================================================================================================
81
82namespace MNELIB
83{
84
85//=========================================================================================================
92{
93 Eigen::VectorXi roiIdx;
94 Eigen::MatrixXd ctrs;
95 Eigen::VectorXd sumd;
96 Eigen::MatrixXd D;
97
98 qint32 iLabelIdxOut;
99};
100
101//=========================================================================================================
108{
109 Eigen::MatrixXd matRoiMT;
110 Eigen::MatrixXd matRoiMTOrig;
111
112 qint32 nClusters;
113 Eigen::VectorXi idcs;
114 qint32 iLabelIdxIn;
115
116 QString sDistMeasure;
117
119 {
120 QString t_sDistMeasure;
121 if(sDistMeasure.isEmpty())
122 t_sDistMeasure = QString("cityblock");
123 else
124 t_sDistMeasure = sDistMeasure;
125
126 // Kmeans Reduction
127 RegionMTOut p_RegionMTOut;
128
129 UTILSLIB::KMeans t_kMeans(t_sDistMeasure, QString("sample"), 5);
130
131 t_kMeans.calculate(this->matRoiMT, this->nClusters, p_RegionMTOut.roiIdx, p_RegionMTOut.ctrs, p_RegionMTOut.sumd, p_RegionMTOut.D);
132
133 p_RegionMTOut.iLabelIdxOut = this->iLabelIdxIn;
134
135 return p_RegionMTOut;
136 }
137};
138
139//=============================================================================================================
146{
147public:
148 typedef QSharedPointer<MNEInverseOperator> SPtr;
149 typedef QSharedPointer<const MNEInverseOperator> ConstSPtr;
150
151 //=========================================================================================================
156
157 //=========================================================================================================
163 MNEInverseOperator(QIODevice& p_IODevice);
164
165 //=========================================================================================================
178 const MNEForwardSolution& forward,
179 const FIFFLIB::FiffCov& p_noise_cov,
180 float loose = 0.2f,
181 float depth = 0.8f,
182 bool fixed = false,
183 bool limit_depth_chs = true);
184
185 //=========================================================================================================
191 MNEInverseOperator(const MNEInverseOperator &p_MNEInverseOperator);
192
193 //=========================================================================================================
198
199 //=========================================================================================================
216 bool assemble_kernel(const FSLIB::Label &label,
217 QString method,
218 bool pick_normal,
219 Eigen::MatrixXd &K,
220 Eigen::SparseMatrix<double> &noise_norm,
221 QList<Eigen::VectorXi> &vertno);
222
223 //=========================================================================================================
231 bool check_ch_names(const FIFFLIB::FiffInfo &info) const;
232
233 //=========================================================================================================
244 Eigen::MatrixXd cluster_kernel(const FSLIB::AnnotationSet &p_AnnotationSet,
245 qint32 p_iClusterSize,
246 Eigen::MatrixXd& p_D,
247 QString p_sMethod = "cityblock") const;
248
249 //=========================================================================================================
255 inline Eigen::MatrixXd& getKernel();
256
257 //=========================================================================================================
263 inline Eigen::MatrixXd getKernel() const;
264
265 //=========================================================================================================
271 inline bool isFixedOrient() const;
272
273 //=========================================================================================================
288 MNEForwardSolution forward,
289 const FIFFLIB::FiffCov& p_noise_cov,
290 float loose = 0.2f,
291 float depth = 0.8f,
292 bool fixed = false,
293 bool limit_depth_chs = true);
294
295 //=========================================================================================================
311 float lambda2,
312 bool dSPM,
313 bool sLORETA = false) const;
314
315 //=========================================================================================================
328 static bool read_inverse_operator(QIODevice &p_IODevice, MNEInverseOperator& inv);
329
330 //=========================================================================================================
338 void write(QIODevice &p_IODevice);
339
340 //=========================================================================================================
346 void writeToStream(FIFFLIB::FiffStream* p_pStream);
347
348 //=========================================================================================================
357 friend std::ostream& operator<<(std::ostream& out, const MNELIB::MNEInverseOperator &p_MNEInverseOperator);
358
359public:
366 Eigen::MatrixXf source_nn;
367 Eigen::VectorXd sing;
379 QList<FIFFLIB::FiffProj> projs;
380 Eigen::MatrixXd proj;
381 Eigen::MatrixXd whitener;
382 Eigen::VectorXd reginv;
383 Eigen::SparseMatrix<double> noisenorm;
384
385private:
386 Eigen::MatrixXd m_K;
387};
388
389//=============================================================================================================
390// INLINE DEFINITIONS
391//=============================================================================================================
392
393inline Eigen::MatrixXd& MNEInverseOperator::getKernel()
394{
395 return m_K;
396}
397
398//=============================================================================================================
399
400inline Eigen::MatrixXd MNEInverseOperator::getKernel() const
401{
402 return m_K;
403}
404
405//=============================================================================================================
406
408{
409 return this->source_ori == FIFFV_MNE_FIXED_ORI;
410}
411
412//=============================================================================================================
413
414inline std::ostream& operator<<(std::ostream& out, const MNELIB::MNEInverseOperator &p_MNEInverseOperator)
415{
416 out << "#### MNE Inverse Operator ####\n";
417
418 out << "\n methods: " << p_MNEInverseOperator.methods << std::endl;
419 out << "\n source_ori: " << p_MNEInverseOperator.source_ori << std::endl;
420 out << "\n nsource: " << p_MNEInverseOperator.nsource << std::endl;
421 out << "\n nchan: " << p_MNEInverseOperator.nchan << std::endl;
422 out << "\n coord_frame:\n\t" << p_MNEInverseOperator.coord_frame << std::endl;
423
424 out << "\n eigen_leads: " << *(p_MNEInverseOperator.eigen_leads) << std::endl;
425 out << "\n eigen_fields:\n\t" << *(p_MNEInverseOperator.eigen_fields) << std::endl;
426
427 return out;
428}
429} // NAMESPACE
430
431#ifndef metatype_mneinverseoperatorsptr
432#define metatype_mneinverseoperatorsptr
433Q_DECLARE_METATYPE(QSharedPointer<MNELIB::MNEInverseOperator>);
434#endif
435
436#ifndef metatype_mneinverseoperators
437#define metatype_mneinverseoperators
439#endif
440
441#endif // MNE_INVERSE_OPERATOR_H
FiffInfo class declaration.
#define FIFFV_MNE_FIXED_ORI
FiffNamedMatrix class declaration.
FiffProj class declaration.
FiffCov class declaration.
Old fiff_type declarations - replace them.
MNEMath class declaration.
MNESourceSpaces class declaration.
mne library export/import macros.
#define MNESHARED_EXPORT
Definition mne_global.h:52
MNEForwardSolution class declaration, which provides the forward solution including the source space ...
Core MNE data structures (source spaces, source estimates, hemispheres).
std::ostream & operator<<(std::ostream &out, const MNELIB::MNEForwardSolution &p_MNEForwardSolution)
FreeSurfer surface and annotation I/O.
qint32 fiff_int_t
Definition fiff_types.h:89
Coordinate transformation description.
covariance data
Definition fiff_cov.h:84
QSharedDataPointer< FiffCov > SDPtr
Definition fiff_cov.h:88
FIFF measurement file information.
Definition fiff_info.h:85
light measurement info
QSharedDataPointer< FiffNamedMatrix > SDPtr
FIFF File I/O routines.
Annotation set.
Freesurfer/MNE label.
Definition label.h:81
Output of a multi-threaded inverse operator assembly step for a single cortical region.
Input parameters for multi-threaded inverse operator assembly on a single cortical region.
Eigen::MatrixXd matRoiMTOrig
Eigen::MatrixXd matRoiMT
RegionMTOut cluster() const
FIFFLIB::FiffCov::SDPtr fmri_prior
QSharedPointer< const MNEInverseOperator > ConstSPtr
QSharedPointer< MNEInverseOperator > SPtr
static MNEInverseOperator make_inverse_operator(const FIFFLIB::FiffInfo &info, MNEForwardSolution forward, const FIFFLIB::FiffCov &p_noise_cov, float loose=0.2f, float depth=0.8f, bool fixed=false, bool limit_depth_chs=true)
Eigen::MatrixXd cluster_kernel(const FSLIB::AnnotationSet &p_AnnotationSet, qint32 p_iClusterSize, Eigen::MatrixXd &p_D, QString p_sMethod="cityblock") const
QList< FIFFLIB::FiffProj > projs
Eigen::SparseMatrix< double > noisenorm
FIFFLIB::FiffCov::SDPtr orient_prior
bool assemble_kernel(const FSLIB::Label &label, QString method, bool pick_normal, Eigen::MatrixXd &K, Eigen::SparseMatrix< double > &noise_norm, QList< Eigen::VectorXi > &vertno)
FIFFLIB::FiffNamedMatrix::SDPtr eigen_leads
bool check_ch_names(const FIFFLIB::FiffInfo &info) const
FIFFLIB::FiffCoordTrans mri_head_t
MNEInverseOperator prepare_inverse_operator(qint32 nave, float lambda2, bool dSPM, bool sLORETA=false) const
friend std::ostream & operator<<(std::ostream &out, const MNELIB::MNEInverseOperator &p_MNEInverseOperator)
FIFFLIB::FiffCov::SDPtr depth_prior
void write(QIODevice &p_IODevice)
void writeToStream(FIFFLIB::FiffStream *p_pStream)
FIFFLIB::FiffCov::SDPtr noise_cov
FIFFLIB::FiffCov::SDPtr source_cov
static bool read_inverse_operator(QIODevice &p_IODevice, MNEInverseOperator &inv)
FIFFLIB::FiffNamedMatrix::SDPtr eigen_fields
Source Space descritpion.
K-Means Clustering.
Definition kmeans.h:73
bool calculate(Eigen::MatrixXd X, qint32 kClusters, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)
Definition kmeans.cpp:120
Q_DECLARE_METATYPE(QSharedPointer< MNELIB::MNEInverseOperator >)