Sheraz khan phd transcend research tal kenet group fellow mgh
Sponsored Links
This presentation is the property of its rightful owner.
1 / 25

Psychtoolbox: An introduction PowerPoint PPT Presentation


  • 214 Views
  • Uploaded on
  • Presentation posted in: General

Sheraz Khan, PhD TRANSCEND Research, TAL Kenet Group Fellow, MGH. Psychtoolbox: An introduction. OUTLINE. Introduction to Psychtoolbox. Psychtoolbox by Simple Examples Psychtoolbox in practice at Martinos center. Introduction to Psychtoolbox.

Download Presentation

Psychtoolbox: An introduction

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Sheraz Khan, PhD

TRANSCEND Research, TAL Kenet Group

Fellow, MGH

Psychtoolbox: An introduction


OUTLINE

  • Introduction to Psychtoolbox.

  • Psychtoolbox by Simple Examples

  • Psychtoolbox in practice at Martinos center.


Introduction to Psychtoolbox

  • PsychToolbox is a collection of matlab functions written to make presenting visual stimuli easier. Remember to cite the Toolbox. "We wrote our experiments in MATLAB, using the Psychophysics Toolbox extensions (Brainard, 1997; Pelli, 1997)."

  • Psychtoolbox is widely used in visual psychophysics and there is a lot of documentation and knowledge around.

    http://psychtoolbox.org

  • MAC and Windows version available, MAC version has better control over hardware.


Introduction to PsychToolbox

  • Installation

  • >> cd ~/Desktop

  • >> DownloadPsychtoolbox('current')

  • To get help

  • >>Screen OpenWindow?

  • >>Screen DrawText?

  • If screen freezes

  • ctrl-c % will stop execution

  • clear Screen % garbage collector of Screen

  • Cmd + option +escape % Ultimate


Why use PsychToolbox ?

  • PsychToolbox is very strict about timing, so if accurate timing is important in your experiment PsychToolbox is good for that.

  • Because PsychToolbox using graphics acceleration you can use very fast drawing without any pixelation and other image processing artefacts

  • Lots of people in the world use it so it's easy to get help, and more importantly its FREE.


Programming simple Stimuli

  • % Testing PsychToolbox

  • >> ScreenTest

***** ScreenTest: Testing Screen 0 *****

PTB-INFO: This is the OpenGL-Psychtoolbox version 3.0.8. Type

'PsychtoolboxVersion' for more detailed version information.

PTB-INFO: Psychtoolbox is licensed to you under terms of the GNU

General Public License (GPL). See file 'License.txt' in the

PTB-INFO: Psychtoolbox root folder for a copy of the GPL license.

PTB-INFO: OpenGL-Renderer is NVIDIA Corporation :: GeForce Go

7400/PCI/SSE2 :: 2.0.1

PTB-Info: VBL startline = 768 , VBL Endline = -1

TB-Info: Measured monitor refresh interval from VBLsync =

16.712593 ms [59.835118 Hz]. (50 valid samples taken,

stddev=0.044112 ms.)

PTB-Info: Reported monitor refresh interval from operating system

= 16.666667 ms [60.000000 Hz].

PTB-Info: Small deviations between reported values are normal and

no reason to worry.

PTB-INFO: Using NVidia's GL_TEXTURE_RECTANGLE_NV extension for

efficient high-performance texture mapping...

***** ScreenTest: Done With Screen 0 *****


Programming simple Stimuli

  • % Initializing the program

  • >>screenNum=1; % Screen 0 is Laptop, Screen 1 will be projector

  • >>flipSpd=13; % a flip every 13 frames

  • % Opening Window on Screen, we want to used

  • >>[wPtr,rect]=Screen('OpenWindow',screenNum);

  • % wPtr pointer to the screen.

  • % Getting Screen refresh rate

  • >>monitorFlipInterval=Screen('GetFlipInterval', wPtr);

  • % 1/ monitorFlipInterval is the frame rate of the projector

***** ScreenTest: Testing Screen 0 *****

PTB-INFO: This is the OpenGL-Psychtoolbox version 3.0.8. Type

'PsychtoolboxVersion' for more detailed version information.

PTB-INFO: Psychtoolbox is licensed to you under terms of the GNU

General Public License (GPL). See file 'License.txt' in the

PTB-INFO: Psychtoolbox root folder for a copy of the GPL license.

PTB-INFO: OpenGL-Renderer is NVIDIA Corporation :: GeForce Go

