Skip to content

Commit

Permalink
Ruonan: save more frequently & other improvements of robustness
Browse files Browse the repository at this point in the history
  • Loading branch information
shippy committed Jan 26, 2017
1 parent 0eb4de9 commit 3df8db0
Show file tree
Hide file tree
Showing 5 changed files with 318 additions and 301 deletions.
99 changes: 63 additions & 36 deletions RA_Gains1_v6.m
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
function RA_GAINS1(observer);
function RA_Gains1_v7(observer);
% RJ 7/23/2016 Change from v6 to v7:
% - Use Screen('DrawText') instead of DrawFormattedText() becaue the latter
% as some offset in estimating text position
% - save the data when every trial is finished, instead of saving it
% when the 2 blocks are finished

KbName('KeyNamesWindows');
s = RandStream.create('mt19937ar','seed',sum(100*clock));
RandStream.setGlobalStream(s);
Expand All @@ -22,6 +28,7 @@
if ~isdir(datadirname);
mkdir(datadirname);
end

Data.filename=fullfile('data',num2str(observer),['RA_GAINS_' num2str(observer)]);
Data.stimulus=setParams_LSRA;
[Data.stimulus.win Data.stimulus.winrect] = Screen(whichScreen, 'OpenWindow',0);
Expand Down Expand Up @@ -96,10 +103,12 @@
drawRef(Data)
Screen('flip',Data.stimulus.win);
waitForBackTick;
Data.stimulus.textDims.probabilities = getTextDims(Data.stimulus.win,'50', Data.stimulus.fontSize.probabilities);% get the text dimensons for probability
for trial=1:Data.numTrials/2 %change here to stop after half the trials (LR)
Data.trialTime(trial).trialStartTime=datevec(now);
Data=drawLotto_LSRA(Data,trial);
Data.trialTime(trial).trialEndTime=datevec(now);
eval(sprintf('save %s.mat Data',Data.filename))
if mod(trial,31)==0
blockNum=blockNum+1;
Screen(Data.stimulus.win, 'FillRect',1);
Expand All @@ -119,8 +128,9 @@
Screen('CloseAll')
end

function Data=drawLotto_LSRA(Data,trial);
eval(sprintf('lotteryValueDims=Data.stimulus.textDims.lotteryValues.Digit%g;',length(num2str(Data.vals(trial)))));
%%
function Data=drawLotto_LSRA(Data,trial)
%eval(sprintf('lotteryValueDims=Data.stimulus.textDims.lotteryValues.Digit%g;',length(num2str(Data.vals(trial)))));% text dimension depending on how long the text is
if strcmp(Data.colorKey{Data.colors(trial)},'blue')
redProb=1-Data.probs(trial);
blueProb=Data.probs(trial);
Expand All @@ -131,12 +141,12 @@

H=Data.stimulus.winrect(4);
W=Data.stimulus.winrect(3);
Y1=(H-Data.stimulus.lotto.height)/2;
Y2=Y1+Data.stimulus.lotto.height*redProb;
Y3=Y2+Data.stimulus.lotto.height*blueProb;
Y1=(H-Data.stimulus.lotto.height)/2; % top of red
Y2=Y1+Data.stimulus.lotto.height*redProb; % top of blue
Y3=Y2+Data.stimulus.lotto.height*blueProb; % bottom of blue

Y2occ=Y1+Data.stimulus.lotto.height*((1-Data.ambigs(trial))/2);
Y3occ=Y2occ+Data.stimulus.lotto.height*((Data.ambigs(trial)));
Y2occ=Y1+Data.stimulus.lotto.height*((1-Data.ambigs(trial))/2); % top of occ
Y3occ=Y2occ+Data.stimulus.lotto.height*((Data.ambigs(trial))); % bottom of occ

