From 672473db06729e832c2202c16b573874b6ef7abe Mon Sep 17 00:00:00 2001 From: Matthew Webster <mwebster@fmrib.ox.ac.uk> Date: Fri, 9 Dec 2011 16:37:16 +0000 Subject: [PATCH] now with static vxt option --- fsl_glm.cc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/fsl_glm.cc b/fsl_glm.cc index 3d97261..ab9a411 100644 --- a/fsl_glm.cc +++ b/fsl_glm.cc @@ -103,8 +103,11 @@ using namespace std; Option<string> outvnscales(string("--out_vnscales"),string(""), string("output file name for scaling factors for variance normalisation"), false, requires_argument); + Option<vector<string> > textConfounds(string("--vxt"), vector<string>(), + string("\tlist of text files containing text matrix confounds. caution BETA option."), + false, requires_argument); Option<vector<string> > voxelwiseConfounds(string("--vxf"), vector<string>(), - string("\tlist of 4D images containing voxelwise EVs (list order corresponds to numbers in vxl option). caution BETA option."), + string("\tlist of 4D images containing voxelwise confounds. caution BETA option."), false, requires_argument); /* } @@ -203,11 +206,19 @@ int setup(int &dof){ } dof=(int)ols_dof(design); + Matrix baseConfounds; + if ( textConfounds.set() ) { + baseConfounds=read_ascii_matrix( textConfounds.value().at(0) ); + for(unsigned int i=1; i< textConfounds.value().size(); i++) + baseConfounds|=read_ascii_matrix( textConfounds.value().at(i) ); + dof-=textConfounds.value().size(); + if ( !voxelwiseConfounds.set() ) + data=(IdentityMatrix(baseConfounds.Nrows())-baseConfounds*pinv(baseConfounds))*data; + } if ( voxelwiseConfounds.set() ) { vector<Matrix> confounds; confounds.resize(voxelwiseConfounds.value().size()); - cerr << confounds.size() << endl; volume4D<float> input; for(unsigned int i=0; i< confounds.size(); i++) { read_volume4D(input,voxelwiseConfounds.value().at(i)); @@ -220,11 +231,15 @@ int setup(int &dof){ Matrix confound(confounds.at(0).Column(voxel) ); for(unsigned int i=1; i< confounds.size(); i++) confound|=confounds.at(i).Column(voxel); - data.Column(voxel)=(IdentityMatrix(confound.Nrows())-confound*pinv(confound))*data.Column(voxel); - } - dof-=2; + if ( textConfounds.set() ) + confound=baseConfounds | confound; + data.Column(voxel)=(IdentityMatrix(confound.Nrows())-confound*pinv(confound))*data.Column(voxel); + } + dof-=confounds.size(); } + + if(perf_demean.value()){ if(debug.value()) cout << "De-meaning the data matrix" << endl; @@ -329,6 +344,7 @@ int main(int argc,char *argv[]){ options.add(outsigsq); options.add(outdata); options.add(outvnscales); + options.add(textConfounds); options.add(voxelwiseConfounds); options.parse_command_line(argc, argv); -- GitLab