0001 function [mars, msgstr] = mars_options(optstr, mars, cfg_fname)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 if nargin < 1
0021 optstr = 'load';
0022 end
0023 if nargin < 2
0024 mars = getfield(spm('getglobal','MARS'), 'OPTIONS');
0025 end
0026 if nargin < 3
0027 cfg_fname = '';
0028 end
0029
0030 msgstr = '';
0031
0032
0033 optfields = {'spacebase','structural','statistics', 'events'};
0034 optlabs = {'Base space for ROIs','Default structural','Statistics', ...
0035 'Working with events'};
0036
0037 switch lower(optstr)
0038
0039
0040 case 'put'
0041 maroi('classdata', 'spacebase', mars_space(mars.spacebase.fname));
0042 maroi('classdata', 'def_hold', mars.roidefs.spm_hold);
0043
0044
0045 case 'load'
0046 if isempty(cfg_fname)
0047 [fn, fn2] = marsbar('cfgfile');
0048 if isempty(fn), fn=fn2;end
0049 [p f e] = fileparts(fn);
0050 cfg_fname = spm_get([0 1],[f e], 'Configuration file to load',p);
0051 end
0052 if ~isempty(cfg_fname)
0053 tmp = load(cfg_fname);
0054 if ~isempty(tmp)
0055 if isfield(tmp, 'mars')
0056 mars = mars_struct('fillafromb', tmp.mars, mars);
0057 end
0058 end
0059 end
0060
0061
0062 case 'save'
0063 if nargin < 3
0064 [fn, fn2] = marsbar('cfgfile');
0065 if isempty(fn), fn=fn2;end
0066 [f p] = mars_uifile('put', fn, 'Configuration file to save');
0067 if isequal(f,0) | isequal(p,0), return, end
0068 cfg_fname = fullfile(p, f);
0069 end
0070 if ~isempty(cfg_fname)
0071 try
0072 save(cfg_fname, 'mars');
0073 fprintf('Saved options to %s\n', cfg_fname);
0074 catch
0075 warning(sprintf('%s: error saving config to file %s', ...
0076 lasterr, cfg_fname))
0077 end
0078 end
0079
0080
0081 case 'basedefaults'
0082
0083 msgstr = 'base defaults';
0084
0085
0086 mars.structural.fname = fullfile(spm('Dir'), 'canonical', ...
0087 ['avg152T1' mars_veropts('template_ext')]);
0088
0089
0090 mars.spacebase.fname = fullfile(spm('Dir'), 'templates', ...
0091 ['T1' mars_veropts('template_ext')]);
0092
0093
0094 mars.roidefs.spm_hold = 1;
0095
0096
0097 mars.statistics.sumfunc = 'mean';
0098
0099
0100 mars.statistics.voxfilter = 0;
0101
0102
0103
0104 mars.statistics.flip_option = mars_veropts('flip_option');
0105
0106
0107 mars.events.diff_func = 'abs max';
0108
0109
0110 case 'edit'
0111
0112
0113 defarea = cfg_fname;
0114 if isempty(defarea)
0115
0116 [Finter,Fgraph,CmdLine] = spm('FnUIsetup','MarsBar Defaults');
0117
0118 defarea = char(...
0119 spm_input('Defaults area', '+1', 'm',{optlabs{:} 'Quit'},...
0120 {optfields{:} 'quit'},length(optfields)+1));
0121 end
0122
0123 oldmars = mars;
0124 switch defarea
0125 case 'quit'
0126 return
0127
0128
0129 case 'structural'
0130 mars.structural.fname = spm_get(1, mars_veropts('get_img_ext'),...
0131 'Default structural image', ...
0132 fileparts(mars.structural.fname));
0133
0134
0135 case 'roidefs'
0136 mars.roidefs.spm_hold = ...
0137 spm_input('ROI interpolation method?','+1','m',...
0138 ['Nearest neighbour' ...
0139 '|Trilinear Interpolation'...
0140 '|Sinc Interpolation'],...
0141 [0 1 -9],2);
0142
0143
0144 case 'spacebase'
0145 mars.spacebase.fname = spm_get(1, mars_veropts('get_img_ext'),...
0146 'Default ROI image space', ...
0147 fileparts(mars.spacebase.fname));
0148
0149
0150 case 'statistics'
0151 mars.statistics = getdefs(...
0152 mars.statistics,...
0153 oldmars.statistics,...
0154 'sumfunc',...
0155 'Data summary function',...
0156 {'mean','wtmean','median','ask'},...
0157 'Mean|Weighted mean|Median|Always ask');
0158
0159 tmp = [1 0]; tmpi = find(tmp == mars.statistics.flip_option);
0160 mars.statistics.flip_option = spm_input('Flip design images SPM99-2',...
0161 '+1','b','Yes|No',tmp, tmpi);
0162
0163
0164 case 'events'
0165 mars.events = getdefs(...
0166 mars.events,...
0167 oldmars.events,...
0168 'diff_func',...
0169 'Event height function',...
0170 {'abs max','abs max-min','max','max-min','window'},...
0171 'Abs max|Abs max-min|Max|Max-min|Mean over time window');
0172
0173 otherwise
0174 error('Unknown defaults area')
0175 end
0176
0177
0178 if spm_input('Accept these settings', '+1', 'b','Yes|No',[0 1],1)
0179 mars = oldmars;
0180 end
0181
0182
0183 case 'defaults'
0184 pwdefs = [];
0185 msgstr = 'base defaults';
0186 cfgfile = marsbar('cfgfile');
0187 if ~isempty(cfgfile);
0188 tmp = load(cfgfile);
0189 if isfield(tmp, 'mars')
0190 pwdefs = tmp.mars;
0191 msgstr = cfgfile;
0192 else
0193 warning(...
0194 ['File ' cfgfile ' does not contain valid config settings'],...
0195 'Did not load marsbar config file');
0196 end
0197 end
0198 mars = mars_struct('fillafromb',pwdefs, mars_options('basedefaults'));
0199
0200
0201 case 'fill'
0202 mars = mars_struct('fillafromb',mars,cfg_fname);
0203
0204 otherwise
0205 error('Don''t recognize options action string')
0206 end
0207 return
0208
0209
0210 function s = getdefs(s, defval, fieldn, prompt, vals, labels)
0211
0212
0213 if isstruct(defval)
0214 defval = getfield(defval, fieldn);
0215 end
0216
0217 if ischar(defval)
0218 defind = find(strcmp(defval,vals));
0219 else
0220 defind = find(defval == vals);
0221 end
0222
0223 v = spm_input(prompt, '+1', 'm', labels, vals, defind);
0224 if iscell(v) & ischar(defval)
0225 v = char(v);
0226 end
0227
0228 s = setfield(s,fieldn,v);
0229
0230 return