1- function waitForTrigger(cfg , deviceNumber )
2- % waitForTrigger(cfg, deviceNumber)
1+ function waitForTrigger(varargin )
2+ % waitForTrigger(cfg, deviceNumber, quietMode, nbTriggersToWait )
33 %
44 % Counts a certain number of triggers coming from the scanner before returning.
55 %
@@ -13,73 +13,115 @@ function waitForTrigger(cfg, deviceNumber)
1313 % When no deviceNumber is set then it will check the default device: this is
1414 % probably only useful in debug as you will want to make sure you get the
1515 % triggers coming from the scanner in a real case scenario.
16-
17- if nargin < 1 || isempty(cfg )
18- error(' I need at least one input.' );
19- end
20-
21- if nargin < 2 || isempty(deviceNumber )
22- deviceNumber = - 1 ;
23- fprintf(' Will wait for triggers on the main keyboard device.\n ' );
24- end
25-
16+ %
17+ % INPUTS
18+ % - varargin{1} = cfg
19+ %
20+ % - varargin{2} = deviceNumber
21+ %
22+ % - varargin{3} = quietMode: a boolean to make sure nothing is printed on the screen or
23+ % the prompt
24+ %
25+ % - nbTriggersToWait
26+
27+ [cfg , nbTriggersToWait , deviceNumber , quietMode ] = checkInputs(varargin );
28+
2629 triggerCounter = 0 ;
27-
30+
2831 if strcmpi(cfg .testingDevice , ' mri' )
29-
32+
3033 msg = [' Experiment starting in ' , ...
31- num2str(cfg .mri .triggerNb - triggerCounter ), ' ...' ];
32- talkToMe(cfg , msg );
33-
34- while triggerCounter < cfg .mri .triggerNb
35-
34+ num2str(nbTriggersToWait - triggerCounter ), ' ...' ];
35+
36+ talkToMe(cfg , msg , quietMode );
37+
38+ while triggerCounter < nbTriggersToWait
39+
3640 keyCode = []; % #ok<NASGU>
37-
41+
3842 [~ , keyCode ] = KbPressWait(deviceNumber );
39-
43+
4044 if strcmp(KbName(keyCode ), cfg .mri .triggerKey )
41-
45+
4246 triggerCounter = triggerCounter + 1 ;
43-
47+
4448 msg = sprintf(' Trigger %i ' , triggerCounter );
45- talkToMe(cfg , msg );
46-
49+
50+ talkToMe(cfg , msg , quietMode );
51+
4752 % we only wait if this is not the last trigger
48- if triggerCounter < cfg . mri . triggerNb
53+ if triggerCounter < nbTriggersToWait
4954 pauseBetweenTriggers(cfg );
5055 end
51-
56+
5257 end
5358 end
5459 end
5560end
5661
57- function talkToMe(cfg , msg )
58-
59- fprintf([msg , ' \n ' ]);
60-
61- if isfield(cfg , ' screen' ) && isfield(cfg .screen , ' win' )
62-
63- DrawFormattedText(cfg .screen .win , msg , ...
64- ' center' , ' center' , cfg .text .color );
65-
66- Screen(' Flip' , cfg .screen .win );
67-
62+ function [cfg , nbTriggersToWait , deviceNumber , quietMode ] = checkInputs(varargin )
63+
64+ varargin = varargin{1 };
65+
66+ if numel(varargin ) < 1 || isempty(varargin{1 }) || ~isstruct(varargin{1 })
67+ error(' First input must be a cfg structure.' );
68+ elseif isstruct(varargin{1 })
69+ cfg = varargin{1 };
70+ end
71+
72+ if numel(varargin ) < 3 || isempty(varargin{3 })
73+ quietMode = false ;
74+ else
75+ quietMode = varargin{3 };
76+ end
77+
78+ if numel(varargin ) < 2 || isempty(varargin{2 })
79+ deviceNumber = - 1 ;
80+ if ~quietMode
81+ fprintf(' Will wait for triggers on the main keyboard device.\n ' );
82+ end
83+ else
84+ deviceNumber = varargin{2 };
85+ end
86+
87+ if numel(varargin ) < 4 || isempty(varargin{4 })
88+ nbTriggersToWait = cfg .mri .triggerNb ;
89+ else
90+ nbTriggersToWait = varargin{4 };
6891 end
92+
93+ end
6994
95+ function talkToMe(cfg , msg , quietMode )
96+
97+ if ~quietMode
98+
99+ fprintf([msg , ' \n ' ]);
100+
101+ if isfield(cfg , ' screen' ) && isfield(cfg .screen , ' win' )
102+
103+ DrawFormattedText(cfg .screen .win , msg , ...
104+ ' center' , ' center' , cfg .text .color );
105+
106+ Screen(' Flip' , cfg .screen .win );
107+
108+ end
109+
110+ end
111+
70112end
71113
72114function pauseBetweenTriggers(cfg )
73115 % we pause between triggers otherwise KbWait and KbPressWait might be too fast and could
74116 % catch several triggers in one go.
75-
117+
76118 waitTime = 0.5 ;
77119 if isfield(cfg , ' mri' ) && isfield(cfg .mri , ' repetitionTime' ) && ~isempty(cfg .mri .repetitionTime )
78120 waitTime = cfg .mri .repetitionTime / 2 ;
79121 end
80-
122+
81123 WaitSecs(waitTime );
82-
124+
83125end
84126
85127% function [MyPort] = WaitForScanTrigger(Parameters)
0 commit comments