diff --git a/fsl_regfilt.cc b/fsl_regfilt.cc index 9df3dd3589c6a9a4972df5460cba679b0e75dca3..5b9de46826f43abbb31dcae2748b1006731db605 100644 --- a/fsl_regfilt.cc +++ b/fsl_regfilt.cc @@ -65,7 +65,7 @@ using namespace std; string(" switch on aggressive filtering (full instead of partial regression)"), false, no_argument); Option<bool> perfvn(string("--vn"),FALSE, - string(" perfrom variance-normalisation on data"), + string(" perform variance-normalisation on data"), false, no_argument); Option<int> help(string("-h,--help"), 0, string("display this help text"), diff --git a/melgmix.cc b/melgmix.cc index b7ff1e945f2f9e9067c17f09c93b70cfe79a9975..12e6f425dcc80acd9647328b0b3cc095fef8e89b 100644 --- a/melgmix.cc +++ b/melgmix.cc @@ -597,10 +597,12 @@ namespace Melodic{ props = props / sum(props,2).AsScalar(); add_params(means,vars,props,logprobY,MDL,Evi,true); - + probmap << SP(sum(tmp1.Rows(2,tmp1.Nrows()),1), pow(sum(tmp1,1),-1)); + dbgmsg(" mu: " << means << " sig: " << vars << " prop: " << props << endl); + if(props(1)<0.4 ){ //set up GMM message(" try Gaussian Mixture Model " << endl); @@ -618,11 +620,11 @@ namespace Melodic{ IntSize = Dmax / nummix; means(1)=mean(data,2).AsScalar(); for (int ctr=2; ctr <= means.Ncols(); ctr++){ - means(ctr) = Dmax - (ctr - 1.5) * IntSize; + means(ctr) = Dmax - (ctr - 1.5) * IntSize; } means(2)=means(1)+sqrt(vars(1)); if(nummix>2) - means(3)=means(1)-sqrt(vars(1)); + means(3)=means(1)-sqrt(vars(1)); fit(string("GMM")); } diff --git a/melgmix.h b/melgmix.h index 918cb469eb42412d364b181ce89e0aa1a09e4599..793d3660d4df5a291db0ad611249474985260f2e 100644 --- a/melgmix.h +++ b/melgmix.h @@ -145,6 +145,14 @@ namespace Melodic{ probmap = tempVol.matrix(Mask); } + inline Matrix get_params(){ + Matrix tmp = zeros(3,means.Ncols()); + tmp.Row(1) = means; + tmp.Row(2) = vars; + tmp.Row(3) = props; + return tmp; + } + double datamean; double datastdev; diff --git a/melodic.cc b/melodic.cc index ce7133ed0094c240f3fdf1e525a6a06d3f35aa98..bfa713a4661ceb90e9bd5dc12cd0550cba4a2e6b 100644 --- a/melodic.cc +++ b/melodic.cc @@ -68,7 +68,7 @@ int main(int argc, char *argv[]){ //set up report object MelodicReport report(melodat,opts,logger); - if (opts.filtermode || opts.filtermix.value().length()>0){ + if (opts.filtermode || opts.filtermix.value().length()>0 || opts.ICsfname.value().length()>0){ if(opts.filtermode){ // just filter out some noise from a previous run melodat.setup(); if(opts.debug.value()) @@ -237,13 +237,18 @@ void mmonly(Log& logger, MelodicOptions& opts, message(" done" << endl); } - message("Reading mixing matrix " << opts.filtermix.value() << " ... "); - mixMatrix = read_ascii_matrix(opts.filtermix.value()); - if (mixMatrix.Storage()<=0) { - cerr <<" Please specify the mixing matrix correctly" << endl; - exit(2); + if(opts.filtermix.value().length() > 0){ + message("Reading mixing matrix " << opts.filtermix.value() << " ... "); + mixMatrix = read_ascii_matrix(opts.filtermix.value()); + if (mixMatrix.Storage()<=0) { + cerr <<" Please specify the mixing matrix correctly" << endl; + exit(2); + } + message(" done" << endl); + }else{ + mixMatrix=unifrnd(ICs.Nrows()+1,ICs.Nrows()); } - message(" done" << endl); + if(opts.smodename.value().length() > 0){ message("Reading matrix of subject modes: " << opts.smodename.value()); @@ -300,7 +305,8 @@ Matrix mmall(Log& logger, MelodicOptions& opts,MelodicData& melodat, MelodicRepo message(" IC map " << ctr << " ... "<< endl;); Matrix ICmap; - dbgmsg(" stdNoisei max : "<< melodat.get_stdNoisei().Maximum() <<" "<< melodat.get_stdNoisei().Minimum() << endl); + if(melodat.get_stdNoisei().Storage()>0) + dbgmsg(" stdNoisei max : "<< melodat.get_stdNoisei().Maximum() <<" "<< melodat.get_stdNoisei().Minimum() << endl); if(opts.varnorm.value()&&melodat.get_stdNoisei().Storage()>0){ ICmap = SP(melodat.get_IC().Row(ctr),diagvals(ctr)*melodat.get_stdNoisei()); @@ -322,9 +328,12 @@ Matrix mmall(Log& logger, MelodicOptions& opts,MelodicData& melodat, MelodicRepo mixmod.fit("GGM"); if(opts.output_MMstats.value()){ - message(" saving probability map:"); + 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)); } //re-scale spatial maps to mean 0 for nht @@ -415,7 +424,7 @@ Matrix mmall(Log& logger, MelodicOptions& opts,MelodicData& melodat, MelodicRepo } } - if(!opts.filtermode&&opts.filtermix.value().length()==0){ + if(!opts.filtermode&&opts.ICsfname.value().length()==0){ //now safe new data // bool what = opts.verbose.value(); //opts.verbose.set_T(false);