Using ScannerSync from Matlab
Make sure you have the ScannerSync control installed.
Somewhere near the top of your code, set up ScannerSync & initialise communication with the input-output board (will not work if you're using a machine without the board, e.g., not the mimic or stim delivery machines).
%% SCANNERSYNC TR=1000; % TR in ms numdummies=8; % Create & initialise scanner sync object objSS=actxserver('MRISync.ScannerSync'); %Create a scanner object invoke(objSS,'Initialize','') %Initialise the Keithley board and object invoke(objSS,'SetMSPerSample',2); %Set StartExperiment routines’ sampling
Now, wait for first pulse from scanner. Also, tell ScannerSync the approximate TR.
% ScannerSync - waits for the first pulse, resets timer to 0, sets TR invoke(objSS,'StartExperiment', double(TR));
Wait for dummies (one less as StartExperiment command above will already have heard a pulse)
for countdown=(numdummies-1):-1:1 count_text=sprintf('%d', countdown); % uncomment the next two if you're using the PsychToolbox % DrawFormattedText(window, count_text, 'center', 'center', white); % Screen(window, 'Flip'); invoke(objSS,'SynchroniseExperiment',1,0); % 1= force wait for actual pulse; 0=return this many ms after pulse end;
In your trial loop, you'll need to spend some of the time listening for pulses
invoke(objSS,'CheckPulseSynchronyForTime', double(500)); % spend 500 ms listening for any pulses
You should dump out the timing of critical events and the measured TR
picstarttime=invoke(objSS,'SSGetTimer'); measuredTR=invoke(objSS,'GetMeasuredTR'); % ...add your own code to write these to your output file
Also, for some designs you may want to occasionally synchronise your trials to the scanner
invoke(objSS,'SynchroniseExperiment',1,0); % 1= force wait for actual pulse; 0=return this many ms after pulse