draw a grating stimulus with multiple orientations through psychtoolbox

I am trying to draw a grating stimulus in psychtoolbox with multiple orientations randomly (in drift demo, am modifying the code). I have the array with the orientations in random order but when i run it, it does it all at once. what functions should i use so that the grating runs runs with multiple orientations with a waiting time of 1 sec in between the orientations.
this is what i have now:
angle= [0,pi/4,pi/2,3*pi/4, pi, 5*pi/4, 3*pi/2, 7*pi/4];
D = rad2deg(angle);
pause('on')
for i=1:numFrames
phase=(i/numFrames)*2*pi;
% grating
[x,y]=meshgrid(-300:300,-300:300);
% angle=30*pi/180; % 30 deg orientation.
msize = numel(angle);
or= D(randperm(msize, 1))
f=0.09*2*pi; % cycles/pixel
a=cos(or)*f;
b=sin(or)*f;
m=exp(-((x/90).^2)-((y/90).^2)).*sin(a(:,1).*x+b(:,1).*y+phase)

 Accepted Answer

pause(1)

9 Comments

its not working with the pause command. all the orientations are running at the same time and not one after the other
Difficult to say. You have only posted partial code. You are missing an end statement and you are missing the graphics.
i wil have 8 orientations that should run for 2 secs and a blank period of 1sec. I will also have 5 temporal frequencies. but first i want to run 8 different randomised orientations for 2 sec.
function DriftDemo
white=WhiteIndex(screenNumber);
black=BlackIndex(screenNumber);
gray=round((white+black)/2);
if gray == white
gray=white / 2;
end
inc=white-gray;
w=Screen('OpenWindow',screenNumber, gray);
angle= [0,pi/4,pi/2,3*pi/4, pi, 5*pi/4, 3*pi/2, 7*pi/4];
D = rad2deg(angle);
% pause('on')
for i=1:numFrames
phase=(i/numFrames)*2*pi;
% grating
[x,y]=meshgrid(-300:300,-300:300);
% angle=30*pi/180; % 30 deg orientation.
msize = numel(angle);
or= D(randperm(msize, 1));
f=0.09*2*pi; % cycles/pixel
a=cos(or)*f;
b=sin(or)*f;
m=exp(-((x/90).^2)-((y/90).^2)).*sin(a(:,1).*x+b(:,1).*y+phase);
% m=exp(-((x/90).^2)-((y/90).^2)).*sin(a*x+b*y+phase);
tex(i)=Screen('MakeTexture', w, round(gray+inc*m)); %#ok<AGROW>
end
pause(1)
movieDurationSecs=100;
frameRate=Screen('FrameRate',screenNumber);
if frameRate == 0
frameRate=60;
end
movieDurationFrames=round(movieDurationSecs * frameRate);
movieFrameIndices=mod(0:(movieDurationFrames-1), numFrames) + 1;
priorityLevel=MaxPriority(w);
Priority(priorityLevel);
for i=1:movieDurationFrames
% Draw image:
Screen('DrawTexture', w, tex(movieFrameIndices(i)));
Screen('Flip', w);
end
Priority(0);
Screen('Close');
sca;
catch
Priority(0);
psychrethrow(psychlasterror);
end
The pause(1) should be before the end on the line above it.
still not working...its a jumbled up grating with all orientations
i am trying to call with a function and it works.
function RandomizeOrientations
angle= [0,pi/4,pi/2,3*pi/4, pi, 5*pi/4, 3*pi/2, 7*pi/4];
D = rad2deg(angle);
msize = numel(angle);
for i =1:msize
or= D(randperm(msize, 1));
DriftDemo2(or,1,0.05,1,400)
end
now the problem is that before running a different orientation each time the psychtoolbox closes and starts new.
I would like to run the 8 orientations for example 2mins with an interstimulus interval of 2 secs.. how do i go ahead..
end
Not from me. I recently got a new computer and have not set up Psychtoolbox on it as doing so is a bit of a nuisance to tie into the retrace properly. It is not a program that I use myself, just something I have encountered enough times over the years to sometimes be able to answer minor questions about.

Sign in to comment.

More Answers (0)

Asked:

on 27 Dec 2017

Commented:

on 5 Jan 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!