/* MELODIC - Multivariate exploratory linear optimized decomposition into independent components meloptions.h - class for command line options Christian F. Beckmann, FMRIB Image Analysis Group Copyright (C) 1999-2008 University of Oxford */ /* CCOPYRIGHT */ #ifndef __MELODICOPTIONS_h #define __MELODICOPTIONS_h #include <string> #include <strstream> #include <iostream> #include <iomanip> #include <fstream> #include <stdlib.h> #include <stdio.h> #include "utils/options.h" #include "utils/log.h" #include "melodic.h" using namespace Utilities; namespace Melodic { class MelodicOptions { public: static MelodicOptions& getInstance(); ~MelodicOptions() { delete gopt; } string version; string binpath; string logfname; bool filtermode; bool explicitnums; Option<string> logdir; Option< std::vector<string> > inputfname; Option<string> outputfname; Option<string> maskfname; Option<bool> use_mask; Option<bool> update_mask; Option<bool> perf_bet; Option<float> threshold; Option<int> pca_dim; Option<string> pca_est; Option<bool> joined_whiten; Option<bool> joined_vn; Option<bool> dr_pca; Option<bool> migp; Option<int> migpN; Option<bool> migp_shuffle; Option<bool> dr; Option<float> vn_level; Option<int> numICs; Option<string> approach; Option<string> nonlinearity; Option<bool> varnorm; Option<bool> pbsc; Option<bool> pspec; Option<string> segment; Option<bool> tsmooth; Option<float> epsilon; Option<float> epsilonS; Option<int> maxNumItt; Option<int> maxRestart; Option<int> rank1interval; Option<string> mmthresh; Option<bool> perf_mm; Option<string> ICsfname; Option<string> filtermix; Option<string> smodename; Option<string> filter; Option<bool> genreport; Option<string> guireport; Option<string> bgimage; Option<float> tr; Option<bool> logPower; Option<bool> addsigchng; Option<bool> allPPCA; Option<bool> varplots; Option<bool> varvals; Option<string> fn_Tdesign; Option<string> fn_Tcon; Option<string> fn_TconF; Option<string> fn_Sdesign; Option<string> fn_Scon; Option<string> fn_SconF; Option<bool> output_all; Option<bool> output_unmix; Option<bool> output_MMstats; Option<bool> output_pca; Option<bool> output_white; Option<bool> output_origIC; Option<bool> output_mean; Option<bool> verbose; Option<bool> vers; Option<bool> copyright; Option<bool> help; Option<bool> debug; Option<string> guessfname; Option<string> paradigmfname; Option<string> axials_str; Option<int> dummy; Option<int> repeats; Option<int> seed; Option<float> nlconst1; Option<float> nlconst2; Option<float> smooth_probmap; Option<bool> remove_meanvol; Option<bool> remove_meantc; Option<bool> remove_endslices; Option<bool> rescale_nht; Option<bool> guess_remderiv; Option<bool> temporal; int retrystep; void parse_command_line(int argc, char** argv, Log& logger, const string &p_version); private: MelodicOptions(); const MelodicOptions& operator=(MelodicOptions&); MelodicOptions(MelodicOptions&); OptionParser options; static MelodicOptions* gopt; void print_usage(int argc, char *argv[]); void print_version(); void print_copyright(); void status(); }; inline MelodicOptions& MelodicOptions::getInstance(){ if(gopt == NULL) gopt = new MelodicOptions(); return *gopt; } inline MelodicOptions::MelodicOptions() : logdir(string("-o,--outdir"), string("log.txt"), string("output directory name\n"), false, requires_argument), inputfname(string("-i,--in"), std::vector<string>(), string("input file names (either single file name or comma-separated list or text file)"), true, requires_argument), outputfname(string("-O,--out"), string("melodic"), string("output file name"), false, requires_argument,false), maskfname(string("-m,--mask"), string(""), string("file name of mask for thresholding"), false, requires_argument), use_mask(string("--nomask"), true, string("switch off masking"), false, no_argument), update_mask(string("--update_mask"), true, string("switch off mask updating"), false, no_argument), perf_bet(string("--nobet"), true, string("\tswitch off BET"), false, no_argument), threshold(string("--bgthreshold"), 0.01, string("brain / non-brain threshold (only if --nobet selected)\n"), false, requires_argument), pca_dim(string("-d,--dim"), 0, string("dimensionality reduction into #num dimensions (default: automatic estimation)"), false, requires_argument), pca_est(string("--dimest"), string("lap"), string("use specific dim. estimation technique: lap, bic, mdl, aic, mean (default: lap)"), false, requires_argument), joined_whiten(string("--sep_whiten"), false, string("switch on separate whitening"), false, no_argument, false), joined_vn(string("--group_vn"), false, string("switch on group variance nomalisation (as opposed to separate VN)"), false, no_argument, false), dr_pca(string("--mod_pca"), true, string("switch off modified PCA for concat ICA"), false, no_argument, false), migp(string("--migp"), false, string("switch on MIGP data reduction"), false, no_argument, false), migpN(string("--migpN"), 0, string("Number of internal Eigenmaps"), false, requires_argument, false), migp_shuffle(string("--migp_order"), true, string("Randomise MIGP file order (default: TRUE)"), false, no_argument, false), dr(string("--dr"), false, string("Dual Regression (default: TRUE)"), false, no_argument, false), vn_level(string("--vn_level"), float(2.3), string("variance nomalisation threshold level (Z> value is ignored)"), false, requires_argument, false), numICs(string("-n,--numICs"), -1, string("numer of IC's to extract (for deflation approach)"), false, requires_argument), approach(string("-a,--approach"), string("symm"), string("approach for decomposition, 2D: defl, symm (default), 3D: tica, concat (default)"), false, requires_argument), nonlinearity(string("--nl"), string("tanh"), string("\tnonlinearity: gauss, tanh, pow3, pow4"), false, requires_argument), varnorm(string("--vn,--varnorm"), true, string("switch off variance normalisation"), false, no_argument), pbsc(string("--pbsc"), false, string(" switch on conversion to percent BOLD signal change"), false, no_argument, false), pspec(string("--pspec"), false, string(" switch on conversion to powerspectra"), false, no_argument, false), segment(string("--covarweight"), string(""), string("voxel-wise weights for the covariance matrix (e.g. segmentation information)"), false, requires_argument), tsmooth(string("--spca"), false, string("smooth the eigenvectors prior to IC decomposition"), false, no_argument, false), epsilon(string("--eps,--epsilon"), 0.00005, string("minimum error change"), false, requires_argument), epsilonS(string("--epsS,--epsilonS"), 0.03, string("minimum error change for rank-1 approximation in TICA"), false, requires_argument), maxNumItt(string("--maxit"), 500, string("\tmaximum number of iterations before restart"), false, requires_argument), maxRestart(string("--maxrestart"), 6, string("maximum number of restarts\n"), false, requires_argument), rank1interval(string("--rank1interval"), 10, string("number of iterations between rank-1 approximation (TICA)\n"), false, requires_argument,false), mmthresh(string("--mmthresh"), string("0.5"), string("threshold for Mixture Model based inference"), false, requires_argument), perf_mm(string("--no_mm"), true, string("\tswitch off mixture modelling on IC maps\n "), false, no_argument), ICsfname(string("--ICs"), string(""), string("\tfilename of the IC components file for mixture modelling"), false, requires_argument), filtermix(string("--mix"), string(""), string("\tmixing matrix for mixture modelling / filtering"), false, requires_argument), smodename(string("--smode"), string(""), string("\tmatrix of session modes for report generation"), false, requires_argument), filter(string("-f,--filter"), string(""), string("component numbers to remove\n "), false, requires_argument), genreport(string("--report"), false, string("generate Melodic web report"), false, no_argument), guireport(string("--guireport"), string(""), string("modify report for GUI use"), false, requires_argument, false), bgimage(string("--bgimage"), string(""), string("specify background image for report (default: mean image)\n "), false, requires_argument), tr(string("--tr"), 0.0, string("\tTR in seconds"), false, requires_argument), logPower(string("--logPower"), false, string("calculate log of power for frequency spectrum\n"), false, no_argument), addsigchng(string("--sigchng"), false, string("add signal change estimates to report pages\n"), false, no_argument, false), allPPCA(string("--allPPCA"), false, string("add all PPCA plots\n"), false, no_argument, false), varplots(string("--varplots"), false, string("add std error envelopes to time course plots\n"), false, no_argument, false), varvals(string("--varvals"), false, string("add rank1 values after plots\n"), false, no_argument, false), fn_Tdesign(string("--Tdes"), string(""), string(" design matrix across time-domain"), false, requires_argument), fn_Tcon(string("--Tcon"), string(""), string(" t-contrast matrix across time-domain"), false, requires_argument), fn_TconF(string("--Tconf"), string(""), string(" F-contrast matrix across time-domain"), false, requires_argument, false), fn_Sdesign(string("--Sdes"), string(""), string(" design matrix across subject-domain"), false, requires_argument), fn_Scon(string("--Scon"), string(""), string(" t-contrast matrix across subject-domain"), false, requires_argument), fn_SconF(string("--Sconf"), string(""), string(" F-contrast matrix across subject-domain"), false, requires_argument,false), output_all(string("--Oall"), false, string(" output everything"), false, no_argument), output_unmix(string("--Ounmix"), false, string("output unmixing matrix"), false, no_argument), output_MMstats(string("--Ostats"), false, string("output thresholded maps and probability maps"), false, no_argument), output_pca(string("--Opca"), false, string("\toutput PCA results"), false, no_argument), output_white(string("--Owhite"), false, string("output whitening/dewhitening matrices"), false, no_argument), output_origIC(string("--Oorig"), false, string("\toutput the original ICs"), false, no_argument), output_mean(string("--Omean"), false, string("\toutput mean volume\n"), false, no_argument), verbose(string("-v,--verbose"), false, string("switch on diagnostic messages"), false, no_argument), vers(string("-V,--version"), false, string("prints version information"), false, no_argument), copyright(string("--copyright"), false, string("prints copyright information"), false, no_argument), help(string("-h,--help"), false, string("prints this help message"), false, no_argument), debug(string("--debug"), false, string(" switch on debug messages"), false, no_argument), guessfname(string("--init_ica"), string(""), string("file name of FEAT paradigm file (design.mat) for ICA initialisation"), false, requires_argument, false), paradigmfname(string("--init_pca"), string(""), string("file name of FEAT paradigm file (design.mat) for PCA initialisation"), false, requires_argument, false), axials_str(string("--report_maps"), string(" -s 2 -A 950 "), string("control string for spatial map images (see slicer)"), false, requires_argument), dummy(string("--dummy"), 0, string("number of dummy volumes"), false, requires_argument,false), repeats(string("--repeats"), 1, string("number of repeats (multistart)"), false, requires_argument, false), seed(string("--seed"), -1, string("integer seed for random number generator within melodic"), false, requires_argument, false), nlconst1(string("--nl1,--nlconst1"), 1.0, string("nonlinear constant 1"), false, requires_argument, false), nlconst2(string("--nl2,--nlconst2"), 1.0, string("nonlinear constant 2"), false, requires_argument, false), smooth_probmap(string("--smooth_pm"), 0.0, string("width of smoothing kernel for probability maps"), false, requires_argument, false), remove_meanvol(string("--keep_meanvol"), true, string("do not subtract mean volume"), false, no_argument, false), remove_meantc(string("--remove_meantc"), false, string("remove mean time course"), false, no_argument, false), remove_endslices(string("--remEndslices"), false, string("delete end slices (motion correction artefacts)"), false, no_argument,false), rescale_nht(string("--rescale_nht"), true, string("switch off map rescaling after mixture-modelling"), false, no_argument,false), guess_remderiv(string("--remove_deriv"), false, string("removes every second entry in paradigm file (EV derivatives)"), false, no_argument, false), temporal(string("--temporal"), false, string("perform temporal ICA"), false, no_argument, false), retrystep(3), options(title, usageexmpl) { try { options.add(logdir); options.add(inputfname); options.add(outputfname); options.add(guessfname); options.add(maskfname); options.add(use_mask); options.add(update_mask); options.add(perf_bet); options.add(threshold); options.add(pca_dim); options.add(pca_est); options.add(joined_whiten); options.add(joined_vn); options.add(dr_pca); options.add(migp); options.add(migpN); options.add(migp_shuffle); options.add(dr); options.add(vn_level); options.add(numICs); options.add(approach); options.add(nonlinearity); options.add(varnorm); options.add(pbsc); options.add(pspec); options.add(segment); options.add(tsmooth); options.add(epsilon); options.add(epsilonS); options.add(maxNumItt); options.add(maxRestart); options.add(rank1interval); options.add(mmthresh); options.add(perf_mm); options.add(ICsfname); options.add(filtermix); options.add(smodename); options.add(filter); options.add(genreport); options.add(guireport); options.add(bgimage); options.add(tr); options.add(logPower); options.add(addsigchng); options.add(allPPCA); options.add(varplots); options.add(varvals); options.add(fn_Tdesign); options.add(fn_Tcon); options.add(fn_TconF); options.add(fn_Sdesign); options.add(fn_Scon); options.add(fn_SconF); options.add(output_all); options.add(output_unmix); options.add(output_MMstats); options.add(output_pca); options.add(output_white); options.add(output_origIC); options.add(output_mean); options.add(verbose); options.add(vers); options.add(copyright); options.add(help); options.add(debug); options.add(guessfname); options.add(paradigmfname); options.add(axials_str); options.add(dummy); options.add(repeats); options.add(seed); options.add(nlconst1); options.add(nlconst2); options.add(smooth_probmap); options.add(remove_meanvol); options.add(remove_meantc); options.add(remove_endslices); options.add(rescale_nht); options.add(guess_remderiv); options.add(temporal); } catch(X_OptionError& e) { options.usage(); cerr << endl << e.what() << endl; } catch(std::exception &e) { cerr << e.what() << endl; } } } #endif