Skip to content

Commit 8c8a0da

Browse files
committed
refactor initPTB
1 parent 82f1056 commit 8c8a0da

File tree

6 files changed

+103
-96
lines changed

6 files changed

+103
-96
lines changed

src/defaultCFG.m

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function value = defaultCFG()
2+
%
3+
% (C) Copyright 2022 CPP_PTB developers
4+
5+
value = struct('testingDevice', 'pc', ...
6+
'debug', struct('do', true, ...
7+
'transpWin', true, ...
8+
'smallWin', true), ...
9+
'color', struct('background', [0 0 0]), ...
10+
'text', struct('font', 'Courier New', 'size', 18, 'style', 1));
11+
12+
value.screen.monitorWidth = 42;
13+
value.screen.monitorDistance = 134;
14+
value.screen.resolution = {[], [], []};
15+
16+
value.skipSyncTests = 0;
17+
18+
% fixation cross or dot
19+
value.fixation.type = 'cross';
20+
value.fixation.xDisplacement = 0;
21+
value.fixation.yDisplacement = 0;
22+
value.fixation.color = [255 255 255];
23+
value.fixation.width = 1;
24+
value.fixation.lineWidthPix = 5;
25+
26+
% define visual apperture field
27+
value.aperture.type = 'none';
28+
29+
value.keyboard.keyboard = [];
30+
value.keyboard.responseBox = [];
31+
value.keyboard.responseKey = {};
32+
value.keyboard.escapeKey = 'ESCAPE';
33+
34+
end

src/initPTB.m

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@
2626
%
2727
% (C) Copyright 2020 CPP_PTB developers
2828

29-
% for octave: make sure information is not presented on prompt one screen at
30-
% a time
31-
more off;
32-
3329
checkPtbVersion();
3430

3531
cfg = getOsInfo(cfg);
@@ -102,9 +98,8 @@
10298
Priority(MaxPriority(cfg.screen.win));
10399

104100
%% Warm up some functions
105-
% Do dummy calls to GetSecs, WaitSecs, KbCheck to make sure
106-
% they are loaded and ready when we need them - without delays
107-
% in the wrong moment:
101+
% Do dummy calls to GetSecs, WaitSecs, KbCheck
102+
% to make sure they are loaded and ready when we need them
108103
KbCheck;
109104
WaitSecs(0.1);
110105
GetSecs;
@@ -138,7 +133,6 @@ function initDebug(cfg)
138133

139134
if cfg.debug.do
140135

141-
cfg.skipSyncTests = 2;
142136
Screen('Preference', 'SkipSyncTests', cfg.skipSyncTests);
143137
Screen('Preference', 'Verbosity', 0);
144138
Screen('Preference', 'SuppressAllWarnings', 1);
@@ -182,8 +176,7 @@ function initDebug(cfg)
182176
audioDev = PsychPortAudio('GetDevices');
183177

184178
% find output device to use
185-
idx = find( ...
186-
audioDev.NrInputChannels == cfg.audio.inputChannels && ...
179+
idx = find(audioDev.NrInputChannels == cfg.audio.inputChannels && ...
187180
audioDev.NrOutputChannels == cfg.audio.channels && ...
188181
~cellfun(@isempty, regexp({audioDev.HostAudioAPIName}, ...
189182
cfg.audio.deviceName)));
@@ -207,11 +200,6 @@ function initDebug(cfg)
207200
% at the begining of the experiment)
208201
PsychPortAudio('Volume', cfg.audio.pahandle, cfg.audio.initVolume);
209202

210-
cfg.audio.pushSize = cfg.audio.fs * 0.010; % ! push N ms only
211-
212-
cfg.audio.requestOffsetTime = 1; % offset 1 sec
213-
cfg.audio.reqsSampleOffset = cfg.audio.requestOffsetTime * cfg.audio.fs;
214-
215203
end
216204
end
217205

src/utils/setDefaults.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
%
99
% :param structure:
1010
% :type structure: structure
11+
%
1112
% :param fieldsToSet:
1213
% :type fieldsToSet: structure
1314
%

src/utils/setDefaultsPTB.m

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,42 +16,7 @@
1616
cfg = struct;
1717
end
1818