7400/PCI/SSE2 :: 2.0.1

PTB-Info: VBL startline = 768 , VBL Endline = -1

TB-Info: Measured monitor refresh interval from VBLsync =

16.712593 ms [59.835118 Hz]. (50 valid samples taken,

stddev=0.044112 ms.)

PTB-Info: Reported monitor refresh interval from operating system

= 16.666667 ms [60.000000 Hz].

PTB-Info: Small deviations between reported values are normal and

no reason to worry.

PTB-INFO: Using NVidia's GL_TEXTURE_RECTANGLE_NV extension for

efficient high-performance texture mapping...

***** ScreenTest: Done With Screen 0 *****


Programming Simple Stimuli

  • % Finding Black and white

  • >>black=BlackIndex(wPtr);

  • >>white=WhiteIndex(wPtr);

  • % Filling the screen with Black and wait

  • >>Screen('FillRect',wPtr,black);

  • >>Screen(wPtr, 'Flip');

  • >>WaitSecs(2);


Programming Simple Stimuli

  • % make a rectangle in the middle of the screen flip colors and size

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip'); % collect the time for the first flip with vbl

  • % Make a rectangle in the middle of the screen flip colors and size

  • for i=1:10

  • Screen('FillRect',wPtr,[0 0 255], [100 150 200 250]);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • % flip 13 frames after vbl

  • Screen('FillRect',wPtr,[255 0 0], [100 150 400 450]);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • End

  • % Color; Left, Right, Top, Bottom


Programming Simple Stimuli

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip');

  • % Make circles flip colors & size

  • for i=1:10

  • Screen('FillOval',wPtr,[0 180 255], [ 500 500 600 600]);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • Screen('FillOval',wPtr,[0 255 0], [ 400 400 900 700]);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • end

  • % Color; Starting Horizontal, Starting Vertical; Ending Horizontal, Ending Vertical


Programming Simple Stimuli

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip');

  • % make lines that flip colors size & position

  • >>for i=1:10

  • Screen('DrawLine',wPtr,[0 255 255], 500, 200, 700 ,600, 5);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • Screen('DrawLine',wPtr,[255 255 0], 100, 600, 600 ,100, 5);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • >>end

  • % Color; Starting Horizontal, Starting Vertical; Ending Horizontal, Ending Vertical


Programming Simple Stimuli

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip');

  • % Texture is the great way of storing Images

  • >>image2D=255*rand(100, 100);

  • >>textureIndex=Screen('MakeTexture', wPtr, image2D);

  • >>Screen('DrawTexture', wPtr, textureIndex);

  • >>Screen(wPtr, 'Flip');

  • >>WaitSecs(2);


Programming Simple Stimuli

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip');

  • % Initialize the Keyboard input

  • >>KbName('UnifyKeyNames'); % Unify Max OS X, OS 9

  • >>[sec keyCode]=KbPressWait; % wait for the key press

  • >>keyCode=find(keyCode~=0);

  • % Drawing Test

  • >>Screen('TextSize', wPtr , 150);% font size

  • >>Screen('DrawText', wPtr, num2str(keyCode), 200, 20, [255 50 255]);

  • >>vbl=Screen(wPtr, 'Flip'); % Starting Horizontal vertical position

  • >>WaitSecs(2);


Programming Simple Stimuli

  • % Fill the screen with Black

  • >>Screen('FillRect',wPtr,black);

  • >>vbl=Screen(wPtr, 'Flip');

  • % Combining the stimuli

  • >>for i=1:10

  • Screen('FillRect',wPtr,[0 0 255], [100 150 200 250]);

  • Screen('DrawLine',wPtr,[0 255 255], 500, 200, 700 ,600, 5);

  • Screen('FillOval',wPtr,[0 180 255], [ 500 500 600 600]);

  • Screen('TextSize', wPtr , 150);

  • Screen('DrawText', wPtr, 'FUNKY!!', 200, 20, [255 50 255]);

  • vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval));

  • >>end


Programming Real Stimuli

Local Connectivity in the visual cortex:

From Polat and Norcia (Polat and Norcia, 1996), who discovered the paradigm (Polat and Sagi, 1993), and were the first to investigate it using VEPs. They showed that responses to b and d deviated from the linear sum of responses to (a+c) and (e+c) respectively, the difference being attributable to local connectivity.


Programming Real Stimuli

Specifications:

Size of the objects: Size of the Gabors, visual separation between them

Distance from the Screen

