TacAMv8.m

From OpenWetWare
Revision as of 13:24, 15 April 2010 by Sarah Baum (talk | contribs) (New page: % TacAMv8.m % Reads in a random stimulus sequence generated by optseq (for n runs) % and selected lists of stimuli % then assigns a (non-repeated) stimulus to each event in the sequence ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

% TacAMv8.m % Reads in a random stimulus sequence generated by optseq (for n runs) % and selected lists of stimuli % then assigns a (non-repeated) stimulus to each event in the sequence

% number of stimulus types numstimtype = 2; % stimulus names for filename output stimtypes = { 'AM','TM'}; % number of runs numruns = 4; % number of stimuli per run numstim = 150; % how long each stimulus lasts stimtime = 2; % max number of stim totalstims = numruns*numstim; % Array containing stim types stimseq = zeros(numruns, numstim); % Array containing clip names to save to disk clipfile = cell(numruns,numstim);


% Read in clips cd /Volumes/data1/stimuli/NIHStimuli/ASD/ [Actionmovies, numActionmovies] = ReadPaths('ActionMoviesList.txt'); [Toolmovies, numToolmovies] = ReadPaths('ToolMoviesList.txt'); txt = sprintf('Read in %i actionmovies, %i toolmovies. ',numActionmovies,numToolmovies); disp(txt);


% change to directory that contains stimulus order files cd /Users/mbeauchamp/data1/UT/TacAM

% Stimulus prefix (from optseq2) out = 'Tacv8';

for i = 1:numruns % Read in stimulus sequences % in optseq, first column is "real time", second is stim type (numeric code) % third is duration, fourth is stim type (name) % this is a hack to get around 0-10 if i < 10 fname = [out,'-00',num2str(i),'.par']; else fname = [out,'-0',num2str(i),'.par']; end

[stimonset,stimtype,stimlength,stimname,junk] = textread(fname,'%f%n%f%s%f','delimiter',' ');

% optseq has the annoying habit of not listing multiple nulls in a row; % convert so each run has exactly the same number of stimuli j = 1; for ctr = 1:length(stimname)

   for k=1:stimlength(ctr)/stimtime

stimseq(i,j) = stimtype(ctr);

       j = j + 1;

end end

end % end reading in stimulus sequence files


% Go through each run, assigning stimuli % For now, we use a simple algorithm, assuming that the total number of % each clip type is less than the number of presentations % we also ignore that there are different categories of stimuli % e.g. might get 4 flippers, no pitcher by change % could change so that it picks one from each category, etc. am = randperm(numActionmovies); amctr = 1; tm = randperm(numToolmovies); tmctr = 1; % if have too few clips, just make consecutive permutations e.g. for tool stills % ts = [ randperm(numToolstills) randperm(numToolstills)]; tsctr = 1;

for i=1:numruns am = randperm(numActionmovies); amctr = 1; tm = randperm(numToolmovies); tmctr = 1; for j=1:numstim switch stimseq(i,j) case 0, clipfile{i,j} = 'NULL'; case 1, clipfile{i,j} = Actionmovies(am(amctr)); amctr = amctr + 1; case 2, clipfile{i,j} = Toolmovies(tm(tmctr)); tmctr = tmctr + 1; otherwise, disp('ERROR: UNPLANNED STIMULUS TYPE!') end end end


% New version of presentation stimulus presentation program wants the order and the stimuli themselves fname = [out '.txt' ] %fname = ['Tacv7.txt'];


fid = fopen(fname,'wt'); fprintf(fid,'{\n');  % initial { for 2D array for i=1:numruns

   j=1;
   fprintf(fid,'{"%s"',char(clipfile{i,j}));

for j=2:numstim

       % comma before every one except the first one

fprintf(fid,',"%s"',char(clipfile{i,j}));

   end
   if i < numruns fprintf(fid,'},\n'); end;  % don't need comma after very last one

end fprintf(fid,'}\n};\n');  % final }; for 2D array fclose(fid);

% check to make sure file is OK; note that have to manually delete very % last "," in the file cmd = ['!cat ',fname]; eval(cmd)


% write out timing of each stimulus for use as regressors by 3dDeconvolve % with -stim_times option % create a separate regressor for each clip type, with the time of each % stimlus in each run on a separate row (then if we don't use all runs, % just ignore those rows, or swap order of rows if run ordering is % different; can't do this with column format % parameters

% actual number of runs actualnumruns = 2; stimvals = [1 2];

% TR for timing purposes tr = 2; for i=1:numstimtype

   fname = char(strcat(out,stimtypes(i),'.txt'));
   fid = fopen(fname,'wt');
   fprintf(fid,); % 
   for j=1:actualnumruns   % assume we have at least one stim of each type per run; if not we need to include a "*"
       curtime = 0;
       for k=1:numstim
           if ( isequal( stimseq(j,k) , stimvals(i) ) )
              	fprintf(fid,'%i ',curtime); % time of each stimulus, separated by spaces
           end
           curtime = curtime + tr;
       end
       fprintf(fid,'\n'); % end of the run, go to next line
   end
   fclose(fid); % end of that stimulus, close file
   cmd = ['!cat ',fname];
   eval(cmd)

end