Home > marsbar > mars_options.m

mars_options

PURPOSE ^

options utility routines

SYNOPSIS ^

function [mars, msgstr] = mars_options(optstr, mars, cfg_fname)

DESCRIPTION ^

 options utility routines
 FORMAT [mars msgstr] = mars_options(optstr, mars, cfg_fname)

 Input [default]
 optstr            - option string: one of
                     'put','load','save','edit','defaults',
                     'basedefaults','fill' [load]  
 mars              - marsbar options structure [MARS.OPTIONS]
 cfg_fname         - filename for configuration file [GUI]
 
 Output
 mars              - possible modified MARS.OPTIONS structure
 msgstr            - any relevant messages

 Matthew Brett 20/10/00,2/6/01

 $Id$

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [mars, msgstr] = mars_options(optstr, mars, cfg_fname)
0002 % options utility routines
0003 % FORMAT [mars msgstr] = mars_options(optstr, mars, cfg_fname)
0004 %
0005 % Input [default]
0006 % optstr            - option string: one of
0007 %                     'put','load','save','edit','defaults',
0008 %                     'basedefaults','fill' [load]
0009 % mars              - marsbar options structure [MARS.OPTIONS]
0010 % cfg_fname         - filename for configuration file [GUI]
0011 %
0012 % Output
0013 % mars              - possible modified MARS.OPTIONS structure
0014 % msgstr            - any relevant messages
0015 %
0016 % Matthew Brett 20/10/00,2/6/01
0017 %
0018 % $Id$
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 % editable fields, and descriptions of fields, in mars options structure
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   % hardcoded defaults
0083   msgstr = 'base defaults';
0084 
0085   % default structural image for display
0086   mars.structural.fname = fullfile(spm('Dir'), 'canonical', ...
0087                    ['avg152T1' mars_veropts('template_ext')]);
0088   
0089   % default image specifying base space for ROIs
0090   mars.spacebase.fname = fullfile(spm('Dir'), 'templates', ...
0091                   ['T1' mars_veropts('template_ext')]);
0092   
0093   % ROI defaults
0094   mars.roidefs.spm_hold = 1;
0095   
0096   % default summary function for ROI data
0097   mars.statistics.sumfunc = 'mean';
0098   
0099   % flag to indicate voxel data should be used to calculate filter
0100   mars.statistics.voxfilter = 0;
0101 
0102   % option to say if images should be flipped when converting
0103   % to and from spm99 designs
0104   mars.statistics.flip_option = mars_veropts('flip_option');
0105   
0106   % Difference function to calculate % signal change
0107   mars.events.diff_func = 'abs max';
0108   
0109 % --------------------------------------------------
0110  case 'edit'
0111   
0112   % Edit defaults.  See 'basedefaults' option for other defaults
0113   defarea = cfg_fname;  % third arg is defaults area, if specified
0114   if isempty(defarea)
0115     % get defaults area
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     % display stuff - default structural scan
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     % default ROI base space
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    % default ROI base space
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    % statistics
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   % Offer a rollback
0178   if spm_input('Accept these settings', '+1', 'b','Yes|No',[0 1],1)
0179     mars = oldmars;
0180   end
0181   
0182   % --------------------------------------------------
0183  case 'defaults'                             %-get marsbar 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'                             %-fill from template
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 % sets field in structure given values, labels, etc
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

Generated on Tue 21-Jul-2009 00:29:30 by m2html © 2003