Home > database > fmri > regressors > fmri_regress_stim.m

fmri_regress_stim

PURPOSE ^

generates fmri data regressors for stimulus-based responses

SYNOPSIS ^

function [names,vals] = fmri_regress_stim(pinfo,minfo,sess)

DESCRIPTION ^

 generates fmri data regressors for stimulus-based responses
 
   [names,vals] = fmri_regress_stim(pinfo,minfo,sess)
 
 called by fmri_generate_regress
 
 also handles limits based on timespan judgments
 NOTE: need to add a little of 
 
 REQUIRES (incomplete list)
   pinfo
   minfo
       .stim
           .(regid)
   sess
 
 RETURNS
   names = cell array of six regressor names
   vals = volume X regressor matrix containing motion regressors
 
 FB 2009.11.05

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [names,vals] = fmri_regress_stim(pinfo,minfo,sess)
0002 
0003 % generates fmri data regressors for stimulus-based responses
0004 %
0005 %   [names,vals] = fmri_regress_stim(pinfo,minfo,sess)
0006 %
0007 % called by fmri_generate_regress
0008 %
0009 % also handles limits based on timespan judgments
0010 % NOTE: need to add a little of
0011 %
0012 % REQUIRES (incomplete list)
0013 %   pinfo
0014 %   minfo
0015 %       .stim
0016 %           .(regid)
0017 %   sess
0018 %
0019 % RETURNS
0020 %   names = cell array of six regressor names
0021 %   vals = volume X regressor matrix containing motion regressors
0022 %
0023 % FB 2009.11.05
0024 
0025 regid = pinfo.regid;
0026 
0027 % init output vars
0028 names = {regid};
0029 vals = [];
0030 
0031 % init vars
0032 ccm = parse_fh(minfo.cond_cue_map); % function handle for condition to cue mappings
0033 cue = ccm(regid); % get cue for this regressor
0034 resp_params = extract_resp_params_v2(cue,pinfo,minfo,sess);
0035 pc = set_var_col_const(pinfo.vars);
0036 
0037 if isempty(resp_params)
0038   return
0039 end
0040 
0041 % Now get the vector of stimulus onset times to which these response
0042 % parameters refer
0043 sfilt.include.all = minfo.response_filter;
0044 sinfo = ensemble_filter(pinfo,sfilt);
0045 onsets = sinfo.data{pc.RUN_REL_TIME}/1000;
0046 
0047 % Durations
0048 if isfield(minfo,'music_dur')
0049   % Durations are constant
0050   durs = ones(size(onsets))*minfo.music_dur;
0051 elseif isfield(minfo,'music_dur_db') && minfo.music_dur_db
0052   sids = sinfo.data{pc.EVENT_CODE};
0053   durs = fmri_stim_duration(pinfo,minfo,sids);
0054 end
0055 
0056 % limit by timespan?
0057 if ~isempty(strfind(regid,'timespan'))
0058   [onsets,durs,resp_params] = ...
0059       fmri_regress_timespan(pinfo,minfo,onsets,durs,resp_params);
0060 end % if ~isempty(strfind(regid,'timespan
0061 
0062 % special instructions for this regid?
0063 if isfield(minfo,'stim') && isfield(minfo.stim,regid)
0064   rinfo = minfo.stim.(regid);
0065   
0066   % generate dummy regressors for different levels of this stim?
0067   if isfield(rinfo,'dummy_regs')
0068     %%% THIS CONDITIONAL RETURNS, IF SET, NOTHING AFTER THIS WILL BE RUN
0069     sv = rinfo.dummy_regs.seg_vals;
0070     ns = length(sv);
0071     if isfield(rinfo.dummy_regs,'seg_names')
0072       sn = rinfo.dummy_regs.seg_names;
0073     else
0074       sn = {};
0075       for k=1:ns, sn{k} = sprintf('%s_%d',regid,k); end
0076     end
0077     vals = [];
0078     names = {};
0079     for k=1:length(sv)
0080       li = ismember(resp_params,sv{k});
0081       if isempty(li), continue, end
0082       lval = fmri_convolve_regress(onsets(li),durs(li),ones(length(li),1),...
0083           pinfo.scanner.TR,pinfo.scanner.dt,pinfo.scanner.actual_nvol);
0084       vals = [vals lval];
0085       names = [names sn{k}];
0086     end % for k=1:length(sv)
0087     
0088     %%%% return!!!
0089     return
0090   end % if isfield(rinfo,'dummy_regs
0091 end % if isfield(minfo,'stim') && isfield(minfo.stim,regid
0092 
0093 % Now build the regressor
0094 vals = fmri_convolve_regress(onsets,durs,resp_params,pinfo.scanner.TR,...
0095     pinfo.scanner.dt,pinfo.scanner.actual_nvol);

Generated on Thu 09-Dec-2010 04:01:40 by m2html © 2003