4399
Comment:
|
← Revision 15 as of 2016-04-06 15:42:09 ⇥
0
moved to "MEG wiki"
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
= ScannerSynch = ScannerSynch provides an interface for National Instruments PCI 6503 card used to capture all pulses (scanner synch pulse and button pulses alike). For more information, type in MATLAB {{{#!highlight matlab numbers=off help ScannerSynchClass }}} {{{#!wiki caution 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 [[http://imaging.mrc-cbu.cam.ac.uk/imaging/TiborAuer|Tibor Auer]]. <<TableOfContents(3)>> == Obtain ScannerSynch == * ScannerSynch is available on all relevant PCs (StimPCs, "mimic" 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 [[attachment:ScannerSynchClass.m|here]] (right-click and "Save As...") == Using ScannerSynch == === Initialise === * Default. Use only if device (scanner, pulse emulator) is connected (only in StimPCs and mimic PC)! . {{{#!highlight matlab numbers=off SSO = ScannerSynchClass; }}} * Emulations: . {{{#!highlight matlab numbers=off SSO = ScannerSynchClass(1); % emulate scanner synch pulse }}} . {{{#!highlight matlab numbers=off SSO = ScannerSynchClass(0,1); % emulate button box }}} . {{{#!highlight matlab numbers=off SSO = ScannerSynchClass(1,1); % emulate scanner synch pulse and button box }}} === Close === !ScannerSynchClass 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: . {{{#!highlight matlab numbers=off SSO.delete; }}} === Capture scanner synch pulse === * Simple case . {{{#!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 % 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 end }}} === Capture button presses === . {{{#!highlight matlab numbers=off 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 }}} |