19-
%% list the default values
20-
fieldsToSet.testingDevice = 'pc';
21-
22-
fieldsToSet.skipSyncTests = 0;
23-
24-
% keyboard defaults
25-
fieldsToSet.keyboard.keyboard = [];
26-
fieldsToSet.keyboard.responseBox = [];
27-
fieldsToSet.keyboard.responseKey = {};
28-
fieldsToSet.keyboard.escapeKey = 'ESCAPE';
29-
30-
fieldsToSet.debug.do = true;
31-
fieldsToSet.debug.transpWin = true;
32-
fieldsToSet.debug.smallWin = true;
33-
34-
fieldsToSet.color.background = [0 0 0];
35-
36-
% text defaults
37-
fieldsToSet.text.font = 'Courier New';
38-
fieldsToSet.text.size = 18;
39-
fieldsToSet.text.style = 1;
40-
41-
fieldsToSet.screen.monitorWidth = 42;
42-
fieldsToSet.screen.monitorDistance = 134;
43-
fieldsToSet.screen.resolution = {[], [], []};
44-
45-
% fixation cross or dot
46-
fieldsToSet.fixation.type = 'cross';
47-
fieldsToSet.fixation.xDisplacement = 0;
48-
fieldsToSet.fixation.yDisplacement = 0;
49-
fieldsToSet.fixation.color = [255 255 255];
50-
fieldsToSet.fixation.width = 1; % degrees of visual angle
51-
fieldsToSet.fixation.lineWidthPix = 5;
52-
53-
% define visual apperture field
54-
fieldsToSet.aperture.type = 'none';
19+
fieldsToSet = defaultCFG();
5520

5621
if isfield(cfg, 'audio') && cfg.audio.do
5722

@@ -73,6 +38,12 @@
7338
% Should we wait for the device to really start?
7439
fieldsToSet.audio.waitForDevice = 1;
7540

41+
fieldsToSet.audio.pushSize = fieldsToSet.audio.fs * 0.010; % ! push N ms only
42+
43+
fieldsToSet.audio.requestOffsetTime = 1; % offset 1 sec
44+
fieldsToSet.audio.reqsSampleOffset = fieldsToSet.audio.requestOffsetTime * ...
45+
fieldsToSet.audio.fs;
46+
7647
end
7748

7849
if isfield(cfg, 'eyeTracker') && cfg.eyeTracker.do
@@ -95,6 +66,18 @@
9566

9667
cfg = setDefaults(cfg, fieldsToSet);
9768

69+
%% checks
70+
if cfg.debug.do
71+
cfg.eyeTracker.do = false;
72+
cfg.skipSyncTests = 2;
73+
end
74+
75+
if cfg.skipSyncTests == false
76+
cfg.skipSyncTests = 0;
77+
elseif cfg.skipSyncTests == true
78+
cfg.skipSyncTests = 1;
79+
end
80+
9881
% sort fields alphabetically
9982
cfg = orderfields(cfg);
10083

tests/miss_hit.cfg

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
# style guide (https://florianschanda.github.io/miss_hit/style_checker.html)
2-
regex_function_name: "((test_[a-z]+)|[a-z]+)(([A-Z]){1}[A-Za-z]+)*"
32
regex_script_name: "((test_[a-z]+)|[a-z]+)(([A-Z]){1}[A-Za-z]+)*"
4-
regex_parameter_name: "test_suite|[A-Z]{2,}|[a-z]+([A-Z]+[a-z]*)*"
3+
4+
# camelCase for helper functions
5+
# test_nameOfTheTestedFunction_comment_for_each_test
6+
regex_function_name: "[a-z]+([A-Z]{1}[a-z]+)*|test_([a-z]+([A-Z0-9]*[a-z0_9]*)+)(_[a-z0_9]*)*"
7+
8+
# all uppercase or camelCase
9+
regex_parameter_name: "test_suite|[A-Z]*|[a-z]+([A-Z]{1}[a-z]+)*"

tests/test_setDefaultsPTB.m

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,62 @@
88
initTestSuite;
99
end
1010

11-
function test_setDefaultsPtbBasic()
11+
function test_setDefaultsPtb_basic()
1212

1313
% set up
1414
cfg = setDefaultsPTB;
1515

1616
% test data
17-
expectedCfg = returnExpectedCFG();
17+
expectedCfg = defaultCFG();
18+
expectedCfg.eyeTracker.do = false;
19+
expectedCfg.skipSyncTests = 2;
1820

1921
% test
2022
assertEqual(expectedCfg, cfg);
2123

2224
end
2325