Size of the Screen

L, 55 cm

D, 120 cm

H, 41 cm


Programming Real Stimuli

  • Normally in visual stimuli things are described in visual angle, so what it is ?

Size is 1 degree, separation is 3 degrees

Width=tand(1)*D, Width in screen percent=(Size/L)*100

Separation=tand(3)*D, Separation in screen percent=(Separation)/H*100


Programming Real Stimuli

  • % Setting Parameters

  • >> nTrials = 40;

  • >>soa = 1.5; % Stimulus-Onset Asynchrony (SOA)

  • >>displayTime = 0.3; jitter = 0.1;

  • >>WidthOfGrid=4.88;Separation=20.25;

  • >>gratingMatrix=Gabors;

  • % Location of three gabors

  • >>L1=[50 50]; L2=[50 50-Separation]; L3=[50 50+Separation];

  • % Configuring triggers

  • >>di = DaqDeviceIndex;

  • >>DaqDConfigPort(di,0,0);

  • >>DaqDOut(di,0,0);


Programming Real Stimuli

  • % Setting Screen

  • >>whichScreen = max(Screen('Screens'));

  • >>rect=Screen(whichScreen,'Rect'); % Gets Screen dimensions

  • >>HideCursor;

  • >>window = Screen('OpenWindow', whichScreen);

  • % Color Setup

  • % Retrieves color codes for black and white and gray.

  • >>black = BlackIndex(window);

  • >>white = WhiteIndex(window);

  • >>gray = (black + white) / 2; % Computes the color code for gray.


Programming Real Stimuli

  • % Giving Instruction to Subject

  • Screen('FillRect',window,gray);

  • Screen(window,'TextSize',txtSz);

  • Screen(window,'DrawText','Remember to keep your eyes',rect(3)/4,rect(4)/2-50);

  • Screen(window,'DrawText','on the + at the center',rect(3)/3.3,rect(4)/2);

  • Screen('Flip',window);

  • % Click to proceed

  • GetClick;

  • % Putting Cross in the center

  • Screen('FillRect',window,gray);

  • Screen(window,'TextFont',centerFont);

  • Screen(window,'TextSize',centerTxtSz);

  • Screen(window,'DrawText',centerChar,rect(3)/2,rect(4)/2,centerColour);

  • Screen('Flip',window);


Programming Real Stimuli

  • [sourceRect targetRect]=rectGeneration(location,WidthOfGrid,rect)

  • % Decoding percent to actual screen

  • WidthOfGrid=round(max(rect)*WidthOfGrid/100);

  • halfWidthOfTgt=WidthOfGrid/2;

  • % sourceRect:: image area

  • sourceRect = [1 1 widthOfGrid widthOfGrid];

  • % targetRect :: Actual Screen place and size

  • locationl = round(rect(3)*location(1)/100 - halfWidthOfTgt);

  • locationt = round(rect(4)*location(2)/100 - halfWidthOfTgt);

  • locationr = round(rect(3)*location(1)/100 + halfWidthOfTgt);

  • locationb = round(rect(4)*location(2)/100 + halfWidthOfTgt);

  • targetRect = [locationl locationt locationr locationb];


Programming Real Stimuli

  • % Putting Three gabors on the Screen

  • [sourceRect targetRect]=rectGeneration(L1,WidthOfGrid,rect);

  • tex = Screen('MakeTexture',window,ceil((gray+gratingMatrix)));

  • Screen('DrawTextures', window, tex,sourceRect,targetRect);

  • [sourceRect targetRect]=rectGeneration(L2,WidthOfGrid,rect);

  • texu = Screen('MakeTexture',window,ceil((gray+gratingMatrix)));

  • Screen('DrawTextures', window, texu,sourceRect,targetRect,90);

  • [sourceRect targetRect]=rectGeneration(L3,WidthOfGrid,rect);

  • texd = Screen('MakeTexture',window,ceil((gray+gratingMatrix)));

  • Screen('DrawTextures', window, texd,sourceRect,targetRect,90);

  • Screen('Flip', window);


Programming Real Stimuli

  • % Sending triggers

  • DaqDOut(di,0,4); %send trigger

  • DaqDOut(di,0,0); %clear trig


Conclusion

  • All the source code for this talk is available on why n how wiki.

  • Best way to learn Pschytoolbox is to use it on the projector.

  • Always test the timing of your protocol.

  • Photo diode and oscilloscope is available in MEG.


Thank you.


  • Login