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 = mars_struct('getifthere', 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 = mars.structural.fname;
0091
0092
0093 mars.roidefs.spm_hold = 1;
0094
0095
0096 mars.statistics.sumfunc = 'mean';
0097
0098
0099 mars.statistics.voxfilter = 0;
0100
0101
0102
0103 mars.statistics.flip_option = mars_veropts('flip_option');
0104
0105
0106 mars.statistics.refresh_contrasts = 1;
0107
0108
0109 mars.events.diff_func = 'abs max';
0110
0111
0112 case 'edit'
0113
0114
0115 defarea = cfg_fname;
0116 if isempty(defarea)
0117
0118 [Finter,Fgraph,CmdLine] = spm('FnUIsetup','MarsBar Defaults');
0119
0120 defarea = char(...
0121 spm_input('Defaults area', '+1', 'm',{optlabs{:} 'Quit'},...
0122 {optfields{:} 'quit'},length(optfields)+1));
0123 end
0124
0125 oldmars = mars;
0126 switch defarea
0127 case 'quit'
0128 return
0129
0130
0131 case 'structural'
0132 mars.structural.fname = spm_get(1, mars_veropts('get_img_ext'),...
0133 'Default structural image', ...
0134 fileparts(mars.structural.fname));
0135
0136
0137 case 'roidefs'
0138 mars.roidefs.spm_hold = ...
0139 spm_input('ROI interpolation method?','+1','m',...
0140 ['Nearest neighbour' ...
0141 '|Trilinear Interpolation'...
0142 '|Sinc Interpolation'],...
0143 [0 1 -9],2);
0144
0145
0146 case 'spacebase'
0147 mars.spacebase.fname = spm_get(1, mars_veropts('get_img_ext'),...
0148 'Default ROI image space', ...
0149 fileparts(mars.spacebase.fname));
0150
0151
0152 case 'statistics'
0153 mars.statistics = getdefs(...
0154 mars.statistics,...
0155 oldmars.statistics,...
0156 'sumfunc',...
0157 'Data summary function',...
0158 {'mean','wtmean','median','ask'},...
0159 'Mean|Weighted mean|Median|Always ask');
0160
0161 tmp = [1 0]; tmpi = find(tmp == mars.statistics.flip_option);
0162 mars.statistics.flip_option = spm_input('Flip design images SPM99-2',...
0163 '+1','b','Yes|No',tmp, tmpi);
0164
0165 tmp = [1 0]; tmpi = find(tmp == mars.statistics.refresh_contrasts);
0166 mars.statistics.refresh_contrasts = spm_input(...
0167 'Load updates F contrasts?', '+1','b','Yes|No',tmp, tmpi);
0168
0169 case 'events'
0170 mars.events = getdefs(...
0171 mars.events,...
0172 oldmars.events,...
0173 'diff_func',...
0174 'Event height function',...
0175 {'abs max','abs max-min','max','max-min','window'},...
0176 'Abs max|Abs max-min|Max|Max-min|Mean over time window');
0177
0178 otherwise
0179 error('Unknown defaults area')
0180 end
0181
0182
0183 if spm_input('Accept these settings', '+1', 'b','Yes|No',[0 1],1)
0184 mars = oldmars;
0185 end
0186
0187
0188 case 'defaults'
0189 pwdefs = [];
0190 msgstr = 'base defaults';
0191 cfgfile = marsbar('cfgfile');
0192 if ~isempty(cfgfile);
0193 tmp = load(cfgfile);
0194 if isfield(tmp, 'mars')
0195 pwdefs = tmp.mars;
0196 msgstr = cfgfile;
0197 else
0198 warning(...
0199 ['File ' cfgfile ' does not contain valid config settings'],...
0200 'Did not load marsbar config file');
0201 end
0202 end
0203 mars = mars_struct('fillafromb',pwdefs, mars_options('basedefaults'));
0204
0205
0206 case 'fill'
0207 mars = mars_struct('fillafromb',mars,cfg_fname);
0208
0209 otherwise
0210 error('Don''t recognize options action string')
0211 end
0212 return
0213
0214
0215 function s = getdefs(s, defval, fieldn, prompt, vals, labels)
0216
0217
0218 if isstruct(defval)
0219 defval = getfield(defval, fieldn);
0220 end
0221
0222 if ischar(defval)
0223 defind = find(strcmp(defval,vals));
0224 else
0225 defind = find(defval == vals);
0226 end
0227
0228 v = spm_input(prompt, '+1', 'm', labels, vals, defind);
0229 if iscell(v) && ischar(defval)
0230 v = char(v);
0231 end
0232
0233 s = setfield(s,fieldn,v);
0234
0235 return