Size: 4539
Comment:
|
Size: 3601
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 51: | Line 51: |
=== Capture scanner synch pulse === * Simple case |
=== Send trigger === |
Line 54: | Line 53: |
SSO.SetSynchReadoutTime(0.5); % make sure that you do not detect the same pule twice SSO.TR = 2; % allows detecting missing pulses while SSO.SynchCount < 10 % polls 10 pulses SSO.WaitForSynch; fprintf('Pulse %d: %2.3f. Measured TR = %2.3fs\n',... SSO.SynchCount,... SSO.TimeOfLastPulse,... SSO.MeasuredTR); end }}} * Chance for missing pulse . {{{#!highlight matlab numbers=off SSO.SetSynchReadoutTime(0.5); % make sure that you do not detect the same pule twice SSO.TR = 2; % allows detecting missing pulses while SSO.SynchCount < 10 % until 10 pulses WaitSecs(Randi(100)/1000); % in every 0-100 ms ... if SSO.CheckSynch(0.01) % ... waits for 10 ms for a pulse fprintf('Pulse %d: %2.3f. Measured TR = %2.3fs. %d synch pulses has/have been missed\n',... SSO.SynchCount,... SSO.TimeOfLastPulse,... SSO.MeasuredTR,... SSO.MissedSynch); end |
for v = 0:255 % send triggers 0 to 255 ... pause(0.1) % ... in every 100ms MEG.SendTrigger(v) |
MEGSynch
MEGSynch provides an interface for National Instruments PCI 6503 card used to capture all pulses (scanner synch pulse and button pulses alike) when using MATLAB.
For more information, type in MATLAB
help MEGSynchClass
N.B.: National Instruments PCI 6503 card does not monitor pulses in the background, so you have to make sure that you wait for any pulse before it comes!
Any problems, report them to Tibor Auer.
Contents
Obtain MEGSynch
- MEGSynch is available on MEG PC
From your desktop PC (Windows), you can also have a copy from \\cbsu\data\Group\Imaging-Local\cbu\matlab
You can also download it from here (right-click and "Save As...")
Using MEGSynch
Initialise
- Default. Use only in MEG lab!
MEG = MEGSynchClass;
- Default button mapping:
Button
Button name in MATLAB
Channel
'Left Yellow'
'LY'
'S3'
'Right Blue'
'RB'
'S4'
'Right Yellow'
'RY'
'S5'
'Right Green'
'RG'
'S6'
'Right Red'
'RR'
'S7'
- To change button mapping:
MEG = MEGSynchClass({'B1','S4';'B2','S5'}); % specify button names "B1" and "B2" and maps them to S4 and S5
- Emulation:
MEG = MEGSynchClass(1); % full emulation
Close
MEGSynchClass has a destructor, which is automatically triggered if the object is deleted (e.g. clear, returning function). If you use a script, however, it does not perform any auto-clear, so you have to destroy the object manually:
MEG.delete;
Send trigger
for v = 0:255 % send triggers 0 to 255 ... pause(0.1) % ... in every 100ms MEG.SendTrigger(v) end
Capture button presses
SSO.SetButtonReadoutTime(0.5); % block individual buttons for 0.5s after button press so we will not detect the same button press twice % SSO.SetButtonBoxReadoutTime(0.5); % block the whole buttonbox for 0.5s after button press % SSO.Keys = {'f1','f2','f3','f4'}; % emulation Buttons #1-#4 with F1-F4 n = 0; % SSO.BBoxTimeout = 1.5; % Wait for button press for 1.5s % SSO.BBoxTimeout = -1.5; % Wait for button press for 1.5s even in case of response SSO.ResetClock; while n ~= 10 % polls 10 button presses SSO.WaitForButtonPress; % Wait for any button to be pressed % SSO.WaitForButtonRelease; % Wait for any button to be released % SSO.WaitForButtonPress([],2); % Wait for Button #2 % SSO.WaitForButtonPress(2); % Wait for any button for 2s (overrides SSO.BBoxTimeout only for this event) % SSO.WaitForButtonPress(-2); % Wait for any button for 2s even in case of response (overrides SSO.BBoxTimeout only for this event) % SSO.WaitForButtonPress(2,2); % Wait for Button #2 for 2s (overrides SSO.BBoxTimeout only for this event) % SSO.WaitForButtonPress(-2,2); % Wait for Button #2 for 2s even in case of response (overrides SSO.BBoxTimeout only for this event) n = n + 1; fprintf('At %2.3fs, ',SSO.Clock); fprintf('Button %d ',SSO.LastButtonPress); fprintf('pressed: %2.3fs\n',SSO.TimeOfLastButtonPress); end