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. 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 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 :: PTB-Info: VBL startline = 768, VBL Endline = -1 TB-Info: Measured monitor refresh interval from VBLsync = ms [ Hz]. (50 valid samples taken, stddev= ms.) PTB-Info: Reported monitor refresh interval from operating system = ms [ 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 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 :: PTB-Info: VBL startline = 768, VBL Endline = -1 TB-Info: Measured monitor refresh interval from VBLsync = ms [ Hz]. (50 valid samples taken, stddev= ms.) PTB-Info: Reported monitor refresh interval from operating system = ms [ 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,[ ], [ ]); vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval)); % flip 13 frames after vbl Screen('FillRect',wPtr,[ ], [ ]); 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,[ ], [ ]); vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval)); Screen('FillOval',wPtr,[ ], [ ]); 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,[ ], 500, 200, 700,600, 5); vbl=Screen(wPtr, 'Flip', vbl+(flipSpd*monitorFlipInterval)); Screen('DrawLine',wPtr,[ ], 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, [ ]); >>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,[ ], [ ]); Screen('DrawLine',wPtr,[ ], 500, 200, 700,600, 5); Screen('FillOval',wPtr,[ ], [ ]); Screen('TextSize', wPtr, 150); Screen('DrawText', wPtr, 'FUNKY!!', 200, 20, [ ]); 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