diff --git a/fsl_sbca.cc b/fsl_sbca.cc index bee6160c8c0da6e1cc8edc1e6ea4f42563ab3e1d..b1108e26eff11da2780209cd3e6ff5c555a91f40 100644 --- a/fsl_sbca.cc +++ b/fsl_sbca.cc @@ -62,7 +62,10 @@ using namespace std; false, no_argument); Option<int> tc_order(string("--order"), 1, string(" number of Eigenvariates (default 1)"), - false, requires_argument); + false, requires_argument); + Option<bool> abscc(string("--abscc"), false, + string(" use maximum absolute value instead of of maximum value of the cross-correlations"), + false, no_argument); Option<bool> out_seeds(string("--out_seeds"), false, string("output seed mask image as <basename>_seeds"), false, no_argument); @@ -291,6 +294,18 @@ ReturnMatrix calc_ttc(volume<float>& in){ DiagonalMatrix tmpD; EigenValues(Corr,tmpD,res); res = fliplr(res.Columns(res.Ncols()-tc_order.value()+1 , res.Ncols())) * std::sqrt(tmp.Nrows()); + + Matrix res2 = mean(tmp,2); + + if(debug.value()) + cerr << "DBG: mean size is " << res2.Nrows() << " x " << res2.Ncols() << endl; + res2 = res2.Column(1).t() * res.Column(1); + + if((float)res2.AsScalar() < 0){ + res = -1.0 * res; + if(debug.value()) + cerr << "DBG: flipping first eigenvariates" << endl; + } } if(debug.value()) @@ -409,8 +424,14 @@ void calc_res(){ out1.Row(ctr+1) = calc_tcorr(ctr); for(int ctr = 1 ;ctr <= out1.Ncols(); ctr++){ - out1.Column(ctr).Maximum1(tmp2); - out2(1,ctr) = tmp2; + if(!abscc.value()){ + out1.Column(ctr).Maximum1(tmp2); + out2(1,ctr) = tmp2; + }else + { + out1.Column(ctr).MaximumAbsoluteValue1(tmp2); + out2(1,ctr) = tmp2; + } } if(debug.value()){ @@ -515,6 +536,7 @@ int main(int argc,char *argv[]){ options.add(fnseeddata); options.add(map_bin); options.add(tc_mean); + options.add(abscc); options.add(tc_order); options.add(out_seeds); options.add(out_seedmask);