function ContrastPsychometricFunction
clear all;
Screen(‘Preference’,‘VBLTimestampingmode’, 1);
Screen(‘Preference’, ‘SkipSyncTests’, 1);
%%Display Setup Module
% Define display parameters
%clear all;
whichScreen = max(Screen( ‘screens’ ));
p.ScreenDistance = 30; % in inches
p.ScreenHeight = 15; % in inches
p.ScreenGamma = 2; % from monitor calibration
p.maxLuminance = 100; % from monitor calibration
p.ScreenBackground = 0.5;
% Open the display window, set up lookup table, and hide the
% mouse cursor
if exist( ‘onCleanup’ , ‘class’ ), oC_Obj = onCleanup(@()sca); end
% close any pre-existing PTB Screen window
% Prepare setup of imaging pipeline for onscreen window.
PsychImaging( ‘PrepareConfiguration’ ); % First step in starting pipeline
PsychImaging( ‘AddTask’ , ‘General’ , …
‘FloatingPoint64BitIfPossible’ );
% set up a 32-bit fl oatingpoint framebuffer
PsychImaging( ‘AddTask’ , ‘General’ , …
‘NormalizedHighresColorRange’ );
% normalize the color range ([0, 1] corresponds
% to [min, max])
PsychImaging( ‘AddTask’ , ‘General’ , ‘EnablePseudoGrayOutput’ );
% enable high gray level resolution output with
% bitstealing
PsychImaging( ‘AddTask’ , ‘FinalFormatting’ , ‘DisplayColorCorrection’ , ‘SimpleGamma’ );
% setup Gamma correction method using simple power
% function for all color channels
[windowPtr p.ScreenRect] = PsychImaging( ‘OpenWindow’, whichScreen, p.ScreenBackground);
% Finishes the setup phase for imaging pipeline
% creates an onscreen window, performs all remaining
% configuration steps
PsychColorCorrection( ‘SetEncodingGamma’ , windowPtr, 1/ p.ScreenGamma);
% set Gamma for all color channels
HideCursor; % Hide the mouse cursor
% Get frame rate and set screen font
p.ScreenFrameRate = FrameRate(windowPtr);
% get current frame rate
Screen( ‘TextFont’ , windowPtr, ‘Times’ );
% set the font for the screen to Times
Screen( ‘TextSize’ , windowPtr, 24); % set the font size
% for the screen to 24
%%Experimental Module
% Specify general experimental parameters
nContrast = 7; % number of contrast levels in experiment
repeats = 100; % number of trials to repeat for each contrast
nTrials = repeats * nContrast; % compute total number of trials
p.randSeed = ClockRandSeed; % use clock to set random number generator
keys = { ‘1’ ‘2’ ‘esc’ }; % specify response keys for the two intervals and to break
% Specify the stimulus
p.stimSize = 6; % image diameter in visual degree
p.sf = 1; % spatial frequency in cycle/degree
conRange = [0.0025 0.04]; % lowest and highest tested contrasts
p.stimDuration = 0.1; % stimulus duration in seconds
p.interval = 1; % seconds between two intervals of a trial
p.ISI = 0.5; % seconds between trials
% Compute stimulus parameters
ppd = pi/180 * p.ScreenDistance / p.ScreenHeight * p.ScreenRect(4);
% compute pixels per degree from
% p.ScreenDistance and p.ScreenHeight
m = round(p.stimSize * ppd /2) * 2; % stimulus size
% in pixels
fixRect = CenterRect([0 0 1 1] * 8, p.ScreenRect);
% define an 8 x 8 pixel fixation
% create another fixation stimulus of horizontal and
% vertical cross hairs outside the area of the sine wave
% pattern. Crosshairs will be displayed during display
% intervals
fixLen = 32; % length of fixation in pixels
fixXY = [[-1 0 0 1] * fixLen + [-1 -1 1 1 ] * m/2 + …
p.ScreenRect(3)/2 [1 1 1 1]*p.ScreenRect(3)/2; …
[1 1 1 1]*p.ScreenRect(4)/2 [-1 0 0 1] *fixLen + …
[-1 -1 1 1 ] * m/2 + p.ScreenRect(4)/2];
p.contrasts = logspace(log10(conRange(1)), log10(conRange(2)), nContrast);
% use logspace function to choose nContrast contrasts
% (7) at log intervals between the minimum and
% maximum specifi ed contrasts
sf = p.sf / ppd; % compute spatial frequency in
% cycles per pixel
tex = CreateProceduralSineGrating(windowPtr, m, m, [[1 1 1]*p.ScreenBackground 0], m/2, 0.5);
% “ CreateProceduralSineGrating ” is a psychtoolbox
% function to create a procedural texture for drawing
% sine grating stimulus patches on the GPU
% Initialize a table to set up experimental conditions
p.recLabel = { ‘trialIndex’ ‘contrastIndex’ ‘whichInterval’ …
‘respCorrect’ ‘respTime’ };
% labels the columns of the data recording array rec
rec = nan(nTrials, length(p.recLabel));
% matrix rec is initialized as an nTrials x 5 of NaN
rec(:, 1) = 1 : nTrials;
% initialize trial numbers from 1 to nTrials
contrastIndex = repmat(1 : nContrast, repeats, 1);
% use repmat to cycle thru contrast #s
intervalIndex = ones(size(contrastIndex)) * 2;
% first set all trials to 2nd interval
intervalIndex(1 : repeats / 2, = 1;
% change fi rst half to 1
[rec(:, 2) ind] = Shuffle(contrastIndex(:));
% shuffle contrast indexes to randomize
rec(:, 3) = intervalIndex(ind);
% shuffle interval indexes in the same order
% Prioritize display to optimize display timing
Priority(MaxPriority(windowPtr));
% Start experiment with instructions
str = sprintf( ‘Press 1 or 2 for the first or second interval.\n\nPress SPACE to start.’ );
DrawFormattedText(windowPtr, str, ‘center’ , ‘center’ , 1);
% Draw Instruction text string centered in window
Screen( ‘Flip’ , windowPtr);
% flip the text image into active buffer
WaitTill( ‘space’ ); % wait till space bar is pressed
Screen( ‘FillOval’ , windowPtr, 0, fixRect);
% create a black fi xation dot
Secs = Screen( ‘Flip’ , windowPtr);
% flip the fixation image into active buffer
p.start = datestr(now); % record start time
% Run nTrials trials
for i = 1 : nTrials
con = p.contrasts(rec(i, 2));
% use contrast index from rec to set contrast
% for this trial
flipSecs = Secs + p.ISI + [0 p.interval];
% define the start time of the two intervals
for j = 1 : 2 % two intervals
if rec(i, 3) == j
% draw the grating in the interval defi ned
% in rec(i,3) only
Screen( ‘DrawTexture’ , windowPtr, tex, [], [], …
0, [], [], [], [], [], [180 sf con 0]);
end % draw the sine grating with phase 180,
% spatial frequency, and contrast
Screen( ‘DrawLines’ , windowPtr, fixXY, 3, 0.3);
% add the fixation crosshairs
t0 = Screen( ‘Flip’ , windowPtr, flipSecs(j));
% show the stimulus and return the time
Screen( ‘Flip’ , windowPtr, t0 + p.stimDuration);
% turn off the stimulus by fl ipping to
% background image after p.stimDuration secs
end
Screen( ‘FillOval’ , windowPtr, 0, fixRect);
% draw the smaller centered fixation
Screen( ‘Flip’ , windowPtr, t0 + 0.25 + p.stimDuration);
% show small fixation briefly to cue the
% observer to respond with the interval
[key Secs] = WaitTill(keys);
% wait for response, return key and response time
if iscellstr(key), key = key{1}; end
% take the fi rst response in case of multiple
% key presses
if strcmp(key, ‘esc’ ), break; end
% check if response is < escape > to stop experiment
rec(i, 4 : 5) = [str2double(key)==rec(i, 3) Secs-t0];
% record correctness and respTime
if rec(i, 4), Beeper; end % beep if correct
end
p.finish = datestr(now); % record fi nish time
save ContrastPsychometricFunction_rst.mat rec p;
% save the results
%%System Reinstatement Module
Priority(0); % restore priority
sca; % close display window and textures,
% and restore the original color lookup table
I am trying to run this ConstrastPsychometricFunction script. However, it exits with the following error:
Invalid MEX-file ‘/home/dbermudez/Documents/MATLAB/Psychtoolbox-3/Psychtoolbox/PsychBasic/moglcore.mexa64’:
libglut.so.3: cannot open shared object file: No such file or directory
Error in InitializeMatlabOpenGL (line 186)
moglcore(‘DEBUGLEVEL’, debuglevel);
Error in PsychImaging>PostConfiguration (line 3393)
InitializeMatlabOpenGL([], [], 1);
Error in PsychImaging (line 2373)
PostConfiguration(reqs, win, clearcolor, slavewin);
Error in ContrastPsychometricFunction (line 34)
[windowPtr p.ScreenRect] = PsychImaging( ‘OpenWindow’, whichScreen, p.ScreenBackground);
Error using xslt>locTransformer (line 160)
Could not find associated stylesheet
Error in xslt (line 91)
xProcessor = locTransformer(varargin{2},xSource,xUtil,errorListener,uriResolver);
Error in help2html (line 68)
outStr = xslt(dom,xslfile,’-tostring’);