GetRunStimList

From CCN Wiki
Revision as of 15:34, 29 September 2016 by Chris (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

From time to time, we may lose track of which stimuli lists are associated with a particular .mat experimental data file following an experiment. "Did this participant view the List A or List B items?", you might ask. The following MATLAB function (found in the usual place) takes a set of data file names (.mat) and a set of stimuli files associated with an experiment run using the same PsychToolBox design conventions used for the LDT experiment. The function iterates through each matfile and determines which of the stimuli lists contain the same sequence of items as those recorded in the trial-by-trial data. The variable stimlists is returned as an N &times 2 cell array of .mat/.txt pairs.

If no parameters are given, the user is prompted to select the .mat files and/or .txt stimuli files of interest, which is probably the easiest way to go about doing things.

function stimlists=getRunStimList(matfiles, lists)
if(~exist('matfiles', 'var') || isempty(matfiles))
   [FileName,PathName,~] = uigetfile('*.mat', 'Select a .mat data file','MultiSelect', 'on');
   matfiles=fullfile(PathName, FileName);
end
if(~exist('lists', 'var') || isempty(lists))
   [FileName,PathName,~] = uigetfile('*.txt', 'Select stimuli files','MultiSelect', 'on');
   lists=fullfile(PathName, FileName);
end
datafiles=cellfun(@(x) load(x), matfiles);

%some code to load in the stims from the stimfiles using readtable()
stimfiles=cellfun(@(x) readtable(x), lists, 'UniformOutput', false);

stimlists=cell(length(matfiles),2); %stimlists will be a nFiles*2 cell array of strings of the format: [matfile | stimfile]

for i=1:length(datafiles)
   d=datafiles(i); %open each data file
   %determine which stim list matches the stims appearing in the data file
   stims={d.expinfo.data.stim}';
   %iterate through all lists
   stimlists{i,1}=matfiles{i}; %make note of which matfile we are working on
   for j=1:length(stimfiles)
       sf=stimfiles{j};
       if(isequal(stims, table2cell(sf(:,3))))
           stimlists{i,2}=lists{j};
       end
   end
end
[~,stimlists,~]=cellfun(@(x) fileparts(x), stimlists, 'UniformOutput', false);
end