OneSubSess - MRC CBU Imaging Wiki

No pages like "OneSubSess"!

Clear message
location: OneSubSess

function one_sub_sess_model_moves5(MYV, sb, ss)

% check for defaults
global defaults
if isempty(defaults), spm_defaults; end

% store path
pwd_orig = pwd;

% condition stuff
condnames = MYV.cond_names;
nconds = length(condnames); 

% Names for movement parameters
move_names = {'x trans', 'y trans', 'z trans', ...
               'x rot', 'y rot', 'z rot'};

% Specify some design stuff
% Note that the TR must be the same for all runs in a model
TR                   = MYV.TRs(sb);             % seconds
SPM.xY.RT            = TR;      

% Specify design
%===========================================================================
% global normalization: OPTOINS:'Scaling'|'None'
%---------------------------------------------------------------------------
SPM.xGX.iGXcalc       = 'None';

% low frequency confound: high-pass cutoff (secs) [Inf = no filtering]
%---------------------------------------------------------------------------
SPM.xX.K(1).HParam    = MYV.hf_cut;

% intrinsic autocorrelations: OPTIONS: 'none'|'AR(1) + w'
%-----------------------------------------------------------------------
SPM.xVi.form       = 'AR(1) + w';

% basis functions and timing parameters
%---------------------------------------------------------------------------
% OPTIONS:'hrf'
%         'hrf (with time derivative)'
%         'hrf (with time and dispersion derivatives)'
%         'Fourier set'
%         'Fourier set (Hanning)'
%         'Gamma functions'
%         'Finite Impulse Response'
%---------------------------------------------------------------------------
% Fill in the field below with the corresponding string above
SPM.xBF.name       = 'hrf (with time derivative)';
%SPM.xBF.length     = 20;          % length in seconds - not used for hrf 
%SPM.xBF.order      = 1;           % order of basis set - not used for hrf

% The next two fields usually don't need changing. 
SPM.xBF.T          = 16;                % number of time bins per scan
SPM.xBF.T0         = 1;                 % first time bin (see slice
                                        % timing)
                        
% Selfish explanatory                                   
SPM.xBF.UNITS      = 'scans';           % OPTIONS: 'scans'|'secs' for
                                        % onsets
                        
% value of one means no Volterra pain                                   
SPM.xBF.Volterra   = 1;                 % OPTIONS: 1|2 = order of convolution

% specify filter for filenames
Filter             = MYV.snstats_filter;

% file list
PP = '';

% get, make, goto SPM results directory
sess_dir = fullfile(MYV.root, MYV.subjects{sb}, MYV.sesses{ss});  
ana_dir = fullfile(sess_dir, MYV.ana_dir);
if ~(exist(ana_dir))
  mkdir(sess_dir,MYV.ana_dir);
end
cd(ana_dir);

% file selection
P = spm_get('files',sess_dir,Filter);
SPM.nscan(1) = size(P,1);
PP = strvcat(PP,P);

% Condition stuff - onsets, durations, types.
c_ons = spm_load(MYV.cond_files{sb, ss});
[TRIAL_NO ONSET RESPONSE RESP_ONSET] = deal(1,2,3,4);

% now set into SPM design
for cno = 1:nconds
  tmp = c_ons(:, ONSET) -1;  % because we deleted the first scan
  
  % Make sure onsets are within scan range
  tempi = tmp >=0 & tmp <= size(P, 1);
  tmp = tmp(tempi);
 
  SPM.Sess.U(cno) = struct(...
      'ons', tmp,...
      'dur', ones(size(tmp)) * MYV.cond_dur * TR, ...
      'name',{condnames(cno)},...
      'P', struct('name','none')); % Parametric modulation
end

% design (user specified covariates)
%------------------------------------------------------------------
% realignment parameters to add to model
movefil = spm_get('Files', sess_dir, ...
                  ['rp_' MYV.sl_prefix '*.txt']);
moves = spm_load(movefil);
if isempty(moves)
  error(['Cannot get movement parameters from: ' sess_dir]);
end
  
% Fix goofy realignment params
moves = moves(1:size(P,1), :);

% mean centre moves
moves = moves - ones(size(P, 1), 1) * mean(moves);
move_diff = [zeros(1, 6); diff(moves)];
move_m1 = [zeros(1, 6); moves(1:end-1,:)];

% Put various params in
SPM.Sess.C.C    = [moves];
SPM.Sess.C.name = [move_names];

% set files
SPM.xY.P           = PP;

% Configure design matrix
SPMdes = spm_fmri_spm_ui(SPM);

% Estimate parameters
spm_unlink(fullfile('.', 'mask.img')); % avoid overwrite dialog
SPMest = spm_spm(SPMdes);
  
% back to initial directory
cd(pwd_orig);