1 / 25

Psychtoolbox: An introduction

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.

sunila
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sheraz Khan, PhD TRANSCEND Research, TAL Kenet Group Fellow, MGH Psychtoolbox: An introduction

  2. OUTLINE • Introduction to Psychtoolbox. • Psychtoolbox by Simple Examples • Psychtoolbox in practice at Martinos center.

  3. 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.

  4. 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

  5. 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.

  6. 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 *****

  7. 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 *****

  8. 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);

  9. 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

  10. 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

  11. 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

  12. 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);

  13. 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);

  14. 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

  15. 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.

  16. 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

  17. 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

  18. 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);

  19. 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.

  20. 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);

  21. 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];

  22. 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);

  23. Programming Real Stimuli • % Sending triggers • DaqDOut(di,0,4); %send trigger • DaqDOut(di,0,0); %clear trig

  24. 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.

  25. Thank you.

More Related