Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "1 Psychtoolbox: An introduction Sheraz Khan, PhD TRANSCEND Research, TAL Kenet Group Fellow, MGH."— Presentation transcript:

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

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

3 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 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 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 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 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 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 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 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 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 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 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 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 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 16 Programming Real Stimuli Specifications: Size of the objects: Size of the Gabors, visual separation between them L, 55 cm H, 41 cm Size of the Screen Distance from the Screen D, 120 cm

17 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 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 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 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 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 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 23 Programming Real Stimuli % Sending triggers DaqDOut(di,0,4); %send trigger DaqDOut(di,0,0); %clear trig

24 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 25 Thank you.


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

Similar presentations


Ads by Google