From b834467d542cba2820f9bc9460ce46afd2beb7ac Mon Sep 17 00:00:00 2001 From: Christian Beckmann <c.beckmann@donders.ru.nl> Date: Sun, 7 Dec 2008 22:50:34 +0000 Subject: [PATCH] added eig option with different order --- fslmeants.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fslmeants.cc b/fslmeants.cc index 7b2e697..7f22a88 100644 --- a/fslmeants.cc +++ b/fslmeants.cc @@ -60,6 +60,9 @@ Option<float> coordval(string("-c"), 0.0, Option<bool> eig(string("--eig"), false, string(" calculate Eigenvariate(s) instead of mean (output will have 0 mean)"), false, no_argument); +Option<bool> bin_mask(string("--no_bin"), true, + string(" do not binarise the mask for calculation of Eigenvariates"), + false, no_argument); Option<int> order(string("--order"), 1, string(" select number of Eigenvariates (default 1)"), false, requires_argument); @@ -81,6 +84,7 @@ int main(int argc,char *argv[]) options.add(showall); options.add(eig); options.add(order); + options.add(bin_mask); options.add(verbose); options.add(help); @@ -137,19 +141,26 @@ int main(int argc,char *argv[]) return -1; } - mask_nonbin[0] = mask; + mask_nonbin.addvolume(mask); mask.binarise(1e-8); // arbitrary "0" threshold if(eig.value()){ Matrix dat, evecs, scales; scales = mask_nonbin.matrix(mask); - dat = SP(vin.matrix(mask),scales); + dat = vin.matrix(mask); + if(!bin_mask.value()) + dat = SP (dat, ones(dat.Nrows(),1) * scales); dat = remmean(dat,1); + + if (verbose.value()) { + cout << "Number of voxels used = " << dat.Ncols() << endl; + } + SymmetricMatrix Corr; Corr << dat * dat.t() / dat.Ncols(); DiagonalMatrix tmpD; EigenValues(Corr,tmpD,evecs); - evecs = evecs.Columns(1,order.value()); + evecs = fliplr(evecs.Columns(evecs.Ncols()-order.value()+1 , evecs.Ncols())) * std::sqrt(dat.Nrows()); if (outmat.set()) { write_ascii_matrix(evecs,outmat.value()); -- GitLab