Diff for "MEGSynch" - CBU MRI facility Wiki
location: Diff for "MEGSynch"
Differences between revisions 14 and 15
Revision 14 as of 2016-02-23 15:28:27
Size: 3599
Editor: TiborAuer
Comment:
Revision 15 as of 2016-04-06 15:42:09
Size: 0
Editor: TiborAuer
Comment: moved to "MEG wiki"
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= 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
{{{#!highlight matlab numbers=off
help MEGSynchClass
}}}

{{{#!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 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 [[attachment:MEGSynchClass.m|here]] (right-click and "Save As...")

== Using MEGSynch ==
=== Initialise ===
 * Default. Use only in MEG lab!
 . {{{#!highlight matlab numbers=off
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:
 . {{{#!highlight matlab numbers=off
MEG = MEGSynchClass({'B1','S4';'B2','S5'}); % specify button names "B1" and "B2" and maps them to S4 and S5
}}}
 * Emulation:
 . {{{#!highlight matlab numbers=off
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:
 . {{{#!highlight matlab numbers=off
MEG.delete;
}}}

=== Send trigger ===
 . {{{#!highlight matlab numbers=off
for v = 0:255 % send triggers 0 to 255 ...
    pause(0.1) % ... in every 100ms
    MEG.SendTrigger(v)
end
}}}

=== Capture button presses ===
 . {{{#!highlight matlab numbers=off
MEG.SetButtonReadoutTime(0.5); % block individual buttons for 0.5s after button press so we will not detect the same button press twice
% MEG.SetButtonBoxReadoutTime(0.5); % block the whole buttonbox for 0.5s after button press
% MEG.Keys = {'f1','f2','f3','f4'}; % emulation Buttons #1-#4 with F1-F4
n = 0;
% MEG.BBoxTimeout = 1.5; % Wait for button press for 1.5s
% MEG.BBoxTimeout = -1.5; % Wait for button press for 1.5s even in case of response
MEG.ResetClock;
while n ~= 10 rButtonRelease; % Wait for any button to be released
    % MEG.WaitFo % polls 10 button presses
    MEG.WaitForButtonPress; % Wait for any button to be pressed
    % MEG.WaitForButtonPress([],2); % Wait for Button #2
    % MEG.WaitForButtonPress(2); % Wait for any button for 2s (overrides MEG.BBoxTimeout only for this event)
    % MEG.WaitForButtonPress(-2); % Wait for any button for 2s even in case of response (overrides MEG.BBoxTimeout only for this event)
    % MEG.WaitForButtonPress(2,2); % Wait for Button #2 for 2s (overrides MEG.BBoxTimeout only for this event)
    % MEG.WaitForButtonPress(-2,2); % Wait for Button #2 for 2s even in case of response (overrides MEG.BBoxTimeout only for this event)
    n = n + 1;
    fprintf('At %2.3fs, ',MEG.Clock);
    fprintf('Button %d ',MEG.LastButtonPress);
    fprintf('pressed: %2.3fs\n',MEG.TimeOfLastButtonPress);
end
}}}