From e5011d65a9784813a39539bab8a9e1b9ad46c24f Mon Sep 17 00:00:00 2001 From: Stamatios Sotiropoulos <stam@fmrib.ox.ac.uk> Date: Fri, 21 Jan 2011 11:28:03 +0000 Subject: [PATCH] Added pseudo-constrained non-linear optimization --- pvmfit.cc | 30 ++++++++++++++++++++++-------- pvmfitOptions.h | 6 ++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/pvmfit.cc b/pvmfit.cc index a8e6157..93d707d 100644 --- a/pvmfit.cc +++ b/pvmfit.cc @@ -116,15 +116,29 @@ int main(int argc, char** argv) S(t+1)=data(i,j,k,t); if(opts.modelnum.value()==1){ - PVM_single pvm(S,bvecs,bvals,opts.nfibres.value()); - pvm.fit(); + if (opts.cnonlinear.value()){ + PVM_single_c pvm(S,bvecs,bvals,opts.nfibres.value()); + pvm.fit(); - S0(i-minx,j-miny,k-minz) = pvm.get_s0(); - dvol(i-minx,j-miny,k-minz) = pvm.get_d(); - for(int f=0;f<opts.nfibres.value();f++){ - fvol[f](i-minx,j-miny,k-minz) = pvm.get_f(f+1); - thvol[f](i-minx,j-miny,k-minz) = pvm.get_th(f+1); - phvol[f](i-minx,j-miny,k-minz) = pvm.get_ph(f+1); + S0(i-minx,j-miny,k-minz) = pvm.get_s0(); + dvol(i-minx,j-miny,k-minz) = pvm.get_d(); + for(int f=0;f<opts.nfibres.value();f++){ + fvol[f](i-minx,j-miny,k-minz) = pvm.get_f(f+1); + thvol[f](i-minx,j-miny,k-minz) = pvm.get_th(f+1); + phvol[f](i-minx,j-miny,k-minz) = pvm.get_ph(f+1); + } + } + else{ + PVM_single pvm(S,bvecs,bvals,opts.nfibres.value()); + pvm.fit(); + + S0(i-minx,j-miny,k-minz) = pvm.get_s0(); + dvol(i-minx,j-miny,k-minz) = pvm.get_d(); + for(int f=0;f<opts.nfibres.value();f++){ + fvol[f](i-minx,j-miny,k-minz) = pvm.get_f(f+1); + thvol[f](i-minx,j-miny,k-minz) = pvm.get_th(f+1); + phvol[f](i-minx,j-miny,k-minz) = pvm.get_ph(f+1); + } } } else{ diff --git a/pvmfitOptions.h b/pvmfitOptions.h index bf7c7b2..24deea9 100644 --- a/pvmfitOptions.h +++ b/pvmfitOptions.h @@ -36,6 +36,8 @@ class pvmfitOptions { Option<string> bvalsfile; Option<int> nfibres; Option<int> modelnum; + Option<bool> cnonlinear; + bool parse_command_line(int argc, char** argv); private: @@ -84,6 +86,9 @@ class pvmfitOptions { modelnum(string("--model"), 1, string("1:monoexponential;2:non mono-exponential"), false, requires_argument), + cnonlinear(string("--cnonlinear"),false, + string("Apply constrained nonlinear optimization on the diffusivity, volume fractions and their sum"), + false,no_argument), options("pvmfit", "pvmfit -k <datafile> -m <maskfile> -r <bvecsfile> -b <bvalsfile> [-n 2]\n") { @@ -98,6 +103,7 @@ class pvmfitOptions { options.add(bvalsfile); options.add(nfibres); options.add(modelnum); + options.add(cnonlinear); } catch(X_OptionError& e) { options.usage(); -- GitLab