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