From fef0d7d37b2065c4309bbc6186b2e4f0d9050bcd Mon Sep 17 00:00:00 2001
From: Christian Beckmann <c.beckmann@donders.ru.nl>
Date: Mon, 27 Feb 2012 23:02:50 +0000
Subject: [PATCH] Concat for unequal number of volumes

---
 meldata.cc   | 15 +++++++++++++--
 meldata.h    |  4 ++++
 melodic.cc   |  6 +++---
 melreport.cc |  2 ++
 4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/meldata.cc b/meldata.cc
index 207ede2..7810c18 100644
--- a/meldata.cc
+++ b/meldata.cc
@@ -139,10 +139,13 @@ namespace Melodic{
   void MelodicData::set_TSmode()
   {
 	Matrix tmp, tmpT, tmpS, tmpT2, tmpS2, tmpT3;
+	
     tmp = expand_dimred(mixMatrix);
     tmpT = zeros(tmp.Nrows()/numfiles, tmp.Ncols());
     tmpS = zeros(numfiles, tmp.Ncols());
-    explained_var = krfact(tmp,tmpT,tmpS);
+
+	if(opts.approach.value()==string("tica")){
+    	explained_var = krfact(tmp,tmpT,tmpS);
 		outMsize("tmp",tmp);
 		outMsize("tmpT",tmpT);
 		outMsize("tmpS",tmpS);
@@ -164,7 +167,7 @@ namespace Melodic{
       			add_Smodes(tmpS2);
     		}
 	//	}
-		
+	
 	//add GLM OLS fit
 	if(Tdes.Storage()){
 		Matrix alltcs = Tmodes.at(0).Column(1);
@@ -180,6 +183,14 @@ namespace Melodic{
 		if((alltcs.Nrows()==Sdes.Nrows())&&(Sdes.Nrows()>Sdes.Ncols()&&alltcs.Nrows()>2))
 			glmS.olsfit(alltcs,Sdes,Scon);
 	}
+	
+    }
+//	else{
+//		add_Tmodes(tmp);
+//	}
+	
+	dbgmsg(string("END: set_TSmode"));
+    
   }
 
   void MelodicData::setup()
diff --git a/meldata.h b/meldata.h
index 8d579bb..c4e0460 100644
--- a/meldata.h
+++ b/meldata.h
@@ -76,20 +76,24 @@ namespace Melodic{
       inline Matrix& get_Smodes(int what) {return Smodes.at(what);}
       inline void add_Smodes(Matrix& Arg) {Smodes.push_back(Arg);}      
       inline void save_Smodes(){
+			if(Smodes.size()>0){
 				Matrix tmp = Smodes.at(0); 
 				for(unsigned int ctr = 1; ctr < Smodes.size(); ctr++)
 	  			tmp |= Smodes.at(ctr);
 				  saveascii(tmp,opts.outputfname.value() + "_Smodes");
+			}
       }
 
       inline vector<Matrix>& get_Tmodes() {return Tmodes;}
       inline Matrix& get_Tmodes(int what) {return Tmodes.at(what);}
       inline void add_Tmodes(Matrix& Arg) {Tmodes.push_back(Arg);}
       inline void save_Tmodes(){
+			if(Tmodes.size()>0){
 				Matrix tmp = Tmodes.at(0); 
 				for(unsigned int ctr = 1; ctr < Tmodes.size(); ctr++)
 	  			tmp |= Tmodes.at(ctr);
 				saveascii(tmp,opts.outputfname.value() + "_Tmodes");
+			}
       }
 
       void set_TSmode();
diff --git a/melodic.cc b/melodic.cc
index bfa713a..b78b5ff 100644
--- a/melodic.cc
+++ b/melodic.cc
@@ -331,9 +331,9 @@ Matrix mmall(Log& logger, MelodicOptions& opts,MelodicData& melodat, MelodicRepo
       message("   saving probability map:  ");
       melodat.save4D(mixmod.get_probmap(),
 		     string("stats/probmap_")+num2str(ctr));
-%%	  message("   saving mixture model fit:");
-%%	  melodat.saveascii(mixmod.get_params(),
-%%			 string("stats/MMstats_")+num2str(ctr));  
+	  message("   saving mixture model fit:");
+	  melodat.saveascii(mixmod.get_params(),
+			 string("stats/MMstats_")+num2str(ctr));  
     }
 
     //re-scale spatial maps to mean 0 for nht
diff --git a/melreport.cc b/melreport.cc
index abe803a..a1bc2f6 100644
--- a/melreport.cc
+++ b/melreport.cc
@@ -770,6 +770,7 @@ namespace Melodic{
   }
 	
 	void MelodicReport::Smode_rep(){
+	  if(melodat.get_Smodes().size()>0){
 		report << "<p><hr><b>TICA Subject/Session modes </b> <br>" << endl;
 		miscplot newplot;
 		report << "Boxplots show the relative response amplitudes across the "
@@ -789,5 +790,6 @@ namespace Melodic{
 		newplot.boxplot(allmodes,report.appendDir(string("bp_Smodes.png")),
   			string("Subject/Session modes"));
   		report << "<img BORDER=0 SRC=\"bp_Smodes.png\"><p>" << endl;
+      }
 	}
 }
-- 
GitLab