Skip to content

Instantly share code, notes, and snippets.

@carrien
Created June 7, 2016 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carrien/bd4bdf15904120f22f541e9e4a5da70f to your computer and use it in GitHub Desktop.
Save carrien/bd4bdf15904120f22f541e9e4a5da70f to your computer and use it in GitHub Desktop.
Flip timing test
function [expt] = run_fliptest()
%% setup
ntrials = 50; % number of trials per block
stimdur = .1; % time stim is on screen, in seconds
interstimdur = .05; % minimum time between stims, in seconds
interstimjitter = .05; % maximum extra time between stims (jitter)
% psychtoolbox
AssertOpenGL; % Running on PTB-3? Abort otherwise.
while KbCheck; end; % Wait for release of all keys on keyboard
%% experiment
try
% setup screen
screens=Screen('Screens');
screenNumber=max(screens);
win = Screen('OpenWindow', screenNumber);
Screen('FillRect', win, [0 0 0]);
Screen('TextFont', win, 'Arial');
Screen('TextSize', win, 50);
% display experiment text
WaitSecs(1);
for t=1:ntrials
DrawFormattedText(win,'test','center','center',[255 255 255]); % put text in buffer
rectimes(t) = GetSecs;
schedtimes(t) = rectimes(t) + .1; % schedule flip
[vbltimes(t), stimonsettimes(t), fliptimes(t), missed(t), beampos(t)] = Screen('Flip',win,schedtimes(t)); % draw text to screen
WaitSecs(stimdur);
Screen('Flip',win); % clear screen
WaitSecs(interstimdur);
WaitSecs(rand*interstimjitter); % add jitter
end
[monitorFlipInterval,nrValidSamples,stddev] = Screen('GetFlipInterval',win);
Screen('CloseAll');
catch
Screen('CloseAll');
psychrethrow(psychlasterror);
end
% plot differences in scheduled vs. measured times
figure;
plot(vbltimes-schedtimes,'b'); hold on;
plot(stimonsettimes-schedtimes,'r--');
plot(fliptimes-schedtimes,'g.')
legend({'VBLTimes - When', 'StimOnsets - When', 'FlipTimes - When'});
xlabel('trial number'); ylabel('ms past scheduled time')
% output
expt.schedtimes = schedtimes;
expt.vbltimes = vbltimes;
expt.stimonsettimes = stimonsettimes;
expt.fliptimes = fliptimes;
expt.rectimes = rectimes;
expt.missed = missed;
expt.beampos = beampos;
expt.monitorFlipInterval = monitorFlipInterval;
expt.nrValidSamples = nrValidSamples;
expt.stddev = stddev;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment