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
}}