-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBEC_PC_PatientID.m
84 lines (82 loc) · 5.12 KB
/
BEC_PC_PatientID.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
% This function is part of the OTG toolbox, used for generating and presenting a battery of economic choices.
% It is a convenience function for experiments on a tactile screen: a screen appears and asks to fill in the patient ID (with the digits/symbols that
% are provided). This ID will feature in the filename that the dataset will be saved with.
function [ID,exitflag] = BEC_PC_PatientID(exp_settings,window)
% Settings
ShowCursor
escapeKey = KbName('ESCAPE'); %27
header_text = 'Avant de commencer, remplissez le numéro du patient :';
[Xsize, Ysize] = Screen('WindowSize',window); %Get screen size
Screen('TextSize',window,exp_settings.tactile.PatientIDFontSize);
Screen('FillRect',window,exp_settings.colors.black);
buttonrect = [1/4*Xsize 1/2*Ysize 3/4*Xsize 3/4*Ysize]; %The rectangle within which the 10 number buttons will be entered
number_button_rects = zeros(10,4); %The rects for the 10 number buttons
number_button_rects(:,1) = repmat(buttonrect(1) + (0:2:8)'./9 .* diff(buttonrect([1 3])),2,1);
number_button_rects(:,2) = [buttonrect(2)*ones(5,1); (buttonrect(4)-diff(buttonrect([1 3]))/9)*ones(5,1)];
number_button_rects(:,3) = repmat(buttonrect(1) + (1:2:9)'./9 .* diff(buttonrect([1 3])),2,1);
number_button_rects(:,4) = [buttonrect(2)*ones(5,1) + diff(buttonrect([1 3]))/9; buttonrect(4)*ones(5,1)];
number_button_rects(11,:) = [2*number_button_rects(end,1)-number_button_rects(end-1,1), mean([number_button_rects(1,2) number_button_rects(end,2)]), ...
2*number_button_rects(end,3)-number_button_rects(end-1,3), mean([number_button_rects(1,4) number_button_rects(end,4)])];
bottom_buttons = [buttonrect(1) 0.8*Ysize buttonrect(1)+1/3*diff(buttonrect([1 3])) 0.9*Ysize;
buttonrect(3)-1/3*diff(buttonrect([1 3])) 0.8*Ysize buttonrect(3) 0.9*Ysize];
% Loop until response is confirmed
exitflag = false;
confirmed = false;
ID = '';
KbReleaseWait; % wait until all keys are released
while ~confirmed
% Header text
DrawFormattedText(window,header_text,'center',Ysize/4,exp_settings.colors.white,exp_settings.font.Wrapat,[],[],exp_settings.font.vSpacing,[],[]);
% ID # XXXX
ID_text = ['ID # ' ID];
DrawFormattedText(window,ID_text,'center',Ysize/3,exp_settings.colors.white,exp_settings.font.Wrapat,[],[],exp_settings.font.vSpacing,[],[]);
% Number buttons
Screen('FrameRect',window,exp_settings.colors.white,number_button_rects',3);
for button = 1:11
if button < 11 %number buttons
DrawFormattedText(window,num2str(button-1),'center','center',exp_settings.colors.white,[],[],[],[],[],number_button_rects(button,:));
else
DrawFormattedText(window,'-','center','center',exp_settings.colors.white,[],[],[],[],[],number_button_rects(button,:));
end
end
% Confirmation/correction buttons
if ~isempty(ID)
Screen('FillRect',window,exp_settings.colors.grey,bottom_buttons');
DrawFormattedText(window,'Confirmer','center','center',exp_settings.colors.white,[],[],[],[],[],bottom_buttons(1,:));
DrawFormattedText(window,'Corriger','center','center',exp_settings.colors.white,[],[],[],[],[],bottom_buttons(2,:));
end
% Flip
Screen('Flip',window);
% Monitor button presses
%Check for escape key
[keyIsDown, ~, keyCode, ~] = KbCheck(-1);
if keyIsDown && keyCode(escapeKey) %Proceed to exit in master
ID = ''; exitflag = true;
return
end
%Get finger coordinates
[x,y,pressed] = GetMouse(window);
%Number button presses
i_button_hover = x >= number_button_rects(:,1) & x <= number_button_rects(:,3) & y >= number_button_rects(:,2) & y <= number_button_rects(:,4);
if sum(i_button_hover) == 1 && any(pressed) %Only one button can be pressed
if find(i_button_hover) == 11
ID = [ID '-']; %#ok<AGROW>
else
ID = [ID num2str(find(i_button_hover)-1)]; %#ok<AGROW>
end
end
%Confirmation/correction button presses
press_confirm = x >= bottom_buttons(1,1) & x <= bottom_buttons(1,3) & y >= bottom_buttons(1,2) & y <= bottom_buttons(1,4);
press_correct = x >= bottom_buttons(2,1) & x <= bottom_buttons(2,3) & y >= bottom_buttons(2,2) & y <= bottom_buttons(2,4);
if press_confirm && ~press_correct && sum(i_button_hover) == 0 && ~isempty(ID) && any(pressed)
confirmed = true; %Break out of loop
elseif press_correct && ~press_confirm && sum(i_button_hover) == 0 && ~isempty(ID) && any(pressed)
ID = '';
end
% Wait for button release
while any(pressed)
[~,~,pressed] = GetMouse;
pause(0.01)
end
end %while ~confirmed
end %function