37 #ifndef MNE_FORWARDSOLUTION_H
38 #define MNE_FORWARDSOLUTION_H
45 #include "mne_global.h"
72 #include <Eigen/Sparse>
73 #include <unsupported/Eigen/KroneckerProduct>
90 #include <QSharedPointer>
91 #include <QDataStream>
109 using namespace Eigen;
110 using namespace FSLIB;
150 QString t_sDistMeasure;
151 if(sDistMeasure.isEmpty())
152 t_sDistMeasure = QString(
"cityblock");
154 t_sDistMeasure = sDistMeasure;
159 KMeans t_kMeans(t_sDistMeasure, QString(
"sample"), 5);
163 t_kMeans.
calculate(this->matRoiGWhitened, this->nClusters, p_RegionDataOut.
roiIdx, p_RegionDataOut.
ctrs, p_RegionDataOut.
sumd, p_RegionDataOut.
D);
165 MatrixXd newCtrs = MatrixXd::Zero(p_RegionDataOut.
ctrs.rows(), p_RegionDataOut.
ctrs.cols());
166 for(qint32 c = 0; c < p_RegionDataOut.
ctrs.rows(); ++c)
170 for(qint32 idx = 0; idx < p_RegionDataOut.
roiIdx.size(); ++idx)
172 if(c == p_RegionDataOut.
roiIdx[idx])
174 newCtrs.row(c) += this->matRoiG.row(idx);
180 newCtrs.row(c) /= num;
182 p_RegionDataOut.
ctrs = newCtrs;
185 t_kMeans.
calculate(this->matRoiG, this->nClusters, p_RegionDataOut.
roiIdx, p_RegionDataOut.
ctrs, p_RegionDataOut.
sumd, p_RegionDataOut.
D);
189 return p_RegionDataOut;
195 const static FiffCov defaultCov;
197 static MatrixXd defaultD;
209 typedef QSharedPointer<MNEForwardSolution>
SPtr;
210 typedef QSharedPointer<const MNEForwardSolution>
ConstSPtr;
230 MNEForwardSolution(QIODevice &p_IODevice,
bool force_fixed =
false,
bool surf_ori =
false,
const QStringList& include = defaultQStringList,
const QStringList& exclude = defaultQStringList,
bool bExcludeBads =
false);
266 MNEForwardSolution cluster_forward_solution(
const AnnotationSet &p_AnnotationSet, qint32 p_iClusterSize, MatrixXd& p_D = defaultD,
const FiffCov &p_pNoise_cov = defaultCov,
const FiffInfo &p_pInfo = defaultInfo, QString p_sMethod =
"cityblock")
const;
276 FiffCov compute_orient_prior(
float loose = 0.2);
292 static FiffCov compute_depth_prior(
const MatrixXd &Gain,
const FiffInfo &gain_info,
bool is_fixed_ori,
double exp = 0.8,
double limit = 10.0,
const MatrixXd &patch_areas = defaultConstMatrixXd,
bool limit_depth_chs =
false);
300 inline bool isClustered()
const;
308 inline bool isEmpty()
const;
316 inline bool isFixedOrient()
const;
329 MNEForwardSolution pick_channels(
const QStringList& include = defaultQStringList,
const QStringList& exclude = defaultQStringList)
const;
354 MNEForwardSolution pick_types(
bool meg,
bool eeg,
const QStringList& include = defaultQStringList,
const QStringList& exclude = defaultQStringList)
const;
369 void prepare_forward(
const FiffInfo &p_info,
const FiffCov &p_noise_cov,
bool p_pca,
FiffInfo &p_outFwdInfo, MatrixXd &gain,
FiffCov &p_outNoiseCov, MatrixXd &p_outWhitener, qint32 &p_outNumNonZero)
const;
418 MatrixXi triSelect = p_vecIdxSelection.transpose().replicate(3,1).array() * 3;
419 triSelect.row(1).array() += 1;
420 triSelect.row(2).array() += 2;
421 VectorXi retTriSelect(triSelect.cols()*3);
422 for(
int i = 0; i < triSelect.cols(); ++i)
423 retTriSelect.block(i*3,0,3,1) = triSelect.col(i);
444 static bool read(QIODevice& p_IODevice,
MNEForwardSolution& fwd,
bool force_fixed =
false,
bool surf_ori =
false,
const QStringList& include = defaultQStringList,
const QStringList& exclude = defaultQStringList,
bool bExcludeBads =
true);
457 MNEForwardSolution reduce_forward_solution(qint32 p_iNumDipoles, MatrixXd& p_D)
const;
466 static void restrict_gain_matrix(MatrixXd &G,
const FiffInfo &info);
525 return src[0].isClustered();
533 return this->nchan <= 0;
541 return this->source_ori == FIFFV_MNE_FIXED_ORI;
549 out <<
"#### MNE Forward Solution ####\n";
551 out <<
"\n source_ori: " << p_MNEForwardSolution.
source_ori << std::endl;
552 out <<
"\n coord_frame: " << p_MNEForwardSolution.
coord_frame << std::endl;
553 out <<
"\n nsource: " << p_MNEForwardSolution.
nsource << std::endl;
554 out <<
"\n nchan: " << p_MNEForwardSolution.
nchan << std::endl;
555 out <<
"\n sol:\n\t" << *p_MNEForwardSolution.
sol.data() << std::endl;
556 out <<
"\n sol_grad:\n\t" << *p_MNEForwardSolution.
sol_grad.data() << std::endl;
563 #endif // MNE_FORWARDSOLUTION_H
QSharedPointer< const MNEForwardSolution > ConstSPtr
FIFF measurement file information.
bool calculate(MatrixXd X, qint32 kClusters, VectorXi &idx, MatrixXd &C, VectorXd &sumD, MatrixXd &D)
Source Space descritpion.
Old fiff_type declarations - replace them.
QSharedDataPointer< FiffNamedMatrix > SDPtr
FiffCoordTrans mri_head_t
QSharedPointer< MNEForwardSolution > SPtr
VectorXi tripletSelection(const VectorXi &p_vecIdxSelection) const
FiffNamedMatrix::SDPtr sol_grad
FiffInfoBase class declaration.
Directory tree structure.
FiffNamedMatrix::SDPtr sol
KMeans class declaration.
bool isFixedOrient() const
Coordinate transformation description.
MNESourceSpace class declaration.
AnnotationSet class declaration.
MNEMath class declaration.
FiffCoordTrans class declaration.