BrainVoyager QX uses the name of a “linked protocol file” from the VTC header for quite a few built-in functions (e.g. when visualizing the conditions as colored background patches from the protocol information when displaying time courses).
For several reasons, it can be desirable to use different versions of the protocol (e.g. with conditions split or collapsed across one within-subjects factor of the study design, or using slightly shifted onsets in a deconvolution design to capture potential anticipation effects), and linking those protocol files in BrainVoyager can be relatively cumbersome.
To fully use the scriptability of this feature, your data files must be arranged in a specific way:
SUBJECT_RUN+NUMBER_TEXT.vtc
Here is a template script that will look for VTC and PRT files in subject folders according to a pattern. The script will then load each VTC file in turn, link the corresponding found PRT file and then store the VTC back to disk.
% pre-set variables % - studyfolder: folder where the (subject) sub-folders are located % - vtcfpattern: VTC filename pattern % - prtfpattern: PRT filename pattern (this needs to be altered to link % different protocols!) studyfolder = '/Volumes/hms_study/Imaging'; vtcfpattern = '*_run*MNI.vtc'; prtfpattern = '*_run*_hmcollapsed.prt'; % find folders in the study folder subfolders = findfiles(studyfolder, '*', 'dirs=1', 'depth=1'); nsf = numel(subfolders); % create a cell array for VTC and PRT filenames vtcfiles = cell(nsf, 1); prtfiles = cell(nsf, 1); % first pass: lookup files for fc = 1:nsf % look for VTC and PRT files vtcfiles{fc} = findfiles(subfolders{fc}, vtcfpattern); prtfiles{fc} = findfiles(subfolders{fc}, prtfpattern); % ensure that the number is the same if numel(vtcfiles{fc}) ~= numel(prtfiles{fc}) error('Number of found files mismatch.'); end end % as we are sure that the number of files is correct for each subject % we can simply create two large arrays with filenames vtcfiles = cat(1, vtcfiles{:}); prtfiles = cat(1, prtfiles{:}); % NOTE: AT THIS PLACE, IT IS POSSIBLE TO ADD CODE TO EITHER % - CHECK THE INTEGRITY OF FILES % - PERFORM SOME PROCESS WITH THE PRT CONTENT AND RE-SAVE % - ALTER THE VTC DATA AND RE-SAVE % - etc... % iterate over found files for fc = 1:numel(vtcfiles) % load VTC file vtc = xff(vtcfiles{fc}); % link protocol vtc.NrOfLinkedPRTs = 1; vtc.NameOfLinkedPRT = prtfiles{fc}; % save and clear VTC vtc.Save; vtc.ClearObject; end
The code makes some additional assumptions:
Naturally, it would be possible to ascertain these assumptions, but it might be more efficient (in particular with the second condition) to use a separate script that creates and/or validates the protocol files.