24-
function test_setDefaultsPtbOverwrite()
26+
function test_setDefaultsPtb_no_debug()
27+
28+
% set up
29+
cfg = setDefaultsPTB;
30+
31+
% test data
32+
expectedCfg = defaultCFG();
33+
expectedCfg.eyeTracker.do = false;
34+
expectedCfg.skipSyncTests = 2;
35+
36+
% test
37+
assertEqual(expectedCfg, cfg);
38+
39+
end
40+
41+
function test_setDefaultsPtb_overwrite()
2542

2643
% set up
2744
cfg.screen.monitorWidth = 36;
2845
cfg = setDefaultsPTB(cfg);
2946

3047
% test data
31-
expectedCfg = returnExpectedCFG();
48+
expectedCfg = defaultCFG();
3249
expectedCfg.screen.monitorWidth = 36;
50+
expectedCfg.eyeTracker.do = false;
51+
expectedCfg.skipSyncTests = 2;
3352

3453
% test
3554
assertEqual(expectedCfg, cfg);
3655

3756
end
3857

39-
function test_setDefaultsPtbAudio()
58+
function test_setDefaultsPtb_audio()
4059

4160
% set up
4261
cfg.audio.do = 1;
4362
cfg = setDefaultsPTB(cfg);
4463

4564
% test data
46-
expectedCfg = returnExpectedCFG();
47-
expectedCfg.audio = struct( ...
48-
'do', true, ...
65+
expectedCfg = defaultCFG();
66+
expectedCfg.audio = struct('do', true, ...
4967
'devIdx', [], ...
5068
'playbackMode', 1, ...
5169
'fs', 44100, ...
@@ -56,57 +74,35 @@ function test_setDefaultsPtbAudio()
5674
'startCue', 0, ...
5775
'waitForDevice', 1);
5876

77+
expectedCfg.audio.pushSize = expectedCfg.audio.fs * 0.010;
78+
79+
expectedCfg.audio.requestOffsetTime = 1;
80+
expectedCfg.audio.reqsSampleOffset = expectedCfg.audio.requestOffsetTime * ...
81+
expectedCfg.audio.fs;
82+
83+
expectedCfg.eyeTracker.do = false;
84+
expectedCfg.skipSyncTests = 2;
85+
5986
% test
6087
assertEqual(expectedCfg, cfg);
6188

6289
end
6390

64-
function test_setDefaultsPtbMRI()
91+
function test_setDefaultsPtb_mri()
6592

6693
% set up
6794
cfg.testingDevice = 'mri';
6895
cfg = setDefaultsPTB(cfg);
6996

7097
% test data
71-
expectedCfg = returnExpectedCFG();
98+
expectedCfg = defaultCFG();
7299
expectedCfg.testingDevice = 'mri';
73100
expectedCfg.bids.mri.RepetitionTime = [];
74101
expectedCfg.pacedByTriggers.do = false;
102+
expectedCfg.eyeTracker.do = false;
103+
expectedCfg.skipSyncTests = 2;
75104

76105
% test
77106
assertEqual(expectedCfg, cfg);
78107

79108
end
80-
81-
function expectedCFG = returnExpectedCFG()
82-
83-
expectedCFG = struct( ...
84-
'testingDevice', 'pc', ...
85-
'debug', struct('do', true, 'transpWin', true, 'smallWin', true), ...
86-
'color', struct( ...
87-
'background', [0 0 0]), ...
88-
'text', struct('font', 'Courier New', 'size', 18, 'style', 1));
89-
90-
expectedCFG.screen.monitorWidth = 42;
91-
expectedCFG.screen.monitorDistance = 134;
92-
expectedCFG.screen.resolution = {[], [], []};
93-
94-
expectedCFG.skipSyncTests = 0;
95-
96-
% fixation cross or dot
97-
expectedCFG.fixation.type = 'cross';
98-
expectedCFG.fixation.xDisplacement = 0;
99-
expectedCFG.fixation.yDisplacement = 0;
100-
expectedCFG.fixation.color = [255 255 255];
101-
expectedCFG.fixation.width = 1;
102-
expectedCFG.fixation.lineWidthPix = 5;
103-
104-
% define visual apperture field
105-
expectedCFG.aperture.type = 'none';
106-
107-
expectedCFG.keyboard.keyboard = [];
108-
expectedCFG.keyboard.responseBox = [];
109-
expectedCFG.keyboard.responseKey = {};
110-
expectedCFG.keyboard.escapeKey = 'ESCAPE';
111-
112-
end

0 commit comments

Comments
 (0)