Screen(Data.stimulus.win, 'FillRect', 1 );
lottoRedDims=[W/2-Data.stimulus.lotto.width/2, Y1, W/2+Data.stimulus.lotto.width/2, Y2];
Expand All @@ -147,27 +157,31 @@
Screen(Data.stimulus.win,'FillRect',[127 127 127],lottoAmbigDims);
if strcmp(Data.colorKey{Data.colors(trial)},'blue')
Screen('TextSize', Data.stimulus.win, Data.stimulus.fontSize.lotteryValues);
DrawFormattedText(Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),W/2-lotteryValueDims(1)/2, Y3, Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, '$0',W/2-Data.stimulus.textDims.lotteryValues.Digit1(1)/2, Y1-lotteryValueDims(2), Data.stimulus.fontColor);
lotteryValueDims = getTextDims(Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),Data.stimulus.fontSize.lotteryValues);
Screen('DrawText',Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),W/2-lotteryValueDims(1)/2, Y3, Data.stimulus.fontColor);
zeroValueDims = getTextDims(Data.stimulus.win,'$0',Data.stimulus.fontSize.lotteryValues);
Screen('DrawText',Data.stimulus.win, '$0',W/2-zeroValueDims(1)/2, Y1-zeroValueDims(2), Data.stimulus.fontColor);
Screen('TextSize', Data.stimulus.win, Data.stimulus.fontSize.probabilities);
if Data.ambigs(trial)==0
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str(blueProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y2+(Y3-Y2)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str(redProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str(blueProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y2+(Y3-Y2)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str(redProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
else
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y3occ+(Y3-Y3occ)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2occ-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y3occ+(Y3-Y3occ)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2occ-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
end
elseif strcmp(Data.colorKey{Data.colors(trial)},'red')
Screen('TextSize', Data.stimulus.win, Data.stimulus.fontSize.lotteryValues);
DrawFormattedText(Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),W/2-lotteryValueDims(1)/2, Y1-lotteryValueDims(2), Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, '$0',W/2-Data.stimulus.textDims.lotteryValues.Digit1(1)/2, Y3, Data.stimulus.fontColor);
lotteryValueDims = getTextDims(Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),Data.stimulus.fontSize.lotteryValues);
Screen('DrawText',Data.stimulus.win, sprintf('$%s',num2str(Data.vals(trial))),W/2-lotteryValueDims(1)/2, Y1-lotteryValueDims(2), Data.stimulus.fontColor);
zeroValueDims = getTextDims(Data.stimulus.win,'$0',Data.stimulus.fontSize.lotteryValues);
Screen('DrawText',Data.stimulus.win, '$0',W/2-zeroValueDims(1)/2, Y3, Data.stimulus.fontColor);
Screen('TextSize', Data.stimulus.win, Data.stimulus.fontSize.probabilities);
if Data.ambigs(trial)==0
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str(blueProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y2+(Y3-Y2)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str(redProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str(blueProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y2+(Y3-Y2)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str(redProb*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
else
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y3occ+(Y3-Y3occ)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
DrawFormattedText(Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2occ-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y3occ+(Y3-Y3occ)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
Screen('DrawText',Data.stimulus.win, sprintf('%s',num2str((1-Data.ambigs(trial))/2*100)),W/2-Data.stimulus.textDims.probabilities(1)/2, Y1+(Y2occ-Y1)/2-Data.stimulus.textDims.probabilities(2)/2, Data.stimulus.fontColor);
end
end

Expand All @@ -185,15 +199,15 @@
Data.trialTime(trial).respStartTime=datevec(now);
elapsedTime=etime(datevec(now),Data.trialTime(trial).respStartTime);
while elapsedTime<Data.stimulus.responseWindowDur
[keyisdown, secs, keyCode, deltaSecs] = KbCheck;
if keyisdown && (keyCode(KbName('2@')) || keyCode(KbName('1!')))
[keyisdown, secs, keycode, deltaSecs] = KbCheck;
if keyisdown && (keycode(KbName('2@')) || keycode(KbName('1!')))
elapsedTime=etime(datevec(now),Data.trialTime(trial).respStartTime);
break
end
elapsedTime=etime(datevec(now),Data.trialTime(trial).respStartTime);
end

if keyisdown && keyCode(KbName('1!')) %% Reversed keys '1' and '2' - DE
if keyisdown && keycode(KbName('1!')) %% Reversed keys '1' and '2' - DE
Data.choice(trial)=1;
Data.rt(trial)=elapsedTime;
if Data.refSide==2
Expand All @@ -204,7 +218,7 @@
whiteDims=[-.5*Data.stimulus.winrect(3)/10 -100 -.5*Data.stimulus.winrect(3)/10 -100]+[5.5*Data.stimulus.winrect(3)/10-20 Data.stimulus.winrect(4)/2-20 5.5*Data.stimulus.winrect(3)/10+20 Data.stimulus.winrect(4)/2+20];
end
yellowColor=[255 255 0];
elseif keyisdown && keyCode(KbName('2@')) %% Reversed keys '2' and '1' - DE
elseif keyisdown && keycode(KbName('2@')) %% Reversed keys '2' and '1' - DE
Data.choice(trial)=2;
Data.rt(trial)=elapsedTime;
if Data.refSide==2
Expand Down Expand Up @@ -239,7 +253,6 @@
elapsedTime=etime(datevec(now),Data.trialTime(trial).feedbackStartTime);
end

eval(sprintf('save %s.mat Data',Data.filename))
Screen('FillOval', Data.stimulus.win, [255 255 255], [Data.stimulus.winrect(3)/2-20 Data.stimulus.winrect(4)/2-20 Data.stimulus.winrect(3)/2+20 Data.stimulus.winrect(4)/2+20]);
drawRef(Data)
Screen('flip',Data.stimulus.win);
Expand All @@ -250,28 +263,39 @@
elapsedTime=etime(datevec(now),Data.trialTime(trial).trialStartTime);
end
end

%%
function textDims = getTextDims(win,myText,textSize)
Screen('TextSize',win,textSize);
textRect = Screen ('TextBounds',win,myText);
textDims = [textRect(3) textRect(4)]; % text width and height
end
%%
function params = setParams_LSRA;
params.fontName='Ariel';
params.fontColor=[255 255 255];
params.fontSize.probabilities=20;
params.textDims.probabilities=[31 30];
params.fontSize.refProbabilities=10;
params.textDims.refProbabilities=[12 19];
% params.textDims.probabilities=[31 30]; % use getTextDims in the very beginning
params.fontSize.refProbabilities=10; % is it used?
% params.textDims.refProbabilities=[12 19];

params.fontSize.lotteryValues=42;
params.textDims.lotteryValues.Digit1=[64 64];
params.textDims.lotteryValues.Digit2=[92 64];
params.textDims.lotteryValues.Digit3=[120 64];
%params.textDims.lotteryValues.Digit1=[64 64];
%params.textDims.lotteryValues.Digit2=[92 64];
%params.textDims.lotteryValues.Digit3=[120 64];

params.fontSize.refValues=42;
params.textDims.refValues.Digit1=[31 30];
params.textDims.refValues.Digit2=[42 30];
% params.textDims.refValues.Digit1=[31 30];
% params.textDims.refValues.Digit2=[42 30];

params.lotto.width=150;
params.lotto.height=300;
params.ref.width=50;
params.ref.height=100;
% params.ref.width=50; % is it used?
% params.ref.height=100; % is it used?
params.occ.width = 180;
end

%%
function drawRef(Data)
H=Data.stimulus.winrect(4);
W=Data.stimulus.winrect(3);
Expand All @@ -282,8 +306,11 @@ function drawRef(Data)
end
refDims.y=H/4;
Screen('TextSize', Data.stimulus.win, Data.stimulus.fontSize.refValues);
DrawFormattedText(Data.stimulus.win, '$5',refDims.x, refDims.y, Data.stimulus.fontColor);
% refTextDims = gettextDims(Data.stimulus.win, '$5', Data.stimulus.fontSize.refValues);
Screen('DrawText',Data.stimulus.win, '$5',refDims.x, refDims.y, Data.stimulus.fontColor);
end

%%
function waitForBackTick;
while 1
[keyisdown, secs, keyCode, deltaSecs] = KbCheck;
Expand Down

0 comments on commit 3df8db0

Please sign in to comment.