38#ifndef MNE_FORWARDSOLUTION_H
39#define MNE_FORWARDSOLUTION_H
72#include <QSharedPointer>
121 QString t_sDistMeasure;
123 t_sDistMeasure = QString(
"cityblock");
134 t_kMeans.
calculate(this->matRoiGWhitened, this->nClusters, p_RegionDataOut.
roiIdx, p_RegionDataOut.
ctrs, p_RegionDataOut.
sumd, p_RegionDataOut.
D);
136 Eigen::MatrixXd newCtrs = Eigen::MatrixXd::Zero(p_RegionDataOut.
ctrs.rows(), p_RegionDataOut.
ctrs.cols());
137 for(qint32 c = 0; c < p_RegionDataOut.
ctrs.rows(); ++c)
141 for(qint32 idx = 0; idx < p_RegionDataOut.
roiIdx.size(); ++idx)
143 if(c == p_RegionDataOut.
roiIdx[idx])
145 newCtrs.row(c) += this->matRoiG.row(idx);
151 newCtrs.row(c) /= num;
153 p_RegionDataOut.
ctrs = newCtrs;
156 t_kMeans.
calculate(this->matRoiG, this->nClusters, p_RegionDataOut.
roiIdx, p_RegionDataOut.
ctrs, p_RegionDataOut.
sumd, p_RegionDataOut.
D);
160 return p_RegionDataOut;
166static Eigen::MatrixXd defaultD;
177 typedef QSharedPointer<MNEForwardSolution>
SPtr;
178 typedef QSharedPointer<const MNEForwardSolution>
ConstSPtr;
199 bool force_fixed =
false,
201 const QStringList& include = FIFFLIB::defaultQStringList,
202 const QStringList& exclude = FIFFLIB::defaultQStringList,
203 bool bExcludeBads =
false);
240 qint32 p_iClusterSize,
241 Eigen::MatrixXd& p_D = defaultD,
244 QString p_sMethod =
"cityblock")
const;
275 const Eigen::MatrixXd &patch_areas = FIFFLIB::defaultConstMatrixXd,
276 bool limit_depth_chs =
false);
314 const QStringList& exclude = FIFFLIB::defaultQStringList)
const;
341 const QStringList& include = FIFFLIB::defaultQStringList,
342 const QStringList& exclude = FIFFLIB::defaultQStringList)
const;
361 Eigen::MatrixXd &gain,
363 Eigen::MatrixXd &p_outWhitener,
364 qint32 &p_outNumNonZero)
const;
413 Eigen::MatrixXi triSelect = p_vecIdxSelection.transpose().replicate(3,1).array() * 3;
414 triSelect.row(1).array() += 1;
415 triSelect.row(2).array() += 2;
416 Eigen::VectorXi retTriSelect(triSelect.cols()*3);
417 for(
int i = 0; i < triSelect.cols(); ++i)
418 retTriSelect.block(i*3,0,3,1) = triSelect.col(i);
438 static bool read(QIODevice& p_IODevice,
440 bool force_fixed =
false,
441 bool surf_ori =
false,
442 const QStringList& include = FIFFLIB::defaultQStringList,
443 const QStringList& exclude = FIFFLIB::defaultQStringList,
444 bool bExcludeBads =
true);
457 MNEForwardSolution reduce_forward_solution(qint32 p_iNumDipoles, Eigen::MatrixXd& p_D)
const;
466 static void restrict_gain_matrix(Eigen::MatrixXd &G,
const FIFFLIB::FiffInfo &info);
503 Eigen::MatrixX3f getSourcePositionsByLabel(
const QList<FSLIB::Label> &lPickedLabels,
544 auto* hemi =
src.hemisphereAt(0);
545 return hemi && hemi->isClustered();
552 return this->
nchan <= 0;
566 out <<
"#### MNE Forward Solution ####\n";
568 out <<
"\n source_ori: " << p_MNEForwardSolution.
source_ori << std::endl;
569 out <<
"\n coord_frame: " << p_MNEForwardSolution.
coord_frame << std::endl;
570 out <<
"\n nsource: " << p_MNEForwardSolution.
nsource << std::endl;
571 out <<
"\n nchan: " << p_MNEForwardSolution.
nchan << std::endl;
572 out <<
"\n sol:\n\t" << *p_MNEForwardSolution.
sol.data() << std::endl;
573 out <<
"\n sol_grad:\n\t" << *p_MNEForwardSolution.
sol_grad.data() << std::endl;
#define FIFFV_MNE_FIXED_ORI
FiffInfoBase class declaration.
FiffCov class declaration.
Old fiff_type declarations - replace them.
FiffCoordTrans class declaration.
MNEMath class declaration.
KMeans class declaration.
MNESourceSpaces class declaration.
mne library export/import macros.
AnnotationSet class declaration.
Core MNE data structures (source spaces, source estimates, hemispheres).
std::ostream & operator<<(std::ostream &out, const MNELIB::MNEForwardSolution &p_MNEForwardSolution)
bool operator==(const MNEClusterInfo &a, const MNEClusterInfo &b)
Coordinate transformation description.
QSharedPointer< FiffDirNode > SPtr
FIFF measurement file information.
QSharedDataPointer< FiffNamedMatrix > SDPtr
QSharedPointer< FiffStream > SPtr
A hemisphere set of surfaces.
Output of a cluster-based forward solution computation for a single cortical region.
Input parameters for cluster-based forward solution computation on a single cortical region.
Eigen::MatrixXd matRoiGWhitened
Eigen::MatrixXd matRoiGOrig
RegionDataOut cluster() const
FIFFLIB::fiff_int_t nsource
FIFFLIB::FiffInfoBase info
static FIFFLIB::FiffCov compute_depth_prior(const Eigen::MatrixXd &Gain, const FIFFLIB::FiffInfo &gain_info, bool is_fixed_ori, double exp=0.8, double limit=10.0, const Eigen::MatrixXd &patch_areas=FIFFLIB::defaultConstMatrixXd, bool limit_depth_chs=false)
FIFFLIB::fiff_int_t source_ori
void prepare_forward(const FIFFLIB::FiffInfo &p_info, const FIFFLIB::FiffCov &p_noise_cov, bool p_pca, FIFFLIB::FiffInfo &p_outFwdInfo, Eigen::MatrixXd &gain, FIFFLIB::FiffCov &p_outNoiseCov, Eigen::MatrixXd &p_outWhitener, qint32 &p_outNumNonZero) const
FIFFLIB::FiffCoordTrans mri_head_t
QSharedPointer< MNEForwardSolution > SPtr
MNEForwardSolution pick_regions(const QList< FSLIB::Label > &p_qListLabels) const
MNEForwardSolution pick_channels(const QStringList &include=FIFFLIB::defaultQStringList, const QStringList &exclude=FIFFLIB::defaultQStringList) const
FIFFLIB::FiffNamedMatrix::SDPtr sol_grad
bool isFixedOrient() const
MNEForwardSolution cluster_forward_solution(const FSLIB::AnnotationSet &p_AnnotationSet, qint32 p_iClusterSize, Eigen::MatrixXd &p_D=defaultD, const FIFFLIB::FiffCov &p_pNoise_cov=defaultCov, const FIFFLIB::FiffInfo &p_pInfo=defaultInfo, QString p_sMethod="cityblock") const
Eigen::VectorXi tripletSelection(const Eigen::VectorXi &p_vecIdxSelection) const
Eigen::MatrixX3f source_nn
QSharedPointer< const MNEForwardSolution > ConstSPtr
Eigen::MatrixX3f source_rr
FIFFLIB::FiffCov compute_orient_prior(float loose=0.2)
FIFFLIB::fiff_int_t coord_frame
FIFFLIB::fiff_int_t nchan
MNEForwardSolution pick_types(bool meg, bool eeg, const QStringList &include=FIFFLIB::defaultQStringList, const QStringList &exclude=FIFFLIB::defaultQStringList) const
FIFFLIB::FiffNamedMatrix::SDPtr sol
Source Space descritpion.
bool calculate(Eigen::MatrixXd X, qint32 kClusters, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)