58 const int ncomp = std::min(rank,
static_cast<int>(inv.
sing.size()));
59 SNR = white.colwise().squaredNorm().transpose() / rank;
61 const ArrayXd sing2 = inv.
sing.head(ncomp).array().square();
64 for (Index t = 0; t <
SNR.size(); ++t) {
69 const ArrayXd alpha =
datap.col(t).head(ncomp).array();
70 double lambda2t = 10.0;
71 for (
int iter = 0; iter <= 1000; ++iter) {
72 const ArrayXd error = (sing2 > 0.0).select(alpha * lambda2t / (sing2 + lambda2t), alpha);
73 if (error.square().sum() < limit) {
97 const ArrayXd sing2 = inv.
sing.array().square();
99 for (Index t = 0; t <
datap.cols(); ++t) {
100 weighted.col(t) =
datap.col(t).array() * sing2 / (sing2 +
lambda2(t));
102 const MatrixXd white = inv.
eigen_fields->data.transpose() * weighted;
General numerical helpers: GCD, log2, histogram binning, baseline rescaling, sparsity tests.
Pre-computed inverse operator (whitened SVD of the forward model) for MNE/dSPM/sLORETA.
Per-data-set results of a minimum-norm computation: eigenfield projections, SNR, lambda2 and predicte...
Core MNE data structures (source spaces, source estimates, hemispheres).
static double chi2Isf(double p, int dof)
MNE-style inverse operator.
FIFFLIB::fiff_int_t nchan
FIFFLIB::FiffCov::SDPtr noise_cov
FIFFLIB::FiffNamedMatrix::SDPtr eigen_fields
void selectRegularization(const MNEInverseOperator &inv, double snr)
Eigen::MatrixXd predicted
void computeRegularization(const MNEInverseOperator &inv, const Eigen::MatrixXd &data)
void computePredicted(const MNEInverseOperator &inv)
Eigen::VectorXd lambda2_est
static MNEMneData compute(const MNEInverseOperator &inv, const Eigen::MatrixXd &data, double snr)