1
- function waitForTrigger(cfg , deviceNumber )
2
- % waitForTrigger(cfg, deviceNumber)
1
+ function waitForTrigger(varargin )
2
+ % waitForTrigger(cfg, deviceNumber, quietMode, nbTriggersToWait )
3
3
%
4
4
% Counts a certain number of triggers coming from the scanner before returning.
5
5
%
@@ -13,73 +13,115 @@ function waitForTrigger(cfg, deviceNumber)
13
13
% When no deviceNumber is set then it will check the default device: this is
14
14
% probably only useful in debug as you will want to make sure you get the
15
15
% 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
+
26
29
triggerCounter = 0 ;
27
-
30
+
28
31
if strcmpi(cfg .testingDevice , ' mri' )
29
-
32
+
30
33
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
+
36
40
keyCode = []; % #ok<NASGU>
37
-
41
+
38
42
[~ , keyCode ] = KbPressWait(deviceNumber );
39
-
43
+
40
44
if strcmp(KbName(keyCode ), cfg .mri .triggerKey )
41
-
45
+
42
46
triggerCounter = triggerCounter + 1 ;
43
-
47
+
44
48
msg = sprintf(' Trigger %i ' , triggerCounter );
45
- talkToMe(cfg , msg );
46
-
49
+
50
+ talkToMe(cfg , msg , quietMode );
51
+
47
52
% we only wait if this is not the last trigger
48
- if triggerCounter < cfg . mri . triggerNb
53
+ if triggerCounter < nbTriggersToWait
49
54
pauseBetweenTriggers(cfg );
50
55
end
51
-
56
+
52
57
end
53
58
end
54
59
end
55
60
end
56
61
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 };
68
91
end
92
+
93
+ end
69
94
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
+
70
112
end
71
113
72
114
function pauseBetweenTriggers(cfg )
73
115
% we pause between triggers otherwise KbWait and KbPressWait might be too fast and could
74
116
% catch several triggers in one go.
75
-
117
+
76
118
waitTime = 0.5 ;
77
119
if isfield(cfg , ' mri' ) && isfield(cfg .mri , ' repetitionTime' ) && ~isempty(cfg .mri .repetitionTime )
78
120
waitTime = cfg .mri .repetitionTime / 2 ;
79
121
end
80
-
122
+
81
123
WaitSecs(waitTime );
82
-
124
+
83
125
end
84
126
85
127
% function [MyPort] = WaitForScanTrigger(Parameters)
0 commit comments