diff --git a/pvmfit.cc b/pvmfit.cc index a8e6157fc30f2381bbfd62a5d5c1485052c142b2..93d707daa1dde2bf30cf8d8ee0b5b33455ffb09f 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 bf7c7b2f82267dfeb1a374c5bfef2b384058a5e9..24deea979f61d8b939efed13b7938a4b39cb8e27 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();