Home

PsychoPyManual v1.81.03

image

Contents

1. Have you remembered to specify the file you want to use when setting up the loop Have you remembered to add the variables proceeded by the symbol to your stimuli 60 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 6 8 4 just want a plain square but it s turning into a grating If you don t want your stimulus to have a texture you need Image to be None 6 8 5 The code snippet I ve entered doesn t do anything Have you remembered to put a symbol at the beginning this isn t necessary and should be avoided in a Code Component A dollar sign as the first character of a line indicates to PsychoPy that the rest of the line is code It does not indicate a variable name unlike in perl or php This means that if you are for example using variables to determine position enter x y The temptation is to use x y which will not work 6 8 6 My stimulus isn t changing as I progress through the loop Have you changed the setting for the variable that you want to change to change every repeat or change every frame 6 8 7 I m getting the error message AttributeError unicode object has no attribute XXXX This type of error is usually caused by a naming conflict Whilst we have made every attempt to make sure that these conflicts produce a warning message it is possible that they may still occur The most common source of naming conflicts in an ex
2. pause until there s a keypress Control the presentation of the stimuli OK so we have everything that we need to run the experiment The following uses a for loop that will iterate over trials in the experiment With each pass through the loop the staircase object will provide the new value for the intensity which we will call thisIncrement We will randomly choose a side to present the target stimulus using numpy random randonm setting the position of the target to be there and the foil to be on the other side of the fixation point for thisIncrement in staircase will step through the staircase set location of stimuli targetSide random choice l 1 will be either 1 right or 1 left foil setPos 5 targetSide 0 Then set the orientation of the foil to be the reference orientation plus thisIncrement draw all the stimuli in cluding the fixation point and update the window set orientation of probe foil setOri expInfo refOrientation thisIncrement draw all stimuli foil draw target draw fixation draw Wait for presentation time of 500ms and then blank the screen by updating the screen after drawing just the fixation point core wait 0 5 wait 500ms but use a loop of x frames for more accurate timing in fullscreen eg to get 30 frames for f in xrange 30 win flip blank screen fixation draw Get input from the subject Still within the for loop note the level of indentation is the
3. from psychopy import logging logging log level logging WARN msg something important logging log level logging EXP msg something about the conditions logging log level logging DATA msg something about a response logging log level logging INFO msg something less important There are additional convenience functions for the above logging warn a warning etc For stimulus changes you probably want the log message to be timestamped based on the frame flip when the stimulus is next presented rather than the time that the log message is sent from psychopy import logging visual win visual Window 400 400 win flip logging log level logging EXP msg sent immediately win logOnFlip level logging EXP msg sent on actual flip win flip Using a custom clock for logs New in version 1 63 00 7 1 Basic Concepts 67 PsychoPy Psychology software for Python Release 1 81 03 By default times for log files are reported as seconds after the very beginning of the script often it takes a few seconds to initialise and import all modules too You can set the logging system to use any given core Clock object actually anything with a getTime method from psychopy import core logging globalClock core Clock logging setDefaultClock globalClock 7 1 3 Handling Trials and Conditions TrialHandler This is what underlies the random and sequential loop types in Builder
4. Soa Output Welcome to PsychoPy2 v1 63 00 When learning a new computer language the classic first program is simply to print or display Hello world Lets do it 5 1 1 A first program Start PsychoPy and be sure to be in the Builder view If you have poked around a bit in the Builder already be sure to start with a clean slate To get a new Builder view type Crrl N on Windows or Linux or Cmd N on Mac Click on a Text component 34 Chapter 5 Getting Started PsychoPy Psychology software for Python Release 1 81 03 eoo Text Properties Name ext Start time s 10 0 Expected start s Stop duration s o Expected duration s Color rite consta Color space rgb y Font Arial consta Letter height 0 1 consta Opacity 1 consta Orientation y consta Position consta Hello world Consta Units from exp settings Wrap width consta help gt 0 In the 7exf field replace the default text with your message When you run the program the text you type here will be shown on the screen and a Text Properties dialog will pop up e Click OK near the bottom of the dialog box Properties dialogs have a link to online help an icon at the bottom near the OK button Your text component now resides in a routine called fria You can click on it to view or edit it Components Routines and other Bui
5. joystick backend pyglet must match the Window win visual Window 400 400 winType pyglet nJoys joystick getNumJoysticks fto check if we have any id 0 joy joystick Joystick id id must be lt nJoys 1 nAxes Joy getNumAxes for interest while True while presenting stimuli current joy getxX win flip flipping implicitly updates the joystick info psychopy hardware joystick getNumJoysticks Return a count of the number of joysticks available class psychopy hardware joystick Joystick id An object to control a multi axis joystick or gamepad Known issues Currently under pyglet backends the axis values initialise to zero rather than reading the current true value This gets fixed on the first change to each axis getAllAxes Get a list of all current axis values getAllButtons Get the state of all buttons as a list getAllHats Get the current values of all available hats as a list of tuples Each value is a tuple x y where x and y can be 1 0 1 getAxis axisid Get the value of an axis by an integer id from 0 to number of axes 1 getButton buttonld Get the state of a given button buttonId should be a value from 0 to the number of buttons 1 getHat hatld 0 Get the position of a particular hat The position returned is an x y tuple where x and y can be 1 0 or 1 getName Returns the manufacturer defined name describing the device getNumAxes Retur
6. would represent 4 different conditions or trial types one per line The header line describes the parameters in the 3 columns ori text and corrAns It s really useful to include a column called corrAns that shows what the correct key press is going to be for this trial if there is one If the loop type is sequential then on each iteration through the Routines the next row will be selected in the order listed in the file Under a random order the next row will be selected at random without replacement it can only be selected again after all the other rows have also been selected nReps determines how many repeats will be performed for all conditions The total number of trials will be the number of conditions number of rows in the file not counting the header row times the number of repetitions nReps With the fullRandom option the entire list of trials including repetitions is used in random order allowing the same item to appear potentially many times in a row and to repeat without necessarily having done all of the other trials For example with 3 repetitions a file of trial types like this letter a b Cc could result in the following possible sequences sequential could only ever give one sequence with this order a b c abc abc random will give one of 216 different orders 3 3 3 nReps nTrials for example baca b c c a b Here the letters are effectively in sets of abc abc abc and randomiz
7. 10 166 Chapter 10 Recipes How to s PsychoPy Psychology software for Python Release 1 81 03 infol observer jwp win visual Window 400 400 h_ gt fcreate the stimuli create staircases stairs for thisStart in info startPoints we need a COPY of the info for each staircase or the changes here will be made to all the other staircases thisInfo copy copy info now add any specific info for this staircase thisInfo thisStart thisStart we might want to keep track of this thisStair data StairHandler startVal thisStart extraInfo thisInfo nTrials 50 nUp 1 minVal 0 5 maxVal 8 stepSizes 4 4 2 2 1 1 stairs append thisStair nDown 3 for trialN in range info nTrials shuffle stairs this shuffles in place ie stairs itself is changed nothing returned then loop through our randomised order of staircases for this repeat for thisStair in stairs thisIntensity thisStair next print start 3 2f current 4f h Ss eu a run your trial and get an input H as diod appa es ca a keys event waitKeys if left in keys wasCorrect True else wasCorrect False thisStair addData wasCorrect this trial fall trials finished amp thisStair extraInfo thisStart of all staircases has finished save data separate pickle and txt files for each staircase dateS
8. 2 3 valType code updates constant gt lt Param name storeResponseTime val True valType bool updates constant gt lt Param name correctIf val resp keys str thisTrial corrAns valType code updates const lt Param name store val last key valType str updates constant gt lt KeyboardComponent gt lt Routine gt lt Routine name instruct gt lt TextComponent name instrText gt lt Param name name val instrText valType code updates constant gt lt Param name text val amp guot Please press amp 10 1 for red ink amp 10 2 for green ink amp 10 3 for lt Param name colour val 1 1 1 valType code updates constant gt lt Param name ori val 0 valType code updates constant gt lt Param name pos val 0 0 valType code updates constant gt lt Param name times val 0 10000 valType code updates constant gt lt Param name letterHeight val 0 1 valType code updates constant gt lt Param name colourSpace val rgb valType code updates constant gt lt Param name units val window units valType str updates None gt lt Param name font val Arial valType str updates constant gt lt TextComponent gt lt KeyboardComponent name ready gt lt Param name storeCorrect val False valType bool updates constant gt lt Param name name val ready valType code updates None gt lt Param name
9. 3 2 Recommended hardware The minimum reguirement for PsychoPy is a computer with a graphics card that supports OpenGL Many newer graphics cards will work well Ideally the graphics card should support OpenGL version 2 0 or higher Certain visual functions run much faster if OpenGL 2 0 is available and some reguire it e g ElementArrayStim If you already have a computer you can install PsychoPy and the Configuration Wizard will auto detect the card and drivers and provide more information It is inexpensive to upgrade most desktop computers to an adeguate graphics card High end graphics cards can be very expensive but are only needed for vision research and high end gaming If you re thinking of buying a laptop for running experiments avoid the built in Intel graphics chips e g GMA 950 The drivers are crummy and performance is poor graphics cards on laptops are more difficult to exchange Get something with nVidia or ATI chips instead Some graphics cards that are known to work with PsychoPy can be found here that list is not exhaustive many cards will also work 3 3 Windows Once installed you ll now find a link to the PsychoPy application in gt Start gt Programs gt PsychoPy2 Click that and the Configuration Wizard should start 27 PsychoPy Psychology software for Python Release 1 81 03 The wizard will try to make sure you have reasonably current drivers for your graphics card You may be directed to downlo
10. Args None Returns None getProcessAffinity Returns the current ioHub Process Affinity setting as a list of processor id s from 0 to getSystemProcessorCount 1 A Process s Affinity determines which CPU s or CPU cores a process can run on By default the ioHub Process can run on any CPU or CPU core This method is not supported on OS X at this time Args None Returns list A list of integer values between 0 and Computer getSystemProcessorCount 1 where val ues in the list indicate processing unit indexes that the ioHub process is able to run on setProcessAffinity processor_list Sets the ioHub Process Affinity based on the value of processor_list A Process s Affinity determines which CPU s or CPU cores a process can run on By default the ioHub Process can run on any CPU or CPU core The processor_list argument must be a list of processor id s integers in the range of 0 to Computer processing_unit_count 1 representing the processing unit indexes that the ioHub Server should be allowed to run on If processor_list is given as an empty list the ioHub Process will be able to run on any processing unit on the computer This method is not supported on OS X at this time Args processor_list list A list of integer values between 0 and Computer processing_unit_count 1 where values in the list indicate processing unit indexes that the ioHub process is able to run on Returns None flushDataStore
11. LV m M m V at b 4 a b k a b V 2 1 a b 4 b k 7 W V a a 1 V b74 V b k where V is the position in the LUT as a fraction Now to generate the LUT as needed we simply take the inverse of 2 3 L a LUTO oe Yb 2 8 and substitute our L V values from 2 7 1 bY y PR l y _ k 2 9 1 V b V b k 7 7 b k 14 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 2 6 4 References 2 7 OpenGL and Rendering All rendering performed by PsychoPy uses hardware accelerated OpenGL rendering where possible This means that as much as possible the necessary processing to calculate pixel values is performed by the graphics card GPU rather than by the CPU For example when an image is rotated the calculations to determine what pixel values should result and any interpolation that is needed are determined by the graphics card automatically In the double buffered system stimuli are initially drawn into a piece of memory on the graphics card called the back buffer while the screen presents the front buffer The back buffer initially starts blank all pixels are set to the window s defined color and as stimuli are rendered they are gradually added to this back buffer The way in which stimuli are combined according to transparency rules is determined by the blend mode of the window At some point in time when we have rendered to this bu
12. Merge a folder into another Existing files in dst folder with the same name will be overwritten Non existent files folders will be created 8 18 4 psychopy tools imagetools Functions and classes related to image handling array2image a Takes an array and returns an image object PIL image2array im Takes an image object PIL and returns a numpy array makeImageAut o inarray Combines float_uint8 and image2array operations ie Function details psychopy tools imagetools array2image a Takes an array and returns an image object PIL psychopy tools imagetools image2array im Takes an image object PIL and returns a numpy array psychopy tools imagetools makeImageAuto inarray 148 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Combines float_uint8 and image2array operations ie scales a numeric array from 1 1 to 0 255 and converts to PIL image format 8 18 5 psychopy tools monitorunittools Functions and classes related to unit conversion respective to a particular monitor convert ToPix vertices pos units win Takes vertices and position combines and converts to pixels from any unit cm2deg cm monitor correctFlat Convert size in cm to size in degrees for a given Monitor object cm2pix cm monitor Convert size in degrees to size in pixels for a given Monitor object deg2cm degrees monitor correctFlat Convert size in degrees to size in pixels for
13. Note that any pressed or active modifier keys are included in the return value Returns dict reporting None Specifies if the the keyboard device is reporting recording events True keyboard events are being reported False keyboard events are not being reported By default the Keyboard starts reporting events automatically when the ioHub process is started and continues to do so until the process is stopped This property can be used to read or set the device reporting state f Read the reporting state of the keyboard is_reporting_keyboard_event keyboard reporting Stop the keyboard from reporting any new events keyboard reporting False 124 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 getKeys keys None chars None mods None duration None etype None clear True Return a list of any KeyboardPress or KeyboardRelease events that have occurred since the last time either this method was called with the kwarg clear True default ethe keyboard clear method was called Other than the clear kwarg any non None or empty list kwargs passed to the method filter the possible events that can be returned using the keyboard event field with the associated name If multiple filter criteria are provided only events that match all specified criteria are returned If no KeyboardEvent s are found that match the filtering criteria an empty tuple is returned Retur
14. This can be used in various ways Here are some scenarios email the list if you have other uses for your mouse Use the mouse to record the location of a button press Use the mouse to control stimulus parameters Imagine you want to use your mouse to make your patch _ bigger or smaller and save the final size Call your mouse mouse set it to save its state at the end of the trial and set the button press to end the Routine Then for the size setting of your Patch stimulus insert mouse getPos 0 to use the x position of the mouse to control the size or mouse getPos I to use the y position Tracking the entire path of the mouse during a period Parameters Name string Everything in a PsychoPy experiment needs a unigue name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the mouse should first be checked See Defining the onset duration of components for details stop When the mouse is no longer checked See Defining the onset duration of components for details Force End Routine on Press If this box is checked then the Roufine will end as soon as one of the mouse buttons is pressed Save Mouse State How often do you need to save the state of the mouse Every time the subject presses a mouse button at the end of the trial or every single frame Note that the text output for cases where you store the mouse data repeatedly per trial e g every press or
15. getLast Lum This retrieves the luminance in cd m 2 from the last call to measure getLastSpectrum parse True This retrieves the spectrum from the last call to measure If parse True default The format is a num array with 100 rows nm power otherwise The output will be the raw string from the PR650 and should then be passed to parseSpectrumOutput It s more efficient to parse R G B strings at once than each individu ally get Lum Makes a measurement and returns the luminance value getSpectrum parse True Makes a measurement and returns the current power spectrum If parse True default The format is a num array with 100 rows nm power If parse False default The output will be the raw string from the PR650 and should then be passed to parseSpectrumOutput It s slightly more efficient to parse R G B strings at once than each individually 8 8 psychopy hardware hardware interfaces 113 PsychoPy Psychology software for Python Release 1 81 03 measure timeOut 30 0 Make a measurement with the device For a PR650 the device is instructed to make a measurement and then subsequent commands are issued to retrieve info about that measurement parseSpectrumOutput rawStr Parses the strings from the PR650 as received after sending the command d5 The input argument raw Str can be the output from a single phosphor spectrum measurement or a list of 3 such measurements raw
16. in module psychopy tools filetools 148 functionFromStaircase in module psychopy data 96 G GammaCalculator class in psychopy monitors 140 gammaFun in module psychopy monitors 141 gammalnvFun in module psychopy monitors 141 gammalsDefault psychopy monitors Monitor method 137 get_next response pyxid ResponseDevice method 105 get_xid device in module pyxid 105 get_xid_devices in module pyxid 105 getAbsTime in module psychopy core 77 psychopy hardware joystick Joystick method 110 getAllButtons psychopy hardware joystick Joystick method 110 getAllHats psychopy hardware joystick Joystick method 110 getAllMonitors in module psychopy monitors 140 getAxis psychopy hardware joystick Joystick method 110 getBaseTime psychopy hardware iolab ButtonBox method 109 getButton psychopy hardware joystick Joystick method 110 getCalibDate psychopy monitors Monitor method 137 getDevice psychopy iohub client ioHubConnection method 120 getDeviceSN psychopy hardware pr PR655 method 114 getDeviceType psychopy hardware pr PR655 method 114 getDft in module psychopy microphone 135 getDistance psychopy monitors Monitor method 137 getDKL RGB psychopy monitors Monitor method 157 getDuration psychopy sound SoundPygame method 145 getDuration psychopy sound SoundPyo method 144 196 Index PsychoPy Psycholo
17. in that case units None The units for this mouse will match the current units for the Window it lives in psychopy event clearEvents eventType None Clears all events currently in the event buffer Optional argument eventType specifies only certain types to be cleared Parameters eventType None mouse joystick keyboard If this is not None then only events of the given type are cleared psychopy event waitKeys maxWait inf keyList None timeStamped False Same as psychopy event getKeys but halts everything including drawing while awaiting input from keyboard Implicitly clears keyboard so any preceding keypresses will be lost Parameters maxWait any numeric value Maximum number of seconds period and which keys to wait for Default is float inf which simply waits forever Returns None if times out psychopy event getKeys keyList None timeStamped False Returns a list of keys that were pressed Parameters keyList None or Allows the user to specify a set of keys to check for Only keypresses from this set of keys will be removed from the keyboard buffer If the keyList is None all keys will be checked and the key buffer will be cleared completely NB pygame doesn t return timestamps they are always 0 timeStamped False or True or Clock If True will return a list of tuples instead of a list of keynames Each tuple has keyname time If a core Clock is given then the t
18. 127 printAsText psychopy data MultiStairHandler method 89 printAsText psychopy data OuestHandler method 93 printAsText psychopy data StairHandler method 86 printAsText psychopy data TrialHandler method 83 psychopy core module 77 psychopy data module 80 psychopy filters module 100 psychopy hardware crs module 106 psychopy hardware egi module 106 psychopy hardware emulator module 106 psychopy hardware forp module 107 psychopy hardware iolab module 108 psychopy hardware joystick module 109 psychopy hardware minolta module 111 psychopy hardware pr module 113 psychopy info module 116 psychopy iohub client module 119 psychopy iohub client keyboard module 124 psychopy logging module 128 psychopy misc module 135 psychopy parallel module 142 psychopy sound module 144 psychopy tools module 146 psychopy tools colorspacetools module 146 psychopy tools coordinatetools module 147 psychopy tools filetools module 148 psychopy tools imagetools module 148 psychopy tools monitorunittools module 149 psychopy tools plottools module 149 psychopy tools typetools module 150 psychopy tools unittools module 150 pylink module 116 pyxid module 105 Q quantile psychopy data QuestHandler method 93 QuestHandler class in psychopy data 90 quit psychopy iohub client ioHubConnection method 124 R radians in module psychopy tools unitto
19. Basic Concepts 65 PsychoPy Psychology software for Python Release 1 81 03 frame refresh the script will not continue until the flip has occurred As a result on most cards as long as frames are not being dropped see Detecting dropped frames you can present stimuli for a fixed reproducible period Note Some graphics cards such as Intel GMA graphics chips under win32 don t support frame sync Avoid integrated graphics for experiment computers wherever possible Using the concept of fixed frame periods and flip calls that sync to those periods we can time stimulus presentation extremely precisely with the following from psychopy import visual core setup stimulus win visual Window 400 400 gabor visual GratingStim win tex sin mask gauss sf 5 name gabor autoLog False fixation visual GratingStim win tex None mask gauss sf 0 size 0 02 name fixation autoLog False clock core Clock let s draw a stimulus for 2s drifting for middle 0 55 for frameN in range 200 for exactly 200 frames if 10 lt frameN lt 150 present fixation for a subset of frames fixation draw if 50 lt frameN lt 100 present stim for a different subset gabor setPhase 0 1 increment by 10th of cycle gabor draw win flip Using autoDraw Stimuli are typically drawn manually on every frame in which they are needed using the draw function You can also set
20. adding them csv files can be opened in most spreadsheet packages Having opened a text file for writing the last line shows how easy it is to send text to this target document make a text file to save data fileName expInfo observer expInfo datesStr dataFile open fileNamet csv w fa simple text file with comma separated values PsychoPy allows us to set up an object to handle the presentation of stimuli in a staircase procedure the StairHandler This will define the increment of the orientation i e how far it is from the reference orienta tion The staircase can be configured in many ways but we ll set it up to begin with an increment of 20deg very detectable and home in on the 80 threshold value We ll step up our increment every time the subject gets a wrong answer and step down if they get three right answers in a row The step size will also decrease after every 2 reversals starting with an 8dB step large and going down to 1dB steps smallish We ll finish after 50 trials create the staircase handler staircase data StairHandler startVal 20 0 stepType db stepSizes 8 4 4 2 2 1 1 nUp 1 nDown 3 will home in on the 80 threshold Build your stimuli Now we need to create a window some stimuli and timers We need a psychopy visual Window in which to draw our stimuli a fixation point and two psychopy visual GratingStim stimuli one for the target probe and one as the foil We can
21. csv files that can be used with data analysis and plotting scripts written in Python Whilst you may not wish to use this format it is recommended that you always save a copy as it contains a complete record of the experiment at the time of data collection Save log file A log file provides a record of what occurred during the experiment in chronological order including information about any errors or warnings that may have occurred Logging level How much detail do you want to be output to the log file if it is being saved The lowest level is error which only outputs error messages warning outputs warnings and errors info outputs all info warnings and errors debug outputs all info that can be logged This system enables the user to get a great deal of information while generating their experiments but then reducing this easily to just the critical information needed when actually running the study If your experiment is not behaving as you expect it to this is an excellent place to begin to work out what the problem is Screen settings Monitor The name of the monitor calibration Must match one of the monitor names from Monitor Center Screen If multiple screens are available and if the graphics card is not an intel integrated graphics chip then the user can choose which screen they use e g 1 or 2 Full screen window If this box is checked then the experiment window will fill the screen overriding the window size setting and us
22. disable all buttons an integer 0 7 enable a single button a list of integers 0 7 enable all buttons in the list Set voice True to enable the voiceKey gets reported as button 64 setLights lightList 0 1 2 3 4 5 6 7 Turn on the specified LEDs None 0 7 list of 0 7 standby Disable all buttons and lights waitEvents downOnly True timeout 0 escape escape wait 0 002 Wait for and return the first button press event Always calls clearEvents first like PsychoPy keyboard waitKeys Use downOnly False to include button release events escape is a list tuple of keyboard events that if pressed will interrupt the bbox wait waitKeys will return None in that case timeout is the max time to wait in seconds before returning None timeout of 0 means no time out default 8 8 7 joystick pyglet and pygame Control joysticks and gamepads from within PsychoPy You do need a window and you need to be flipping it for the joystick to be updated Known issues e currently under pyglet the joystick axes initialise to a value of zero and stay like this until the first time that axis moves currently pygame 1 9 1 spits out lots of debug messages about the joystick and these can t be turned off Typical usage 8 8 psychopy hardware hardware interfaces 109 PsychoPy Psychology software for Python Release 1 81 03 from psychopy hardware import joystick from psychopy import visual
23. elevation azimuth radius pol2cart theta radius units Convert from polar to cartesian coordinates sph2cart args Convert from spherical coordinates elevation azimuth radius 8 13 4 From psychopy tools monitorunittools convert ToPix vertices pos units win Takes vertices and position combines and converts to pixels from any unit cm2pix cm monitor Convert size in degrees to size in pixels for a given Monitor object cm2deg cm monitor correctFlat Convert size in cm to size in degrees for a given Monitor object deg2cm degrees monitor correctFlat Convert size in degrees to size in pixels for a given Monitor object deg2pix degrees monitor correctFlat Convert size in degrees to size in pixels for a given Monitor object pix2cm pixels monitor Convert size in pixels to size in cm for a given Monitor object pix2deg pixels monitor correctFlat Convert size in pixels to size in degrees for a given Monitor object 8 13 5 From psychopy tools imagetools array2image a Takes an array and returns an image object PIL image2array im Takes an image object PIL and returns a numpy array makeImageAut o inarray Combines float_uint8 and image2array operations ie 8 13 6 From psychopy tools plottools plotFrameIntervals intervals Plot a histogram of the frame intervals 8 13 7 From psychopy tools typetools float_uint 8 inarray Converts arrays lists tuples and floats ranging 1 1 uint8_fl
24. frames since the start of the Routine 0 in the first frame win the Window that the experiment is using Your own variables anything you ve created in a Code Component is available for the rest of the script Sometimes you might need to define it at the beginning of the experiment so that it will be available throughout e the name of any other stimulus or the parameters from your file also exist as variables most Components have a status attribute which is useful to determine whether a stimulus has NOT_STARTED STARTED or FINISHED For example to play a tone at the end of a Movie Component of unknown duration you could set start of your tone to have the condition myMovieName status FINISHED Selected contents of the numpy library and numpy random are imported by default The entire numpy library is imported as np so you can use a several hundred maths functions by prepending things with np random randint normal shuffle options for creating arrays of random numbers sin cos tan and pi For geometry and trig By default angles are in radians if you want the cosine of an angle specified in degrees use cos angle 180 pi or use numpy s conversion functions rad2deg angle and deg2rad angle linspace Create an array of linearly spaced values log log10 The natural and base 10 log functions respectively It is a lowercase L in log sum len For the sum and length o
25. iohub cl logging 128 parallel 142 sound 144 tool tool S ls 146 too tool ls S ls ls emulator 106 joystick 109 lient keyboard 124 colorspacetools 146 coordinatetools 147 filetools 148 imagetools 148 ls COO ls tool S pylink 116 pyxid 105 monitorunittools 149 plottools 149 typetools 150 unittools 150 PYTHON MODULE INDEX 193 PsychoPy Psychology software for Python Release 1 81 03 194 Python Module Index A abort psychopy data ExperimentHandler method 80 Adaptive staircase 25 add psychopy core Clock method 78 addData psychopy data ExperimentHandler method 80 addData psychopy data MultiStairHandler method 88 addData psychopy data QuestHandler method 92 addData psychopy data StairHandler method 86 addData psychopy data TrialHandler method 82 addField psychopy gui Dlg method 103 addFixedField psychopy gui Dlg method 103 addLevel in module psychopy logging 129 addLoop psychopy data ExperimentHandler method 81 addOtherData method 88 addOtherData psychopy data OuestHandler method 92 addOtherData psychopy data StairHandler method 86 addResponse psychopy data MultiStairHandler method 89 addResponse psychopy data OuestHandler method 92 addResponse psychopy data StairHandler method 86 addText psychopy g
26. it is technically possible to create exe files on Windows and Ricky Savjani savjani at bcm edu has kindly provided the following instructions for how to do it A similar process might be possible on OS X using py2app if you ve done that then feel free to contribute the necessary script or instructions 10 5 1 Using py2exe to build an executable Instructions 1 Download and install py2exe http www py2exe org Develop your PsychoPy script as normal Copy this setup py file into the same directory as your script Change the Name of progName variable in this file to the Name of your desired executable program name na AeA W N Use cmd or bash terminal etc and run the following in the directory of your the two files python setup py py2exe 6 Open the dist directory and run your executable A example setup py script Created 8 09 2011 Ricky Savjani savjani at bcm edu fimport necessary packages from distutils core import setup import os matplotlib import py2exe fthe name of your exe file progName MultipleSchizophrenia py Initialize Holder Files preference_files app_files my_data_files matplotlib get_py2exe_ datafiles 10 5 Building an application from your script 161 PsychoPy Psychology software for Python Release 1 81 03 define which files you want to copy for data_files for files in os listdir C Program Files PsychoPy2 Lib site packages PsychoP
27. log True Sets the onset marker where tone is either in hz or a custom sound The default tone 19000 Hz is recommended for auto detection as being easier to isolate from speech sounds and so reliable to detect The default duration and volume are appropriate for a quiet setting such as a lab testing room A louder volume longer duration or both may give better results when recording loud sounds or in noisy environments and will be auto detected just fine even more easily If the hardware microphone in use is not physically near the speaker hardware a louder volume is likely to be required Custom sounds cannot be auto detected but are supported anyway for presentation purposes E g a recording of someone saying go or stop could be passed as the onset marker stop log True Interrupt a recording that is in progress close amp keep the file Ends the recording before the duration that was initially specified The same file name is retained with the same onset time but a shorter duration 132 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 The same recording cannot be resumed after a stop it is not a pause but you can start a new one uncompress keep False Uncompress from FLAC to wav format 8 12 3 Speech recognition class psychopy microphone Speech2Text filename lang en US _ timeout 10 samplin grate 16000 pro_filter 2 level 0 Class
28. method 83 getPos psychopy event Mouse method 98 getPressed psychopy event Mouse method 98 getPresses psychopy iohub client keyboard Keyboard method 125 getProcessAffinity psy chopy iohub client ioHubConnection method 123 getPsychopy Version psychopy monitors Monitor method 138 getRAMO in module psychopy info 117 getRel psychopy event Mouse method 98 getReleases psychopy iohub client keyboard Keyboard method 125 getResponse psychopy microphone Speech2Text method 134 getRGBspectra in module psychopy monitors 141 getRMS in module psychopy microphone 135 getRMScontrast in module psychopy filters 101 getSizePix psychopy monitors Monitor method 138 getSpectra psychopy monitors Monitor method 138 getSpectrum psychopy hardware pr PR650 method 113 getThread psychopy microphone Speech2Text method 134 getTime in module psychopy core 77 Index 197 PsychoPy Psychology software for Python Release 1 81 03 getTime psychopy core CountdownTimer method 78 getTime psychopy core MonotonicClock method 78 getUniqueEvents psychopy hardware forp ButtonBox method 108 getUseBits psychopy monitors Monitor method 138 getVisible psychopy event Mouse method 98 getVolume psychopy sound SoundPygame method 145 getVolume psychopy sound SoundPyo method 144 getWheelRel psychopy event Mouse method 98 getWidth psyc
29. parallel setData 3 sets all pins low 55 sets all pins high sets just pin 3 high remember that pin2 bit0 sets just pins 2 and 3 high you can also convert base 2 to int v easily in python parallel setData int 00000011 2 pins 2 and 3 high parallel setData int 00000101 2 pins 2 and 4 high static parallel setPin pinNumber state Set a desired pin to be high 1 or low 0 Only pins 2 9 incl are normally used for data output parallel setPin 3 1 sets pin 3 high parallel setPin 3 0 sets pin 3 low static parallel readPin pinNumber Determine whether a desired input pin is high 1 or low 0 Pins 2 13 and 15 are currently read here 8 16 psychopy serial functions for interacting with the serial port PsychoPy is compatible with Chris Liechti s pyserial package You can use it like this import serial ser serial Serial 0 19200 timeout 1 open first serial port ser serial Serial dev ttyS1 19200 timeout 1 or something like this for Mac Linux machines ser write someCommand line ser readline read a n terminated lin ser close Ports are fully configurable with all the options you would expect of RS232 communications See http pyserial sourceforge net for further details and documentation pyserial is packaged in the Standalone Windows and Mac distributions for manual installations you should install this yourself 8 16 psychopy seria
30. psychopy monitors Monitor method 139 setGammaGrid psychopy monitors Monitor method 139 setLevel psychopy logging LogFile method 129 setLevelsPost psychopy monitors Monitor method 139 setLevelsPre psychopy monitors Monitor method 139 setLights psychopy hardware iolab ButtonBox method 109 setLineariseMethod method 139 setLMS_RGB psychopy monitors Monitor method psychopy monitors Monitor 139 setLoops psychopy sound SoundPyo method 145 setLumsPost psychopy monitors Monitor method 139 setLumsPre psychopy monitors Monitor method 139 setMarker _ psychopy microphone AdvAudioCapture method 132 setMaxAttempts psychopy hardware minolta LS 100 method 112 setMeanLum psychopy monitors Monitor 139 setMode psychopy hardware minolta LS100 method 112 setNotes psychopy monitors Monitor method 139 setPin psychopy parallel static method 143 setPortAddress psychopy parallel static method 142 setPos psychopy event Mouse method 98 method setProcessA ffinity psy chopy iohub client ioHubConnection method 123 setPsychopyVersion psychopy monitors Monitor method 139 setSizePix psychopy monitors Monitor method 139 setSpectra psychopy monitors Monitor method 139 setupProxy in module psychopy web 152 setUseBits psychopy monitors Monitor method 139 setVisible psychopy event Mouse method 99 setVolume psychopy sound SoundP
31. 138 getLevelsPre psychopy monitors Monitor method 138 getLinearizeMethod psychopy monitors Monitor method 138 getLMS_RGB psychopy monitors Monitor method 138 getLoops psychopy sound SoundPyo method 144 getLoudness psychopy microphone AdvAudioCapture method 131 getLumQ psychopy hardware minolta LS100 method 112 getLum psychopy hardware pr PR650 method 113 getLumSeriesPR650 in module psychopy monitors 140 getLumsPost psychopy monitors Monitor method 138 getLumsPre psychopy monitors Monitor method 138 getMarkerInfo psychopy microphone AdvAudioCapture method 131 getMarkerOnset psy chopy microphone AdvAudioCapture method 132 getMeanLum psychopy monitors Monitor 138 getName psychopy hardware joystick Joystick method 110 getName psychopy iohub client keyboard Keyboard method 126 getNotes psychopy monitors Monitor method 138 getNumA xes psychopy hardware joystick Joystick method 110 getNumButtons psychopy hardware joystick Joystick method 110 method getNumHats psychopy hardware joystick Joystick method 110 getNumJoysticks in module psy chopy hardware joystick 110 getOriginPathAndFile psy chopy data MultiStairHandler method 89 getOriginPathAndFile psychopy data OuestHandler method 92 getOriginPathAndFile psychopy data StairHandler method 86 getOriginPathAndFile psychopy data TrialHandler
32. 14 psychopy monitors for those that don t like Monitor Center 141 PsychoPy Psychology software for Python Release 1 81 03 8 15 psychopy parallel functions for interacting with the parallel port This module provides read write access to the parallel port for Linux or Windows The Parallel class described below will attempt to load whichever parallel port driver is first found on your system and should suffice in most instances If you need to use a specific driver then instead of using ParallelPort shown below you can use one of the following as drop in replacemnts forcing the use of a specific driver psychopy parallel P ParallelInpOut32 e psychopy parallel PParallelDLPortIO psychopy parallel PParallelLinux Either way each instance of the class can provide access to a different parallel port There is also a legacy API which consists of the routines which are directly in this module That API assumes you only ever want to use a single parallel port at once classpsychopy parallel ParallelPort This class provides read write access to the parallel port on Windows amp Linux Usage from psychopy import parallel port parallel ParallelPort address 0x0378 port setData 4 port readPin 2 port setPin 2 1 readData Return the value currently set on the data pins 2 9 readPin pinNumber Determine whether a desired input pin is high 1 or low 0 Pins 2 13 and 15 are currently read here setDat
33. BMP files bmp l bmplGIF files gif l gif See http www wxpython org docs api wx FileDialog class html for further details If initFilePath or initFileName are empty or invalid then current path and empty names are used to start search If user cancels the None is returned 8 8 psychopy hardware hardware interfaces PsychoPy can access a wide range of external hardware For some devices the interface has already been created in the following sub packages of PsychoPy For others you may need to write the code to access the serial port etc manually Contents 8 8 1 Cedrus response boxes The pyxid package written by Cedrus is included in the Standalone PsychoPy distributions See https github com cedrus opensource pyxid for further info Example usage import pyxid get a list of all attached XID devices devices pyxid get_xid_devices dev devices 0 get the first device to use if dev is_response_device dev reset_base_timer dev reset_rt_timer while True dev poll_for_response if dev response_queue_size gt 0 response dev get_next_response do something with the response 104 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Useful functions pyxid get_xid_device device_number returns device at a given index Raises ValueError if the device at the passed in index doesn t exist pyxid get_xid_devices Returns a
34. For example to open a psydat file and examine some of its contents with from psychopy misc import fromFile datFile fromFile fileName psydat fget info added when the handler was created print datFile extraInfo get data print datFile data get list of conditions conditions datFile trialList for condN condition in enumerate conditions print condition datFile data response condN numpy mean datFile data response condN Ideally we should provide a demo script here for fetching and plotting some data feel free to contribute 2 5 3 Long wide data file This form of data file is the default data output from Builder experiments as of v1 74 00 Rather than summarising data in a spreadsheet where one row represents all the data from a single condition as in the summarised data format in long wide data files the data is not collapsed by condition but written chronologically with one row representing one trial hence it is typically longer than summarised data files One column in this format is used for every single piece of information available in the experiment even where that information might be considered redundant hence the format is also wide Although these data files might not be guite as easy to read guickly by the experimenter they are ideal for import and analysis under packages such as R SPSS or Matlab 2 5 4 Excel data file Excel 2007 files xlsx are a useful and flexible way
35. PSYCHOPY 1 1 Overview PsychoPy is an open source package for running experiments in Python a real and free alternative to Matlab Psy choPy combines the graphical strengths of OpenGL with the easy Python syntax to give scientists a free and simple stimulus presentation and control package It is used by many labs worldwide for psychophysics cognitive neuro science and experimental psychology Because it s open source you can download it and modify the package if you don t like it And if you make changes that others might use then please consider giving them back to the community via the mailing list PsychoPy has been written and provided to you absolutely for free For it to get better it needs as much input from everyone as possible 1 1 1 Features There are many advantages to using PsychoPy but here are some of the key ones Simple install process Precise timing Huge variety of stimuli see screenshots generated in real time linear gratings bitmaps constantly updating radial gratings random dots movies DivX mov mpg text unicode in any truetype font shapes sounds tones numpy arrays wav ogg Platform independent run the same script on Win OS X or Linux Flexible stimulus units degrees cm or pixels e Coder interface for those that like to program Builder interface for those that don t e Input from keyboard mouse microphone or button boxes Multi monitor supp
36. Release 1 81 03 7 2 3 Tutorial 3 Analysing data in Python You could simply output your data as tab or comma separated text files and analyse the data in some spreadsheet package But the matplotlib library in Python also allows for very neat and simple creation of publication quality plots This script shows you how to use a couple of functions from PsychoPy to open some data files psychopy gui fileOpenDlg and create a psychometric function out of some staircase data psychopy data functionFromStaircase Matplotlib is then used to plot the data Note Matplotlib and pylab Matplotlib is a python library that has similar command syntax to most of the plotting functions in Matlab tm In can be imported in different ways the import pylab line at the beginning of the script is the way to import matploblib as well as a variety of other scientific tools that aren t strictly to do with plotting per se This analysis script takes one or more staircase datafiles as input from a GUI It then plots the staircases on top of each other on the left and a combined psychometric function from the same data on the right from psychopy import data gui core from psychopy tools filetools import fromFile import pylab Open a dialog box to select files from files gui fileOpenDlg if not files core quit get the data from all the files allIntensities allResponses for thisFileName in files thisDat from
37. add an extra line with each pass around the loop This parameter can be unchecked to improve hopefully your data file outputs Added in v1 81 00 Method of Constants Selecting a loop type of random seguential or fullRandom will result in a method of constants experiment whereby the types of trials that can occur are predetermined That is the trials cannot vary depending on how the subject has responded on a previous trial In this case a file must be provided that describes the parameters for the repeats This should be an Excel 2007 xlsx file or a comma separated value csv file in which columns refer to parameters that are needed to describe stimuli etc and rows one for each type of trial These can easily be generated from a spreadsheet package like Excel Note that csv files can also be generated using most text editors as long as they allow you to save the file as plain text other output formats will not work including rich text The top row should be a row of headers text labels describing the contents of the respective columns Headers must also not include spaces or other characters other than letters numbers or underscores and must not be the same as any variable names used elsewhere in your experiment For example a file containing the following table 42 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 ori text corrAns 0 aaa left 90 aaa left 0 bbb right 90 bbb right
38. almost every component will need name startVal start Type etc Some of these fields may need to be overridden e g durationEstim in sound py Inheriting from Visual Component which in turn inherits from BaseComponent adds default visual params plus arranges for Builder scripts to import psychopy visual If your component will need other libs call self exp reguirePsychopyLib neededLib see e g parallelPort py At the top of a component file is a dict named _localized These mappings allow a strict separation of internal string values used in logic never displayed from values used for display in the Builder interface for display only possibly translated never used in logic The hint and label fields of params someParam should always be set to a localized value either by using a dict entry such as _localized message or via the globally available translation function _ message Localized values must not be used elsewhere in a component definition Very occasionally you may also need to edit settings py which writes out the set up code for the whole experiment e g to define the window For example this was necessary for ApertureComponent to pass allowStencil True to the window creation Your new Component writes code into a buffer that becomes an executable python file xxx_lastrun py where xxx is whatever the experimenter specifies when saving from the builder xxx psyexp You will do a
39. and see if an error message appears in this Output view If you still don t get an error message but the application still doesn t start then manually turn off the viewing of the Output as below and try the above again 9 3 Manually turn off the viewing of output Very occasionally an error will occur that crashes the application after the application has opened the Coder Output window In this case the error message is still not sent to the console or command prompt To turn off the Output view so that error messages are sent to the command prompt terminal on startup open your appData cfg file see Cleaning preferences and app data find the entry coder showOutput True and set it to showOutput False note the capital F 9 4 Use the source Luke PsychoPy comes with all the source code included You may not think you re much of a programmer but have a go at reading the code You might find you understand more of it than you think To have a look at the source code do one of the following e when you get an error message in the Coder click on the hyperlinked error lines to see the relevant code on Windows go to Program FilesPsychoPy2Libsite packagesPsychopy have a look at some of the files there on Mac right click the PsychoPy app and select Show Package Contents navigate to Contents Resources lib python2 6 psychopy 9 5 Cleaning preferences and app data Every time you shut down PsychoPy
40. applied shape circle gauss ramp linear gradient from center shape of the mask radius float scale factor to be applied to the mask circle with radius of 1 1 will extend just to the edge of the matrix Radius can be asymmetric e g 1 0 2 0 will be wider than it is tall center 2x1 tuple or list default 0 0 0 0 the centre of the mask in the matrix 1 1 is top right corner 1 1 is bottom left 8 7 psychopy gui create dialogue boxes 8 7 1 DlgFromDict class psychopy gui D1lgFromDict dictionary title fixed order tip Creates a dialogue box that represents a dictionary of values Any values changed by the user are change in place by this dialogue box e g info Observer jwp GratingOri 45 ExpVersion 1 1 Group Test Control infoDlg gui DlgFromDict dictionary info title TestExperiment fixed ExpVersion if infoDlg OK print info else print User Cancelled In the code above the contents of info will be updated to the values returned by the dialogue box If the user cancels rather than pressing OK then the dictionary remains unchanged If you want to check whether the user hit OK then check whether DlgFromDict OK equals True or False See GUI py for a usage demo including order and tip tooltip 102 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 8 7 2 Dlg class p
41. as high a temporal precision as possible and is likely not to be the limiting factor of your experiment Computer monitors Monitors have fixed refresh rates typically 60 Hz for a flat panel display higher for a CRT 85 100 Hz are common up to 200 Hz is possible For a refresh rate of 85 Hz there is a gap of 11 7 ms between frames and this limits the timing of stimulus presentation You cannot have your stimulus appear for 100 ms for instance on an 85Hz monitor it can appear for either 94 ms 8 frames or 105 ms 9 frames There are further less obvious limitations however For CRT cathode ray tube screens the lines of pixels are drawn sequentially from the top to the bottom and once the bottom line has been drawn the screen is finished and the line returns to the top the Vertical Blank Interval VBI Most of your frame interval is spent drawing the lines with 1 2ms being left for the VBI This means that the pixels at the bottom are drawn up to 10 ms later than the pixels at the top of the screen At what point are you going to say your stimulus appeared to the participant For flat panel displays or or LCD projectors your image will be presented simultaneously all over the screen but it takes up to 20 ms for your pixels to go all the way from black to white manufacturers of these panels guote values of 3 ms for the fastest panels but they certainly don t mean 3 ms white to black I assume they mean 3 ms hal
42. button boxes and you need to think carefully about the physics of your monitor Warning The information about timing in PsychoPy assumes that your graphics card is capable of synchronising with the monitor frame rate For integrated Intel graphics chips e g GMA 945 under Windows this is not true and the use of those chips is not recommended for serious experimental use as a result Desktop systems can have a moderate graphics card added for around 30 which will be vastly superior in performance 2 8 1 Specific considerations for specific designs Non slip timing for imaging For most behavioural psychophysics studies timing is most simply controlled by setting some timer e g a Clock to zero and waiting until it has reached a certain value before ending the trial We might call this a relative timing method because everything is timed from the start of the trial epoch In reality this will cause an overshoot of some fraction of one screen refresh period 10ms say For imaging EEG MEG fMR studies adding 10ms to each trial repeatedly for 10 minutes will become a problem however After 100 stimulus presentations your stimulus and scanner will be de synchronised by 1 second There are two ways to get around this 1 Time by frames If you are confident that you aren t dropping frames then you could base your timing on frames instead to avoid the problem 2 Non slip global clock timing The other way which for imaging i
43. buttons list getPos Returns the current position of the mouse in the same units as the Window 0 0 is at centre getPressed getTime False Returns a 3 item list indicating whether or not buttons 0 1 2 are currently pressed If getTime True False by default then getPressed will return all buttons that have been pressed since the last call to mouse clickReset as well as their time stamps buttons mouse getPressed buttons times mouse getPressed getTime True Typically you want to call mouse clickReset at stimulus onset then after the button is pressed in reaction to it the total time elapsed from the last reset to click is in mouseTimes This is the actual RT regardless of when the call to getPressed was made getRel Returns the new position of the mouse relative to the last call to getRel or getPos in the same units as the Window getVisible Gets the visibility of the mouse 1 or 0 getWheelRel Returns the travel of the mouse scroll wheel since last call Returns a numpy array x y but for most wheels y is the only value that will change except mac mighty mice isPressedln shape buttons 0 1 2 Returns True if the mouse is currently inside the shape and one of the mouse buttons is pressed The default is that any of the 3 buttons can indicate a click for only a left click specifiy buttons 0 if mouse isPressedIn shape if mouse isPressedIn shape buttons 0 left clicks only Ideall
44. could stop here and just use the Builder for creating your experiments It provides a lot of the key features that people need to run a wide variety of studies But it does have its limitations When you want to have more complex designs or features you ll want to investigate the Coder As a segue to the Coder lets start from the Builder and see how Builder programs work 5 2 Builder to coder Whenever you run a Builder experiment PsychoPy will first translate it into python code and then execute that code To get a better feel for what was happening behind the scenes in the Builder program above 36 Chapter 5 Getting Started PsychoPy Psychology software for Python Release 1 81 03 In the Builder load or recreate your hello world program Instead of running the program explicitly convert it into python Type F5 or click the Compile icon The view will automatically switch to the Coder and display the python code If you then save and run this code it would look the same as running it directly from the Builder It is always possible to go from the Builder to python code in this way You can then edit that code and run it as a python program However you cannot go from code back to a Builder representation To switch quickly between Builder and Coder views you can type Crrl L Cmd L 5 3 Coder Being able to inspect Builder generated code is nice but it s possible to write code yourself directly Wi
45. deg Convert from cartesian to polar coordinates 8 18 psychopy tools miscellaneous tools 147 PsychoPy Psychology software for Python Release 1 81 03 Usage theta radius pol2cart x y units deg units refers to the units rad or deg for theta that should be returned psychopy tools coordinatetools cart2sph z y x Convert from cartesian coordinates x y z to spherical elevation azimuth radius Output is in degrees usage array3xN el az rad cart2sph array3xN x y z OR elevation azimuth radius cart2sph x y z If working in DKL space z Luminance y S and x LM psychopy tools coordinatetools pol2cart theta radius units deg Convert from polar to cartesian coordinates usage x y pol2cart theta radius units deg psychopy tools coordinatetools sph2cart args Convert from spherical coordinates elevation azimuth radius to cartesian x y z usage array3xN x y z sph2cart array3xN el az rad OR x y z sph2cart elev azim radius 8 18 3 psychopy tools filetools Functions and classes related to file and directory handling psychopy tools filetools toFile filename data save data of any sort as a pickle file simple wrapper of the cPickle module in core python psychopy tools filetools fromFile filename load data of any sort from a pickle file simple wrapper of the cPickle module in core python psychopy tools filetools mergeFolder src dst pattern None
46. eg 57600 clearBuffer Empty the input buffer of all characters clearStatus Resets the pressed statuses so getEvents will return pressed buttons even if they were already pressed in the last call getEvents returnRaw False asKeys False allowRepeats False Returns a list of unique events one event per button pressed and also stores a copy of the full list of events since last getEvents stored as ForpBox rawEvts returnRaw return not just store the full event list asKeys If True will also emulate pyglet keyboard events so that button 1 will register as a keyboard event with value 1 and as such will be detectable using event getKeys allowRepeats If True this will return pressed buttons even if they were held down between calls to getEvents If the fORP is on the Eprime setting you will get a stream of button presses while a button is held down On the Bitwise setting you will get a set of all currently pressed buttons every time a button is pressed or released This option might be useful if you think your participant may be holding the button down before you start checking for presses getUnigueEvents fullEvis False Returns a Python set of the unigue unordered events of either a list given or the current rawEvts buffer 8 8 6 iolab This provides a basic ButtonBox class and imports the ioLab python library class psychopy hardware iolab ButtonBox PsychoPy s interface to ioLabs US
47. else for example when a movie has finished Duration can also be varied using a code component In cases where PsychoPy cannot determine the start endpoint of your Component e g because it is a variable you can enter an Expected start duration This simply allows components with variable durations to be drawn in the Routine window If you do not enter the approximate duration it will not be drawn but this will not affect experimental performance For more details of how to achieve good temporal precision see Timing Issues and synchronisation 6 6 Defining the onset duration of components 59 PsychoPy Psychology software for Python Release 1 81 03 6 6 1 Examples e Use time s or frameN and simply enter numeric values into the start and duration boxes Use time s or frameN and enter a numeric value into the start time and set the duration to a variable name by preceeding it with a as described here Then set expected time to see an approximation in your routine Use condition to cause the stimulus to start immediately after a movie component called myMovie by entering myMovie status FINISHED into the start time 6 7 Generating outputs datafiles There are 4 main forms of output file from PsychoPy e Excel 2007 files xlsx see Excel Data Files for more details e text data files csv or dlm see Delimited Text Files for more details binary data files psydat see PsychoPy Data Files for more details e
48. every frame is likely to be very hard to interpret so you may then need to analyse your data using the psydat file with python code instead Hopefully in future releases the output of the text file will be improved 6 4 Components 51 PsychoPy Psychology software for Python Release 1 81 03 Time Relative To Whenever the mouse state is saved e g on button press or at end of trial a time is saved too Do you want this time to be relative to start of the Routine or the start of the whole experiment See also API reference for mouse 6 4 8 Movie Component The Movie component allows movie files to be played from a variety of formats e g mpeg avi mov The movie can be positioned rotated flipped and stretched to any size on the screen using the Units for the window and stimuli given Parameters name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the stimulus should first appear See Defining the onset duration of components for details stop Governs the duration for which the stimulus is presented if you want to cut a movie short Usually you can leave this blank and insert the Expected duration just for visualisation purposes See Defining the onset duration of components for details movie string The filename of the movie including the path The path can be absolute or r
49. feature Where might there be room for improvement You can either leave notes in the code in a comment or include them in a commit message e Standardize the top stuff to have 1 a shbang with python2 not just python 2 utf 8 encoding and 3 a comment usr bin env python2 coding utf 8 Demo name purpose description 1 2 sentences although some demos need more explanation mr For the comment description it s a good idea to read and be informed by the relevant parts of the API see http psychopy org api api html but there s no need to duplicate that text in your comment If you are unsure please post to the dev list psychopy dev googlegroups com Follow PEP 8 mostly some exceptions current PsychoPy convention is to use camelCase for variable names so don t convert those to underscores 80 char columns can spill over a little Try to keep things within 80 chars most of the time do allow multiple imports on one line if they are thematically related e g import os sys glob inline comments are ok because the code demos are intended to illustrate and explain usage in some detail more so than typical code Check all imports remove any unnecessary ones replace import time with from psychopy import core Use core getTime ms since the script started or core getAbsTime seconds unix style instead of time time for all time related functions or methods n
50. file stream write txt Write directy to the log file without using logging functions Useful to send messages that only this file receives psychopy logging addLevel level levelName Associate levelName with level This is used when converting levels to text during message formatting psychopy logging critical message Send the message to any receiver of logging info e g a LogFile of level Jog CRITICAL or higher psychopy logging data msg t None obj None Log a message about data collection e g a key press usage log data message Sends the message to any receiver of logging info e g a LogFile of level log DATA or higher psychopy logging debug msg t None obj None Log a debugging message not likely to be wanted once experiment is finalised usage log debug message Sends the message to any receiver of logging info e g a LogFile of level log DEBUG or higher psychopy logging error message Send the message to any receiver of logging info e g a LogFile of level log ERROR or higher psychopy logging exp msg t None obj None Log a message about the experiment e g a new trial or end of a stimulus usage log exp message Sends the message to any receiver of logging info e g a LogFile of level log EXP or higher 8 11 psychopy logging control what gets logged 129 PsychoPy Psychology software for Python Release 1 81 03 psychopy logging fatal msg t None o
51. formatting placeholders e g d s 4f require a little more thought Single place o holders are easy enough _translate hello s name Strings with multiple formatting placeholders reguire named arguments because positional arguments are not always sufficient to disambiguate things depending on the phrase and the language to be translated into _translate hello first s last s first firstname last lastname Localizing drop down menus is a little more involved Such menus should display localized strings but return selected values as integers GetSelection returns the position within the list Do not use Get StringSelection because this will return the localized string breaking the rule about a strict sep aration of display and logic See Builder ParamDialogs for examples 13 5 3 Other notes When there are more translations and if they make the app download large we might want to manage things differ ently e g have translations as a separate download from the app 13 5 Localization 118N translation 185 PsychoPy Psychology software for Python Release 1 81 03 13 6 Adding a new Menu Item Adding a new menu item to the Builder or Coder is relatively straightforward but there are several files that need to be changed in specific ways 13 6 1 1 makeMenus The code that constructs the menus for the Builder is within a method named makeMenus within class builder Build
52. get to use units like degrees of visual angle that will transfer easily to other computers Stimulus objects Python is an object oriented programming language meaning that most stimuli in PsychoPy are represented by python objects with various associated methods and information Typically you should create your stimulus once at the beginning of the script and then change it as you need to later using set commands For instance create your text and then change its color any time you like from psychopy import visual core win visual Window 400 400 message visual TextStim win text hello message setAutoDraw True automatically draw every frame win flip core wait 2 0 message setText world change properties of existing stim 63 PsychoPy Psychology software for Python Release 1 81 03 win flip core wait 2 0 Seiting stimulus attributes Stimulus attributes are typically set using either a string which is just some characters as message setText world above a scalar a number see below an x y pair two numbers see below x y pair PsychoPy is very flexible in terms of input You can specify the widely used x y pairs using these types e A Tuple x y with two elements e A List x y with two elements e A numpy array x y with two elements However PsychoPy always converts the x y pairs to numpy arrays internally For example all three assignments of po
53. have as many timers as we like and reset them at any time during the experiment but I generally use one to measure the time since the experiment started and another that I reset at the beginning of each trial create window and stimuli win visual Window 800 600 allowGUI True monitor testMonitor units deg foil visual GratingStim win sf 1 size 4 mask gauss ori expInfo refOrientation target visual GratingStim win sf 1 size 4 mask gauss ori expInfo refOrientation 7 2 PsychoPy Tutorials 71 PsychoPy Psychology software for Python Release 1 81 03 fixation visual GratingStim win color 1 colorSpace rgb tex None mask circle size 0 2 fand some handy clocks to keep track of time globalClock core Clock Once the stimuli are created we should give the subject a message asking if they re ready The next two lines create a pair of messages then draw them into the screen and then update the screen to show what we ve drawn Finally we issue the command event waitKeys which will wait for a keypress before continuing display instructions and wait messagel visual TextStim win pos 0 3 text Hit a key when ready message2 visual TextStim win pos 0 3 text Then press left or right to identify the 1f deg probe texpInfo refOrientation messagel draw message2 draw fixation draw win flip fto show our newly drawn stimuli
54. in DKL color space can be reproduced on a monitor Here is a movie plotting in DKL space showing cartesian coordinates not spherical coordinates the gamut of colors available on an example CRT monitor Examples 90 0 1 is white maximum elevation aligns the color with the luminance axis e 0 0 1 is an isoluminant stimulus with azimuth O S axis e 0 45 1 is an isoluminant stimulus with an oblique azimuth 1 Derrington A M Krauskopf J amp Lennie P 1984 Chromatic Mechanisms in Lateral Geniculate Nucleus of Macague Journal of Physiol ogy 357 241 265 2 MacLeod D I A amp Boynton R M 1979 Chromaticity diagram showing cone excitation by stimuli of egual luminance Journal of the Optical Society of America 69 8 1183 1186 2 3 Color spaces 9 PsychoPy Psychology software for Python Release 1 81 03 2 3 6 LMS color space To use LMS color space the monitor should be calibrated with an appropriate spectrophotometer such as a PR650 In this color space you can specify the relative strength of stimulation desired for each cone independently each with a value from 1 1 This is particularly useful for experiments that need to generate cone isolating stimuli for which modulation is only affecting a single cone type 2 4 Preferences 2 4 1 General settings winType PsychoPy can use one of two backends for creating windows and drawing pygame and pyglet Here you can set the default backe
55. in pixels and screen width in cm deg degrees of visual angle Screen width pixels screen width cm and distance cm 2 1 2 Calibrating your monitor PsychoPy can also store and use information about the gamma correction reguired for your monitor If you have a Spectrascan PR650 other devices will hopefully be added you can perform an automated calibration in which PsychoPy will measure the necessary gamma value to be applied to your monitor Alternatively this can be added manually into the grid to the right of the Monitor Center To run a calibration connect the PR650 via the serial port and immediately after turning it on press the Find PR650 button in the Monitor Center PsychoPy Psychology software for Python Release 1 81 03 Note that if you don t have a photometer to hand then there is a method for determining the necessary gamma value psychophysically included in PsychoPy see gammaMotionNull and gammaMotionAnalysis in the demos menu The two additional tables in the Calibration box of the Monitor Center provide conversion from DKL and LMS colour spaces to RGB 2 2 Units for the window and stimuli One of the key advantages of PsychoPy over many other experiment building software packages is that stimuli can be described in a wide variety of real world device independent units In most other systems you provide the stimuli at a fixed size and location in pixels or percentage of the screen and then have t
56. known getGamma getGammaGrid Gets the min max gamma values for the each gun getLMS_RGB RECOMPUTE False Returns the LMS gt RGB conversion matrix If one has been saved this will be returned Otherwise if power spectra are available for the monitor a matrix will be calculated getLevelsPost Gets the measured luminance values from last calibration TEST getLevelsPre Gets the measured luminance values from last calibration getLinearizeMethod Gets the min max gamma values for the each gun getLumsPost Gets the measured luminance values from last calibration TEST getLumsPre Gets the measured luminance values from last calibration getMeanLum getNotes Notes about the calibration getPsychopyVersion getSizePix Returns the size of the current calibration in pixels or None if not defined getSpectra Gets the wavelength values from the last spectrometer measurement if available usage nm power monitor getSpectra getUseBits Was this calibration carried out witha a bits box getWidth Of the viewable screen in cm or None if not known lineariseLums desiredLums newInterpolators False overrideGamma None lums should be uncalibrated luminance values e g a linear ramp ranging 0 1 newCalib calibName None width None distance None gamma None notes None useBits False verbose True create a new empty calibration for this monitor and makes this the current cal
57. list of all Xid devices connected to your computer Device classes class pyxid ResponseDevice connection name Unknown XID Device keymap None trig ger_prefix Button clear _response_queue Clears the response queue get_next_response Pops the response at the beginning of the response gueue and returns it This function returns a dict object with the following keys pressed A boolean value of whether the event was a keypress or key release key The key on the device that was pressed This is a 0 based index port Device port the response came from Typically this is 0 on RB series devices and 2 on SV 1 voice key devices time For the time being this just returns 0 There is currently an issue with clock drift in the Cedrus XID devices Once we have this issue resolved time will report the value of the RT timer in miliseconds poll_for response Polls the device for user input If there is a keymapping for the device the key map is applied to the key reported from the device If a response is waiting to be processed the response is appended to the internal response_gueue response gueue size Number of responses in the response gueue class pyxid XidDevice xid connection Class for interfacing with a Cedrus XID device At the beginning of an experiment the developer should call XidDevice reset_base_timer Whenever a stimulus is presented the developer should call XidDevice reset_rt_timer Develo
58. name autoLog True A Handler to allow easy interleaved staircase procedures simple or QUEST Parameters for the staircases as used by the relevant St airHandler or OuestHandler e g the startVal minVal maxVal should be specified in the conditions list and may vary between each staircase In particular the conditions must include the a startVal because this is a required argument to the above handlers a label to tag the staircase and a startValSd only for QUEST staircases Any parameters not specified in the conditions file will revert to the default for that individual handler If you need to custom the behaviour further you may want to look at the recipe on interleavedStairs Params stairType simple or quest Use a StairHandler or QuestHandler method random or sequential The stairs are shuffled in each repeat but not randomised more than that so you can t have 3 repeats of the same staircase in a row unless it s the only one still running conditions a list of dictionaries specifying conditions Can be used to control parameters for the different staicases Can be imported from an Excel file using psy chopy data importConditions MUST include keys providing startVal label and start ValSd QUEST only The label will be used in data file saving so should be unique See Example Usage below nTrials 50 Minimum trials to run but may take more if the staircase hasn t al
59. name convert all wav files in the directory keep to retain the original wav file s default True level is compression level 0 is fastest but larger 8 is slightly smaller but much slower psychopy microphone flac2wav path keep True Uncompress convert flac file on disk to wav format new file If path is a directory name convert all flac files in the directory keep to retain the original flac file s default True psychopy microphone getD t data sampleRate None wantPhase False Compute and return magnitudes of numpy fft fft of the data If given a sample rate samples sec will return magn freg If wantPhase is True phase in radians is also returned magn freg phase data should have power of 2 samples or will be truncated psychopy microphone getRMS data Compute and return the audio power loudness Uses numpy std as RMS std is same as RMS if the mean is 0 and wav data should have a mean of 0 Returns an array if given stereo data RMS computed within channel data can be an array 1D 2D or filename wav format only data from wav files will be normalized to 1 1 before RMS is computed 8 13 psychopy misc miscellaneous routines for converting units etc Wrapper for all miscellaneous functions and classes from psychopy tools psychopy misc has gradually grown very large and the underlying code for its functions are distributed in multiple files You can still at least fo
60. name string Everything in a PsychoPy experiment needs a unigue name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the stimulus should f rst appear See Defining the onset duration of components for details stop The duration for which the stimulus is presented See Defining the onset duration of components for details color See Color spaces color space rgb dkl or lms See Color spaces ori degrees The orientation of the stimulus in degrees pos X Y The position of the centre of the stimulus in the units specified by the stimulus or window height integer or float The height of the characters in the given units of the stimulus window Note that nearly all actual letters will occupy a smaller space than this depending on font character presence of accents etc The width of the letters is determined by the aspect ratio of the font units deg cm pix norm or inherit from window See Units for the window and stimuli opacity Vary the transparency from 0 0 invisible to 1 0 opaque flip Whether to mirror reverse the text horiz for left right mirroring vert for up down mirroring The flip can be set dynamically on a per frame basis by using a variable e g mirror as defined in a code component or conditions file and set to either horiz or vert See also API reference for Text Stim 6 4 15 Entering parameters Most
61. or at some other reference orientation The method presents a pair of stimuli at once with the observer having to report with a key press whether the left or the right stimulus was at the reference orientation e g vertical You can download the full code here Note that the entire experiment is constructed of less than 100 lines of code including the initial presentation of a dialogue for parameters generation and presentation of stimuli running the trials saving data and outputting a simple summary analysis for feedback Not bad eh There are a great many modifications that can be made to this code however this example is designed to demonstrate how much can be achieved with very simple code Modifying existing is an excellent way to begin writing your own scripts for example you may want to try changing the appearance of the text or the stimuli Get info from the user The first lines of code import the necessary libraries We need lots of the psychopy components for a full experiment as well as python s time library to get the current date and numpy which handles various numerical mathematical functions from psychopy import core visual gui data event from psychopy tools filetools import fromFile toFile Thetry except lines allow us to try and load a parameter file from a previous run of the experiment If that fails e g because the experiment has never been run then create a default set of parameters These are e
62. org You make a new file under psychopy docs source either as a new file or folder or within an existing one To test that your doc source code rst file does what you expect in terms of formatting for display on the web you can simply do something like this is my actual path unlikely to be yours cd Users jgray code psychopy docs make html Do this within your docs directory reguires sphinx to be installed try easy_install sphinx if it s not working That will add a build html sub directory Then you can view your new doc in a browser e g for me file Users jgray code psychopy docs build html Push your changes to your github repository using a DOC commit message and let Jon know e g with a pull request 13 3 Adding a new Builder Component Builder Components are auto detected and displayed to the experimenter as icons builder right panel This makes it straightforward to add new ones All you need to do is create a list of parameters that the Component needs to know about that will automatically appear in the Component s dialog and a few pieces of code specifying what code should be called at different points in the script e g beginning of the Routine every frame end of the study etc Many of these will come simply from subclassing the _base or _visual Components To get started Add a new feature branch for the development of this component If this doesn t mean anything to you
63. other modes 8 8 10 PhotoResearch Supported devices e PR650 PR655 PR670 112 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 PhotoResearch spectrophotometers See http www photoresearch com class psychopy hardware pr PR650 port verbose None An interface to the PR650 via the serial port Added in version 1 63 02 example usage from psychopy hardware pr import PR650 myPR650 PR650 port myPR650 getLum make a measurement nm power myPR650 getLastSpectrum get a power spectrum for the last measurement NB psychopy hardware findPhotometer will locate and return any supported device for you so you can also do from psychopy import hardware phot hardware findPhotometer print phot getLum Troubleshooting Various messages are printed to the log regarding the function of this device but to see them you need to set the printing of the log to the correct level from psychopy import logging logging console setLevel logging ERROR error messages only logging console setLevel logging INFO will give a little more info DEBUG will export a log of all communications logging console setLevel logging If you re using a keyspan adapter at least on OS X be aware that it needs a driver installed Otherwise no ports wil be found Also note that the attempt to connect to the PR650 must occur within the first few seconds after turning it on
64. over The next step is to close the text data file and also save the staircase as a binary file by pickling the file in Python speak which maintains a lot more info than we were saving in the text file staircase has ended dataFile close While we re here it s guite nice to give some immediate feedback to the user Let s tell them the intensity values at the all the reversals and give them the mean of the last 6 This is an easy way to get an estimate of the threshold but we might be able to do a better job by trying to reconstruct the psychometric function To give that a try see the staircase analysis script of 7utorial 3 Having saved the data you can give your participant some feedback and guit staircase saveAsPickle fileName fspecial python binary file to save all the info fgive some output to user in the command line in the output window print reversals print staircase reversalIntensities print mean of final 6 reversals 2 3f numpy average staircase reversalIntensities 6 fgive some on screen feedback feedback1l visual TextStim win pos 0 3 text mean of final 6 reversals 3f numpy average staircase reversalIntensities 6 feedbackl draw fixation draw win flip event waitKeys wait for participant to respond win close 7 2 PsychoPy Tutorials 73 20 21 22 23 24 25 26 27 28 29 30 31 PsychoPy Psychology software for Python
65. pixel texture and set its color to be red then without shaders PsychoPy needs to create a texture that contains the 3x128x128 values where each of the 3 planes is scaled according to the RGB values you reguire If you change the color of the stimulus a new texture has to be generated with the new weightings for the 3 planes However with a shader program that final step of scaling the texture value according to the appropriate RGB value can be done by the graphics card That means we can upload just the 128x128 texture taking 1 3 as much time to upload to the graphics card and then we each time we change the color of the stimulus we just a new RGB triplet only 3 numbers without having to recalculate the texture As a result on graphics cards that support shaders changing colors contrasts and opacities etc has almost zero overhead 2 7 4 Blend Mode A blend function determines how the values of new pixels being drawn should be combined with existing pixels in the frame buffer 16 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 blendMode avg This mode is exactly akin to the real world scenario of objects with varying degrees of transparency being placed in front of each other increasingly transparent objects allow increasing amounts of the underlying stimuli to show through Opaque stimuli will simply occlude previously drawn objects With each increasing semi transparent obj
66. provide the nearest possible colour or can be artificially colored with noise highlighting the problem if the user would prefer to Know that this has happened 2 7 5 Sync to VBL and wait for VBL PsychoPy will always if the graphics card allows it synchronise the flipping of the window with the vertical blank interval VBL aka VBI of the screen This prevents visual artefacts such as tearing of moving stimuli This does not itself indicate that the script also waits for the physical frame flip to occur before continuing If the waitBlanking window argument is set to False then although the window refreshes themselves will only occur in sync with the screen VBL the win flip call will not actually wait for this to occur such that preparations can continue immediately for the next frame For rendering purposes this is actually optimal and will reduce the likelihood of frames being dropped during rendering By default the PsychoPy Window will also wait for the VBL waitBlanking True Although this is slightly less efficient for rendering purposes it is necessary if we need to know exactly when a frame flip occurred e g to timestamp when the stimulus was physically presented On most systems this will provide a very accurate measure of when the stimulus was presented with a variance typically well below 1ms but this should be tested on your system 2 8 Timing Issues and synchronisation One of the key reguirements of experimental co
67. same we need to get the response from the subject The method works by starting off assuming that there hasn t yet been a response and then waiting for a key press For each key pressed we check if the answer was correct or incorrect and assign the response appropriately which ends the trial We always have to clear the event buffer if we re checking for key presses like this 72 Chapter 7 Coder PsychoPy Psychology software for Python Release 1 81 03 get response thisResp None while thisResp None allKeys event waitKeys for thisKey in allKeys if thiskKey left if targetSide 1 thisResp lfcorrect else thisResp 1 fincorrect elif thisKey right if targetSide 1 thisResp lfcorrect else thisResp 1 incorrect elif thisKey in q escape core guit fabort experiment Now we must tell the staircase the result of this trial with its addData method Then it can work out whether the next trial is an increment or decrement Also on each trial so still within the for loop we may as well save the data as a line of text in that csv file we created earlier fadd the data to the staircase so it can calculate the next level staircase addData thisResp dataFile write 4i 3f i n targetSide thisIncrement thisResp Output your data and clean up OK We re basically done We ve reached the end of the for loop which occurred because the staircase terminated which means the trials are
68. script up php needs to be copied to the server s web space with appropriate permissions and directories including apache basic auth and https if desired The maximum size for an upload can be configured within up php 8 19 psychopy web Web methods 151 PsychoPy Psychology software for Python Release 1 81 03 A configured test server is available see the Coder demo for details upload size is limited to 1500 characters for the demo Parameters selector reguired string a standard URL of the form http host path to up php e g http upload psychopy org test up php Note Limited https support is provided see below filename required string the path to the local file to be transferred The file can be any format text utf 8 binary All files are hex encoded while in transit increasing the effective file size Note Encryption beta is available as a separate step That is first encrypt the file then upload the encrypted file in the same way that you would any other file basicAuth optional apache user password string for basic authentication If a basicAuth value is supplied it will be sent as the auth credentials in cleartext using https will encrypt the credentials host optional The default process is to extract host information from the selector The host option allows you to specify a host explicitly i e if it differs from the selector https op
69. section of a Code Component at the top of your Routine Then set the image as noiseTexture noiseTexture random rand 128 128 2 0 1 3 Send a feedback message at the end of the experiment Create a Code Component with this in the Begin Experiment field expClock core Clock and with this in the End Experiment field print Thanks for participating that took 2f minutes in total expClock getTime 60 0 or you could create a Text Component with that as contents rather than printing it 46 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 4 End a loop early Code components can also be used to control the end of a loop See examples in Recipes builderTerminateLoops What variables are available to use The most complete way to find this out for your particular script is to compile it and take a look at what s in there Below are some options that appear in nearly all scripts Remember that those variables are Python objects and can have attributes of their own You can find out about those attributes using dir myObject Common PsychoPy variables e expInfo This is a Python Dictionary containing the information from the starting dialog box e g That generally includes the participant identifier You can access that in your experiment using exp participant e t the current time in seconds measured from the start of this Routine frameN the number of completed
70. spec meaning Mac OS X I added two lines The first line is not merely a comment it is also automatically used as a tooltip in the preferences dialog under key bindings and the second being the actual short cut key to use f increase display size of Routines largerRoutine string default Ctrl on mac book pro this is good This means that the user has to hold down the Ctrl key and then press the key Note that on macs Ctrl in the spec is automatically converted into Cmd for the actual key to use in the spec you should always specify things in terms of Ctrl and not Cmd The default value is the key binding to use unless the user defines another one in her or his preferences which then overrides the default Try to pick a sensible key for each operating system and update all four spec files 13 6 4 4 Your new method The second line within makeMenus adds the key binding definition into wx s internal space so that when the key is pressed wx knows what to do In the example it will call the method self routinePanel increaseSize which I had to 186 Chapter 13 For Developers s largerRout PsychoPy Psychology software for Python Release 1 81 03 define to do the desired behavior when the method is called in this case increment an internal variable and redraw the routine panel at the new larger size 13 6 5 5 Documentation To let people know that your new feature exists
71. summarised True Write a text file with the data and various chosen stimulus attributes Parameters fileName will have dlm appended so you can double click it to open in excel and can include path info stimOut the stimulus attributes to be output To use this you need to use a list of dictionaries and give here the names of dictionary keys that you want as strings dataOut a list of strings specifying the dataType and the analysis to be performed in the form dataType_analysis The data can be any of the types that you added using trialHandler data add and the analysis can be either raw or most things in the numpy library including mean std median max min The default values will output the raw mean and std of all datatypes found delim allows the user to use a delimiter other than tab is popular with file exten sion csv matrixOnly outputs the data with no header row or extraInfo attached appendFile will add this output to the end of the specified file if it already exists saveAsWideText fileName delim t matrixOnly False appendFile True Write a text file with the session stimulus and data values from each trial in chronological order That is unlike saveAsText and saveAsExcel e each row comprises information from only a single trial no summarising is done such as collapsing to produce mean and standard deviation values across trials This w
72. this will not be an accurate representation of the color space unless you supply a conversion matrix usage rgb Nx3 dk12rgb dk1_Nx3 el az radius conversionMatrix rgb NxNx3 dk12rgb dk1_NxNx3 el az radius conversionMatrix psychopy tools colorspacetools dklCart2rgb LUM LM S conversionMatrix None Like dkl2rgb except that it uses cartesian coords LM S LUM rather than spherical coords for DKL elev azim contr NB this may return rgb values gt 1 or lt 1 146 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 psychopy tools colorspacetools rgb2dklCart picture conversionMatrix None Convert an RGB image into Cartesian DKL space psychopy tools colorspacetools hsv2rgb hsv_Nx3 Convert from HSV color space to RGB gun values usage rgb_Nx3 hsv2rgb hsv_Nx3 Note that in some uses of HSV space the Hue component is given in radians or cycles range 0 1 In this version H is given in degrees 0 360 Also note that the RGB output ranges 1 1 in keeping with other PsychoPy functions psychopy tools colorspacetools lms2rgb lms_Nx3 conversionMatrix None Convert from cone space Long Medium Short to RGB Reguires a conversion matrix which will be generated from generic Sony Trinitron phosphors if not supplied note that you will not get an accurate representation of the color space unless you supply a conversion matrix usage rgb_Nx3 l
73. use the participant name as the file name and then create a sheet in the Excel file for each loop of the experiment e g you could have a set of practice trials in a loop followed by a set of main trials and these would each receive their own sheet in the data file 2 5 5 Delimited text files dlm csv For maximum compatibility especially for legacy analysis software you can choose to output your data as a delimited text file Typically this would be comma separated values csv file or tab delimited dlm file The format of those files is exactly the same as the Excel file but is limited by the file format to a single sheet 2 6 Gamma correcting a monitor Monitors typically don t have linear outputs when you reguest luminance level of 127 it is not exactly half the luminance of value 254 For experiments that reguire the luminance values to be linear a correction needs to be put in place for this nonlinearity which typically involves fitting a power law or gamma y function to the monitor output values This process is often referred to as gamma correction PsychoPy can help you perform gamma correction on your monitor especially if you have one of the supported photometers spectroradiometers There are various different eguations with which to perform gamma correction The simple eguation 2 1 is assumed by most hardware manufacturers and gives a reasonable first approximation to a linear correction The full gamma correction e
74. your screen refresh rate is 60 Hz then entering frameN 120 160 Chapter 10 Recipes How to s PsychoPy Psychology software for Python Release 1 81 03 would cycle the opacity linearly from 0 to 1 0 over 2s it will then continue incrementing but it doesn t seem to matter if the value exceeds 1 0 Using a code component might allow you to do more sophisticated things e g fade in for a while hold it then fade out Or more simply you just create multiple successive Patch stimulus components each with a different equation or value in the opacity field depending on their place in the timeline 10 5 Building an application from your script A lot of people ask how they can build a standalone application from their Python script Usually this is because they have a collaborator and want to just send them the experiment In general this is not advisable the resulting bundle of files single file on OS X will be on the order of 100Mb and will not provide the end user with any of the options that they might need to control the task for example Monitor Center won t be provided so they can t to calibrate their monitor A better approach in general is to get your collaborator to install the Standalone PsychoPy on their own machine open your script and press run You don t send a copy of Microsoft Word when you send someone a document you expect the reader to install it themself and open the document Nonetheless
75. 0 base 0 0 Return the gaussian distribution for a given set of x vals Parameters mean float the centre of the distribution sd float the width of the distribution gain float the height of the distribution base float an offset added to the result psychopy filters makeGrating res ori 0 0 cycles 1 0 phase 0 0 gratType sin contr 1 0 Make an array containing a luminance grating of the specified params Parameters res integer the size of the resulting matrix on both dimensions e g 256 ori float or int default 0 0 the orientation of the grating in degrees cycles float or int default 1 0 the number of grating cycles within the array phase float or int default 0 0 the phase of the grating in degrees NB this differs to most PsychoPy phase arguments which use units of fraction of a cycle gratType sin sqr ramp or sinXsin default sin the type of grating to be drawn contr float default 1 0 contrast of the grating Returns a square numpy array of size resXres psychopy filters makeMask matrixSize shape circle radius 1 0 center 0 0 0 0 range 1 1 fringeWidth 0 2 Returns a matrix to be used as an alpha mask circle gauss ramp Parameters matrixSize integer the size of the resulting matrix on both dimensions e g 256 shape circle gauss ramp linear gradient from center raisedCosine the edges are blurred by a raised cosine shape of the mask
76. 2 0 clock times are in seconds if 0 5 lt clock getTime lt 1 0 gabor setPhase 0 1 increment by 10th of cycle win flip Clocks are accurate to around 1ms better on some platforms but using them to time stimuli is not very accurate because it fails to account for the fact that one frame on your monitor has a fixed frame rate In the above the stimulus does not actually get drawn for exactly 0 5s 500ms If the screen is refreshing at 60Hz 16 7ms per frame and the getTime call reports that the time has reached 1 999s then the stimulus will draw again for a frame in accordance with the while loop statement and will ultimately be displayed for 2 0167s Alternatively if the time has reached 2 001s there will not be an extra frame drawn So using this method you get timing accurate to the nearest frame period but with little consistent precision An error of 16 7ms might be acceptable to long duration stimuli but not to a brief presentation It also might also give the false impression that a stimulus can be presented for any given period At 60Hz refresh you can not present your stimulus for say 120ms the frame period would limit you to a period of 116 7ms 7 frames or 133 3ms 8 frames As a result the most precise way to control stimulus timing is to present them for a specified number of frames The frame rate is extremely precise much better than ms precision Calls to Window flip will be synchronised to the 7 1
77. 300 log True Accepts up to four fMRI scan parameters TR volumes sync key skip and launches an experiment in one of two modes Scan or Test Usage See Coder Demo gt experiment control gt fMRI_launchScan py In brief 1 from psychopy hardware emulator import launchScan 2 Define your args and 3 add vol launchScan args at the top of your experiment script launchScan waits for the first sync pulse and then returns allowing your experiment script to proceed The key feature is that in test mode it first starts an autonomous thread that emulates sync pulses i e emulated by your CPU rather than generated by an MRI machine The thread places a character in the key buffer exactly like a keyboard event does launchScan will wait for the first such sync pulse i e character in the key buffer launchScan returns the number of sync pulses detected so far i e 1 so that a script can account for them explicitly If a globalClock is given highly recommended it is reset to 0 0 when the first sync pulse is detected If a mode was not specified when calling launchScan the operator is prompted to select Scan or Test If scan mode is selected the script will wait until the first scan pulse is detected Typically this would be coming from the scanner but note that it could also be a person manually pressing that key If test mode is selected launchScan starts a separate thread to emit sync pulses key presses No
78. 4 22 59 56 GCC 4 8 2 on linux2 Type help copyright credits or license for more information gt gt gt import psychopy PsychoPy depends on a lot of other packages and you may get a variety of failures to import them until you have them all installed in your custom environment 176 Chapter 13 For Developers PsychoPy Psychology software for Python Release 1 81 03 13 1 6 Fixing bugs and making minor improvements You can make minor changes directly in the master branch of your fork After making a change you need to commit a set of changes to your files with a message This enables you to group together changes and you will subsequently be able to go back to any previous commit so your changes are reversible I Jon usually do this by opening the graphical user interface that comes with git git gui From the GUI you can select or stage in git terminology the files that you want to include in this particular commit and give it a message Give a clear summary of the changes for the first line You can add more details about the changes on lower lines if needed If you have internet access then you could also push your changes back up to your fork which is called your origin by default either by pressing the push button in the GUI or by closing that and typing git push 13 1 7 Commit messages Informative commit messages are really useful when we have to go back through the repository finding the time t
79. 512 1024 seem to come up when you buy your computer Also several mathematical routines anything involving Fourier maths which is used a lot in graphics processing are faster with power of two seguences For the psychopy visual GratingStim a texture mask of this size is reguired and if you don t provide one then your texture will be upsampled to the next larger sguare power of 2 so you can save this inter polation step by providing it in the right shape initially 3 Get a faster graphics card Upgrading to a more recent card will cost around 30 If you re currently us ing an integrated Intel graphics chip then almost any graphics card will be an advantage Try to get an nVidia or an ATI Radeon card 2 7 3 OpenGL Shaders You may have heard mention of shaders on the users mailing list and wondered what that meant or maybe you didn t wonder at all and just went for a donut OpenGL shader programs allow modern graphics cards to make changes to things during the rendering process i e while the image is being drawn To use this you need a graphics card that supports OpenGL 2 1 and PsychoPy will only make use of shaders if a specific OpenGL extension that allows floating point textures is also supported Nowadays nearly all graphics cards support these features even Intel chips from Intel One example of how such shaders are used is the way that PsychoPy colors greyscale images If you provide a greyscale image as a 128x128
80. 650 in our lab to calibrate each color gun I ve calibrated the gamma of my monitor psychophysically Gamma was set to 1 7 threshold for gamm lum gamma R gamma G gamma B Then I ve measured the luminance of each stimuli with a Brontes colorimeter But there s a difference in luminance between my stimuli How could I correct for that A2 Without a spectroradiometer you won t be able to use the color spaces like DKL which are designed to help this sort of thing If you don t care about using a specific colour space though you should be able to deduce a series of isoluminant colors manually because the luminance outputs from each gun should sum linearly e g on my monitor maxR 46cd m2 maxG 114 maxB 15 note that green is nearly always brightest So I could make a 15cd m2 stimulus using various appropriate fractions of those max values requires that the screen is genuinely gamma corrected R 0 G 0 B 255 R 255 15 46 G 0 B 0 R 255 7 5 46 G 255 15 114 B 0 Note that if you want a pure fully saturated blue then you re limited by the monitor to how bright you can make your stimulus If you want brighter colours your blue will need to include some of the other guns similarly for green if you want to go above the max luminance for that gun A2 1 You should also consider that even if you set appropriate RGB values to display your pairs of chromatic stimuli at the same luminance that they might still appear different particu
81. BBox Voice key completely untested Original author Jonathan Roberts PsychoPy rewrite Jeremy Gray 2013 Class to detect and report ioLab button box The ioLabs library needs to be installed It is included in the Standalone distributions of PsychoPy as of version 1 62 01 Otherwise try pip install ioLabs Usage from psychopy hardware import iolab bbox iolab ButtonBox For examples see the demos menu of the PsychoPy Coder or go to the URL above All times are reported in units of seconds 108 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 clearEvents Discard all button voice key events getBaseTime Return the time since init using the CPU clock not ioLab bbox Aim is to provide a similar API as for a Cedrus box Could let both clocks run for a long time to assess relative drift getEnabled Return a list of the buttons that are currently enabled getEvents downOnly True Detect and return a list of all events likely just one no block Use downOnly False to include button release events resetClock log True Reset the clock on the bbox internal clock e g at the start of a trial 1ms for me logging is much faster than the reset setEnabled buttonList 0 1 2 3 4 5 6 7 voice False Set a filter to suppress events from non enabled buttons The ioLabs bbox filters buttons in hardware here we just tell it what we want None
82. File Manually tell the ioDataStore to flush any events it has buffered in memory to disk Args None 8 10 psychopy iohub ioHub event monitoring framework 123 PsychoPy Psychology software for Python Release 1 81 03 Returns None shutdown Tells the ioHub Process to close all ioHub Devices the ioDataStore and the connection monitor between the PsychoPy and ioHub Processes Then exit the Server Process itself Args None Returns None quit Same as the shutdown method but has same name as PsychoPy core quit so maybe easier to remember ioHub Devices and Device Events psychopy iohub supports a large and growing set of supported devices Details for each device can be found in the following sections Keyboard Device The iohub Keyboard device provides methods to Check for any new keyboard events that have occurred since the last time keyboard events were checked or cleared Wait until a keyboard event occurs e Clear the device of any unread events Get a list of all currently pressed keys class psychopy iohub client keyboard Keyboard ioclient device_class_name device_config The Keyboard device provides access to KeyboardPress and KeyboardRelease events as well as the current keyboard state state None Returns all currently pressed keys as a dictionary of key time values The key is taken from the originating press event key field The time value is time of the key press event
83. File thisFileName allIntensities append thisDat intensities allResponses append thisDat data plot each staircase pylab subplot 121 colors brgkcmbrgkcm lines names for fileN thisStair in enumerate allIntensities lines extend pylab plot thisStair names files fileN pylab plot thisStair label files fileN pylab legend get combined data combinedInten combinedResp combinedN data functionFromStaircase allIntensities allResponses 5 ffit curve in this case using a Weibull function fit data FitFunction weibullTAFC combinedInten combinedResp guess 0 2 0 5 smoothInt pylab arange min combinedInten max combinedInten 0 001 smoothResp fit eval smoothInt thresh fit inverse 0 8 print thresh 74 Chapter 7 Coder 43 44 45 46 47 48 49 PsychoPy Psychology software for Python Release 1 81 03 plot curve pylab subplot 122 pylab plot smoothInt smoothResp pylab plot thresh thresh 0 0 8 pylab plot 0 028 0581 gt pylab title threshold plot points pylab plot combinedInten pylab ylim 0 1 pylab show combinedResp 20 3f thresh ro thresh 7 2 PsychoPy Tutorials 75 PsychoPy Psychology software for Python Release 1 81 03 76 Chapter 7 Coder CHAPTER EIGHT REFERENCE MANUAL API Contents 8 1 psychopy core basic functions clocks
84. Manually turn off the viewing of output 3 6 oe Geb 2 Phe RE DW bk eee eS a 94 Wse the source Luke ae o see a a Ye kee See ee MW ee Ee ee Ae Y 9 3 Cleaning preterences and app data o crecio GG veh deen E pee a seed Recipes How to s 10 1 Adding external modules to Standalone PsychoPy 2 0000000004 10 2 Animation sak Reka A a a OM R8 IR ee o A Ea Se 10 3 Serollimetext lt 224 oe Aedes Se bow ALS By 6 Aw ae Rowe eS eae Be bb Er aie SS 104 Fadeuin fade outeMf amp ci8 o eos Gk Sone ES oe Ba a ee ee e 10 5 Building an application from your script RE Y UR RR REAL hes 10 6 Builder providing feedback se au e ta FR EA ee eR RR a IB 10 7 Builder termmatnp a loop oir ee RO esi BG BR a A R OO A DP DS 10 8 Installing PsychoPy in a classroom administrators ee 10 9 Generating formatted strings o c esi feed Be eae tae wee ea a A 10 10 Coder interleave staircases ct go eee rr A HO SR Gee SO OS del Bow E 10 11 Making isoluminantstimull ue oe ee a A A A be ee aS 10 12 Adding a web Cais cig ac eee AG RS ae a a MU RO poo Bod AA I LG DG Frequently Asked Questions FAQs 11 2 Can PsychoPy run my experiment with sub millisecond timing I 63 63 68 77 77 79 80 97 97 100 102 104 116 117 128 131 135 137 142 143 144 146 151 155 155 156 156 156 156 159 159 160 160 160 161 162 163 164 166 166 167 168 12 Resources e g fo
85. PsychoPy Psychology software for Python Release 1 81 03 Jonathan Peirce December 08 2014 CONTENTS 1 About PsychoPy 1 TA JONCIMIOW a oP ook Se oes E o Bea He ge I GON eee FEN LO GN 1 1 2 Credits o sn eng d e Le i ep AAN 2 1 3 Contributing to the project a Ge wn bee a Re E do ydw RL dden ae A Ew Y 3 LA Cte PsychoP ye se a oe aha bok he a a So ae hk Ee Bee a 4 General issues 5 21 Monitor Center se su Ske cee es HS AE RE OE Ae Soke E eee ee A O 5 22 Units forthewindowand stimuli a ess oo Ob a YG Ae SE ghee Ok w Bence a 6 23 MCOESPACES 4 204 4 Slee Re oe ek bw we Re OR PR ROR eR a DUB ee E ee Y 8 7 AA Preferences o See a a DAER ee e A ee Bae Ge o es 10 23 Dataoutputs o sessi edie ee bt ee Bae SOAS Rae Bae Gh So See a B 11 26 Gammacofrecting a Monit r o ae a be RARER ewe e ee DE ee ee OU 13 2 4 IOpenGlandRendenne sorn lee iie ee eG a RS oe RS BEES he eS A 15 2 8 TimingIssuesandsynchronisation FFF ee 17 29 GlOSSATY week eo a Se A d amp n e eA Ae da do ERASE a MS ae BB 25 Installation 27 Sil OVERVIEW s e o ee es Ge ee DREAM bY SS Cc ee a E8 27 32 Recommended hardware s sos 240 2 eet es SAGE BAe EE OEE PRESSES e R 27 3 3 WINKOWS og ecw fod eck eed ed we eee a do Be edhe Be Be oh ww ee el eS Uy Set 27 34 MacOSX ace es eee ae bean Me ke ewe A eee RE OAD aS Oe eal ee ee Y 28 3 5 0 eL ag e ate Rs A RD he Be ee a Soe amp ah SO Be ee a a By Ee 28 Dependencies 31 4 1 Essential pack
86. R rawG rawB sendMessage message timeout 0 5 DEBUG False Send a command to the photometer and wait an alloted timeout for a response Timeout should be long for low light measurements class psychopy hardware pr PR655 port An interface to the PR655 PR670 via the serial port example usage from psychopy hardware pr import PR655 myPR655 PR655 port myPR655 getLum make a measurement nm power myPR655 getLastSpectrum get a power spectrum for the last measurement NB psychopy hardware findPhotometer will locate and return any supported device for you so you can also do from psychopy import hardware phot hardware findPhotometer print phot getLum Troubleshooting If the device isn t responding try turning it off and turning it on again and or disconnecting reconnecting the USB cable It may be that the port has become controlled by some other program endRemoteMode Puts the colorimeter back into normal mode getDeviceSN Return the device serial number getDeviceType Return the device type e g PR 655 or PR 670 getLastColorTemp Fetches from the device the color temperature K of the last measurement Returns list status units exponent correlated color temp Kelvins CIE 1960 deviation See also measure automatically populates pr655 lastColorTemp with the color temp in Kelvins getLastSpectrum parse True This retrieves the spectrum from the last call to mea
87. Release 1 81 03 14 3 Routines This node provides a sequence of xml child nodes each of which describes a Routine Each Routine contains a number of children each specifying a Component such as a stimulus or response collecting device In the Builder view the Routines obviously show up as different tabs in the main window and the Components show up as tracks within that tab 14 4 Components Each Component is represented in the psyexp file as a set of parameters corresponding to the entries in the appropriate component dialog box that completely describe how and when the stimulus should be presented or how and when the input device should be read from Different Components have slightly different nodes in the xml representation which give rise to different sets of parameters For instance the TextComponent nodes has parameters such as colour and font whereas the KeyboardComponent node has parameters such as forceEndTrial and correctlf 14 5 Flow The Flow node is rather more simple Its children simply specify objects that occur in a particular order in time A Routine described in this flow must exist in the list of Routines since this is where it is fully described One Routine can occur once more than once or not at all in the Flow The other children that can occur in a Flow are LoopInitiators and LoopTerminators which specify the start and endpoints of a loop All loops must have exactly one initiator and one terminator 14 6 Nam
88. Returns True success or False failure 152 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Further information 8 19 psychopy web Web methods 153 PsychoPy Psychology software for Python Release 1 81 03 154 Chapter 8 Reference Manual API CHAPTER NINE TROUBLESHOOTING Regrettably PsychoPy is not bug free Running on all possible hardware and all platforms is a big ask That said a huge number of bugs have been resolved by the fact that there are literally 1000s of people using the software that have contributed either bug reports and or fixes Below are some of the more common problems and their workarounds as well as advice on how to get further help 9 1 The application doesn t start You may find that you try to launch the PsychoPy application the splash screen appears and then goes away and nothing more happens What this means is that an error has occurred during startup itself Commonly the problem is that a preferences file is somehow corrupt To fix that see Cleaning preferences and app data below If resetting the preferences files doesn t help then we need to get to an error message in order to work out why the application isn t starting The way to get that message depends on the platform see below Windows users starting from the Command Prompt 1 Did you get an error message that This application failed to start because th
89. S supply and make sure you re in the right mode Try resetting the bits turn it off and on the T lock code is not fully on the screen If you create a window that s too big for the screen or badly positioned then the code will be broken not visible to the device the T lock code is on an odd pixel the graphics card is doing some additional filtering win32 Make sure you turn off any filtering in the advanced display properties for your graphics card the gamma table of the graphics card is not set to be linear but this should normally be handled by PsychoPy so don t worry so much about it you ve got a Mac that s performing temporal dithering new macs around 2009 Apple have come up with a new very annoying idea where they continuously vary the pixel values coming out of the graphics card every frame to create additional intermediate colours This will break the T lock code on 1 2 2 3rds of frames 11 2 Can PsychoPy run my experiment with sub millisecond timing This guestion is common enough and complex enough to have a section of the manual all of its own See 7 ming Issues and synchronisation 171 PsychoPy Psychology software for Python Release 1 81 03 172 Chapter 11 Frequently Asked Questions FAQs CHAPTER TWELVE RESOURCES E G FOR TEACHING There are a number of further resources to help learn teach about PsychoPy If you also have PsychoPy materials course then please let us know so th
90. Trials mean mean of Quest posterior pdf mode mode of Quest posterior pdf next Advances to next trial and returns it Updates attributes thisTrial thisTrialN thisIndex finished intensities If the trials have ended calling this method will raise a StopIteration error This can be handled with code such as staircase data QuestHandler for eachTrial in staircase automatically stops when done do stuff or staircase data QuestHandler while True ie forever try thisTrial staircase next except StopIteration we got a StopIteration error break break out of the forever loop do stuff here for the trial nextTrial DEPRECATION WARNING nextTrial will be deprecated please use next instead jwp 19 6 06 printAsText stimOut dataOut all_mean all_std all raw delim t ma trixOnly False Exactly like saveAsText except that the output goes to the screen instead of a file quantile p None quantile of Quest posterior pdf saveAsExcel fileName sheetName data matrixOnly False appendFile True Save a summary data file in Excel OpenXML format workbook x sx for processing in most spreadsheet packages This format is compatible with versions of Excel 2007 or greater and and with OpenOffice gt 3 0 It has the advantage over the simpler text files see TrialHandler saveAsText that data can be stored in multiple named sheets within
91. Types optional list of names for data storage e g corr rt resp If not provided then these will be created as needed during calls to addData extraInfo A dictionary This will be stored alongside the data and usually describes the exper iment and subject ID date etc seed an integer If provided then this fixes the random number generator to use the same pat tern of trials by seeding its startpoint originPath a string describing the location of the script experiment file path The psydat file format will store a copy of the experiment if possible If no file path is provided here then the TrialHandler will still store a copy of the script where it was created Attributes after creation data a dictionary of numpy arrays one for each data type stored trialList the original list of dicts specifying the conditions thisIndex the index of the current trial in the original conditions list nTotal the total number of trials that will be run nRemaining the total number of trials remaining thisN total trials completed so far thisRepN which repeat you are currently on thisTrialN which trial number within that repeat thisTrial a dictionary giving the parameters of the current trial finished True False for have we finished yet extralnfo the dictionary of extra info as given at beginning origin the contents of the script or builder experiment that created the handler addData thisType value pos
92. UG False Send a command to the photometer and wait an alloted timeout for a response Timeout should be long for low light measurements startRemoteMode Sets the Colorimeter into remote mode 8 8 11 pylink SR research For now the SR Research pylink module is packaged with the Standalone flavours of PsychoPy and can be imported import pylink You do need to install the Display Software which they also call Eyelink Developers Kit for your particular platform This can be found by following the threads from https www sr support com forums forumdisplay php f 17 for pylink documentation see 8 8 psychopy hardware hardware interfaces 115 PsychoPy Psychology software for Python Release 1 81 03 https www sr support com forums showthread php t 14 Performing research with eye tracking equipment typically requires a long term investment in software tools to collect process and analyze data Much of this involves real time data collection saccadic analysis calibration routines and so on The EyeLink eye tracking system is designed to implement most of the required software base for data collection and conversion It is most powerful when used with the Ethernet link interface which allows remote control of data collection and real time data transfer The PyLink toolkit includes Pylink module which implements all core EyeLink functions and classes for EyeLink connection and the eyelink graphics such as the display of
93. a data Set the data to be presented on the parallel port one ubyte Alternatively you can set the value of each pin data pins are pins 2 9 inclusive using set Pin examples parallel setData 0 sets all pins low parallel setData 255 sets all pins high parallel setData 2 sets just pin 3 high remember that pin2 bit0 parallel setData 3 sets just pins 2 and 3 high you can also convert base 2 to int v easily in python parall parall oO l setData int 00000011 2 pins 2 and 3 high l setData int 00000101 2 pins 2 and 4 high oO 8 15 1 Legacy functions We would strongly recommend you use the class above instead these are provided for backwards compatibility only 142 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 static parallel setPortAddress address 888 Set the memory address or device node for your parallel port of your parallel port to be used in subsequent commands common port addresses LPT1 0x0378 or 0x03BC LPT2 0x0278 or 0x0378 LPT3 0x0278 or for Linux dev parport0 This routine will attempt to find a usable driver depending on your platform static parallel setData data Set the data to be presented on the parallel port one ubyte Alternatively you can set the value of each pin data pins are pins 2 9 inclusive using setPin examples parallel setData 0 parallel setData 2 parallel setData 2
94. a Window instance you have already created author None string None try to autodetect first __author__ in sys argv 0 string user supplied author info of an experiment version None string None try to autodetect first __version__ in sys argv 0 string user supplied version info of an experiment verbose False True how much detail to assess refreshTest None False True grating True or grating assess refresh average median and SD of 60 win flip s using visual getMsPerFrame grating show a visual during the assessment True assess without a visual userProcsDetailed False True get details about concurrent user s processses command process ID Returns a flat dict but with several groups based on key names psychopy version rush availability psychopy Version psychopyHaveExtRush git branch and current commit hash if available experiment author version directory name current time stamp SHA1 digest VCS info if any svn or hg only experimentAuthor experimentVersion system hostname platform user login count of users user process info count cmd pid flagged processes systemHostname systemPlatform window see output many details about the refresh rate window and monitor units are noted windowWinType windowWaitBlanking windowRefreshTimeSD_ms win dowMonitor lt details gt python version of python versions of key packa
95. a given Monitor object deg2pix degrees monitor correctFlat Convert size in degrees to size in pixels for a given Monitor object pix2cm pixels monitor Convert size in pixels to size in cm for a given Monitor object pix2deg pixels monitor correctFlat Convert size in pixels to size in degrees for a given Monitor object Function details psychopy tools monitorunittools convertToPix vertices pos units win Takes vertices and position combines and converts to pixels from any unit The reason that pos and vertices are provided separately is that it allows the conversion from deg to apply flat screen correction to each separately The reason that these use function args rather than relying on self pos is that some stimuli use other terms e g ElementArrayStim uses fieldPos psychopy tools monitorunittools cm2deg cm monitor correctFlat False Convert size in cm to size in degrees for a given Monitor object psychopy tools monitorunittools cm2pix cm monitor Convert size in degrees to size in pixels for a given Monitor object psychopy tools monitorunittools deg2cm degrees monitor correctFlat False Convert size in degrees to size in pixels for a given Monitor object If correctFlat False then the screen will be treated as if all points are equal distance from the eye This means that each degree will be the same size irrespective of its position If correctFlat True then the degrees argument mu
96. a list of dictionaries specifying to trialList parameter of the TrialHandler and give here the names of strings specifying entries in that dictionary 8 3 psychopy data functions for storing saving analysing data 83 PsychoPy Psychology software for Python Release 1 81 03 dataOut list of strings specifying the dataType and the analysis to be performed in the form dataType_analysis The data can be any of the types that you added using trialHan dler data add and the analysis can be either raw or most things in the numpy library including mean std median max min e g rt_max will give a column of max reac tion times across the trials assuming that rf values have been stored The default values will output the raw mean and std of all datatypes found appendFile True or False If False any existing file with this name will be overwritten If True then a new worksheet will be appended If a worksheet already exists with that name a number will be added to make it unique saveAsPickle fileName fileCollisionMethod rename Basically just saves a copy of the handler with data to a pickle file This can be reloaded if necessary and further analyses carried out Parameters fileCollisionMethod Collision method passed to handleFileCollision saveAsText fileName stimOut dataOut n all_mean all_std all_raw delim None ma trixOnly False appendFile True
97. a numpy array trials data key_resp keys numpy array with size ntrials ntypes If you used the Store Correct feature of the Keyboard Component and told psychopy what the correct answer was you will also have a variable fnumpy array storing whether each response was correct 1 or not 0 trials data resp corr So to create your msg insert the following into the start experiment section of the Code Component msg doh fif this comes up we forgot to update the msg and then insert the following into the Begin Routine section this will get run every repeat of the routine nCorr trials data key_resp corr sum std mean also available meanRt trials data key_resp rt mean msg You got i trials correct rt 2f nCorr meanRt 10 6 3 Draw your message to the screen Using one of the above methods to generate your msg in a Code Component you then need to present it to the participant by adding a Text Component to your feedback Routine and setting its text to msg Warning The Text Component needs to be below the Code Component in the Routine because it needs to be updated after the code has been run and it needs to set every repeat 10 7 Builder terminating a loop People often want to terminate their Loops before they reach the designated number of trials based on subjects responses For example you might want to use a Loop to repeat a seguence of images that you want to cont
98. a simple and intuitive way for you to calibrate your monitor and provide other information about it and then import that information into your experiment Information is inserted in the Monitor Center Tools menu which allows you to store information about multiple monitors and keep track of multiple calibrations for the same monitor For experiments written in the Builder view you can then import this information by simply specifying the name of the monitor that you wish to use in the Experiment settings dialog For experiments created as scripts you can retrieve the information when creating the Window by simply naming the monitor that you created in Monitor Center e g from psychopy import visual win visual Window 1024 768 mon SonyG500 Of course the name of the monitor in the script needs to match perfectly the name given in the Monitor Center 2 1 1 Real world units One of the particular features of PsychoPy is that you can specify the size and location of stimuli in units that are independent of your particular setup such as degrees of visual angle see Units for the window and stimuli In order for this to be possible you need to inform PsychoPy of some characteristics of your monitor Your choice of units determines the information you need to provide Units Requires norm normalised to width height n a pix pixels Screen width in pixels cm centimeters on the screen Screen width
99. ad the latest drivers from the vendor rather than using the pre installed Windows drivers If necessary get new drivers directly from the graphics card vendor don t rely on Windows updates The Windows supplied drivers are buggy and sometimes don t support OpenGL at all The StandAlone installer adds the PsychoPy folder to your path so you can run the included version of python from the command line If you have your own version of python installed as well then you need to check which one is run by default and change your path according to your personal preferences 3 4 Mac OS X There are different ways to install PsychoPy on a Mac that will suit different users Almost all Mac s come with a suitable video card by default e Intel Mac users with OS X v10 7 or higher 10 5 and 10 6 might still work can simply download the standalone application bundle the dmg file and drag it to their Applications folder Installing it elsewhere should work fine too Users of macports can install PsychoPy and all its dependencies simply with sudo port install py25 psychopy Thanks to James Kyles For PPC Macs or for Intel Mac users that want their own custom python for running PsychoPy you need to install the dependencies and PsychoPy manually The easiest way is to use the Enthought Python Distribution see Dependencies below You could alternatively manually install the framework build of python and the dependencies see below O
100. add a note about your new feature in the CHANGELOG txt and appropriate documentation in rst files Happy Coding Folks 13 6 Adding a new Menu Item 187 PsychoPy Psychology software for Python Release 1 81 03 188 Chapter 13 For Developers CHAPTER FOURTEEN PSYCHOPY EXPERIMENT FILE FORMAT PSYEXP The file format used to save experiments constructed in PsychoPy builder was created especially for the purpose but is an open format using a basic xml form that may be of use to other similar software Indeed the builder itself could be used to generate experiments on different backends such as Vision Egg PsychToolbox or PyEPL The xml format of the file makes it extremely platform independent as well as moderately easy to read by humans There was a further suggestion to generate an XSD or similar schema against which psyexp files could be validated That is a low priority but welcome addition if you wanted to work on it There is a basic XSD XML Schema Definition available in psychopy app builder experiment xsd The simplest way to understand the file format is probably simply to create an experiment save it and open the file in an xml aware editor viewer e g change the file extension from psyexp to xml and then open it in Firefox An example from the stroop demo is shown below The file format maps fairly obviously onto the structure of experiments constructed with the Builder interface as described he
101. ages sanear SOS ee Se Be Soe se wee eee Se 31 4 2 Suepested packages s exis ed bee eee cet oe BR Bad GYR whee DN dite Bee ed 32 Getting Started 33 Sel Builder psit we eee eh yo EDS ee ee ee Be BS Shoe De bee Se GS Se 34 2 2 Builderto eoden oe ee a ee A AL ae eS aa dn 4 ee al a nu E 36 5 3 COUET uu du ca hes Beka ee He Bh be Book Be ch AOR mop 1 he Td Se gh ae a Boa AS BSA hs Beds Bowe 37 Builder 39 6 1 BuildernconceptS ss 6 os eee ke EA Oe a ee ee OD 40 O 2 RQU MES 60 faites eM he BOO ds ele ate ct Odie BX a Baie Steg DAR e hese cad 41 63 FOW Sep ee ER BRE ER a BR Oe ESR Pe ee AS eS Ee DIE FM 42 64 Components ooo or eR eR a eR ee we ee 45 6 5 JEXpermentsetimgs gs oia Ge es Bowe A BS ee amp Gree See Bay Bow 8 58 6 6 Defining the onset duration of components e I ee 59 6 7 Generating outputs dataniles a cess a sek Gog oe OR Ae A ara MR GS Be ee SIS 8 60 10 11 6 8 CommonMistakes akaGotcha s ee 69 Compllide aScnpt a 25 240 84h eA EEE A RA ew ee ee E a A A 6 10 Setup your monitor properly e pesos ee AA Se AR a Sow 6 11 Euture deyelopments arce e E UE A Ae So es TR y oe A es Coder Teal Basic Concepts 64 2429 bath bcd be ee AA be ee ih RR wed 4 2 Psycho y Tutorials i 3 0254 evokes bee ke we Re Be ee eS Gow ee a a a ees B Reference Manual API 8 1 psychopy core basic functions clocks ete xiao egoe k e ee 82 psychopy visual many visual stimuli FF o 8 3 psychopy
102. ait None keys None chars None mods None duration None etype None clear True checkInterval 0 002 Blocks experiment execution until at least one matching KeyboardEvent occurs or until max Wait seconds has passed since the method was called Keyboard events are filtered using any non None kwargs values in the same way as the getKeys method See getKeys for a description of the arguments shared between the two methods As soon as at least one matching KeyboardEvent occur prior to max Wait the matching events are returned as a tuple Parameters maxWait Specifies the maximum time in seconds that the method will block for If 0 waitForKeys is identical to getKeys If None the methods blocks indefinately checkInterval Specifies the number of seconds msecs between geyKeys calls while waiting The method sleeps between geyKeys calls up until checkInterval 2 0 sec prior 8 10 psychopy iohub ioHub event monitoring framework 125 PsychoPy Psychology software for Python Release 1 81 03 to the maxWait After that time keyboard events are constantly checked until the method times out waitForPresses maxWait None keys None chars None mods None duration None clear True checkInterval 0 002 See the waitForKeys method documentation This method is identical but only returns KeyboardPress events getName Gets the name given to the device in the ioHub configuration file the devic
103. ak break out of the forever loop do stuff here for the trial nextTrial DEPRECATION WARNING nextTrial will be deprecated please use next instead jwp 19 6 06 printAsText stimOut dataOut all_mean all_std all_raw _ delim t ma trixOnly False Exactly like saveAsText except that the output goes to the screen instead of a file saveAsExcel fileName sheetName rawData stimOut dataOut n all_mean all_std all_raw matrixOnly False appendFile True Save a summary data file in Excel OpenXML format workbook x sx for processing in most spreadsheet packages This format is compatible with versions of Excel 2007 or greater and and with OpenOffice gt 3 0 It has the advantage over the simpler text files see TrialHandler saveAsText that data can be stored in multiple named sheets within the file So you could have a single file named after your experiment and then have one worksheet for each participant Or you could have one file for each participant and then multiple sheets for repeated sessions etc The file extension x sx will be added if not given already Parameters fileName string the name of the file to create or append Can include relative or absolute path sheetName string the name of the worksheet within the file stimOut list of strings the attributes of the trial characteristics to be output To use this you need to have provided
104. al move to next line in data output exp nextEntry addLoop loopHandler Add a loop such as a TrialHandler or StairHandler Data from this loop will be included in the resulting data files loopEnded loopHandler Informs the experiment handler that the loop is finished and not to include its values in further entries of the experiment This method is called by the loop itself if it ends its iterations so is not typically needed by the user nextEntry Calling nextEntry indicates to the ExperimentHandler that the current trial has ended and so further ad dData calls correspond to the next trial saveAsPickle fileName fileCollisionMethod rename Basically just saves a copy of self with data to a pickle file This can be reloaded if necessary and further analyses carried out Parameters fileCollisionMethod Collision method passed to handleFileCollision saveAsWideText fileName delim None matrixOnly False appendFile False Saves a long wide format text file with one line representing the attributes and data for a single trial Suitable for analysis in R and SPSS If appendFile True then the data will be added to the bottom of an existing file Otherwise if the file exists already it will be overwritten If matrixOnly True then the file will not contain a header row which can be handy if you want to append data to an existing file of the same format 8 3 2 TrialHandler class psychopy data TrialHand
105. al xx params None Evaluate xx for the current parameters of the model or for arbitrary params if these are given inverse yy params None Evaluate yy for the current parameters of the model or for arbitrary params if these are given 8 3 9 FitCumNormal class psychopy data FitCumNormal xx yy sems 1 0 guess None display 1 expectedMin 0 5 Fit a Cumulative Normal function aka error function or erf of the form y chance 1 chance special erf xx xShift sqrt 2 sd 1 0 5 and with inverse x xShiftrsgrt 2 sd erfinv yy chance l chance 5 2 8 3 psychopy data functions for storing saving analysing data 95 PsychoPy Psychology software for Python Release 1 81 03 After fitting the function you can evaluate an array of x values with fit eval x retrieve the inverse of the function with fit inverse y or retrieve the parameters from fit params a list with centre sd for the Gaussian distribution forming the cumulative NB Prior to version 1 74 the parameters had different meaning relating to xShift and slope of the function similar to 1 sd Although that is more in with the parameters for the Weibull fit for instance it is less in keeping with standard expectations of normal Gaussian distributions so in version 1 74 00 the parameters became the centre sd of the normal distribution eval xx params None Evaluate xx for the current parameters of the model or for arbitrary
106. amp of the event in the same time base that is used by psychopy core getTime 126 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Returns float type None The string type constant for the event Returns str KeyboardRelease Event class psychopy iohub client keyboard KeyboardRelease ioe_array An iohub Keyboard device key release event duration None The duration in seconds of the key press This is calculated by subtracting the current event time from the associated keypress time If no matching keypress event was reported prior to this event then 0 0 is returned This can happen for example when the key was pressed prior to psychopy starting to monitor the device This condition can also happen when keyboard reset method is called between the press and release event times Returns float pressEventID None The event id of the associated press event The key press id is 0 if no associated KeyboardPress event was found See the duration property documen tation for details on when this can occur Returns unsigned int char None The unicode value of the keyboard event if available This field is only populated when the keyboard event results in a character that could be printable Returns unicode if no char value is available for the event id None The unigue id for the event sometimes used to track associated events Returns int modifiers None A list o
107. an reduce 48 000 to 16 000 in about 0 02s uses integer steps sizes So recording at 48kHz will generate high quality archival data and permit easy downsampling outputDevice bufferSize set these parameters on the pyoSndServer before booting None means use pyo s default values class psychopy microphone AdvAudioCapture name advMic filename saveDir sample type 0 buffering 16 chnl 0 stereo True au toLog True Class extends AudioCapture plays a marker sound as a start indicator Has method for retrieving the marker onset time from the file to allow calculation of vocal RT or other sound based RT See Coder demo gt input gt latencyFromTone py compress keep False Compress using FLAC lossless compression getLoudness Return the RMS loudness of the saved recording 8 12 psychopy microphone Capture and analyze sound 131 PsychoPy Psychology software for Python Release 1 81 03 getMarkerInfoc Returns hz duration volume of the marker sound Custom markers always return 0 hz regardless of the sound getMarkerOnset chunk 128 secs 0 5 filename Return onset offset time of the first marker within the first secs of the saved recording Has approx 1 33ms resolution at 48000Hz chunk 64 Larger chunks can speed up processing times at a sacrifice of some resolution e g to pre process long recordings with multiple markers If given a filename it will first se
108. any stimulus to start drawing every frame using setAutoDraw True or setAutoDraw False If you use these commands on stimuli that also have autoLog True then these functions will also generate a log message on the frame when the first drawing occurs and on the first frame when it is confirmed to have ended 7 1 2 Logging data TrialHandler and StairHandler can both generate data outputs in which responses are stored in relation to the stimulus conditions In addition to those data outputs PsychoPy can created detailed chronological log files of events during the experiment Log levels and targets Log messages have various levels of severity ERROR WARNING DATA EXP INFO and DEBUG Multiple targets can also be created to receive log messages Each target has a particular critical level and receives all logged messages greater than that For example you could set the console visual output to receive only warnings and errors have a central log file that you use to store warning messages across studies with file mode append and another to create a detailed log of data and events within a single study with level INFO from psychopy import logging logging console setLevel logging WARNING foverwrite mode w a detailed log of the last run in this dir lastLog logging LogFile lastRun log level logging INFO mode w 66 Chapter 7 Coder PsychoPy Psychology software for Python Release 1 81 03 also append wa
109. arams None Evaluate yy for the current parameters of the model or for arbitrary params if these are given 8 3 7 FitLogistic class psychopy data FitLogistic xx yy sems 1 0 guess None display 1 expectedMin 0 5 Fit a Logistic function either 2AFC or YN of the form y chance 1 chance 1 exp PSE Xx JND and with inverse x PSE log l chance yy chance 1 JND After fitting the function you can evaluate an array of x values with fit eval x retrieve the inverse of the function with fit inverse y or retrieve the parameters from fit params alist with PSE JND eval xx params None Evaluate xx for the current parameters of the model or for arbitrary params if these are given inverse yy params None Evaluate yy for the current parameters of the model or for arbitrary params if these are given 8 3 8 FitNakaRushton class psychopy data FitNakaRushton xx yy sems 1 0 guess None display 1 expectedMin 0 5 Fit a Naka Rushton function of the form yy rMin rMax rMin xx n xx nrc50 n After fitting the function you can evaluate an array of x values with fit eval x retrieve the inverse of the function with fit inverse y or retrieve the parameters from fit params alist with rMin rMax c50 n Note that this differs from most of the other functions in not using a value for the expected minimum Rather it fits this as one of the parameters of the model ev
110. are supported Moreover only one aperture is enabled at a time You can t double up a second aperture takes precedence name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces start float or integer The time that the aperture should start having its effect See Defining the onset duration of components for details stop When the aperture stops having its effect See Defining the onset duration of components for details pos X Y The position of the centre of the aperture in the units specified by the stimulus or window size integer The size controls how big the aperture will be in pixels default 120 units pix What units to use currently only pix See also API reference for Aperture 6 4 2 Code Component The Code Component can be used to insert short pieces of python code into your experiments This might be create a variable that you want for another Component to manipulate images before displaying them to interact with hardware for which there isn t yet a pre packaged component in PsychoPy e g writing code to interact with the serial parallel ports See code uses below Be aware that the code for each of the components in your Routine are executed in the order they appear on the Routine display from top to bottom If you want your Code Component to alter a variable to be used by another componen
111. ase 1 81 03 launchHubServer accepts several kwarg inputs which can be used when more complex device types are being used in the experiment Examples are eye tracker and analog input devices Please see the psychopy demos coder iohub launchHub py demo for examples of different ways to use the launchHubServer function ioHubConnection Class The psychopy iohub ioHubConnection object returned from the launchHubServer function provides methods for con trolling the iohub process and accessing iohub devices and events class psychopy iohub client ioHubConnection ioHubConfig None ioHubConfigAb sPath None ioHubConnection is responsible for creating sending requests to and reading replies from the ioHub Process This class can also shut down and disconnect the ioHub Process The ioHubConnection class is also used as the interface to any ioHub Device instances that have been created so that events from the device can be monitored These device objects can be accessed via the ioHubConnection devices attribute providing dot name attribute access or by using the deviceByLabel dictionary attribute which stores the device names as keys Using the devices attribute is handy if you know the name of the device to be accessed and you are sure it is actually enabled on the ioHub Process The following is an example of accessing a device using the devices attribute get the Mouse device named mous mouse hub devices mous cu
112. ase of the stimulus is set to change every frame and its value is determined by the value of tri alClock getTime 2 Every Routine has a clock associated with it that gets reset at the beginning of the iteration through the Routine There is also a globalClock that can be used in the same way The phase of a Patch Component ranges 0 1 and wraps to that range if beyond it The result in this case is that the grating drifts at a rate of 2Hz The contrast of the stimulus is determined using an adaptive staircase The Staircase methods are different to those used for a loop which uses predetermined values An important thing to note is that you must define the correct answer 6 2 Routines An experiment consists of one or more Routines A Routine might specify the timing of events within a trial or the presentation of instructions or feedback Multiple Routines can then be combined in the Flow which controls the order in which these occur and the way in which they repeat To create a new Routine use the Experiment menu The display size of items within a routine can be adjusted see the View menu Within a Routine there are a number of components These components determine the occurrence of a stimulus or the recording of a response Any number of components can be added to a Routine Each has its own line in the Routine view that shows when the component starts and finishes in time and these can overlap For now the time axis of the Routin
113. asy to store in a python dictionary that we ll call expInfo 70 Chapter 7 Coder PsychoPy Psychology software for Python Release 1 81 03 try try to get a previous parameters file expInfo fromFile lastParams pickle except if not there then use a default set expInfo observer jwp refOrientation 0 The last line adds the current date to whichever method was used So having loaded those parameters let s allow the user to change them in a dialogue box which we ll call d1g This is the simplest form of dialogue created directly from the dictionary above the dialogue will be presented immediately to the user and the script will wait until they hit OK or Cancel If they hit OK then dlg OK True in which case we ll use the updated values and save them straight to a parameters file the one we try to load above If they hit Cancel then we ll simply guit the script and not save the values present a dialogue to change params dlg gui DlgFromDict expInfo title simple JND Exp fixed dateStr if dlg OK toFile lastParams pickle expInfo save params to file for next time else Setup the information for trials We ll create a file to which we can output some data as text during each trial as well as outputting a binary file at the end of the experiment We ll create a filename from the subject date csv note how easy it is to concatenate strings in python just by
114. at we can link to them from here too 12 1 P4N There will be a 3 day workshop in April 2014 at Nottingham University It won t be only about PsychoPy but about Python for science more generally and focussing on coding rather than using the Builder interface We hope this year to run intermediate and novice sessions in parallel rather than novice only 12 2 Youtube tutorials Youtube PsychoPy tutorial showing how to build a basic experiment in the Builder interface That s a great way to get started build your own complete experiment in 15 minutes flat There s also a subtitled version of the stroop video tutorial Thanks Kevin Cole for doing that 12 3 Materials for Builder At School of Psychology University of Nottingham PsychoPy is now used for all first year practical class teaching The classes that comprise that first year course are provided below They were created partially with funding from the former Higher Education Academy Psychology Network Note that the materials here will be updated freguently as they are further developed e g to update screenshots etc so make sure you have the latest version of them PsychoPy_pracs_2011v2 zip 21MB last updated 15 Dec 2011 The GestaltReVision group University of Leuven wiki covering PsychoPy some Builder info and great tuto rials for Python PsychoPy coding of experiments 12 4 Materials for Coder e Gary Lupyan runs a class on programming experiments using Py
115. ata file in Excel OpenXML format workbook x sx for processing in most spreadsheet packages This format is compatible with versions of Excel 2007 or greater and and with OpenOffice gt 3 0 It has the advantage over the simpler text files see TrialHandler saveAsText that the data from each staircase will be save in the same file with the sheet name coming from the label given in the dictionary of conditions during initialisation of the Handler The file extension x sx will be added if not given already 8 3 psychopy data functions for storing saving analysing data 89 PsychoPy Psychology software for Python Release 1 81 03 The file will contain a set of values specifying the staircase level intensity at each reversal a list of reversal indices trial numbers the raw staircase intensity level on every trial and the corresponding re sponses of the participant on every trial Parameters fileName string the name of the file to create or append Can include relative or absolute path matrixOnly True or False If set to True then only the data itself will be output no addi tional info appendFile True or False If False any existing file with this name will be overwritten If True then a new worksheet will be appended If a worksheet already exists with that name a number will be added to make it unique saveAsPickle fileName Saves a copy of self with data to a pickle file This can be rel
116. ation is only done within each set ensuring for example that there are at least two a s before the subject sees a 3rd b Finally fullRandom will return one of 362 880 different orders 9 nReps nTrials such as b b c a a c c a b which random never would There are no longer mini blocks or sets of trials within the longer run This means that by chance it would also be possible to get a very un random looking seguencelike aaabbbccc It is possible to achieve any seguence you like subject to any constraints that are logically possible To do so in the file you specify every trial in the desired order and the for the loop select sequential order and nReps 1 Selecting a subset of conditions In the standard Method of Constants you would use all the rows conditions within your conditions file However there are often times when you want to select a subset of your trials before randomising and repeating The parameter Select rows allows this You can specify which rows you want to use by inserting values here 0 2 5 gives the Ist 3rd and 5th entry of a list Python starts with index zero e random 4 10 gives 4 indices from 0 to 10 so selects 4 out of 11 conditions e 5 10 selects the 6th to 9th rows e mylndices uses a variable that you ve already created Note in the last case that 5 8 isn t valid syntax for a variable so you cannot do myIndices 5 8 but you can do myIndices slice 5 8 python object to repr
117. aunchScan will start in that mode instr instructions to be displayed to the scan operator during mode selection wait _msg message to be displayed to the subject while waiting for the scan to start i e after operator indicates start but before the first scan pulse is received wait _timeout time in seconds that launchScan will wait before assuming something went wrong and exiting Defaults to 300sec 5 minutes Raises a TimeoutError if no sync pulse is received in the allowable time class psychopy hardware emulator ResponseEmulator simResponses None Class to allow simulation of a user s keyboard responses during a scan Given a list of response tuples time key the thread will simulate a user pressing a key at a specific time relative to the start of the run Author Jeremy Gray Idea Mike MacAskill class psychopy hardware emulator SyncGenerator TR 1 0 volumes 10 sync 5 skip 0 sound False Class for a character emitting metronome thread emulate MR sync pulse Aim Allow testing of temporal robustness of fMRI scripts by emulating a hardware sync pulse Adds an arbitrary sync character to the key buffer with sub millisecond precision less precise if CPU is maxed Recommend TR 1 000 or higher and less than 100 CPU Shorter TR higher CPU load Parameters TR seconds per whole brain volume volumes number of 3D volumes to obtain in a given scan ning run sync character used as flag for sync t
118. axVal None originPath None name au toLog True Class to handle smoothly the selection of the next trial and report current values etc Calls to nextTrial will fetch the next object given to this handler according to the method specified See Demos gt gt ExperimentalControl gt gt JND_staircase_exp py The staircase will terminate when n7rials AND nReversals have been exceeded If stepSizes was an array and has been exceeded before nTrials is exceeded then the staircase will continue to reverse nUp and nDown are always considered as 1 until the first reversal is reached The values entered as arguments are then used Parameters startVal The initial value for the staircase nReversals The minimum number of reversals permitted If stepSizes is a list then there must also be enough reversals to satisfy this list stepSizes The size of steps as a single value or a list or array For a single value the step size is fixed For an array or list the step size will progress to the next entry at each reversal nTrials The minimum number of trials to be conducted If the staircase has not reached the reguired number of reversals then it will continue nUp The number of incorrect or 0 responses before the staircase level increases nDown The number of correct or 1 responses before the staircase level decreases extraInfo A dictionary typically that will be stored along with collected data using saveAsPic
119. be controlled by setting the size of the viewable screen settings on the monitor itself 2 2 4 Degrees of visual angle Use degrees of visual angle to set the size and location of the stimulus This is of course dependent on the distance that the participant sits from the screen as well as the screen itself so make sure that this is controlled and remember to change the setting in Monitor Center if the viewing distance changes Spatial frequency cycles per degree Requires information about the screen width in cm and pixels and the viewing distance in cm Assumes that pixels are square see above and that all parts of the screen are a constant distance from the eye i e that the screen is curved This clearly incorrect assumption is common to most studies that report the size of their stimulus in degrees of visual angle The resulting error is small at moderate eccentricities a 0 2 error in size calculation at 3 deg eccentricity but grows as stimuli are placed further from the centre of the screen a 2 error at 10 deg For studies of peripheral vision this should be corrected for PsychoPy also makes no correction for the thickness of the screen glass which refracts the image slightly 2 2 5 Pixels on screen You can also specify the size and location of your stimulus in pixels Obviously this has the disadvantage that sizes are specific to your monitor because all monitors differ in pixel size Spatial frequency cycles pe
120. be reset on each trial but probably not psychopy logging warn msg t None obj None log warning message Sends the message to any receiver of logging info e g a LogFile of level log WARNING or higher psychopy logging warning message Sends the message to any receiver of logging info e g a LogFile of level log WARNING or higher 8 11 1 flush psychopy logging flush logger lt psychopy logging _Logger instance at 0x185f120 gt Send current messages in the log to all targets 8 11 2 setDefaultClock psychopy logging setDefaultClock clock Set the default clock to be used to reference all logging times Must be a psychopy core Clock object Beware that if you reset the clock during the experiment then the resets will be reflected here That might be useful if you want your logs to be reset on each trial but probably not 130 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 8 12 psychopy microphone Capture and analyze sound Available as of version 1 74 00 Advanced features available as of 1 77 00 8 12 1 Overview AudioCapture allows easy audio recording and saving of arbitrary sounds to a file wav format AudioCapture will likely be replaced entirely by AdvAudioCapture in the near future AdvAudioCapture can do everything AudioCapture does and also allows onset marker sound insertion and de tection loudness computation RMS audio power an
121. be set to True or False according to which button they pressed If OK True then dlg data will be populated with a list of values coming from each of the input fields created 8 7 3 fileOpenDlg classpsychopy gui fileOpenDlg A simple dialogue allowing read access to the file system Parameters tryFilePath string default file path on which to open the dialog tryFileName string default file name as suggested file prompt string default Select file to open can be set to custom prompts allowed string available since v1 62 01 a string to specify file filters e g BMP files bmp l bmplGIF files gif l gif See http www wxpython org docs api wx FileDialog class html for further details 8 7 psychopy gui create dialogue boxes 103 PsychoPy Psychology software for Python Release 1 81 03 If tryFilePath or tryFileName are empty or invalid then current path and empty names are used to start search If user cancels then None is returned 8 7 4 fileSaveDlg class psychopy gui fileSaveDlg A simple dialogue allowing write access to the file system Useful in case you collect an hour of data and then try to save to a non existent directory Parameters initFilePath string default file path on which to open the dialog initFileName string default file name as suggested file prompt string default Select file to open can be set to custom prompts allowed string a string to specify file filters e g
122. bj None log critical message Send the message to any receiver of logging info e g a LogFile of level log CRITICAL or higher psychopy logging flush logger lt psychopy logging _Logger instance at 0x185f120 gt Send current messages in the log to all targets psychopy logging getLevel level Return the textual representation of logging level level If the level is one of the predefined levels CRITICAL ERROR WARNING INFO DEBUG then you get the corresponding string If you have associated levels with names using addLevelName then the name you have associated with level is returned If a numeric value corresponding to one of the defined levels is passed in the corresponding string representation is returned Otherwise the string Level s level is returned psychopy logging info msg t None obj None Log some information maybe useful maybe not usage log info message Sends the message to any receiver of logging info e g a LogFile of level Jog INFO or higher psychopy logging log msg level t None obj None Log a message usage log level msg t t obj obj Log the msg at a given level on the root logger psychopy logging setDefaultClock clock Set the default clock to be used to reference all logging times Must be a psychopy core Clock object Beware that if you reset the clock during the experiment then the resets will be reflected here That might be useful if you want your logs to
123. blank and then give the Expected duration below for visualisation purposes See Defining the onset duration of components for details sound This sound can be described in a variety of ways e a number can specify the frequency in Hz e g 440 e a letter gives a note name e g C and sharp or flat can also be added e g Csh Bf e a filename which can be a relative or absolute path mid wav ogg and mp3 are supported See also API reference for Sound 6 4 13 Static Component Added in Version 1 78 00 The Static Component allows you to have a period where you can preload images or perform other time consuming operations that not be possible while the screen is being updated Typically a static period would be something like an inter trial or inter stimulus interval ITI ISI During this period you should not have any other objects being presented that are being updated this isn t checked for you you have to make that check yourself but you can have components being presented that are themselves static For instance a fixation point never changes and so it can be presented during the static period it will be presented and left on screen while the other updates are being made Any stimulus updates can be made to occur during any static period defined in the experiment it does not have to be in the same Routine This is done in the updates selection box once a static period exists it will show up here as wel
124. builder experiment files openpyxl for loading params from xlsx files pyo sound version 0 6 2 or higher compile with no messages These packages are only needed for Windows pywin32 e winioport to use the parallel port e inpout32 an alternative method to using the parallel port on Windows e inpoutx64 to use the parallel port on 64 bit Windows 31 PsychoPy Psychology software for Python Release 1 81 03 These packages are only needed for Linux pyparallel to use the parallel port 4 2 Suggested packages In addition to the reguired packages above additional packages can be useful to PsychoPy users e g for controlling hardware and performing specific tasks These are packaged with the Standalone versions of PsychoPy but users with their own custom Python environment need to install these manually Most of these can be installed with easy_install General packages psignifit for bootstrapping and other resampling tests pyserial for interfacing with the serial port parallel python aka pp for parallel processing flac audio codec for working with google speech Specific hardware interfaces e pynetstation to communicate with EGI netstation See notes on using egi pynetstation ioLabs toolbox e labjack toolbox For developers e pytest and coverage for running unit tests e sphinx for building documentation 32 Chapter 4 Dependencies CHAPTER FIVE GETTING STARTED As an applicat
125. bunch of this kind of call in your newcomp py file buff writeIndented your_python_syntax_string_here You have to manage the indentation level of the output code see experiment IndentingBuffer xxx_lastrun py is the file that gets built when you run xxx psyexp from the builder So you will want to look at xxx_lastrun py freguently when developing your component Name space There are several internal variables er names of python objects that have a specific hardcoded meaning within xxx_lastrun py You can expect the following to be there and they should only be used in the original way or something will break for the end user likely in a mysterious way win the window t time within the trial loop referenced to trialClock x y mouse coordinates but only if the experimenter uses a mouse component Handling of variable names is under active development so this list may well be out of date If so you might consider updating it or posting a note to psychopy dev Preliminary testing suggests that there are 600 ish names from numpy or numpy random plus the following 180 Chapter 13 For Developers PsychoPy Psychology software for Python Release 1 81 03 KeyResponse _ builtins_ doe 7 file name package__ buttons core Yet other names get derived from user entered names like trials gt thisTrial Params self params is a key construct that you bu
126. by normal means your current preferences and the state of the application the location and state of the windows are saved to disk If PsychoPy is crashing during startup you may need to edit those files or delete them completely 156 Chapter 9 Troubleshooting PsychoPy Psychology software for Python Release 1 81 03 On OS X and Linux the files are psychopy2 appData cfg psychopy2 userPrefs cfg On Windows they are S DOCS AND SETTINGS USER Application Data psychopy2 appData cfg S DOCS AND SETTINGS USER Application Data psychopy2 userPrefs cfg The files are simple text which you should be able to edit in any text editor Particular changes that you might need to make If the problem is that you have a corrupt experiment file or script that is trying and failing to load on startup you could simply delete the appData cfg file Please also Contribute to the Forum mailing list a copy of the file that isn t working so that the underlying cause of the problem can be investigated google first to see if it s a known issue 9 5 Cleaning preferences and app data 157 PsychoPy Psychology software for Python Release 1 81 03 158 Chapter 9 Troubleshooting CHAPTER TEN RECIPES HOW TO S Below are various tips tricks recipes how tos for PsychoPy They involve something that is a little more involved than you would find in FAQs but too specific for the manual as such should t
127. camera image calibration validation and drift correct The EyeLink graphics is currently implemented using Simple Direct Media Layer SDL www libsdl org The Pylink library contains a set of classes and functions which are used to program experiments on many different platforms such as MS DOS Windows Linux and the Macintosh Some programming standards such as placement of messages in the EDF file by your experiment and the use of special data types have been implemented to allow portability of the development kit across platforms The standard messages allow general analysis tools such as EDF2ASC converter or EyeLink Data Viewer to process your EDF files psychopy hardware findPhotometer ports None device None Try to find a connected photometer photospectrometer PsychoPy will sweep a series of serial ports trying to open them If a port successfully opens then it will try to issue a command to the device If it responds with one of the expected values then it is assumed to be the appropriate device Parameters ports a list of ports to search Each port can be a string e g COMI1 dev tty Keyspan1 1 or a number for win32 comports only If none are provided then PsychoPy will sweep COM0 10 on win32 and search known likely port names on OS X and linux device string giving expected device e g PR650 PR655 LS110 If this is not given then an attempt will be made to find a device of any type but t
128. can depend on the desktop and distro If the PsychoPy app is started with flags coder or c or builder or b then the preferences will be overridden and that view will be created as the app opens For experienced python programmers it s possible to use PsychoPy without ever opening the Builder or Coder Install the PsychoPy libraries and dependencies and use your favorite IDE instead of the Coder 33 PsychoPy Psychology software for Python Release 1 81 03 Applications PsychoPy2 app Contents Resources lib python2 6 psychopy demos coder gabor py Ps gt Oikia A 9o 5 1 Builder dot_gabors py ratingscale py michotte py visual py_ elArray py gabor py 1 FH usr bin env python from psychopy import core visual event a 3 4 fcreate a window to draw in 5 myWin z visual Window 400 400 0 allowGUI False 6 7 8 INITIALISE SOME STIMULT Eigabor visual PatchStim myWin tex sin mask gauss texRes 256 8 size gt 1 0 1 0 Sf 4 0 ori 0 namez gaborT 10 gabor setAutoDraw True M message visual TextStim myWin pos 0 0 0 9 text Hit Q to quit 42 trialClock core Clock 14 repeat drawing for each frame 15 Ewhile trialClock getTime lt 20 16 gabor setPhase 0 01 17 message draw 18 handle key presses each frame 19 for keys in event getKeys timeStamped lt True 20 0 4f keys 0 in escape a j a myWin close z core quit 23
129. can spellings e g color Within the app the return value from _translate should be used only for display purposes in menus tooltips etc A translated value should never be used as part of the logic or internal functioning of PsychoPy It is purely a skin Internally everything must be in en_US Basic usage is exactly what you expect _translate hello will return a unicode string at run time using mappings for the current locale as provided by a translator in a mo file Not all translations are available yet see above to start a new one To have the app display a translated string to the experimenter just display the return value from the underscore translation function The strings to be translated must appear somewhere in the app code base as explicit strings within _translate If you need to translate a variable e g named str_var using the expression _translate str_var somewhere else you need to explicitly give all the possible values that str_var can take and enclose each of them within the translate function It is okay for that to be elsewhere even in another file but not in a comment This allows poedit to discover of all the strings that need to be translated This is one of the purposes of the _localized dict at the top of some modules _translate should not be given a null string to translate if you use a variable check that it is not to avoidinvoking_translate Strings that contain
130. ch drawing 18 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 e do it in an inefficient manner write poor code have a poor computer graphics card Things to avoid recreating textures for stimuli building new stimuli from scratch create them once at the top of your script and then change them using stim setOri ori stim setPos x y Turn on frame time recording The key sometimes is knowing if you are dropping frames PsychoPy can help with that by keeping track of frame durations By default frame time tracking is turned off because many people don t need it but it can be turned on any time after Window creation setRecordFrameIntervals eg from psychopy import visual win visual Window 800 600 win setRecordFramelntervals True Since there are often dropped frames just after the system is initialised it makes sense to start off with a fixation period or a ready message and don t start recording frame times until that has ended Obviously if you aren t refreshing the window at some point e g waiting for a key press with an unchanging screen then you should turn off the recording of frame times or it will give spurious results Warn me if I drop a frame The simplest way to check if a frame has been dropped is to get PsychoPy to report a warning if it thinks a frame was dropped from psychopy import visual logging win visual Window 800 600 win setRecordF
131. ch will eventually not immediately have the speech data in its namespace see getResponse In theory you could have several threads going simultaneously almost all the time is spent waiting for a response rather than doing them seguentially not tested class psychopy microphone BatchSpeech2Text files threads 3 verbose False Like Speech2Text but takes a list of sound files or a directory name to search for matching sound files and returns a list of filename response tuples response s are described in Speech2Text getResponse Can use up to 5 concurrent threads Intended for post experiment processing of multiple files in which waiting for a slow response is not a problem better to get the data If files is a string it will be used as a directory name for glob matching all wav flac and spx files There s currently no re try on http error 8 12 4 Misc PsychoPy provides lossless compression using FLAC codec This reguires that flac is installed on your computer It is not included with PsychoPy by default but you can download for free from http xiph org flac Functions for 134 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 file oriented Discrete Fourier Transform and RMS computation are also provided psychopy microphone wav2 lac path keep True level 5 Lossless compression convert wav file on disk to flac format If path is a directory
132. changes back to your fork of the project at github Then in a folder of your choosing fetch your fork git clone git github com USER psychopy git cd psychopy git remote add upstream git github com psychopy psychopy git The last line connects your copy with read access to the central server so you can easily fetch any updates to the central repository 13 1 4 Fetching the latest version Periodically it s worth fetching any changes to the central psychopy repository into your master branch more on that below git checkout master git pull upstream master here master is the desired branch of psychopy to fetch 13 1 5 Run PsychoPy using your local copy Now that you ve fetched the latest version of psychopy using git you should run this version in order to try out yours others latest improvements See this guide on how to permanently run your git version of psychopy instead of the version you previously installed Run git version for just one session Linux and Mac only If you want to switch between the latest and greatest development version from git and the stable version installed on your system you can choose to only temporarily run the git version Open a terminal and set a temporary python path to your psychopy git folder export PYTHONPATH path to local git folder To check that worked you should open python in the terminal and try to import psychopy python Python 2 7 6 default Mar 22 201
133. chopy iohub client keyboard KeyboardRelease attribute 128 U u3 in module labjack 111 uint8_float in module psychopy tools typetools 150 uncompress psychopy microphone AdvAudioCapture method 133 units psychopy event Mouse attribute 99 upload in module psychopy web 151 V VBI 25 VBI blocking 25 VBI syncing 25 W wait in module psychopy core 77 waitEvents psychopy hardware iolab ButtonBox method 109 waitForKeys psychopy iohub client keyboard Keyboard method 125 waitForPresses psychopy iohub client keyboard Keyboard method 126 waitForReleases psy chopy iohub client keyboard Keyboard method 126 waitKeys in module psychopy event 99 warn in module psychopy logging 130 warning in module psychopy logging 130 wav2flac in module psychopy microphone 135 write psychopy logging LogFile method 129 X XidDevice class in pyxid 105 xlsx 25 xydist in module psychopy event 99 Index 201
134. could lead to a higher density of dots in the direction of motion providing subjects with an alternative cue to direction Keeping dot lives relatively short prevents this e noiseDots direction some groups have used noise dots that appear in a random location on each frame noiseDots location This has the disadvantage that the noise dots not only have a random direction but also a random speed whereas signal dots have a constant speed and constant direction signalDots same on each frame the dots constituting the signal could be the same as on the previous frame or different If different participants could follow a single dot for a long time and calculate its average direction of motion to get the global direction because the dots would sometimes take a random direction and sometimes take the signal direction As a result of these the defaults for PsychoPy are to have signalDots that are from a different population noise dots that have random direction and a dot life of 3 frames Parameters name Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the stimulus should first appear See Defining the onset duration of components for details stop Governs the duration for which the stimulus is presented See Defining the onset duration of components for details units No
135. ct MonitorCenter from the tools menu of PsychoPyIDE or run site packages monitors MonitorCenter py In the MonitorCenter window you can create a new monitor name insert values that describe your monitor and run calibrations like gamma corrections For now you can just stick to the testMonitor but give it correct values for your screen size in number of pixels and width in cm Now when you create a window on your monitor you can give it the name testMonitor and stimuli will know how they should be scaled appropriately 68 Chapter 7 Coder PsychoPy Psychology software for Python Release 1 81 03 Your first stimulus Building stimuli is extremely easy All you need to do is create a Window then some stimuli Draw those stimuli then update the window PsychoPy has various other useful commands to help with timing too Here s an example Type it into a coder window save it somewhere and press run from psychopy import visual core import some libraries from PsychoPy fcreate a window mywin visual Window 800 600 monitor testMonitor units deg create some stimuli grating visual GratingStim win mywin mask circle size 3 pos 4 0 sf 3 fixation visual GratingStim win mywin size 0 5 pos 0 0 sf 0 rgb 1 draw the stimuli and update the window grating draw fixation draw mywin update pause so you get a chance to see it core wait 5 0 Note For those new to Python Did
136. d lossless file compression flac The Builder microphone component now uses AdvAudioCapture by default Speech2Text provides speech recognition courtesy of google with about 1 2 seconds latency for a 2 sec voice recording Note that the sound files are sent to google over the internet Intended for within experiment processing near real time 1 2s delayed in which priority is given to keeping an experiment session moving along even if that means skipping a slow response once in a while See coder demo gt input gt speech_recognition py Eventually other features are planned including speech onset detection to automatically estimate vocal RT for a given speech sample and interactive visual inspection of sound waveform with playback and manual onset determination the gold standard for RT 8 12 2 Audio Capture psychopy microphone switchOn sampleRate 48000 outputDevice None bufferSize None You need to switch on the microphone before use which can take several seconds The only time you can specify the sample rate in Hz is during switchOn Considerations on the default sample rate 48kHz DVD or video 48 000 CD quality 44 100 24 bit human hearing 15 000 adult children amp young adult higher human speech 100 8 000 useful for telephone 100 3 300 google speech API 16 000 or 8 000 only Nyquist frequency twice the highest rate good to oversample a bit pyo s downsamp function c
137. data functions for storing saving analysing data ooo SA Encryption sea ir ea A A oe we A a A io 8 5 psychopy event for keypresses and mouse clicks o o 8 6 psychopy filters helper functions for creating filters o 8 7 psychopy gui create dialogue boxes e 8 8 psychopy hardware hardware Interfaces e 8 9 psychopy info functions for getting information about the system 8 10 psychopy iohub ioHub event monitoring framework I 811 psychopy logging controlwhatgetslogged I ee ee 8 12 psychopy microphone Captureandanalyzesound 22000000 8 13 psychopy misc miscellaneous routines for converting units etc o 8 14 psychopy monitors for those that don t like Monitor Center 8 15 psychopy parallel functions for interacting with the parallel port 8 16 psychopy serial functions for interacting with the serial port 8 17 psychopy sound play various forms of sound 2 2 ee ee 9 18 psychopy lt tools miscellaneous tools inps Se sok He oa eo Ake a eS 8 8 19 psychopy web Web methods issia p eed eRe FR RR RR eee ee e Troubleshooting 9 1 Thesapplicationidoesn Stata is ee are ea Bote BAe ee de Ba Sly eyes O Bd eS 92 Irun a Builder experiment and nothing happens s s p ss m pacen e ea 2 00000 0000 4 9 3
138. date the Python path The Python installation in C Program Files PsychoPy2 needs to know about the network location If Python finds a text file with extension pth anywhere on its existing path then it will add to the path any valid paths it finds in the file So create a text file that has one line in it lt NETWORK_LOC gt psychopyLib You can test if this has worked Go to C Program Files PsychoPy2 and double click on python exe You should get a Python terminal window come up Now try gt gt gt import psychopy If psychopy is not found on the path then there will be an import error Try adjusting the pth file restarting python exe and importing again 10 8 4 4 Update the Start Menu The shortcut in the Windows Start Menu will still be pointing to the local now non existent PsychoPy library Right click it to change properties and set the shortcut to point to something like C Program Files PsychoPy2 pythonw exe lt NETWORK_LOC gt psychopyLib psychopy app psychopyApp py You probably spotted from this that the PsychoPy app is simply a Python script You may want to update the file associations too so that psyexp and py are opened with C Program Files PsychoPy2 pythonw exe lt NETWORK_LOC gt psychopyLib psychopy app psychopyApp py 1 Lastly to make the shortcut look pretty you might want to update the icon too Set the icon s location to lt NETWORK_LOC gt psychopyLib psychopy app Resources
139. e name property Args None Returns str the user defined label name of the device waitForReleases maxWait None keys None chars None mods None duration None clear True checkInterval 0 002 See the waitForKeys method documentation This method is identical but only returns KeyboardRelease events Keyboard Events The Keyboard device can return two types of events which represent key press and key release actions on the keyboard KeyboardPress Event class psychopy iohub client keyboard KeyboardPress ioe_array An iohub Keyboard device key press event char None The unicode value of the keyboard event if available This field is only populated when the keyboard event results in a character that could be printable Returns unicode if no char value is available for the event modifiers None A list of any modifier keys that were pressed when this keyboard event occurred Each element of the list contains a keyboard modifier string constant Possible values are Ictrl rctrl Ishift rshift lalt ralt the alt keys are also labelled as option keys on Apple Keyboards Icmd rcmd The cmd keys map to the windows key s on Windows keyboards menu capslock numlock e function OS X only modhelp OS X only If no modifiers were active when the event occurred an empty list is returned Returns tuple time None The time st
140. e num updates None gt lt Settings gt lt Routines gt lt Routine name trial gt lt TextComponent name word gt lt Param name name val word valType code updates constant gt 190 Chapter 14 PsychoPy Experiment file format psyexp PsychoPy Psychology software for Python Release 1 81 03 lt Param name text val thisTrial text valType code updates set every repeat gt lt Param name colour val thisTrial rgb valType code updates set every repeat gt lt Param name ori val 0 valType code updates constant gt lt Param name pos val 0 0 valType code updates constant gt lt Param name times val 0 5 2 0 valType code updates constant gt lt Param name letterHeight val 0 2 valType code updates constant gt lt Param name colourSpace val rgb valType code updates constant gt lt Param name units val window units valType str updates None gt lt Param name font val Arial valType str updates constant gt lt TextComponent gt lt KeyboardComponent name resp gt lt Param name storeCorrect val True valType bool updates constant gt lt Param name name val resp valType code updates None gt lt Param name forceEndTrial val True valType bool updates constant gt lt Param name times val 0 5 2 0 valType code updates constant gt lt Param name allowedKeys val 1
141. e F key ERROR No reply from LS100 The port was found the connection was made and an initial command worked but then the device stopped communating If the first measurement taken with the device after connecting does not yield a reasonble intensity the device can sulk not a technical term The on the display will disappear and you can no longer communicate with the device Turn it off and on again with F depressed and use a reason ably bright screen for your first measurement Subsequent measurements can be dark or we really would be in trouble checkOK msg Check that the message from the photometer is OK If there s an error print it Then return True OK or False clearMemory Clear the memory of the device from previous measurements get Lum Makes a measurement and returns the luminance value measure Measure the current luminance and set lastLum to this value sendMessage message timeout 5 0 Send a command to the photometer and wait an alloted timeout for a response setMaxAttempts maxAttempts Changes the number of attempts to send a message and read the output Typically this should be low initially if you aren t sure that the device is setup correctly but then after the first successful reading set it higher setMode mode 04 Set the mode for measurements Returns True success or False 04 means absolute measurements 08 peak 09 cont See user manual for
142. e application configuration is incorrect Reinstalling the application may fix the problem If so that indicates you need to update your NET installation to SP1 2 open a DOS Command Prompt terminal a go to the Windows Start menu b select Run and type in cmd lt Return gt 3 paste the following into that window Ctrl V doesn t work but you can right click and select Paste Replace VERSION with your version number e g 1 61 03 C Program Files PsychoPy2 python exe C Program Files PsychoPy2 Lib site packages PsychoPy 4 when you hit lt return gt you will hopefully get a moderately useful error message that you can Contribute to the Forum mailing list Mac users 1 open the Console app open spotlight and type console 2 if there are a huge number of messages there you might find it easiest to clear them the brush icon and then start PsychoPy again to generate a new set of messages 155 PsychoPy Psychology software for Python Release 1 81 03 9 2 run a Builder experiment and nothing happens An error message may have appeared in a dialog box that is hidden look to see if you have other open windows somewhere An error message may have been generated that was sent to output of the Coder view 1 go to the Coder view from the Builder gt View menu if not visible 2 if there is no Output panel at the bottom of the window go to the View menu and select Output 3 try running your experiment again
143. e deprecated please use next instead jwp 19 6 06 86 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 printAsText stimOut dataOut all_mean all_std all raw _ delim lt t ma trixOnly False Exactly like saveAsText except that the output goes to the screen instead of a file saveAsExcel fileName sheetName data matrixOnly False appendFile True Save a summary data file in Excel OpenXML format workbook x sx for processing in most spreadsheet packages This format is compatible with versions of Excel 2007 or greater and and with OpenOffice gt 3 0 It has the advantage over the simpler text files see TrialHandler saveAsText that data can be stored in multiple named sheets within the file So you could have a single file named after your experiment and then have one worksheet for each participant Or you could have one file for each participant and then multiple sheets for repeated sessions etc The file extension x sx will be added if not given already The file will contain a set of values specifying the staircase level intensity at each reversal a list of reversal indices trial numbers the raw staircase intensity level on every trial and the corresponding re sponses of the participant on every trial Parameters fileName string the name of the file to create or append Can include relative or absolute path sheetNa
144. e less memory interpolate If inear is selected then linear interpolation will be applied when the image is rescaled to the appropriate size for the screen Nearest will use a nearest neighbour rule See also API reference for PatchStim 6 4 10 Polygon shape Component added in version 1 78 00 The Polygon stimulus allows you to present a wide range of regular geometric shapes The basic control comes from setting the e 2 vertices give a line 3 give a triangle 6 4 Components 53 PsychoPy Psychology software for Python Release 1 81 03 4 give a rectangle etc e a large number will approximate a circle ellipse The size parameter takes two values For a line only the first is used then use ori to specify the orientation For triangles and rectangles the size specifies the height and width as expected Note that for pentagons upwards however the size determines the width height of the ellipse on which the vertices will fall rather than the width height of the vertices themselves slightly smaller typically Parameters name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces nVertices integer The number of vertices for your shape 2 gives a line 3 gives a triangle a large number results in a circle ellipse It is not currently possible to vary the number of vertices dynamically fill set
145. eated 4 times for each of 6 stimulus intensities 6 1 3 Example 2 an fMRI block design Many fMRI experiments present a sequence of stimuli in a block For this there are multiple ways to create the experiment We could create a single Routine that contained a number of stimuli and presented them sequentially followed by a long blank period to give the inter epoch interval and surround this single Routine by a loop to control the blocks Alternatively we could create a pair of Routines to allow presentation of a a single stimulus for 1 sec and b a blank screen for the prolonged period With these Routines we could insert pair of loops one to repeat the stimulus Routine with different images followed by the blank Routine and another to surround this whole set and control the blocks 6 1 4 Demos There are a couple of demos included with the package that you can find in their own special menu When you load these the first thing to do is make sure the experiment settings specify the same resolution as your monitor otherwise the screen can appear off centred and strangely scaled Stroop demo This runs a digital demonstration of the Stroop effect The experiment presents a series of coloured words written in coloured inks Subjects have to report the colour of the letters for each word but find it harder to do so when the 1 Stroop J R 1935 Studies of interference in serial verbal reactions Journal of Exper
146. ect to be added the visibility of the first object becomes increasingly weak The order in which stimuli are rendered is very important since it determines the ordering of the layers Mathematically each pixel colour is constructed from opacity stimRGB 1 opacity backgroundRGB This was the only mode available before PsychoPy version 1 80 and remains the default for the sake of backwards compatibility blendMode add If the window blendMode is set to add then the value of the new stimulus does not in any way replace that of the existing stimuli that have been drawn it is added to it In this case the value of opacity still affects the weighting of the new stimulus being drawn but the first stimulus to be drawn is never occluded as such The sum is performed using the signed values of the color representation in PsychoPy with the mean grey being represented by zero So a dark patch added to a dark background will get even darker For grating stimuli this means that contrast is summed correctly This blend mode is ideal if you want to test for example the way that subjects perceive the sum of two potentially overlapping stimuli It is also needed for rendering stereo dichoptic stimuli to be viewed through colored anaglyph glasses If stimuli are combined in such a way that an impossible luminance value is reguested of any of the monitor guns then that pixel will be out of bounds In this case the pixel can either be clipped to
147. ed This time will be taken from the start of keyboard checking e g if the keyboard was initiated 2 seconds into the trial and a key was pressed 3 2s into the trials the response time will be recorded as 1 2s Store correct Check this box if you wish to store whether or not this key press was correct If so then fill in the next box that defines what would constitute a correct answer e g left 1 or corrAns note this should not be in inverted commas This is given as Python code that should return True 1 or False 0 Often this correct answer will be defined in the settings of the Loops Discard previous Check this box to ensure that only key presses that occur during this keyboard checking period are used If this box is not checked a keyboard press that has occurred before the start of the checking period will be interpreted as the first keyboard press For most experiments this box should be checked See also API reference for event 6 4 6 Microphone Component Please note This is a new component and is subject to change The microphone component provides a way to record sound during an experiment To do so specify the starting time relative to the start of the routine see start below and a stop time duration in seconds A blank duration evaluates to recording for 0 000s The resulting sound files are saved in wav format at 48000 Hz 16 bit one file per recording The files appear in a new folder within the data directo
148. ed from existing components Making things loop compatible looks interesting see keyboard py for an example especially code for saving data at the end 13 3 2 Notes amp gotchas syntax errors in new_comp py The PsychoPy app will fail to start if there are syntax error in any of the components that are auto detected Just correct them and start the app again param val If you have a boolean variable e g my_flag as one of your params note that self param my_flag is always True the param exists gt True So in a boolean context you almost always want the val part e g if self param my_flag val However you do not always want val Specifically in a string unicode context to trigger the self formatting features of Param s you almost always want s self param my_flag without val Note that it s better to do this via s than str because str self param my_flag coerces things to type str squashing unicode whereas s works for both str and unicode 13 3 3 2 Icon newcomp png Using your favorite image software make an icon for your Component with a descriptive name e g newcomp png Dimensions 48 x 48 Put it in the components directory In newcomp py have a line near the top iconFile path join thisFolder newcomp png 13 3 Adding a new Builder Component 181 PsychoPy Psychology software for Python Release 1 81 03 13 3 4 3 Documenta
149. eholders For information on devices or functionality that has not yet been migrated to the psychopy documentation please visit the somewhat outdated original ioHub doc s 8 10 1 Using psychopy iohub psychopy iohub Specific Requirements Compuier Specifications The design requirements of your experiment itself can obviously influence what the minimum computer specification should be to provide good timing performance The dual process design when running using psychopy iohub also influences the minimum suggested specifications as follows e Intel 15 or i7 CPU A minimum of two CPU cores is needed 8 GB of RAM Windows 7 OS X 10 7 5 or Linux Kernel 2 6 Please see the Recommended hardware section for further information that applies to PsychoPy in general Usage Considerations When using psychopy iohub the following constrains should be noted 1 The pyglet graphics backend must be used pygame is not supported 2 ioHub devices that report position data use the unit type defined by the PsychoPy Window However position data is reported using the full screen area and size the window was created in Therefore for accurate window position reporting the PsychoPy window must be made full screen 3 On OS X Assistive Device support must be enabled when using psychopy iohub For OS X 10 7 10 8 5 instructions can be found here For OS X 10 9 the program being used to start your experiment script must be s
150. elative to the location of the experiment psyexp file pos X Y The position of the centre of the stimulus in the units specified by the stimulus or window ori degrees Movies can be rotated in real time too This specifies the orientation of the movie in degrees size sizex sizey or a single value applied to both x and y The size of the stimulus in the given units of the stimulus window units deg cm pix norm or inherit from window See Units for the window and stimuli See also API reference for MovieStim 6 4 9 Patch image Component The Patch stimulus allows images to be presented in a variety of forms on the screen It allows the combination of an image which can be a bitmap image from a variety of standard file formats or a synthetic repeating texture such as a sinusoidal grating A transparency mask can also be control the shape of the image and this can also be derived from either a second image or mathematical form such as a Gaussian Patches can have their position orientation size and other settings manipulated on a frame by frame basis There is a performance advantage in terms of milliseconds to using images which are square and powers of two 32 64 128 etc however this is slight and would not be noticed in the majority of experiments Parameters name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation
151. en you aren t used to them they contain odd characters like 2f See Generating formatted strings for more info 10 6 1 Feedback after a trial This is actually demonstrated in the demo ExtendedStroop in the Builder gt demos menu unpack the demos and then look in the menu again tada If you have a Keyboard Component called key_resp then after every trial you will have the following variables key_resp keys a python list of keys pressed key_resp rt the time to the first key press key_resp corr None 0 or 1 if you are using store correct To create your msg insert the following into the start experiment section of the Code Component 162 Chapter 10 Recipes How to s PsychoPy Psychology software for Python Release 1 81 03 msg doh if this comes up we forgot to update the msg and then insert the following into the Begin Routine section this will get run every repeat of the routine if len key_resp keys lt 1 msg Failed to respond elif resp corr stored on last run routine msg Correct RT 3f resp rt else msg Oops That was wrong 10 6 2 Feedback after a block In this case the feedback routine would need to come after the loop the block of trials and the message needs to use the stored data from the loop rather than the key_resp directly Accessing the data from a loop is not well documented but totally possible In this case to get all the keys pressed in
152. epends on the work of many other people in the form of libraries 4 1 Essential packages Python If you need to install python or just want to the easiest way is to use the Enthought Python Distribution which is free for academic use Be sure to get a 32 bit version The only things it misses are avbin pyo and flac If you want to install each library individually rather than use the simpler distributions of packages above then you can download the following Make sure you get the correct version for your OS and your version of Python easy_install will work for many of these but some require compiling from source python 32 bit only version 2 6 or 2 7 2 5 might work 3 x will not avbin movies On mac 1 Download version 5 from google not a higher version 2 Start terminal type sudo mkdir p usr local lib 3 cd to the unpacked avbin directory type sh install sh 4 Start or restart PsychoPy and from PsychoPy s coder view shell this should work from pyglet media import avbin If you run a script and get an error saying NoneType object has no attribute blit it probably means you did not install version 5 setuptools numpy version 0 9 6 or greater scipy version 0 4 8 or greater pyglet version 1 1 4 not version 1 2 wxPython version 2 8 10 or 2 8 11 not 2 9 Python Imaging Library sudo easy_install PIL matplotlib for plotting and fast polygon routines lxml needed for loading saving
153. erFrame Decide which submenu your new command fits under and look for that section e g File Edit View and so on For example to add an item for making the Routine panel items larger I added two lines within the View menu by editing the makeMenus method of class BuilderFrame within psychopy app builder builder py similar for Coder self viewMenu Append self IDs tbIncrRoutineSize _ amp Routine Larger t s self app key wx EVT_MENU self self IDs tbIncrRoutineSize self routinePanel increaseSize Note the use of the translation function _ for translating text that will be displayed to users menu listing hint 13 6 2 2 wxlDs py A new item needs to have a numeric ID so that wx can keep track of it Here the number is self IDs tbIncrRoutineSize which I had to define within the file psychopy app wxIDs py tbIncrRoutineSize 180 It s possible that instead of hard coding it like this it s better to make a call to wx NewId wx will take care of avoiding duplicate IDs presumably 13 6 3 3 Key binding prefs I also defined a key to use to as a keyboard short cut for activating the new menu item self app keys largerRoutine The actual key is defined in a preference file Because psychopy is multi platform you need to add info to four different spec files all of them being within the psychopy preferences directory for four operating systems Darwin FreeBSD Linux Windows For Darwin
154. ert a loop use the button on the left of the Flow panel or the item in the Experiment menu of the Builder The start and end of a loop is set in the same way as the location of a Routine see above Loops can encompass one or more Routines and other loops i e they can be nested As with components in Routines the loop must be given a name which must be unique and made up of only alpha numeric characters underscores are allowed I would normally use a plural name since the loop represents multiple repeats of something For example trials blocks or epochs would be good names for your loops It is usually best to use trial information that is contained in an external file xlsx or csv When inserting a loop into the flow you can browse to find the file you wish to use for this An example of this kind of file can be found in the Stroop demo trialTypes xlsx The column names are turned into variables in this case text letterColor corrAns and congruent these can be used to define parameters in the loop by putting a sign before them e g text As the column names from the input file are used in this way they must have legal variable names i e they must be unigue have no punctuation or spaces underscores are ok and must not start with a digit The parameter Js trials exists because some loops are not there to indicate trials per se but a set of stimuli within a trial or a set of blocks In these cases we don t want the data file to
155. es For the experiment to generate valid PsychoPy code the name parameters of all objects Components Loops and Routines must be unique and contain no spaces That is an experiment can not have two different Routines called trial nor even a Routine called trial and a Loop called trial The Parameter names belonging to each Component or the Settings node must be unique within that Component but can be identical to parameters of other Components or can match the Component name themselves A TextComponent should not for example have multiple pos parameters but other Components generally will and a Routine called pos would also be also permissible lt PsychoPy2experiment version 1 50 04 encoding utf 8 gt lt Settings gt lt Param name Monitor val testMonitor valType str updates None gt lt Param name Window size pixels val 1024 768 valType code updates None gt lt Param name Full screen window val True valType bool updates None gt lt Param name Save log file val True valType bool updates None gt lt Param name Experiment info val participant s_00l session 001 valType code update lt Param name Show info dlg val True valType bool updates None gt lt Param name logging level val warning valType code updates None gt lt Param name Units val norm valType str updates None gt lt Param name Screen val 1 valTyp
156. es a more general form of the equation above which can separate the contribution of the monitor and the background to the lowest luminance level L V a b kvV 2 3 This equation makes no assumption about the origin of the base luminance value but requires that the system knows the values of b and k as well as y The inverse values required to build the LUT are found by 1 VJ V b k 1 7 b 24 A 2 4 LUT V This is derived below for the interested reader And the associated luminance values for each point in the LUT are given by L V a4 1 V b7 V b k 7 2 6 3 Deriving the inverse full equation The difficulty with the full gamma equation 2 3 is that the presence of the b value complicates the issue of calculating the inverse values for the LUT The simple inverse of 2 3 as a function of output luminance values is L a 2 5 gt 2 5 LUT L To use this equation we need to first calculate the linear set of luminance values L that we are able to produce the current monitor and lighting conditions and then deduce the LUT value needed to generate that luminance value We need to insert into the LUT the values between 0 and 1 to use the maximum range that map onto the linear range from the minimum m to the maximum M possible luminance From the parameters in 2 3 it is clear that mza b 2 6 M a b k Thus the luminance value L at any given point in the LUT V is given by
157. es panel is fixed representing seconds one line is one second This will hopefully change in the future so that units can also be number of frames more precise and can be scaled up or down to allow very long or very short Routines to be viewed easily That s on the wishlist 6 2 Routines 41 PsychoPy Psychology software for Python Release 1 81 03 6 3 Flow In the Flow panel a number of Routines can be combined to form an experiment For instance your study may have a Routine that presented initial instructions and waited for a key to be pressed followed by a Routine that presented one trial which should be repeated 5 times with various different parameters set All of this is achieved in the Flow panel You can adjust the display size of the Flow panel see View menu 6 3 1 Adding Routines The Routines that the Flow will use should be generated first although their contents can be added or altered at any time To insert a Routine into the Flow click the appropriate button in the left of the Flow panel or use the Experiment menu A dialog box will appear asking which of your Routines you wish to add To select the location move the mouse to the section of the flow where you wish to add it and click on the black disk 6 3 2 Loops Loops control the repetition of Routines and the choice of stimulus parameters for each PsychoPy can generate the next trial based on the method of constants or using an adaptive staircase To ins
158. es will be converted to flac and for this to work you need to have flac as an executable spx format is speex with headerbyte for google lang the presumed language of the speaker as a locale code default en US timeout seconds to wait before giving up default 10 samplingrate the sampling rate of the speech clip in Hz either 16000 or 8000 You can record at a higher rate and then down sample to 16000 for speech recognition file is the down sampled file not the original the sampling rate is auto detected for wav files pro_filter profanity filter level default 2 e g f level flac compression level 0 less compression but fastest getResponse Calls getThread and then polls the thread until there s a response Will time out if no response comes within timeout seconds Returns an object having the speech data in its namespace If there s no match generally the values will be equivalent to None e g an empty string If you do resp getResponse you ll be able to access the data in several ways resp word the best match i e the most probably word or None resp confidence google s confidence about word ranging 0 to 1 resp words tuple of up to 5 guesses so word words 0 resp raw the raw response from google just a string resp json a parsed version of raw from json load raw getThread Send a guery to google using a new thread no blocking or timeout Returns a thread whi
159. esent a slice myIndices 5 8 fa string that PsychoPy can then parse as a slice later myIndices 5 8 2 fas above but 6 3 Flow 43 PsychoPy Psychology software for Python Release 1 81 03 Note that PsychoPy uses Python s built in slicing syntax where the first index is zero and the last entry of a slice doesn t get included You might want to check the outputs of your selection in the Python shell bottom of the Coder view like this gt gt gt range 100 5 8 slice 5 8 of a standard set of indices 5 6 7 gt gt gt range 100 5 10 2 slice 5 8 of a standard set of indices 5 Vy 9 11 13 15 17 19 Check that the conditions you wanted to select are the ones you intended Staircase methods The loop type staircase allows the implementation of adaptive methods That is aspects of a trial can depend on or adapt to how a subject has responded earlier in the study This could be for example simple up down staircases where an intensity value is varied trial by trial according to certain parameters or a stop signal paradigm to assess impulsivity For this type of loop a correct answer must be provided from something like a Keyboard Component Various parameters for the staircase can be set to govern how many trials will be conducted and how many correct or incorrect answers make the staircase go up or down Accessing loop parameters from components The parameters from your loops are accessible
160. etc Basic functions including timing rush imported quit psychopy core getTime Get the current time since psychopy core was loaded Version Notes Note that prior to PsychoPy 1 77 00 the behaviour of getTime was platform dependent on OSX and linux it was equivalent to psychopy core getAbsTime whereas on windows it returned time since loading of the module as now psychopy core getAbsTime Return unix time i e whole seconds elapsed since Jan 1 1970 This uses the same clock base as the other timing features like getTime The time in seconds ignores the time zone like time time on linux To take the timezone into account use int time mktime time gmtime Absolute times in seconds are especially useful to add to generated file names for being unique informative a meaningful time stamp and because the resulting files will always sort as expected when sorted in chrono logical alphabetical or numerical order regardless of locale and so on Version Notes This method was added in PsychoPy 1 77 00 psychopy core wait secs hogCPUperiod 0 2 Wait for a given time period If secs 10 and hogCPU 0 2 then for 9 8s python s time sleep function will be used which is not especially precise but allows the cpu to perform housekeeping In the final hogCPUperiod the more precise method of constantly polling the clock is used for greater precision If you want to obtain key presses during the wait be sure t
161. f a list or array To find an average it is better to use average due to the potential for integer division issues with sum len average sgrt std For average mean sguare root and standard deviation respectively Note Be sure that the numpy standard deviation formula is the one you want np Many math related features are available through the complete numpy libraries which are available within psychopy builder scripts as np For example you could use np hanning 3 or np random poisson 10 10 in a code component 6 4 Components 47 PsychoPy Psychology software for Python Release 1 81 03 6 4 3 Dots RDK Component The Dots Component allows you to present a Random Dot Kinematogram RDK to the participant of your study These are fields of dots that drift in different directions and subjects are typically required to identify the global motion of the field There are many ways to define the motion of the signal and noise dots In PsychoPy the way the dots are configured follows Scase Braddick amp Raymond 1996 Although Scase et al 1996 show that the choice of algorithm for your dots actually makes relatively little difference there are some potential gotchas Think carefully about whether each of these will affect your particular case limited dot lifetimes as your dots drift in one direction they go off the edge of the stimulus and are replaced randomly in the stimulus field This
162. f any modifier keys that were pressed when this keyboard event occurred Each element of the list contains a keyboard modifier string constant Possible values are Ictrl rctrl Ishift rshift lalt ralt the alt keys are also labelled as option keys on Apple Keyboards lcmd trcmd The cmd keys map to the windows key s on Windows keyboards menu capslock numlock function OS X only modhelp OS X only If no modifiers were active when the event occurred an empty list is returned Returns tuple 8 10 psychopy iohub ioHub event monitoring framework 127 PsychoPy Psychology software for Python Release 1 81 03 time None The time stamp of the event in the same time base that is used by psychopy core getTime Returns float type None The string type constant for the event Returns str Mouse Device and Events TBC Computer Device TBC XInput Gamepad Device and Events TBC Eye Tracker Devices and Events TBC Serial Port Device and Events TBC Analog Input Device and Events TBC Touch Screen Device and Events TBC 8 11 psychopy logging control what gets logged Provides functions for logging error and other messages to one or more files and or the console using python s own logging module Some warning messages and error messages are generated by PsychoPy itself The user can generate more using the function
163. f life 269 22 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 ie a tpt ha Agilent Technologies Figure 2 1 Figure 1 photodiode trace at top of screen The image above shows the luminance trace of a CRT recorded by a fast photo sensitive diode at the top of the screen when a stimulus is requested shown by the square wave The square wave at the bottom is from a parallel port that indicates when the stimulus was flipped to the screen Note that on a CRT the screen at any point is actually black for the majority of the time and just briefly bright The visual system integrates over a large enough time window not to notice this On the next frame after the stimulus presentation time the luminance of the screen flash increased 2 8 Timing Issues and synchronisation 23 PsychoPy Psychology software for Python Release 1 81 03 et te Bes Agilent Technologies Figure 2 2 Figure 2 photodiode trace of the same large stimulus at bottom of screen The image above shows comes from exactly the same script as the above but the photodiode is positioned at the bottom of the screen In this case after the stimulus is requested the current frame which is dark finishes drawing and then 10ms later than the above image the screen goes bright at the bottom 24 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 Warning If
164. fer for that device is cleared on the ioHub Server but the Global Event Buffer is not affected Note To clear all events from both the ioHub Global Event Buffer and all Device Event Buffer s set the device_label argument to all Args device_label str name of the device to clear events from or None the default to clear all events from the Global Event Buffer or all to clear events from both the Global Event Buffer and all device level Device Event Buffer s Returns int The number of events cleared by the reguest on the ioHub Server 8 10 psychopy iohub ioHub event monitoring framework 121 PsychoPy Psychology software for Python Release 1 81 03 sendMessageEvent text category offset 0 0 sec_time None Create and send an Experiment MessageEvent to the ioHub Server Process for storage with the rest of the event data being recorded in the ioDataStore Note MessageEvents can be thought of as DeviceEvents from the virtual PsychoPy Process Device Args text str The text message for the message event Can be up to 128 characters in length category str A 0 32 character grouping code for the message that can be used to sort or group messages by types during post hoc analysis offset float The sec msec offset to apply to the time stamp of the message event If you send the event before or after the time the event actually occurred and you know what the off
165. ffer all the objects that we wish to be presented the buffers are flipped such that the stimuli we have been drawing are presented simultaneously The monitor updates at a very precise fixed rate and the flipping of the window will be synchronised to this monitor update if possible see Sync to VBL and wait for VBL Each update of the window is referred to as a frame and this ultimately determines the temporal resolution with which stimuli can be presented you cannot present your stimulus for any duration other than a multiple of the frame duration In addition to synchronising flips to the frame refresh rate PsychoPy can optionally go a further step of not allowing the code to continue until a screen flip has occurred on the screen which is useful in ascertaining exactly when the frame refresh occurred and thus when your stimulus actually appeared to the subject These timestamps are very precise on most computers For further information about synchronising and waiting for the refresh see Sync to VBL and wait for VBL If the code processing required to render all you stimuli to the screen takes longer to complete than one screen refresh then you will drop skip a frame In this case the previous frame will be left on screen for a further frame period and the flip will only take effect on the following screen update As a result time consuming operations such as disk accesses or execution of many lines of code should be avoided
166. for speech recognition voice to text using Google s public API Google s speech API is currently free to use and seems to work well Intended for within experiment processing near real time 1 2s delayed in which its often important to skip a slow or failed response and not wait a long time BatchSpeech2Text reverses these priorities It is possible and perhaps even likely that Google will start charging for usage In addition they can change the interface at any time including in the middle of an experiment If so please post to the user list and we ll try to develop a fix but there could still be some downtime Presumably confidential or otherwise sensitive voice data should not be sent to google Note Requires that flac is installed free download from https xiph org flac download html If you download and install flac but get an error that flac is missing try setting the full path to flac in preferences gt general gt flac Usage 1 Always import and make an object no data are available yet from microphone import Speech2Text gs Speech2Text speech_clip wav set up only 2 Then either Initiate a query and wait for response from google or until the time out limit is reached This is blocking mode and is the easiest to do resp gs getResponse execution blocks here print resp word resp confidence 3 Or instead advanced usage Initiate a query but do not wait for a response th
167. for the sound to finish before continuing You need to use a psychopy core wait command if you want things to pause If you call play whiles something is already playing the sounds will be played over each other setVolume newVol log True Sets the current volume of the sound 0 0 1 0 stop log True Stops the sound immediately 8 18 psychopy tools miscellaneous tools Container for all miscellaneous functions and classes 8 18 1 psychopy tools colorspacetools Functions and classes related to color space conversion dk12rgb dkl conversionMatrix Convert from DKL color space Derrington Krauskopf amp Lennie to RGB dk1Cart2rgb LUM LM S conversionMatrix Like dkl2rgb except that it uses cartesian coords LM S LUM rather than rgb2dklCart picture conversionMatrix Convert an RGB image into Cartesian DKL space hsv2rgb hsv_Nx3 Convert from HSV color space to RGB gun values 1ms2rgb lms_Nx3 conversionMatrix Convert from cone space Long Medium Short to RGB rgb21ms rgb_Nx3 conversionMatrix Convert from RGB to cone space LMS dk12rgb dkl conversionMatrix Convert from DKL color space Derrington Krauskopf amp Lennie to RGB Function details psychopy tools colorspacetools dkl2rgb dkl conversionMatrix None Convert from DKL color space Derrington Krauskopf amp Lennie to RGB Reguires a conversion matrix which will be generated from generic Sony Trinitron phosphors if not supplied note that
168. forceEndTrial val True valType bool updates constant gt lt Param name times val 0 10000 valType code updates constant gt lt Param name allowedKeys val valType code updates constant gt lt Param name storeResponseTime val False valType bool updates constant gt lt Param name correctIf val resp keys str thisTrial corrAns valType code updates const lt Param name store val last key valType str updates constant gt lt KeyboardComponent gt lt Routine gt lt Routine name thanks gt lt TextComponent name thanksText gt lt Param name name val thanksText valType code updates constant gt lt Param name text val amp guot Thanks amp guot valType code updates constant gt lt Param name colour val 1 1 1 valType code updates constant gt lt Param name ori val 0 valType code updates constant gt lt Param name pos val 0 0 valType code updates constant gt lt Param name times val 1 0 2 0 valType code updates constant gt lt Param name letterHeight val 0 2 valType code updates constant gt lt Param name colourSpace val rgb valType code updates constant gt lt Param name units val window units valType str updates None gt lt Param name font val arial valType str updates constant gt lt TextComponent gt 14 6 Names 191 PsychoPy Psychology software for Pytho
169. g 0 255 into an array of floats ranging 1 1 gt gt gt uint8_float 0 1 0 gt gt gt uint8_float 128 0 0 psychopy tools typetools float_uintl6 inarray Converts arrays lists tuples and floats ranging 1 1 into an array of Uintl6s ranging 0 2 16 gt gt gt float_uint16 1 0 gt gt gt float_uint16 0 32768 8 18 8 psychopy tools unittools Functions and classes related to unit conversion psychopy tools unittools radians x out Convert angles from degrees to radians x array like Input array in degrees out ndarray optional Output array of same shape as x y ndarray The corresponding radian values deg2rad eguivalent function Convert a degree array to radians gt gt gt deg np arange l2 30 gt gt gt np radians deg array 0 0 52359878 1 04719755 1 57079633 2 0943951 2 61799388 3 14159265 3 66519143 4 1887902 4 71238898 5 23598776 5 75958653 150 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 gt gt gt out np zeros deg shape gt gt gt ret np radians deg out gt gt gt ret is out True psychopy tools unittools degrees x out Convert angles from radians to degrees x array like Input array in radians out ndarray optional Output array of same shape as x y ndarray of floats The corresponding degree values if out was supplied this is a reference to it rad2deg eq
170. g The name of the file including path if needed The extension dlm will be added if not included delim a string the delimitter to be used e g for tab delimitted for csv files matrixOnly True False If True prevents the output of the extralnfo provided at initialisa tion sd standard deviation of Quest posterior pdf setExp exp Sets the ExperimentHandler that this handler is attached to Do NOT attempt to set the experiment using trials _exp myExperiment because it needs to be performed using the weakref module simulate fActual returns a simulated user response to the next intensity level presented by Quest need to supply the actual threshold level 8 3 6 FitWeibull class psychopy data FitWeibull xx yy sems 1 0 guess None display 1 expectedMin 0 5 Fit a Weibull function either 2AFC or YN of the form y chance l 0 chance l exp xx alpha beta and with inverse x alpha log 1 0 y 1 chance 1 0 beta After fitting the function you can evaluate an array of x values with fit eval x retrieve the inverse of the function with fit inverse y or retrieve the parameters from fit params a list with alpha beta 94 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 eval xx params None Evaluate xx for the current parameters of the model or for arbitrary params if these are given inverse yy p
171. gamma are details about the calibration notes is a text field to store any useful info useBits True False None everbose True False None currentCalib is a dict object containing various fields for a calibration Use with caution since the dict may not contain all the necessary fields that a monitor object expects to find eg myMon Monitor sony500 distance 114 Fetches the info on the sony500 and overrides its usual distance to be 114cm for this experiment myMon Monitor sony500 followed by myMon distance 114 does the same For both methods if you then save any modifications will be saved as well copyCalib calibName None Stores the settings for the current calibration settings as new monitor delCalib calibName Remove a specific calibration from the current monitor Won t be finalised unless monitor is saved gammaIsDefault Determine whether we re using the default gamma values getCalibDate As a python date object convert to string using calibTools strFromDate getDKL_RGB RECOMPUTE False Returns the DKL gt RGB conversion matrix If one has been saved this will be returned Otherwise if power spectra are available for the monitor a matrix will be calculated 8 14 psychopy monitors for those that don t like Monitor Center 137 PsychoPy Psychology software for Python Release 1 81 03 getDistance Returns distance from viewer to the screen in cm or None if not
172. gb color 1 mywin setMouseVisible False capture cv CaptureFromCAM 0 img cv QueryFrame capture pi Image fromstring RGB cv GetSize img img tostring raw BGR 0 1 print pi size myStim visual GratingStim win mywin tex pi pos 0 0 5 size 0 6 0 6 opacity 1 0 units myStim setAutoDraw True while True img cv QueryFrame capture pi Image fromstring RGB cv GetSize img img tostring raw BGR 0 1 myStim setTex pi mywin flip theKey event getKeys if len theKey 0 break 10 12 Adding a web cam 169 PsychoPy Psychology software for Python Release 1 81 03 170 Chapter 10 Recipes How to s CHAPTER ELEVEN FREQUENTLY ASKED QUESTIONS FAQS 11 1 Why is the bits demo not working So far PsychoPy supports bits only in the bits mode rather than mono or color In this mode a code the T lock code is written to the lookup table on the bits device by drawing a line at the top of the window The most likely reason that the demo isn t working for you is that this line is not being detected by the device and so the lookup table is not being modified Most of these problems are actually nothing to do with PsychoPy per se but to do with your graphics card and the CRS bits box itself There are a number of reasons why the T lock code is not being recognised the bits device is in the wrong mode Open the utility that CR
173. ges wx numpy scipy matplotlib pyglet pygame pythonVersion pythonScipy Version openGL version vendor rendering engine plus info on whether several extensions are present openGL Version openGLextGL_EXT_ framebuffer_object psychopy info getRAM Return system s physical RAM amp available RAM in M Slow on Mac and Linux fast on Windows psutils is good but another dep 8 10 psychopy iohub ioHub event monitoring framework ioHub monitors for device events in parallel with the PsychoPy experiment execution by running in a separate process than the main PsychoPy script This means for instance that keyboard and mouse event timing is not guantized by the rate at which the window swap method is called ioHub reports device events to the PsychoPy experiment runtime as they occur Optionally events can be saved to a HDES file All iohub events are timestamped using the PsychoPy global time base psychopy core getTime Events can be accessed as a device independent event stream or from a specific device of interest 8 10 psychopy iohub ioHub event monitoring framework 117 PsychoPy Psychology software for Python Release 1 81 03 A comprehensive set of examples that each use at least one of the iohub devices is available in the psy chopy demos coder iohub folder Note This documentation is in very early stages of being written Many sections regarding device usage details are simply plac
174. given input levels gamma your own gamma value single float ebitsIN number of values in your lookup table bitsOUT number of bits in the DACs myTable gammaModel myTable gamma fitGammaErrFun params x y minLum maxLum Provides an error function for fitting gamma function used by fitGammaFun fitGammaFun x y Fits a gamma function to the monitor calibration data Parameters xVals are the monitor look up table vals either 0 255 or 0 0 1 0 yVals are the measured luminances from a photometer spectrometer 8 14 3 getAllMonitors psychopy monitors getAllMonitors Find the names of all monitors for which calibration files exist 8 14 4 findPR650 psychopy monitors findPR650 ports None DEPRECATED as of v 1 60 01 Use psychopy hardware findPhotometer instead which finds a wider range of devices 8 14 5 getLumSeriesPR650 psychopy monitors getLumSeriesPR650 lJumLevels 8 winSize 800 600 monitor None gamma 1 0 allGuns True useBits False auto Mode auto stimSize 0 3 photometer COM1 DEPRECATED since v1 60 01 Use psychopy monitors getLumSeries instead 140 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 8 14 6 getRGBspectra psychopy monitors getRGBspectra stimSize 0 3 winSize 800 600 photometer COM1 usage getRGBspectra stimSize 0 3 winSize 800 600 photometer COM 1 Params e photome
175. gy software for Python Release 1 81 03 getEarlierTrial psychopy data TrialHandler method 82 getEnabled psychopy hardware iolab ButtonBox method 109 getEvents psychopy hardware forp ButtonBox method 108 getEvents psychopy hardware iolab ButtonBox method 109 getEvents psychopy iohub client ioHubConnection method 120 getExp psychopy data MultiStairHandler method 89 getExp psychopy data OuestHandler method 92 getExp psychopy data StairHandler method 86 getExp psychopy data TrialHandler method 82 getFutureTrial psychopy data Trial Handler method 83 getGamma psychopy monitors Monitor method 138 getGammaGrid psychopy monitors Monitor method 138 getHat psychopy hardware joystick Joystick method 110 getKeys in module psychopy event 99 getKeys psychopy iohub client keyboard Keyboard method 124 getLastColorTemp method 114 getLastLum psychopy hardware pr PR650 method 113 psychopy hardware pr PR655 getLastResetTime psychopy core MonotonicClock method 78 getLastSpectrum psychopy hardware pr PR650 method 113 getLastSpectrum psychopy hardware pr PR655 method 114 getLastTristim psychopy hardware pr PR655 method 115 getLastUV psychopy hardware pr PR655 method 115 getLastX Y psychopy hardware pr PR655 method 115 getLevel in module psychopy logging 130 getLevelsPost psychopy monitors Monitor method
176. hat a particular change to the code occurred Precede your message with one or more of the following to help us spot easily if this is a bug fix which might need pulling into other development branches or new feature which we might want to avoid pulling in if it might disrupt existing code BF bug fix FF feature fix This is for fixes to code that hasn t been released RF refactoring NF new feature e ENH enhancement improvement to existing code e DOC for all kinds of documentation related commits TEST for adding or changing tests NB The difference between BF and FF is that BF indicates a fix that is appropriate for back porting to earlier versions whereas FF indicates a fix to code that has not been released and so cannot be back ported 13 1 8 Share your improvement with others Only a couple of people have direct write access to the psychopy repository but you can get your changes included in upstream by pushing your changes back to your github fork and then submitting a pull reguest Communication is good and hopefully you have already been in touch via the user or dev lists about your changes When adding an improvement or new feature consider how it might impact others Is it likely to be generally useful or is it something that only you or your lab would need It s fun to contribute but consider does it actually need to be part of PsychoPy Including more features has a downside in terms of co
177. have to be determined from a knowledge of the screen dimensions These can be determined at any point by the Window size attribute Spatial frequency cycles per stimulus so will scale with the size of the stimulus Requires No monitor information 2 2 2 Normalised units In normalised norm units the window ranges in both x and y from 1 to 1 That is the top right of the window has coordinates 1 1 the bottom left is 1 1 Note that in this scheme setting the height of the stimulus to be 1 0 will make it half the height of the window not the full height because the window has a total height of 1 1 2 Also note that specifying the width and height to be equal will not result in a square stimulus if your window is not square the image will have the same aspect ratio as your window e g on a 1024x768 window the size 0 75 1 will be square Spatial frequency cycles per stimulus so will scale with the size of the stimulus Requires No monitor information 2 2 3 Centimeters on screen Set the size and location of the stimulus in centimeters on the screen 6 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 Spatial frequency cycles per cm Requires information about the screen width in cm and size in pixels Assumes pixels are square Can be verified by drawing a stimulus with matching width and height and verifying that it is in fact square For a CRT this can
178. he experimenter to control the language that will be used for display within the app itself It can potentially control other display conventions as well not just the language PsychoPy will obtain the locale from the user preference if set or the OS Workflow 1 Make a translation from English en_US to another language You ll need a strong understanding of PsychoPy English and the other language 2 In some cases it will be necessary to adjust PsychoPy s code but only if new code has been added to the app and that code displays text Then re do step 1 to translate the newly added strings See notes in psychopy app localization readme txt 13 5 Localization 118N translation 183 PsychoPy Psychology software for Python Release 1 81 03 13 5 1 Make a translation po file As a translator you will likely introduce many new people to PsychoPy and your translations will greatly influence their experience Try to be completely accurate it is better to leave something in English if you are unsure how PsychoPy is supposed to work To translate a given language you ll need to know the standard 5 character code see psy chopy app ocalization mappings E g for Japanese wherever LANG appears in the documentation here you should use the actual code i e ja_JP without guotes A free app called poedit is useful for managing a translation For a given language the translation mappings from en_US to LANG are sto
179. he psycho metric function with these values beta 3 5 or anumber Controls the steepness of the psychometric function delta 0 01 or a number The fraction of trials on which the observer presses blindly gamma 0 5 or a number The fraction of trials that will generate response 1 when intensity Inf grain 0 07 or a number The guantization of the internal table range None or a number The intensity difference between the largest and smallest intensity that the internal table can store This interval will be centered on the initial guess tGuess OUEST assumes that intensities outside of this range have zero prior probability i e they are impossible extraInfo A dictionary typically that will be stored along with collected data using saveAsPickle or saveAsText methods minVal None or a number The smallest legal value for the staircase which can be used to prevent it reaching impossible contrast values for instance maxVal None or a number The largest legal value for the staircase which can be used to prevent it reaching impossible contrast values for instance staircase None or StairHandler Can supply a staircase object with intensities and results Might be useful to give the guest algorithm more information if you have it You can also call the importData function directly addData result intensity None Deprecated since 1 79 00 This function name was ambiguous Please use one of these instead addResp
180. hereby the parameters controlling trials are predetermined at the beginning of the experiment rather than determined on each trial For example a stimulus may be presented for 3 pre determined time periods 100 200 300ms on different trials and then repeated a number of times The order of presentation of the different conditions can be randomised or sequential in a fixed order Contrast this method with the adaptive staircase VBI Vertical Blank Interval aka the Vertical Retrace or Vertical Blank VBL The period in between video frames and can be used for synchronising purposes On a CRT display the screen is black during the VBI and the display beam is returned to the top of the display VBI blocking The setting whereby all functions are synced to the VBI After a call to psychopy visual Window flip nothing else occurs until the VBI has occurred This is opti mal and allows very precise timing because as soon as the flip has occurred a very precise time interval is known to have occurred VBI syncing aka vsync The setting whereby the video drawing commands are synced to the VBI When psy chopy visual Window flip is called the current back buffer where drawing commands are being executed will be held and drawn on the next VBI This does not necessarily entail VBI blocking because the system may return and continue executing commands but does guarantee a fixed interval between frames being drawn xlsx Excel OpenXML file forma
181. hey be there 10 1 Adding external modules to Standalone PsychoPy You might find that you want to add some additional Python module package to your Standalone version of PsychoPy To do this you need to download a copy of the package make sure it s for Python 2 7 on your particular platform unzip open it into a folder add that folder to the path of PsychoPy by one of the methods below Avoid adding the entire path e g the site packages folder of separate installation of Python because that may contain conflicting copies of modules that PsychoPy is also providing 10 1 1 Using preferences As of version 1 70 00 you can do this using the PsychoPy preferences general There you will find preference for paths which can be set to a list of strings e g Users jwp code code thirdParty These only get added to the Python path when you import psychopy or one of the psychopy packages in your script 10 1 2 Adding a pth file An alternative is to add a file into the site packages folder of your application This file should be pure text and have the extension pth to indicate to Python that it adds to the path On win32 the site packages folder will be something like C Program Files PsychoPy2 lib site packages On OS X you need to right click the application icon select Show Package Contents and then navigate down to Contents Resources lib python2 6 Put your pth file here next to the various libraries The adva
182. his often fails Returns e An object representing the first photometer found None if the ports didn t yield a valid response None if there were not even any valid ports suggesting a driver not being installed e g photom findPhotometer device PR655 sweeps ports 0 to 10 searching for a PR655 print photom getLum if hasattr photom getSpectrum fcan retrieve spectrum e g a PR650 print photom getSpectrum 8 9 psychopy info functions for getting information about the sys tem Fetching data about the system class psychopy info RunTimeInfo author None version None win None refreshTest grating userProcsDetailed False verbose False Returns a snapshot of your configuration at run time for immediate or archival use Returns a dict like object with info about PsychoPy your experiment script the system amp OS your window and monitor settings if any python amp packages and openGL If you want to skip testing the refresh rate use refreshTest None Example usage see runtimeInfo py in coder demos 116 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Author 2010 written by Jeremy Gray with input from Jon Peirce and Alex Holcombe Parameters win None False Window instance what window to use for refresh rate testing if any and settings None gt temporary window using defaults False gt no window created used nor profiled
183. hopy monitors Monitor method 138 getX psychopy hardware joystick Joystick method 110 getY psychopy hardware joystick Joystick method 110 getZ psychopy hardware joystick Joystick method 111 H haveInternetAccess in module psychopy web 151 hsv2rgb in module psychopy tools colorspacetools 147 id psychopy iohub client keyboard KeyboardRelease at tribute 127 image2array in module psychopy tools imagetools 148 imfft in module psychopy filters 101 imifft in module psychopy filters 101 importConditions in module psychopy data 96 importData psychopy data QuestHandler method 93 incTrials psychopy data OuestHandler method 93 info in module psychopy logging 130 init_device pyxid XidDevice method 105 inverse psychopy data FitCumNormal method 96 inverse psychopy data FitLogistic method 95 inverse psychopy data FitNakaRushton method 95 inverse psychopy data FitWeibull method 95 ioHubConnection class in psychopy iohub client 120 isPressedIn psychopy event Mouse method 98 J Joystick class in psychopy hardware joystick 110 K Keyboard class in psychopy iohub client keyboard 124 KeyboardPress class in psychopy iohub client keyboard 126 KeyboardRelease class in psy chopy iohub client keyboard 127 L launchHubServer in module psychopy iohub client o in module psychopy hardware emulator ea A psychopy monit
184. ible within PsychoPy using a separate python package pyFileSec which grew out of PsychoPy pyFileSec is distributed with the StandAlone versions of PsychoPy or can be installed using pip or easy_install via https pypi python org pypi PyFileSec Some elaboration of pyFileSec usage and security strategy can be found here http pythonhosted org PyFileSec Basic usage is illustrated in the Coder demo gt misc gt encrypt_data py 8 5 psychopy event for keypresses and mouse clicks class psychopy event Mouse visible True newPos None win None Easy way to track what your mouse is doing It needn t be a class but since Joystick works better as a class this may as well be one too for consistency Create your visual Window before creating a Mouse Parameters visible True or False makes the mouse invisible if necessary newPos None or x y gives the mouse a particular starting position pygame Window only 8 4 Encryption 97 PsychoPy Psychology software for Python Release 1 81 03 win None or Window the window to which this mouse is attached the first found if None provided clickReset buttons 0 1 2 Reset a 3 item list of core Clocks use in timing button clicks The pyglet mouse button pressed handler uses their clock getLastResetTime when a button is pressed so the user can reset them at stimulus onset or offset to measure RT The default is to reset all but they can be reset individually as specified in
185. ibration saveMon saves the current dict of calibs to disk setCalibDate date None Sets the calibration to a given date time or to the current date time if none given Also returns the date as set 138 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 setCurrent calibration Sets the current calibration for this monitor Note that a single file can hold multiple calibrations each stored under a different key the date it was taken The argument is either a string naming the calib or an integer eg myMon setCurrent mainCalib fetches the calibration named mainCalib calibName myMon setCurrent 0 fetches the first calibration alphabetically for this monitor calibName myMon setCurrent 1 fetches the last alphabetical calib for this moni tor this is default If default names are used for calibs ie date time stamp then this will import the most recent setDKL_RGB dkl_rgb sets the DKL gt RGB conversion matrix for a chromatically calibrated monitor matrix is a 3x3 num array setDistance distance To the screen cm setGamma gamma Sets the gamma value s for the monitor This only uses a single gamma value for the three guns which is fairly approximate Better to use setGammaGrid which uses one gamma value for each gun setGammaGrid gammdGrid Sets the min max gamma values for the each gun setLMS_RGB ms_rgb sets the LMS gt RGB conversion ma
186. ide format as expected by R for creating dataframes and various other analysis programs means that some information must be repeated on every row In particular if the trialHandler s extraInfo exists then each entry in there occurs in every row In builder this will include any entries in the Experiment info field of the Experiment settings dialog In Coder this information can be set using something like myTrialHandler extraInfo SubjID Joan Smith DOB 1970 Nov 16 Group Control Parameters 84 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 fileName if extension is not specified csv will be appended if the delimiter is else txt will be appended Can include path info 955 delim allows the user to use a delimiter other than the default tab is popular with file extension csv matrixOnly outputs the data with no header row appendFile will add this output to the end of the specified file if it already exists setExp exp Sets the ExperimentHandler that this handler is attached to Do NOT attempt to set the experiment using trials _exp myExperiment because it needs to be performed using the weakref module 8 3 3 StairHandler class psychopy data StairHandler startVal nReversals None stepSizes 4 nTrials 0 nUp 1 nDown 3 extralnfo None method AFC stepType db minVal None m
187. ild up in __init__ You need name startTime duration and several other params to be defined or you get errors name should be of type code The Param class is defined in psychopy app builder experiment Param A very useful thing that Params know is how to create a string suitable for writing into the py script In particular the __str__ representation of a Param will format its value val based on its type valType appropriately This means that you don t need to check or handle whether the user entered a plain string a string with a code trigger character or the field was of type code in the first place If you simply request the str representation of the param it is formatted correctly To indicate that a param eg thisParam should be considered as an advanced feature set its category to advanced self params thisParam categ Advanced Then the GUI shown to the experimenter will place it on the Advanced tab Other categories work similarly Custom etc During development it can sometimes be helpful to save the params into the xxx_lastrun py file as comments so I could see what was happening def writeInitCode self buff f for debugging during Component development buff writeIndented self params for aperture n for p in self params keys try buff writeIndented s s lt type s gt n p self params p val self params p valT except pass A lot more detail can be inferr
188. iles and are not translated by poedit Instead 184 Chapter 13 For Developers PsychoPy Psychology software for Python Release 1 81 03 copy the default version named psychopy app Resources tips txt to a new file in the same directory named tips_LANG txt Then replace English language tips with translated tips Note that some of the humor might not translate well so feel free to leave out things that would be too odd or include occasional mild humor that would be more appropriate Humor must be respectful and suitable for using in a classroom laboratory or other professional situation Don t get too creative here If you have any doubt best leave it out Hopefully it goes without saying that you should avoid any religious political disrespectful or sexist material in poedit translate the file name translate tips txt as tips_LANG txt Commit both the po and mo files to github not just one or the other and any changed files e g tips_LANG localization mappings 13 5 2 Adjust PsychoPy s code This is mostly complete as of 1 81 00 but will be needed for new code that displays text to users of the app experi menters not study participants There are a few things to keep in mind when working on the app s code to make it compatible with translations If you are only making a translation you can skip this section e In PsychoPy s code the language to be used should always be English with Ameri
189. ime will be relative to the Clock s last reset Author 2003 written by Jon Peirce 2009 keyList functionality added by Gary Strangman 2009 timeStamped code provided by Dave Britton psychopy event xydist p 0 0 0 0 p2 0 0 0 07 Helper function returning the cartesian distance between p1 and p2 8 5 psychopy event for keypresses and mouse clicks 99 PsychoPy Psychology software for Python Release 1 81 03 8 6 psychopy filters helper functions for creating filters Various useful functions for creating filters and textures e g for PatchStim psychopy filters butter2d_bp size cutin cutoff n Bandpass Butterworth filter in two dimensions Parameters size tuple size of the filter cutin float relative cutin frequency of the filter 0 1 0 cutoff float relative cutoff frequency of the filter O 1 0 n int optional order of the filter the higher n is the sharper the transition is Returns numpy ndarray filter kernel in 2D centered psychopy filters butter2d_hp size cutoff n 3 Highpass Butterworth filter in two dimensions Parameters size tuple size of the filter cutoff float relative cutoff frequency of the filter 0 1 0 n int optional order of the filter the higher n is the sharper the transition is Returns numpy ndarray filter kernel in 2D centered psychopy filters butter2d_ lp size cutoff n 3 Create lowpass 2D Butterworth filter Parameters size tuple si
190. imental Psychology 18 643 662 40 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 letters are spelling out a different incongruous colour Reaction times for the congruent trials where letter colour matches the written word are faster than for the incongruent trials From this demo you should note e How to setup a trial list in a csv or xlsx file How to record key presses and reaction times using the resp Component in trial Routine How to change a stimulus parameter on each repetition of the loop The text and rgb values of the word Component are based on thisTrial which represents a single iteration of the trials loop They have been set to change every repeat don t forget that step e How to present instructions just have a long lasting TextStim and then force end of the Routine when a key is pressed but don t bother storing the key press Psychophysics Staircase demo This is a mini psychophysics experiment designed to find the contrast detection threshold of a gabor i e find the contrast where the observer can just see the stimulus From this demo you should note The opening dialog box requires the participant to enter the orientation of the stimulus the required fields here are determined by Experiment Info in Preferences which is a python dictionary This information is then entered into the stimulus parameters using expInfo ori The ph
191. iming default 5 skip how many frames to silently omit initially during T1 stabilization no sync pulse Not needed to test script timing but will give more accurate feel to start of run aka discdacgs sound simulate scanner noise 8 8 5 fORP response box fORP fibre optic MR compatible response devices by CurrentDesigns http www curdes com This class is only useful when the fORP is connected via the serial port If you re connecting via USB just treat it like a standard keyboard E g use a Keyboard component and typically listen for Allowed keys 1 2 3 4 5 Oruseevent getKeys 8 8 psychopy hardware hardware interfaces 107 PsychoPy Psychology software for Python Release 1 81 03 class psychopy hardware forp ButtonBox serialPort 1 baudrate 19200 Serial line interface to the fORP MRI response box To use this object class select the box use setting serialPort and connect the serial line To emulate key presses with a serial connection use getEvents asKeys True e g to be able to use a RatingScale object during scanning Alternatively connect the USB cable and use fORP to emulate a keyboard fORP sends characters at 800Hz so you should check the buffer frequently Also note that the trigger event numpy the fORP is typically extremely short occurs for a single 800Hz epoch Parameters serialPort should be a number where 1 COM1 baud the communication rate baud
192. imulus is presented See duration for details Typically the subject s response should end the trial not a duration A blank or negative value means wait for a very long time storeRatingTime Save the time from the beginning of the trial until the participant responds storeRating Save the rating that was selected lowAnchorText str Custom text to display at the low end of the scale e g 090 overrides low setting highAnchorText str Custom text to display at the low end of the scale e g 10090 overrides high setting customize_everything str If this is not blank it will be used when initializing the rating scale just as it would be in a code component see Rat ingScale This allows access to all the customizable aspects of a rating scale and supersedes all of the other RatingScale settings in the dialog panel This does not affect startTime forceEndTrial duration storeRatingTime storeRating 6 4 Components 55 PsychoPy Psychology software for Python Release 1 81 03 See also API reference for RatingScale 6 4 12 Sound Component Parameters name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces start float or integer The time that the stimulus should first play See Defining the onset duration of components for details stop For sounds loaded from a file leave this
193. in the name for your language Give a name that should be familiar to people who read that language i e use the name of the language as written in the language itself not in en_US About 25 are already done Edit a translation Open the po file with Poedit and press Update button on the toolbar to update newly added removed strings that need to be translated Select a string you want to translate and input your translation to Translation box If you are unsure where string is used point on the string in Source text box and right click You can see where the string is defined Technical terms should not be translated Builder Coder PsychoPy Flow Routine and so on See the Japanese translation for guidance If there are formatting arguments in the original string Ss first i the same number of arguments must also appear in the translation but their order is not constrained to be the original order If they are named e g first i that part should not be translated here first is a python name If you think your translation might have room for improvement indicate that it is fuzzy Saving Notes does not work for me on Mac seems like a bug in poedit After making a new translation saving it in poedit will save the po file and also make an associated mo file You need to update the mo file if you want to see your changes reflected in PsychoPy The start up tips are stored in separate f
194. ing the size that the screen is currently set to in the operating system settings Window size The size of the window in pixels if this is not to be a full screen window Units The default units of the window see Units for the window and stimuli These can be overridden by individual Components 6 6 Defining the onset duration of components As of version 1 70 00 the onset and offset times of stimuli can be defined in several ways Start and stop times can be entered in terms of seconds time s by frame number frameN or in relation to another stimulus condition Condition would be used to make Components start or stop depending on the status of something else for example when a sound has finished Duration can also be varied using a Code Component If you need very precise timing particularly for very brief stimuli for instance then it is best to control your on set duration by specifying the number of frames the stimulus will be presented for Measuring duration in seconds or milliseconds is not very precise because it doesn t take into account the fact that your monitor has a fixed frame rate For example if the screen has a refresh rate of 60Hz you cannot present your stimulus for 120ms the frame rate would limit you to 116 7ms 7 frames or 133 3ms 8 frames The duration of a frame in seconds is simply 1 refresh rate in Hz Condition would be used to make Components start or stop depending on the status of something
195. inue until a key is pressed or use it to continue a training period until a criterion performance is reached To do this you need a Code Component inserted into your routine All loops have an attribute called finished which is set to True or False in Python these are really just other names for 7 and 0 This finished property gets checked on each pass through the loop So the key piece of code to end a loop called trials is simply 10 7 Builder terminating a loop 163 PsychoPy Psychology software for Python Release 1 81 03 trials finished True for trials finished 1 if you prefer Of course you need to check the condition for that with some form of if statement Example 1 You have a change blindness study in which a pair of images flashes on and off with intervening blanks in a loop called presentationLoop You record the key press of the subject with a Keyboard Component called resp Using the ForceEndTrial parameter of resp you can end the current cycle of the loop but to end the loop itself you would need a Code Component Insert the following two lines in the End Routine parameter for the Code Component which will test whether more than zero keys have been pressed if len respl keys gt 0 presentationLoop finished 1 Example 2 Sometimes you may have more possible trials than you can actually display By default a loop will present all possible trials nReps length of list If you only want to present the fir
196. ion PsychoPy has two main views the Builder view and the Coder view It also has a underlying API that you can call directly 1 Builder You can generate a wide range of experiments easily from the Builder using its intuitive graphical user interface GUI This might be all you ever need to do But you can always compile your experiment into a python script for fine tuning and this is a quick way for experienced programmers to explore some of PsychoPy s libraries and conventions 2 Coder For those comfortable with programming the Coder view provides a basic code editor with syntax highlighting code folding and so on Importantly it has its own output window and Demo menu The demos illustrate how to do specific tasks or use specific features they are not whole experiments The Coder tutorials should help get you going and the API reference will give you the details The Builder and Coder views are the two main aspects of the PsychoPy application If you ve installed the StandAlone version of PsychoPy on MS Windows then there should be an obvious link to PsychoPy in your gt Start gt Programs If you installed the StandAlone version on Mac OS X then the application is where you put it On these two platforms you can open the Builder and Coder views from the View menu and the default view can be set from the preferences On Linux you can start PsychoPy from a command line or make a launch icon which
197. is essential to advance the staircase to a new intensity level Supplying an intensity value here indicates that you did not use the recommended intensity in your last trial and the staircase will replace its recorded value with the one you supplied here calculateNextIntensity based on current intensity counter of correct responses and current direction getExp Return the ExperimentHandler that this handler is attached to if any Returns None if not attached getOriginPathAndFile originPath None Attempts to determine the path of the script that created this data file and returns both the path to that script and its contents Useful to store the entire experiment with the data If originPath is provided e g from Builder then this is used otherwise the calling script is the originPath fine from a standard python script next Advances to next trial and returns it Updates attributes thisTrial thisTrialN and thisIndex If the trials have ended calling this method will raise a StopIteration error This can be handled with code such as staircase data StairHandler for eachTrial in staircase automatically stops when done do stuff or staircase data StairHandler while True ie forever try thisTrial staircase next except StopIteration we got a StopIteration error break break out of the forever loop do stuff here for the trial nextTrial DEPRECATION WARNING nextTrial will b
198. ithin a single file From a terminal window cd psychopy tests eg Users jgray code psychopy psychopy tests run py path to file_ with doctests py If the tests pass you hopefully haven t damaged other parts of PsychoPy If possible add a unit test for your new feature too so that if other people make changes they don t break your work You can merge your changes back into your master branch with git checkout master git merge feature somethingNew Merge conflicts happen and need to be resolved If you configure your git preferences gitconfig to include 178 Chapter 13 For Developers PsychoPy Psychology software for Python Release 1 81 03 merge summary true log true tool opendiff then you ll be able to use a handy GUI interface opendiff for reviewing differences and conflicts just by typing git mergetool from the command line after hitting a merge conflict such as during a git pull upstream master Once you ve folded your new code back into your master and pushed it back to your github fork then it s time to Share your improvement with others 13 2 Adding documentation There are several ways to add documentation all of them useful doc strings comments in the code and demos to show an example of actual usage To further explain something to end users you can create or edit a rst file that will automatically become formatted for the web and eventually appear on www psychopy
199. ithout your repository version touching them 13 1 Using the repository Note Much of the following is explained with more detail in the nitime documentation and then in further detail in numerous online tutorials 13 1 1 Workflow The use of git and the following workflow allows people to contribute changes that can easily be incorporated back into the project while hopefully maintaining order and consistency in the code All changes should be tracked and reversible e Create a fork of the central psychopy psychopy repository Create a local clone of that fork For small changes make the changes directly in the master branch push back to your fork submit a pull reguest to the central repository For substantial changes new features create a branch when finished run unit tests when the unit tests pass merge changes back into the master branch submit a pull request to the central repository 175 PsychoPy Psychology software for Python Release 1 81 03 13 1 2 Create your own fork of the central repository Go to github create an account and make a fork of the psychopy repository You can change your fork in any way you choose without it affecting the central project You can also share your fork with others including the central project 13 1 3 Fetch a local copy Install git on your computer Create and upload an ssh key to your github account this is necessary for you to push
200. ition None Add data for the current trial getEarlierTrial n Returns the condition information from n trials previously Useful for comparisons in n back tasks Returns None if trying to access a trial prior to the first 82 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 getExp Return the ExperimentHandler that this handler is attached to if any Returns None if not attached getFutureTrial n Returns the condition for n trials into the future without advancing the trials Returns None if attempting to go beyond the last trial getOriginPathAndFile originPath None Attempts to determine the path of the script that created this data file and returns both the path to that script and its contents Useful to store the entire experiment with the data If originPath is provided e g from Builder then this is used otherwise the calling script is the originPath fine from a standard python script next Advances to next trial and returns it Updates attributes thisTrial thisTrialN and thisIndex If the trials have ended this method will raise a Stoplteration error This can be handled with code such as trials data TrialHandler for eachTrial in trials automatically stops when done do stuff or trials data TrialHandler while True ie forever Ery thisTrial trials next except StopIteration we got a StopIteration error bre
201. itors Monitor method 138 next psychopy data MultiStairHandler method 89 next psychopy data QuestHandler method 93 next psychopy data StairHandler method 86 next psychopy data TrialHandler method 83 nextEntry psychopy data ExperimentHandler method 81 nextTrial psychopy data MultiStairHandler method 89 198 Index PsychoPy Psychology software for Python Release 1 81 03 nextTrial psychopy data QuestHandler method 93 nextTrial psychopy data StairHandler method 86 nextTrial psychopy data TrialHandler method 83 P ParallelPort class in psychopy parallel 142 parseSpectrumOutput psychopy hardware pr PR650 method 114 parseSpectrumOutput psychopy hardware pr PR655 method 115 pix2cm in module psychopy tools monitorunittools 149 pix2deg in module psychopy tools monitorunittools 149 playQ psychopy sound SoundPygame method 145 playQ psychopy sound SoundPyo method 145 playback psychopy microphone AdvAudioCapture method 132 playMarker psychopy microphone AdvAudioCapture method 132 plotFramelIntervals in chopy tools plottools 149 pol2cart in module psychopy tools coordinatetools 148 poll_for_response pyxid ResponseDevice 105 PR650 class in psychopy hardware pr 113 PR655 class in psychopy hardware pr 114 module psy method pressEventID psychopy iohub client keyboard KeyboardRelease attribute
202. iving an Nx2 numpy array of floats 1 1 you can specify the sound yourself as a waveform By default a Hamming window 5ms duration will be applied to a generated tone so that onset and offset are smoother to avoid clicking To disable the Hamming window set hamming False secs Duration of a tone Not used for sounds from a file start float Where to start playing a sound file default Os start of the file stop float Where to stop playing a sound file default end of file octave is only relevant if the value is a note name Middle octave of a piano is 4 Most computers won t output sounds in the bottom octave 1 and the top octave 8 is generally painful stereo True default two channels left and right False one channel volume loudness to play the sound from 0 0 silent to 1 0 max Adjustments are not possible during playback only before loops int How many times to repeat the sound after it plays once If loops 1 the sound will repeat indefinitely until stopped sampleRate 44100 if the psychopy sound init function has been called or if another sound has al ready been created then this argument will be ignored and the previous setting will be used bits has no effect for the pyo backend hamming whether to apply a Hamming window 5ms for generated tones Not applied to sounds from files getDuration Return the duration of the sound getLoops Returns the current requested loo
203. k is a Gaussian then the size refers to width at 3 standard deviations on either side of the mean i e sd size 6 units deg cm pix norm or inherit from window See Units for the window and stimuli Advanced Seitings colour See Color spaces colour space rgb dkl or lms See Color spaces SF SFx SFy or a single value applied to x and y The spatial freguency of the texture on the patch The units are dependent on the specified units for the stimulus window if the units are deg then the SF units will be cycles deg if units are norm then the SF units will be cycles per stimulus If this is set to none then only one cycle will be displayed phase single float or pair of values X Y The position of the texture within the mask in both X and Y If a single value is given it will be applied to both dimensions The phase has units of cycles rather than degrees or radians wrapping at 1 As a result setting the phase to 0 1 2 is equivalent causing the texture to be centered on the mask A phase of 0 25 will cause the image to shift by half a cycle eguivalent to pi radians The advantage of this is that is if you set the phase according to time it is automatically in Hz Texture Resolution an integer power of two Defines the size of the resolution of the texture for standard textures such as sin sgr etc For most cases a value of 256 pixels will suffice but if stimuli are going to be very small then a lower resolution will us
204. kle or saveAsText methods stepType specifies whether each step will be a jump of the given size in db log or lin units lin means this intensity will be added subtracted method Not used and may be deprecated in future releases 8 3 psychopy data functions for storing saving analysing data 85 PsychoPy Psychology software for Python Release 1 81 03 stepType db lin log The type of steps that should be taken each time lin will simply add or subtract that amount each step db and log will step by a certain number of decibels or log units note that this will prevent your value ever reaching zero or less minVal None or a number The smallest legal value for the staircase which can be used to prevent it reaching impossible contrast values for instance maxVal None or a number The largest legal value for the staircase which can be used to prevent it reaching impossible contrast values for instance addData result intensity None Deprecated since 1 79 00 This function name was ambiguous Please use one of these instead addResponse result intensity addOtherData dataName value addOtherData dataName value Add additional data to the handler to be tracked alongside the result data but not affecting the value of the staircase addResponse result intensity None Add a 1 or 0 to signify a correct detected or incorrect missed trial This
205. l functions for interacting with the serial port 143 PsychoPy Psychology software for Python Release 1 81 03 8 17 psychopy sound play various forms of sound 8 17 1 Sound PsychoPy currently supports a choice of two sound libraries pyo or pygame Select which will be used via the audioLib preference sound Sound will then refer to either SoundPyo or SoundPygame This can be set on a per experiment basis by importing preferences and setting the audioLib preference to use It is important to use sound Sound in order for proper initialization of the relevant sound library Do not use sound SoundPyo or sound SoundPygame directly Because they offer slightly different features the differences be tween pyo and pygame sounds are described here Pygame sound is more thoroughly tested whereas pyo offers lower latency and more features class psychopy sound SoundPyo value C secs 0 5 octave 4 stereo True volume 1 0 loops 0 sampleRate 44100 bits 16 hamming True start 0 stop 1 name autoLog True Create a sound object from one of MANY ways value can be a number string or an array If it s a number between 37 and 32767 then a tone will be generated at that frequency in Hz It could be a string for a note A B B C Csh Then you may want to specify which octave as well e Or a string could represent a filename in the current location or mediaLocation or a full path combo Or by g
206. l as not matching any of the predefined names in python numpy and PsychoPy For example the stimulus called movie cannot use a parameter also called movie so you need to call it movieName An alternative method can be used without these restrictions If you set the Builder preference unclutteredNamespace to True you can then access the variables by referring to parameter as an attribute of the singular name of the loop prepended with this For example if you have a loop called trials which has the above file attached to it then you can access the stimulus ori with thisTrial ori If you have a loop called blocks you could use thisBlock corrAns Now although the name of the loop must still be valid and unique the names of the parameters of the file do not have the same requirements they must still not contain spaces or punctuation characters 44 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 6 4 Components Routines in the Builder contain any number of components which typically define the parameters of a stimulus or an input output device The following components are available as at version 1 65 but further components will be added in the future includ ing Parallel Serial ports and other visual stimuli e g GeometricStim 6 4 1 Aperture Component This component can be used to filter the visual display as if the subject is looking at it through an opening Currently only circular apertures
207. l as the standard options of constant and every repeat etc Many parameter updates e g orientation are made so guickly that using the static period is of no benefit but others most notably the loading of images from disk can take substantial periods of time and these should always be performed during a static period to ensure good timing If the updates that have been reguested were not completed by the end of the static period i e there was a timing overshoot then you will receive a warning to that effect In this case you either need a longer static period to perform the actions or you need to reduce the time reguired for the action e g use an image with fewer pixels Parameters name Everything in a PsychoPy experiment needs a unigue name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the static period begins See Defining the onset duration of components for details 56 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 stop The time that the static period ends See Defining the onset duration of components for details custom code After running the component updates which are defined in each component not here any code in serted here will also be run See also API reference for StaticPeriod 6 4 14 Text Component This component can be used to present text to the participant either instructions or stimuli
208. larly between observers and even if your light measurement device says the luminance is the same and regardless of the colour space you want to work in To make the pairs perceptually isoluminant each observer should really determine their own isoluminant point You can do this with the minimum motion technique or with heterochromatic flicker photometry 10 12 Adding a web cam From the mailing list see there for names etc T spent some time today trying to get a webcam feed into my psychopy proj inside my visual window The solution involved using the opencv module capturing the image converting that to PIL and then feeding the PIL into a SimpleImageStim and looping and win flipping Also to avoid looking like an Avatar in my case you will have to change the default decoder used in PIL fromstring to utilize BGR instead of RGB in the decoding I thought I would save some time for people in the future who might be interested in using a webcam feed for their psychopy project All you need to do is import the opencv module into psychopy importing modules was well documented by psychopy online and integrate something like this into your psychopy script from psychopy import visual event core import Image time pylab cv numpy 168 Chapter 10 Recipes How to s PsychoPy Psychology software for Python Release 1 81 03 mywin visual Window allowGUI False monitor testMonitor units norm colorSpace r
209. lder concepts are explained in the Builder documentation Back in the main Builder type Ctrl R Windows Linux or Cmd R Mac or use the mouse to click the Run icon 5 1 Builder 35 PsychoPy Psychology software for Python Release 1 81 03 Assuming you typed in Hello world your screen should have looked like this briefly Hello world If nothing happens or it looks wrong recheck all the steps above be sure to start from a new Builder view What if you wanted to display your cheerful greeting for longer than the default time Click on your Text component the existing one not a new one Edit the Stop duration s to be 3 2 times are in seconds e Click OK And finally Run When running an experiment you can quit by pressing the escape key this can be configured or disabled You can quit PsychoPy from the File menu or typing Ctrl Q Cmd O 5 1 2 Getting beyond Hello To do more you can try things out and see what happens You may want to consult the Builder documentation Many people find it helpful to explore the Builder demos in part to see what is possible and especially to see how different things are done A good way to develop your own first PsychoPy experiment is to base it on the Builder demo that seems closest Copy it and then adapt it step by step to become more and more like the program you have in mind Being familiar with the Builder demos can only help this process You
210. lease 1 81 03 You can do more complex things such as type in each line from the Coder example directly into the Shell window doing so line by line gt gt gt from psychopy import visual core and then gt gt gt win visual Window and so on watch what happens each line gt gt gt msg visual TextStim win text u Xu00A1Hola mundo gt gt gt msg draw gt gt gt win flip and so on This lets you try things out and see what happens line by line which is how python goes through your program 38 Chapter 5 Getting Started CHAPTER SIX BUILDER Building experiments in a GUI You can now see a youtube PsychoPy tutorial showing you how to build a simple experiment in the Builder interface Note The Builder view is now at version 1 75 fairly well developed and should be able to construct a wide variety of studies But you should still check carefully that the stimuli and response collection are as expected 0 eoe sternberg psyexp PsychoPy Builder trial thanks practinstruct maininstruct feedback t sec 5 o N w a m o y fixation Y FE 2 presentSet Y az Cel Mn presentTarget i y TT pS resp uen Oes tn gt 2 Flow Insert Routine Insert Loop F pracTrials trials namespace Contents 39 PsychoPy Psychology software for Python Release 1 81 03 6 1 Builder concepts 6 1 1 Routi
211. lename in the current location or mediaLocation or a full path combo Or by giving an Nx2 numpy array of floats 1 1 you can specify the sound yourself as a waveform secs duration only relevant if the value is a note name or a frequency value octave is only relevant if the value is a note name Middle octave of a piano is 4 Most com puters won t output sounds in the bottom octave 1 and the top octave 8 is generally painful sampleRate 44100 If a sound has already been created or if the bits 16 Pygame uses the same bit depth for all sounds once initialised fadeOut mSecs fades out the sound when playing over mSecs Don t know why you would do this in psychophysics but it s easy and fun to include as a possibility getDuration Get s the duration of the current sound in secs getVolume Returns the current volume of the sound 0 0 1 0 8 17 psychopy sound play various forms of sound 145 PsychoPy Psychology software for Python Release 1 81 03 play fromStart True log True loops None Starts playing the sound on an available channel fromStart bool Not yet implemented log bool Whether or not to log the playback event loops int How many times to repeat the sound after it plays once If Joops 1 the sound will repeat indefinitely until stopped If no sound channels are available it will not play and return None This runs off a separate thread i e your code won t wait
212. ler trialList nReps method random dataTypes None ex tralnfo None seed None originPath None name au toLog True Class to handle trial sequencing and data storage Calls to next will fetch the next trial object given to this handler according to the method specified random sequential fullRandom Calls will raise a StopIteration error if trials have finished See demo_trialHandler py 8 3 psychopy data functions for storing saving analysing data 81 PsychoPy Psychology software for Python Release 1 81 03 The psydat file format is literally just a pickled copy of the TrialHandler object that saved it You can open it with from psychopy tools filetools import fromFile dat fromFile path Then you ll find that daf has the following attributes that Parameters trialList a simple list or flat array of dictionaries specifying conditions This can be im ported from an excel csv file using importConditions nReps number of repeats for all conditions method random sequential or fullRandom sequential obviously presents the condi tions in the order they appear in the list random will result in a shuffle of the conditions on each repeat but all conditions occur once before the second repeat etc fullRandom fully randomises the trials across repeats as well which means you could potentially run all trials of one condition before any trial of another data
213. lly rather difficult to use for data analysis but provide a chronological record of everything that happened during your study The level of content in them depends on you See Logging data for further information 2 5 2 PsychoPy data file psydat This is actually a TrialHandler or StairHandler object that has been saved to disk with the python cPickle module 2 5 Data outputs 11 PsychoPy Psychology software for Python Release 1 81 03 These files are designed to be used by experienced users with previous experience of python and probably matplotlib The contents of the file can be explored with dir as any other python object These files are ideal for batch analysis with a python script and plotting via matplotlib They contain more information than the Excel or csv data files and can even be used to re create those files Of particular interest might be the attributes of the Handler extraInfo the extralnfo dictionary provided to the Handler during its creation trialList the list of dictionaries provided to the Handler during its creation data a dictionary of 2D numpy arrays Each entry in the dictionary represents a type of data e g if you added rt data during your experiment using psychopy data TrialHandler addData then rt will be a key For each of those entries the 2D array represents the condition number and repeat number remember that these start at O in python unlike Matlab TM which starts at 1
214. log files log see Log Files for more details 6 8 Common Mistakes aka Gotcha s 6 8 1 General Advice Python and therefore PsychoPy is CASE SENSITIVE To use a dollar sign for anything other than to indicate a code snippet for example in a Text Component precede it with a backslash the backslash won t be printed Have you entered your the settings for your monitor If you are using degrees as a unit of measurement and have not entered your monitor settings the size of stimuli will not be accurate If your experiment is not behaving in the way that you expect Have you looked at the og file This can point you in the right direction Did you know you can change the type of information that is stored in the log file in preferences by changing the logging level Have you tried compiling the script and running it Does this produce a particular error message that points you at a particular problem area You can also change things in a more detailed way in the coder view and if you are having problems reading through the script can highlight problems Reading a compiled script can also help with the creation of a Code Component 6 8 2 My stimulus isn t appearing there s only the grey background Have you checked the size of your stimulus If it is 0 5x0 5 pixels you won t be able to see it Have you checked the position of your stimulus Is it positioned off the screen 6 8 3 The loop isn t using my Excel spreadsheet
215. marker on an unmarked line category choices choose among verbal labels categories e g True False or Yes No Not sure scale description used for numeric choices e g 1 to 7 rating Complete control over the display options is available as an advanced setting customize_everything 54 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 Properties name string Everything in a PsychoPy experiment needs a unique name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the stimulus should first appear See Defining the onset duration of components for details stop The duration for which the stimulus is presented See Defining the onset duration of components for details visualAnalogScale checkbox If this is checked a line with no tick marks will be presented using the glow marker and will return a rating from 0 00 to 1 00 quasi continuous This is intended to bias people away from thinking in terms of numbers and focus more on the visual bar when making their rating This supersedes either choices or scaleDescription category choices string Instead of a numeric scale you can present the subject with words or phrases to choose from Enter all the words as a string Probably more than 6 or so will not look so great on the screen Spaces are assumed to separate the words If there are any co
216. marks or spaces start The time that the stimulus should first appear See Defining the onset duration of components for details 52 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 stop Governs the duration for which the stimulus is presented See Defining the onset duration of components for details image a filename a standard name sin sqr or a numpy array of dimensions NxNx1 or NxNx3 This specifies the image that will be used as the texture for the visual patch The image can be repeated on the patch in either x or y or both by setting the spatial frequency to be high or can be stretched so that only a subset of the image appears by setting the spatial frequency to be low Filenames can be relative or absolute paths and can refer to most image formats e g tif jpg bmp png etc If this is set to none the patch will be a flat colour mask a filename a standard name gauss circle or a numpy array of dimensions NxNx1 The mask can define the shape e g circle will make the patch circular or something which overlays the patch e g noise ori degrees The orientation of the entire patch texture and mask in degrees pos X Y The position of the centre of the stimulus in the units specified by the stimulus or window size sizex sizey or a single value applied to x and y The size of the stimulus in the given units of the stimu lus window If the mas
217. me string the name of the worksheet within the file matrixOnly True or False If set to True then only the data itself will be output no addi tional info appendFile True or False If False any existing file with this name will be overwritten If True then a new worksheet will be appended If a worksheet already exists with that name a number will be added to make it unigue saveAsPickle fileName Basically just saves a copy of self with data to a pickle file This can be reloaded if necess and further analyses carried out saveAsText fileName delim t matrixOnly False Write a text file with the data Parameters fileName a string The name of the file including path if needed The extension d m will be added if not included delim a string the delimitter to be used e g for tab delimitted for csv files matrixOnly True False If True prevents the output of the extralnfo provided at initialisa tion setExp exp Sets the ExperimentHandler that this handler is attached to Do NOT attempt to set the experiment using trials _exp myExperiment because it needs to be performed using the weakref module 8 3 psychopy data functions for storing saving analysing data 87 PsychoPy Psychology software for Python Release 1 81 03 8 3 4 MultiStairHandler class psychopy data MultiStairHandler stairType simple method random condi tions None nTrials 50 originPath None
218. meText gt gt gt 0 1f S x fwill show as a float to one decimal place r50 gt gt gt S3i x fan integer at least 3 chars wide padded with spaces 57 gt gt gt 303i x fas above but pad with zeros good for participant numbers 005 See the python documentation for a more complete list 10 10 Coder interleave staircases Often psychophysicists using staircase procedures want to interleave multiple staircases either with different start points or for different conditions There is now a class psychopy data MultiStairHandler to allow simple access to interleaved staircases of either basic or OUEST types That can also be used from the Loops in the Builder The following method allows the same to be created in your own code for greater options The method works by nesting a pair of loops one to loop through the number of trials and another to loop across the staircases The staircases can be shuffled between trials so that they do not simply alternate Note Note the need to create a copy of the info If you simply do thisInfo info then all your staircases will end up pointing to the same object and when you change the info in the final one you will be changing it for all from psychopy import visual core data event from numpy random import shuffle import copy time ffrom the std python libs create some info to store with the data info info startPoints 1 5 3 6 info nTrials
219. mmas the string will be interpreted as a list of words or phrases possibly including spaces that are separated by commas scaleDescription Brief instructions reminding the subject how to interpret the numerical scale default 1 not at all extremely 7 low str The lowest number bottom end of the scale default 1 If it s not an integer it will be converted to lowAnchorText see Advanced high str The highest number top end of the scale default 7 If it s not an integer it will be converted to highAnchorText see Advanced Advanced settings single click If this box is checked the participant can only click the scale once and their response will be stored If this box is not checked the participant must accept their rating before it is stored startTime float or integer The time relative to the beginning of this Routine that the rating scale should first appear forceEndTrial If checked when the subject makes a rating the routine will be ended size float The size controls how big the scale will appear on the screen Same as displaySizeFactor Larger than 1 will be larger than the default smaller than 1 will be smaller than the default pos X Y The position of the centre of the stimulus in the units specified by the stimulus or window Default is centered left right and somewhat lower than the vertical center 0 0 4 duration The maximum duration in seconds for which the st
220. mplexity and bloat so try to be sure that there is a business case for including it If there is try at all times to be backwards compatible e g by adding a new keyword argument to a method or function not always possible If it s not possible it s crucial to get wider input about the possible impacts Flag situations that would break existing user scripts in your commit messages Part of sharing your code means making things sensible to others which includes good coding style and writing some documentation You are the expert on your feature and so are in the best position to elaborate nuances or gotchas Use meaningful variable names and include comments in the code to explain non trivial things especially the intention 13 1 Using the repository 177 PsychoPy Psychology software for Python Release 1 81 03 behind specific choices Include or edit the appropriate doc string because these are automatically turned into API documentation via sphinx Include doc tests if that would be meaningful The existing code base has a comment code ratio of about 28 which earns it high marks For larger changes and especially new features you might need to create some usage examples such as a new Coder demo or even a Builder demo These can be invaluable for being a starting point from which people can adapt things to the needs of their own situation This is a good place to elaborate usage related gotchas In terms of style t
221. mpt to quantify the ability of PsychoPy draw without dropping frames on a variety of hardware software The following tests were conducted using the script at the bottom of the page Note of course that the hardware fully differs between the Mac and Linux Windows systems below but that both are standard off the shelf machines All of the below tests were conducted with normal systems rather than anything that had been specifically optimised the machines were connected to network e did not have anti virus turned off except Ubuntu had no anti virus e they even all had dropbox clients running e Linux was the standard not realtime kernel No applications were actively being used by the operator while tests were run In order to test drawing under a variety of processing loads the test stimulus was one of e a single drifting Gabor 500 random dots continuously updating 750 random dots continuously updating e 1000 random dots continuously updating Common settings Monitor was a CRT 1024x768 100Hz all tests were run in full screen mode with mouse hidden System Differences e the iMac was lower spec than the Windows Linux box and running across two monitors necessary in order to connect to the CRT the Windows Linux box ran off a single monitor Each run below gives the number of dropped frames out of a run of 10 000 2 7 mins at 100Hz 2 8 Timing Issues and synchronisation 21 PsychoPy Psychology software for P
222. ms2rgb dkl Nx3 el az radius conversionMatrix psychopy tools colorspacetools rgb2lms rgb_Nx3 conversionMatrix None Convert from RGB to cone space LMS Requires a conversion matrix which will be generated from generic Sony Trinitron phosphors if not supplied note that you will not get an accurate representation of the color space unless you supply a conversion matrix usage lms_Nx3 rgb2lms rgb Nx3 el az radius conversionMatrix psychopy tools colorspacetools dkl2rgb dkl conversionMatrix None Convert from DKL color space Derrington Krauskopf amp Lennie to RGB Reguires a conversion matrix which will be generated from generic Sony Trinitron phosphors if not supplied note that this will not be an accurate representation of the color space unless you supply a conversion matrix usage rgb Nx3 dk12rgb dk1_Nx3 el az radius conversionMatrix rgb NxNx3 dk12rgb dk1_NxNx3 el az radius conversionMatrix 8 18 2 psychopy tools coordinatetools Functions and classes related to coordinate system conversion cart 2po1 x y units Convert from cartesian to polar coordinates cart2sphIz y x Convert from cartesian coordinates x y z to spherical elevation azimuth radius pol2cart theta radius units Convert from polar to cartesian coordinates sph2cart args Convert from spherical coordinates elevation azimuth radius Function details psychopy tools coordinatetools cart2pol x y units
223. n Release 1 81 03 lt Routine gt lt Routines gt lt Flow gt lt Routine name instruct gt lt LoopInitiator loop lt Param lt Param name endPoints Type TrialHandler name trials gt val 0 1 valType num updates None gt name name val trials valType code updates None gt name loopType val random valType str updates None gt name nReps val 5 valType num updates None gt val text red rgb 1 1 1 congruent 1 name trialListFile val Users jwp troop trialTypes csv valType str lt Param lt Param lt Param name trialList lt Param lt LoopInitiator gt lt Routine name trial gt lt LoopTerminator name trials gt lt Routine lt Flow gt name thanks gt lt PsychoPy2experiment gt 192 Chapter 14 PsychoPy Experiment file format psyexp corrAns 1 updates Non p psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy misc 135 psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy psychopy core 77 data 80 filters 100 hardware crs 106 hardware egi 106 hardware hardware forp 107 hardware iolab 108 hardware hardware minolta 111 hardware pr 113 info 116 iohub client 119
224. n every frame but keep a constant speed See also API reference for Dot Stim 6 4 4 ioLab Systems buttonbox Component A button box is a hardware device that is used to collect participant responses with high temporal precision ideally with true ms accuracy Both the response which button was pressed and time taken to make it are returned The time taken is determined by a clock on the device itself This is what makes it capable in theory of high precision timing Check the log file to see how long it takes for PsychoPy to reset the button box s internal clock If this takes a while then the RT timing values are not likely to be high precision It might be possible for you to obtain a correction factor for your computer button box set up if the timing delay is highly reliable The ioLabs button box also has a built in voice key but PsychoPy does not have an interface for it Use a microphone component instead Properties name string Everything in a PsychoPy experiment needs a unigue name The name should contain only letters numbers and underscores no punctuation marks or spaces start The time that the stimulus should first appear See Defining the onset duration of components for details stop The duration for which the stimulus is presented See Defining the onset duration of components for details Force end of Routine checkbox If this is checked the first response will end the routine Active buttons None o
225. nd to be used units Default units for windows and visual stimuli deg norm cm pix See Units for the window and stimuli Can be overridden by individual experiments fullscr Should windows be created full screen by default Can be overridden by individual experiments allowGUI When the window is created should the frame of the window and the mouse pointer be visible If set to False then both will be hidden 2 4 2 Application settings These settings are common to all components of the application Coder and Builder etc largeIcons Do you want large icons on some versions of wx on OS X this has no effect defaultView Determines which view s open when the PsychoPy app starts up Default is last which fetches the same views as were open when PsychoPy last closed runScripts Don t ask Just leave this option as process for now allowModuleImports only used by win32 Allow modules to be imported at startup for analysis by source assis tant This will cause startup to be slightly slower but will speedup the first analysis of a script 2 4 3 Coder settings outputFont a list of font names to be used in the output panel The first found on the system will be used fontSize in pts an integer between 6 and 24 that specifies the size of fonts codeFontSize integer 6 24 default 12 outputFontSize integer 6 24 default 12 showSourceAsst Do you want to show the source assistant pa
226. ne norm cm deg or pix If None then the current units of the Window will be used See Units for the window and stimuli for explanation of other options nDots int number of dots to be generated fieldPos x y or x y specifying the location of the centre of the stimulus fieldSize a single value specifying the diameter of the field Sizes can be negative and can extend beyond the window fieldShape Defines the shape of the field in which the dots appear For a circular field the nDots represents the average number of dots per frame but on each frame this may vary a little dotSize Always specified in pixels dotLife int Number of frames each dot lives for 1 infinite dir float degrees Direction of the signal dots speed float Speed of the dots in units per frame signalDots If same then the signal and noise dots are constant If different then the choice of which is signal and which is noise gets randomised on each frame This corresponds to Scase et al s 1996 categories of RDK noiseDots direction position or walk Determines the behaviour of the noise dots taken directly from Scase et al s 1996 categories For position noise dots take a random position every frame For direction noise 48 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 dots follow a random but constant direction For walk noise dots vary their directio
227. ne advantage to this is that you can then upgrade versions with sudo easy_install N Z U psychopy 3 5 Linux Debian systems PsychoPy is in the Debian packages index so you can simply do sudo apt get install psychopy Ubuntu and other Debian based distributions 1 Add the following sources in Synaptic in the Configuration gt Repository dialog box under Other software deb http neuro debian net debian karmic main contrib non free deb src http neuro debian net debian karmic main contrib non free 2 Then follow the Package authentification procedure described in http neuro debian net 3 Then install the psychopy package under Synaptic or through sudo apt get install psychopy which will install all dependencies Thanks to Yaroslav Halchenko for the Debian and NeuroDebian package Gentoo PsychoPy is in the Gentoo Sceince Overlay see this link for the ebuild files After you have enabled the overlay simply run 28 Chapter 3 Installation PsychoPy Psychology software for Python Release 1 81 03 emerge psychopy Other systems You need to install the dependencies below Then install PsychoPy S sudo easy_install psychopy Downloading http psychopy googlecode com files PsychoPy 1 75 01 py2 7 egg 3 5 Linux 29 PsychoPy Psychology software for Python Release 1 81 03 30 Chapter 3 Installation CHAPTER FOUR DEPENDENCIES Like many open source programs PsychoPy d
228. ned events are sorted by time Parameters keys Filter returned events using a list of key constant strings Only events with a key value that is within the keys list will be returned chars Filter returned events using a list of event char values Only events with a char value that is within the chars list will be returned mods Filter returned events using a list of modifier constant strings Only events that have a modifier matching atleast one of the values in the mods list will be returned duration Applied to KeyboardRelease events only If the duration kwarg value gt 0 then events where event duration gt duration are returned If the duration kwarg value lt 0 0 then events where event duration lt duration are returned keys Filter returned events based on one of the two Keyboard event type constants Key board KEY_PRESS Keyboard KEY_RELEASE etype True default means the keyboard event buffer is cleared after this method is called If False the keyboard event buffer is not changed Returns tuple of KeyboardEvent instances or getPresses keys None chars None mods None clear True See the getKeys method documentation This method is identical but only returns KeyboardPress events getReleases keys None chars None mods None duration None clear True See the getKeys method documentation This method is identical but only returns KeyboardRelease events waitForKeys maxW
229. nel to the right of the Coder view On Windows this provides help about the current function if it can be found On OS X the source assistant is of limited use and is disabled by default analysisLevel If using the source assistant how much depth should PsychoPy try to analyse the current script Lower values may reduce the amount of analysis performed and make the Coder view more responsive particularly for files that import many modules and sub modules analyseAuto If using the source assistant should PsychoPy try to analyse the current script on every save load of the file The code can be analysed manually from the tools menu 10 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 showOutput Show the output panel in the Coder view If shown all python output from the session will be output to this panel Otherwise it will be directed to the original location typically the terminal window that called PsychoPy application to open reloadPrevFiles Should PsychoPy fetch the files that you previously had open when it launches 2 4 4 Builder settings reloadPrevExp default False for the user to add custom components comma separated list componentsFolders a list of folder pathnames that can hold additional custom components for the Builder view hiddenComponents a list of components to hide e g because you never use them 2 4 5 Connection settings proxy The proxy server used to co
230. nential increase in rotation stim ori 10 4 0 modulus 10 However they can also be used on x y pairs in very flexible ways Here you can use both scalars and x y pairs as operators In the latter case the operations are element wise stim size 5 array 5 0 5 0 set quadratic size stim size 2 array 7 0 7 0 increase size stim size 2 array 3 5 3 5 downscale size stim size 0 5 2 5 array 4 0 6 0 a little wider and much taller stim size x 2 0 25 array 8 0 1 5 upscale horizontal and downscale vertical Operations are not meaningful for strings Timing There are various ways to measure and control timing in PsychoPy e using frame refresh periods most accurate least obvious e checking the time on Clock objects e using core wait commands most obvious least flexible accurate Using core wait as in the above example is clear and intuitive in your script But it can t be used while something is changing For more flexible timing you could use a Clock object from the core module from psychopy import visual core setup stimulus win visual Window 400 400 gabor visual GratingStim win tex sin mask gauss sf 5 name gabor gabor setAutoDraw True automatically draw every frame gabor autoLog False or we ll get many messages about phase change clock core Clock let s draw a stimulus for 2s drifting for middle 0 5s while clock getTime lt
231. nes and Flow The Builder view of the PsychoPy application is designed to allow the rapid development of a wide range of experi ments for experimental psychology and cognitive neuroscience experiments The Builder view comprises two main panels for viewing the experiment s Routines upper left and another for viewing the Flow lower part of the window An experiment can have any number of Routines describing the timing of stimuli instructions and responses These are portrayed in a simple track based view similar to that of video editing software which allows stimuli to come on go off repeatedly and to overlap with each other The way in which these Routines are combined and or repeated is controlled by the Flow panel All experiments have exactly one Flow This takes the form of a standard flowchart allowing a sequence of routines to occur one after another and for loops to be inserted around one or more of the Routines The loop also controls variables that change between repetitions such as stimulus attributes 6 1 2 Example 1 a reaction time experiment For a simple reaction time experiment there might be 3 Routines one that presents instructions and waits for a keypress one that controls the trial timing and one that thanks the participant at the end These could then be combined in the Flow so that the instructions come first followed by trial followed by the thanks Routine and a loop could be inserted so that the Routine rep
232. nnect to the internet if needed Must be of the form http 111 222 333 444 5555 autoProxy PsychoPy should try to deduce the proxy automatically if this is True and autoProxy is successful then the above field should contain a valid proxy address allowUsageStats Allow PsychoPy to ping a website at when the application starts up Please leave this set to True The info sent is simply a string that gives the date PsychoPy version and platform info There is no cost to you no data is sent that could identify you and PsychoPy will not be delayed in starting as a result The aim is simple if we can show that lots of people are using PsychoPy there is a greater chance of it being improved faster in the future checkForUpdates PsychoPy can hopefully automatically fetch and install updates This will only work for minor updates and is still in a very experimental state as of v1 51 00 2 4 6 Key bindings There are many shortcut keys that you can use in PsychoPy For instance did you realise that you can indent or outdent a block of code with Ctrl and Ctrl 2 5 Data outputs There are a number of different forms of output that PsychoPy can generate depending on the study and your preferred analysis software Multiple file types can be output from a single experiment e g Excel data file for a quick browse Log file to check for error messages and PsychoPy data file psydat for detailed analysis 2 5 1 Log file Log files are actua
233. nput hooks in Windows Linux installations only 1 python xlib The Python X11R6 client side implementation OSX installations only 1 pyobjc A Python ObjectiveC binding Starting the psychopy iohub Process To use ioHub within your PsychoPy Coder experiment script ioHub needs to be started at the start of the experiment script The easiest way to do this is by calling the launchHubServer function launchHubServer function psychopy iohub client launchHubServer kwargs The launchHubServer function is used to start the ioHub Process by the main psychopy experiment script To use ioHub for keyboard and mouse event reporting only simply use the function in a way similar to the following from psychopy iohub import launchHubServer Start the ioHub process The return variable is what is used during the experiment to control the iohub process itself f as well as any running iohub devices io launchHubServer By default ioHub will create Keyboard and Mouse devices and start monitoring for any events from these devices only keyboard io devices keyboard mouse io devices mous As a simpl xample use the keyboard to have the experiment wait until a key is pressed print Press any Key to Exit Example keys keyboard waitForKeys print Key press detected exiting experiment 8 10 psychopy iohub ioHub event monitoring framework 119 PsychoPy Psychology software for Python Rele
234. ns the number of joystick axes found getNumButtons Returns the number of digital buttons on the device getNumHats Get the number of hats on this joystick getX Returns the value on the X axis equivalent to joystick getAxis 0 110 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 getY Returns the value on the Y axis eguivalent to joystick getAxis 1 getZ Returns the value on the Z axis equivalent to joystick getAxis 2 8 8 8 labjack USB I O devices The labjack package is included in the Standalone PsychoPy distributions It differs slightly from the standard version distributed by labjack www labjack com in the import For the custom distribution use from labjack import u3 NOT import u3 In all other respects the library is the same and instructions on how to use it can be found here http labjack com support labjackpython Note To use labjack devices you do need also to install the driver software described on the page above labjack u3 alias of Labjack u3 8 8 9 Minolta Minolta light measuring devices See http www konicaminolta com instruments class psychopy hardware minolta LS100 port maxAttempts 1 A class to define a Minolta LS100 or LS110 photometer You need to connect a LS100 to the serial RS232 port and when you turn it on press the F key on the device This will put it into the correct mode to communicate with
235. ntage of this method is that you don t need to do the import psychopy step The downside is that when you update PsychoPy to a new major release you ll need to repeat this step patch updates won t affect it though 159 PsychoPy Psychology software for Python Release 1 81 03 10 2 Animation General question How can I animate something Conceptually animation just means that you vary some aspect of the stimulus over time So the key idea is to draw something slightly different on each frame This is how movies work and the same principle can be used to create scrolling text or fade in fade out effects and the like copied amp pasted from the email list see the list for people s names and a working script 10 3 Scrolling text Key idea Vary the position of the stimulus across frames Question How can I produce scrolling text like html s lt marquee behavior scroll gt directive Answer PsychoPy has animation capabilities built in it can even produce and export movies itself e g if you want to show your stimuli in presentations But here you just want to animate stimuli directly e g create a text stimulus In the pos position field type frameN 0 and select set every frame in the popup button next to that field Push the Run button and your text will move from left to right at one pixel per screen refresh but stay at a fixed y coordinate In essence you can enter an arbitra
236. ntrol software is that it has good temporal precision PsychoPy aims to be as precise as possible in this domain and can achieve excellent results depending on your experiment and hardware It also provides you with a precise log file of your experiment to allow you to check the precision with which things occurred Some general considerations are discussed here and there are links with Specific considerations for specific designs Something that people seem to forget not helped by the software manufacturers that keep talking about their sub millisecond precision is that the monitor Keyboard and human participant DO NOT have anything like this sort of precision Your monitor updates every 10 20ms depending on frame rate If you use a CRT screen then the top is 2 8 Timing Issues and synchronisation 17 PsychoPy Psychology software for Python Release 1 81 03 drawn before the bottom of the screen by several ms If you use an LCD screen the whole screen can take around 20ms to switch from one image to the next Your keyboard has a latency of 4 30ms depending on brand and system So yes PsychoPy s temporal precision is as good as most other equivalent applications for instance the duration for which stimuli are presented can be synchronised precisely to the frame but the overall accuracy is likely to be severely limited by your experimental hardware To get very precise timing of responses etc you need to use specialised hardware like
237. o calculate how many cm or degrees of visual angle that was In PsychoPy after providing information about your monitor via the Monitor Center you can simply specify your stimulus in the unit of your choice and allow PsychoPy to calculate the appropriate pixel size for you Your choice of unit depends on the circumstances For conducting demos the two normalised units norm and height are often handy because the stimulus scales naturally with the window size For running an experiment it s usually best to use something like cm or deg so that the stimulus is a fixed size irrespective of the monitor window For all units the centre of the screen is represented by coordinates 0 0 negative values mean down left positive values mean up right 2 2 1 Height units With height units everything is specified relative to the height of the window note the window not the screen As a result the dimensions of a screen with standard 4 3 aspect ratio will range 0 6667 0 5 in the bottom left to 0 6667 0 5 in the top right For a standard widescreen 16 10 aspect ratio the bottom left of the screen is 0 8 0 5 and top right is 0 8 0 5 This type of unit can be useful in that it scales with window size unlike Degrees of visual angle or Centimeters on screen but stimuli remain square unlike Normalised units units Obviously it has the disadvantage that the location of the right and left edges of the screen
238. o use pyglet and to hogCPU for the entire time and then call psychopy event getKeys after calling wait If you want to suppress checking for pyglet events during the wait do this once core checkPygletDuring Wait False and from then on you can do core wait sec This will preserve terminal window focus during command line usage class psychopy core Clock A convenient class to keep track of time in your experiments You can have as many independent clocks as you like e g one to time responses one to keep track of stimuli 77 PsychoPy Psychology software for Python Release 1 81 03 This clock is identical to the MonotonicClock except that it can also be reset to 0 or another value at any point add 1 Add more time to the clock s start time t0 Note that by adding time to t0 you make the current time appear less Can have the effect that getTime returns a negative number that will gradually count back up to zero e g timer core Clock timer add 5 while timer getTime lt 0 do something reset newT 0 0 Reset the time on the clock With no args time will be set to zero If a float is received this will be the new time on the clock class psychopy core CountdownTimer start 0 Similar to a Clock except that time counts down from the time of last reset Typical usage timer core CountdownTimer 5 while timer getTime gt 0 after 5s will become negativ do s
239. oaded later and further analyses carried out saveAsText fileName delim t matrixOnly False Write out text files with the data For MultiStairHandler this will output one file for each staircase that was run with _label added to the fileName that you specify above label comes from the condition dictionary you specified when you created the Handler Parameters fileName a string The name of the file including path if needed The extension dlm will be added if not included delim a string the delimitter to be used e g for tab delimitted for csv files matrixOnly True False If True prevents the output of the extralnfo provided at initialisa tion setExp exp Sets the ExperimentHandler that this handler is attached to Do NOT attempt to set the experiment using trials _exp myExperiment because it needs to be performed using the weakref module 8 3 5 QuestHandler class psychopy data QuestHandler startVal startValSd pThreshold 0 82 nTrials None stopIn terval None method quantile stepType log beta 3 5 delta 0 01 gamma 0 5 grain 0 01 range None ex tralnfo None minVal None maxVal None staircase None originPath None name autoLog True Class that implements the Quest algorithm for quick measurement of psychophysical thresholds Uses Andrew Straw s QUEST which is a Python port of Denis Pelli s Matlab code Measures threshold using a Weibull psychomet
240. oat inarray Converts arrays lists tuples and UINTs ranging 0 255 float_uint16 inarray Converts arrays lists tuples and floats ranging 1 1 8 13 8 From psychopy tools unittools radians radians x out degrees degrees x out 136 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 8 14 psychopy monitors for those that don t like Monitor Center Most users won t need to use the code here In general the Monitor Centre interface is sufficient and monitors setup that way can be passed as strings to Window s If there is some aspect of the normal calibration that you wish to override eg from psychopy import visual monitors mon monitors Monitor SonyG55 fetch the most recent calib for this monitor mon setDistance 114 further away than normal win visual Window size 1024 768 monitor mon You might also want to fetch the Photometer class for conducting your own calibrations 8 14 1 Monitor class psychopy monitors Monitor name width None distance None gamma None notes None useBits None verbose True currentCalib autoLog True Creates a monitor object for storing calibration details This will be loaded automatically from disk if the monitor name is already defined see methods Many settings from the stored monitor can easilly be overridden either by adding them as arguments during the initial call arguments ewidth distance
241. od 112 clearStatus psychopy hardware forp ButtonBox method 108 clickReset psychopy event Mouse method 98 Clock class in psychopy core 77 cm2deg in module psychopy tools monitorunittools 149 cm2pix in module psychopy tools monitorunittools 149 complete psychopy core StaticPeriod method 79 compress psychopy microphone AdvAudioCapture method 131 confInterval psychopy data OuestHandler method 92 conv2d in module psychopy filters 101 convertToPix in module chopy tools monitorunittools 149 copyCalib psychopy monitors Monitor method 137 psy 195 PsychoPy Psychology software for Python Release 1 81 03 CountdownTimer class in psychopy core 78 createTrialHandlerRecordTable psy chopy iohub client ioHubConnection method 122 critical in module psychopy logging 129 CRT 25 csv 25 D data in module psychopy logging 129 debug in module psychopy logging 129 deg2cm in module psychopy tools monitorunittools 149 deg2pix in module psychopy tools monitorunittools 149 degrees in module psychopy tools unittools 151 delCalib psychopy monitors Monitor method 137 disableHighPriority psy chopy iohub client ioHubConnection method 123 dkl2rgb in module psychopy tools colorspacetools 146 147 dklCart2rgb in module psy chopy tools colorspacetools 146 Dlg class in psychopy gui 103 DlgFromDict clas
242. of the entry boxes for Component parameters simply receive text or numeric values or lists sequences of values surrounded by square brackets as input In addition the user can insert variables and code into most of these which will be interpreted either at the beginning of the experiment or at regular intervals within it To indicate to PsychoPy that the value represents a variable or python code rather than literal text it should be preceded by a For example inserting intensity into the text field of the Text Component will cause that word literally to be presented whereas intensity will cause python to search for the variable called intensity in the script Variables associated with Loops can also be entered in this way see Accessing loop parameters from components for further details But it can also be used to evaluate arbitrary python code For example random 2 will generate a pair of random numbers yn randint 2 will randomly choose the first or second character y or n 6 4 Components 57 PsychoPy Psychology software for Python Release 1 81 03 globalClock getTime will insert the current time in secs of the globalClock object sin angle cos angle will insert the sin and cos of an angle e g into the x y coords of a stimulus 6 4 16 How often to evaluate the variable code If you do want the parameters of a stimulus to be evaluated by code in this way you need also to decide how often i
243. ols 150 readData psychopy parallel ParallelPort method 142 readPin psychopy parallel static method 143 readPin psychopy parallel ParallelPort method 142 record psychopy microphone AdvAudioCapture method 132 reporting psychopy iohub client keyboard Keyboard at tribute 124 reguireInternetAccess in module psychopy web 151 resample psychopy microphone AdvAudioCapture method 132 reset psychopy core Clock method 78 reset psychopy microphone AdvAudioCapture method 132 resetClock psychopy hardware iolab ButtonBox method 109 response_queue_size pyxid ResponseDevice method 105 ResponseDevice class in pyxid 105 ResponseEmulator class in psy chopy hardware emulator 107 rgb2dklCart in module psy chopy tools colorspacetools 146 rgb2lms in module psychopy tools colorspacetools 147 RunTimelnfo class in psychopy info 116 S saveAsExcel method 89 saveAsExcel psychopy data QuestHandler method 93 saveAsExcel psychopy data StairHandler method 87 saveAsExcel psychopy data TrialHandler method 83 saveAsPickle psychopy data ExperimentHandler method 81 psychopy data MultiStairHandler Index 199 PsychoPy Psychology software for Python Release 1 81 03 saveAsPickle method 90 saveAsPickle psychopy data QuestHandler method 94 saveAsPickle psychopy data StairHandler method 87 saveAsPickle psychop
244. onse result intensity addOtherData dataName value addOtherData dataName value Add additional data to the handler to be tracked alongside the result data but not affecting the value of the staircase addResponse result intensity None Add a 1 or 0 to signify a correct detected or incorrect missed trial Supplying an intensity value here indicates that you did not use the recommended intensity in your last trial and the staircase will replace its recorded value with the one you supplied here calculateNextIntensity based on current intensity and counter of correct responses confInterval getDifference False give the range of the 5 95 confidence interval getExp Return the ExperimentHandler that this handler is attached to if any Returns None if not attached getOriginPathAndFile originPath None Attempts to determine the path of the script that created this data file and returns both the path to that script and its contents Useful to store the entire experiment with the data 92 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 If originPath is provided e g from Builder then this is used otherwise the calling script is the originPath fine from a standard python script importData intensities results import some data which wasn t previously given to the quest algorithm incTrials nNewTrials increase maximum number of trials Updates attribute n
245. or loops Notable slow functions in PsychoPy calls 2 7 OpenGL and Rendering 15 PsychoPy Psychology software for Python Release 1 81 03 1 Calls to set the image or set the mask of a stimulus This involves having to transfer large amounts of data between the computer s main processor and the graphics card which is a relatively time consuming pro cess 2 Any of your own code that uses a Python for loop is likely to be slow if you have a large number of cycles through the loop Try to vectorise your code using a numpy array instead 2 7 2 Tips to render stimuli faster 1 Keep images as small as possible This is meant in terms of number of pixels not in terms of Mb on your disk Reducing the size of the image on your disk might have been achieved by image compression such as using jpeg images but these introduce artefacts and do nothing to reduce the problem of send large amounts of data from the CPU to the graphics card Keep in mind the size that the image will appear on your monitor and how many pixels it will occupy there If you took your photo using a 10 megapixel camera that means the image is represented by 30 million numbers a red green and blue but your computer monitor will have at most around 2 megapixels 1960x1080 2 Try to use sguare powers of two for your image sizes This is efficient because computer memory is organ ised according to powers of two did you notice how often numbers like 128
246. ors Monitor method ee module psychopy tools colorspacetools 147 log in module psychopy logging 130 LogFile class in psychopy logging 129 loopEnded psychopy data ExperimentHandler method 81 LS100 class in psychopy hardware minolta 111 M makeDKL2RGB in module psychopy monitors 141 makeGauss in module psychopy filters 101 makeGrating in module psychopy filters 101 makeImageAuto in module psy chopy tools imagetools 148 makeLMS2RGB in module psychopy monitors 141 makeMask in module psychopy filters 101 makeRadialMatrix in module psychopy filters 102 maskMatrix in module psychopy filters 102 mean psychopy data QuestHandler method 93 measure psychopy hardware minolta LS100 method 112 measure psychopy hardware pr PR650 method 113 measure psychopy hardware pr PR655 method 115 mergeFolder in module psychopy tools filetools 148 Method of constants 25 mode psychopy data QuestHandler method 93 modifiers psychopy iohub client keyboard KeyboardPress attribute 126 modifiers psychopy iohub client keyboard KeyboardRelease attribute 127 Monitor class in psychopy monitors 137 MonotonicClock class in psychopy core 78 Mouse class in psychopy event 97 mouseMoved psychopy event Mouse method 98 mouseMoveTime psychopy event Mouse method 98 MultiStairHandler class in psychopy data 88 N newCalib psychopy mon
247. ort e Automated monitor calibration for supported photometers PsychoPy Psychology software for Python Release 1 81 03 1 1 2 Hardware Integration PsychoPy supports communication via serial ports parallel ports and compiled drivers dlls and dylibs so it can talk to any ha e Spectrascan PR650 PR655 PR670 e Minolta LS110 LS100 Cambridge Research Systems Bits e Cedrus response boxes RB7xx series 1 1 3 System reguirements Although PsychoPy runs on a wide variety of hardware and on Windows OS X or Linux it really does benefit from a decent graphics card Get an ATI or nVidia card that supports OpenGL 2 0 Avoid built in Intel graphics chips e g GMA 950 1 2 Credits 1 2 1 Developers PsychoPy was initially created and maintained by Jon Peirce but has many contributors to the code Jeremy Gray Sol Simpson Yaroslav Halchenko Erik Kastman Mike MacAskill William Hogman Jonas Lindelgv Ariel Rokem Dave Britton Gary Strangman C Luhmann Hiroyuki Sogo You can see details of contributions on Ohloh net and there s a visualisation of PsychoPy s development history on youtube PsychoPy also stands on top of a large number of other developers work It wouldn t be possible to write this package without the preceding work of those that wrote the Dependencies 1 2 2 Support Software projects aren t just about code A great deal of work is done by the community in terms of support ing each other Jeremy G
248. ot just time add from __future__ import division even if not needed And make sure that doing so does not break the demo Fix any typos in comments convert any lingering British spellings to US e g change colour to color 182 Chapter 13 For Developers PsychoPy Psychology software for Python Release 1 81 03 Prefer if lt boolean gt as a construct instead of if lt boolean gt True There might not be any to change If you have to choose opt for more verbose but easier to understand code instead of clever or terse formulations This is for readability especially for people new to python If you are unsure please add a note to your commit message or post a question to the dev list psychopy dev googlegroups com Standardize variable names use win for the visual Window and so win flip Provide a consistent way for a user to exit a demo using the keyboard ideally enable this on every visual frame use if len event getKeys escape core quit Note if there is a previous event getKeys call it can slurp up the escape keys So check for escape first Time out after 10 seconds if there s no user response and a timeout is appropriate for the demo and a longer time out might be needed e g for ratingScale py demoClock core clock is demoClock s time is 0 000s at this point if demoClock getTime gt 10 core quit Most demos are not full screen For any
249. ow Adds the values from a TriaHandler row record to the iohub data file for future data analysis use Parameters cv_row 122 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 Returns None enableHighPriority disable_gc False Sets the priority of the ioHub Process to high priority and optionally default is False disables the python GC if the disable_gc parameter is set to True This is method is useful for the duration of a trial or relatively short periods of time where time critial processing is a priority The normal usage pattern is to call enableHighPriority at the start of a trial and disableHighPriority is called at the end of a trial Improvements in timing and execution speed depend on computer load hardware configuration as well as the OS being used This method is not supported on OS X at this time Args disable_gc bool True Turn off the Python Garbage Collector False Default Leave the Garbage Collector running disableHighPriority Sets the priority of the ioHub Process to normal priority and enables the python GC if it had been disabled by a earlier call to enableHighPriority In general enableHighPriority would be called at start of a trial where time critial processing is important disableHighPriority would be called at the end of thlaunchHubProcesse trial or time critical period This method is not supported on OS X at this time
250. params if these are given inverse yy params None Evaluate yy for the current parameters of the model or for arbitrary params if these are given 8 3 10 importConditions psychopy data importConditions fileName returnFieldNames False selection Imports a list of conditions from an xlsx csv or pkl file The output is suitable as an input to TrialHandler trialTypes or to Mult iStairHandler as a conditions list If fileName ends with e csv import as a comma separated value file header row x col e xlsx import as Excel 2007 xlsx files Sorry no support for older xls is planned e pkl import from a pickle file as list of lists header row x col The file should contain one row per type of trial needed and one column for each parameter that defines the trial type The first row should give parameter names which should be unique begin with a letter upper or lower case contain no spaces or other punctuation underscores are permitted selection is used to select a subset of condition indices to be used It can be a list array of indices a python slice object or a string to be parsed as either option e g 1 2 4 or 1 2 4 or 1 2 4 are the same 2 5 2 3 4 doesn t include last whole value 10 2 tenth from last to the last in steps of 2 slice 10 2 None the same as above random 5 8 5 random vals 0 8 8 3 11 functionFromStaircase psychopy data functionFromStaircase intensi
251. pecifically authorized Example instructions on authorizing an OS X 10 9 app can be viewed here Software Reguirements When running PsychoPy using the OS X or Windows standalone distribution all the necessary python package de pendencies have already been installed so the rest of this section can be skipped Note Hardware specific software may need to be installed depending on the device being used See the documenta tion page for the specific device hardware in guestion for further details If psychopy iohub is being manually installed first ensure the python packages listed in the Dependencies section of the manual are installed psychopy iohub reguires the following extra dependencies to be installed 118 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 1 psutil version 1 2 A cross platform process and system utilities module for Python 2 msgpack It s like JSON but fast and small Ba greenlet The greenlet package is a spin off of Stackless a version of CPython that supports micro threads called tasklets gevent version 1 0 or greater A coroutine based Python networking library numexpr Fast numerical array expression evaluator for Python and NumPy Da pytables PyTables is a package for managing hierarchical datasets 7 pyYAML PyYAML is a YAML parser and emitter for Python Windows installations only 1 pyHook Python wrapper for global i
252. pers Note Currently there is a known issue of clock drift in the XID devices Due to this the dict returned by XidDevice get_next_response returns 0 for the reaction time value This issue will be resolved in a future release of this library init_device Initializes the device with the proper keymaps and name 8 8 psychopy hardware hardware interfaces 105 PsychoPy Psychology software for Python Release 1 81 03 8 8 2 Cambridge Research Systems Ltd 8 8 3 egi pynetstation Interface to EGI Netstation This is currently a simple import of pynetstation That needs to be installed but is included in the Standalone distribu tions of PsychoPy as of version 1 62 01 installation Download the package from the link above and copy egi py into your site packages directory usage from psychopy hardware import egi For an example see the demos menu of the PsychoPy Coder For further documentation see the pynetstation website 8 8 4 Launch an fMRI experiment Test or Scan Idea Run or debug an experiment script using exactly the same code i e for both testing and online data acquisition To debug timing you can emulate sync pulses and user responses Limitations pyglet only keyboard events only psychopy hardware emulator launchScan win settings globalClock None simRe sponses None mode None esc_key escape instr select Scan or Test press enter wait_msg waiting for scanner wait_timeout
253. ps value for the sound int 144 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 getVolume Returns the current volume of the sound 0 0 to 1 0 inclusive play loops None autoStop True log True Starts playing the sound on an available channel loops int same as above For playing a sound file you cannot specify the start and stop times when playing the sound only when creating the sound initially Playing a sound runs in a separate thread i e your code won t wait for the sound to finish before continuing To pause while playing you need to use a psychopy core wait mySound getDuration If you call play while something is already playing the sounds will be played over each other setLoops newLoops log True Sets the current reguested extra loops int setVolume newVol log True Sets the current volume of the sound 0 0 to 1 0 inclusive stop log True Stops the sound immediately class psychopy sound SoundPygame value C secs 0 5 octave 4 sampleRate 44100 bits 16 name autoLog True Create a sound object from one of many ways Parameters value can be a number string or an array If it s a number between 37 and 32767 then a tone will be generated at that frequency in Hz It could be a string for a note A BR B C Csh Then you may want to specify which octave as well Or a string could represent a fi
254. psychopy ico 10 8 5 5 Updating to a new version Fetch the latest zip release Unpack it and replace the contents of lt VETWORK_LOC gt psychopyLib with the contents of the zip file 10 8 Installing PsychoPy in a classroom administrators 165 PsychoPy Psychology software for Python Release 1 81 03 10 9 Generating formatted strings A formatted string is a variable which has been converted into a string text In python the specifics of how this is done is determined by what kind of variable you want to print Example 1 You have an experiment which generates a string variable called text You want to insert this variable into a string so you can print it This would be achieved with the following code message The result is s text This will produce a variable message which if used in a text object would print the phrase The result is followed by the variable text In this instance s is used as the variable being entered is a string This is a marker which tells the script where the variable should be entered text tells the script which variable should be entered there Multiple formatted strings of potentially different types can be entered into one string object longMessage Well don 2s that took 20 3f seconds info name time Some of the handy formatted string types gt gt gt x 5 gt gt gt x1 5124 gt gt gt z someText gt gt gt show s z show so
255. put I hope that the builder output code will illustrate best practice for precise timing and stimulus presentation it will probably always take more lines than a man made script but it should be at least as precise At the moment that isn t the case e g The builder should strongly recommend an interval between trials where only static stimuli are drawn e g fixation and update components for this trial in that interval 62 Chapter 6 Builder CHAPTER SEVEN CODER Note These do not teach you about Python per se and you are recommended also to learn about that Python has many excellent tutorials for programmers and non programmers alike In particular dictionaries lists and numpy arrays are used a great deal in most PsychoPy experiments You can learn to use the scripting interface to PsychoPy in several ways and you should probably follow a combination of them Basic Concepts some of the logic of PsychoPy scripting e PsychoPy Tutorials walk you through the development of some semi complete experiments demos in the demos menu of Coder view Many and varied e use the Builder to compile a script and see how it works e check the Reference Manual API for further details ultimately go into PsychoPy and start examining the source code It s just regular python 7 1 Basic Concepts 7 1 1 Presenting Stimuli Note Before you start tell PsychoPy about your monitor s using the Monitor Center That way you
256. quation 2 3 is more general and likely more accurate especially where the lowest luminance value of the monitor is bright but also requires more information It can only be used in labs that do have access to a photometer or similar device 2 6 1 Simple gamma correction The simple form of correction as used by most hardware and software is this L V a kV 2 1 where L is the final luminance value V is the requested intensity ranging O to 1 a k and y are constants for the monitor This equation assumes that the luminance where the monitor is set to black V 0 comes entirely from the surround and is therefore not subject to the same nonlinearity as the monitor If the monitor itself contributes significantly to a then the function may not fit very well and the correction will be poor The advantage of this function is that the calibrating system PsychoPy in this case does not need to know anything more about the monitor than the gamma value itself for each gun For the full gamma equation 2 3 the system needs to know about several additional variables The look up table LUT values required to give a roughly linear luminance output can be generated by LUT V VU 2 2 where V is the entry in the LUT between 0 black and 1 white 2 6 Gamma correcting a monitor 13 PsychoPy Psychology software for Python Release 1 81 03 2 6 2 Full gamma correction For very accurate gamma correction PsychoPy us
257. r an integer list or tuple of integers 0 7 The ioLabs box lets you specify a set of active buttons Responses on non active buttons are ignored by the box and never sent to PsychoPy This field lets you specify which buttons None or some or all of 0 through 7 Lights If selected the lights above the active buttons will be turned on Using code components it is possible to turn on and off specific lights within a trial See the API for iolab Store choice of first last all nothing Which button events to save in the data file Events and the response times are saved with RT being recorded by the button box not by PsychoPy Store correct checkbox If selected a correctness value will be saved in the data file based on a match with the given correct answer Correct answer button The correct answer used by Store correct Discard previous checkbox If selected any previous responses will be ignored typically this is what you want Lights off checkbox If selected all lights will be turned off at the end of each routine See also API reference for iolab 6 4 Components 49 PsychoPy Psychology software for Python Release 1 81 03 6 4 5 Keyboard Component The Keyboard component can be used to collect responses from a participant By not storing the key press and checking the forceEndTrial box it can be used simply to end a Routine Parameters Name string Everything in a PsychoPy experiment needs a
258. r now import the functions here using from psychopy import misc but you can also import them from the tools sub modules 8 13 1 From psychopy tools filetools toFile filename data save data of any sort as a pickle file fromFile filename load data of any sort from a pickle file mergeFolder sre dst pattern Merge a folder into another 8 13 2 From psychopy tools colorspacetools dk12rgb dkl conversionMatrix Convert from DKL color space Derrington Krauskopf amp Lennie to RGB dk1Cart2rgb LUM LM S conversionMatrix Like dkl2rgb except that it uses cartesian coords LM S LUM rather than rgb2dklCart picture conversionMatrix Convert an RGB image into Cartesian DKL space hsv2rgb hsv_Nx3 Convert from HSV color space to RGB gun values Continued on next page 8 13 psychopy misc miscellaneous routines for converting units etc 135 PsychoPy Psychology software for Python Release 1 81 03 Table 8 2 continued from previous page 1ms2rgb lms_Nx3 conversionMatrix Convert from cone space Long Medium Short to RGB rgb21ms rgb_Nx3 conversionMatrix Convert from RGB to cone space LMS dk12rgb dkl conversionMatrix Convert from DKL color space Derrington Krauskopf amp Lennie to RGB 8 13 3 From psychopy tools coordinatetools cart 2po1 x y units Convert from cartesian to polar coordinates cart2sph z y x Convert from cartesian coordinates x y z to spherical
259. r pixel this catches people out but is used to be in keeping with the other units If using pixels as your units you probably want a spatial frequency in the range 0 2 0 001 i e from 1 cycle every 5 pixels to one every 100 pixels Requires information about the size of the screen not window in pixels although this can often be deduce from the operating system if it has been set correctly there Assumes nothing 2 3 Color spaces The color of stimuli can be specified when creating a stimulus and when using setColor in a variety of ways There are three basic color spaces that PsychoPy can use RGB DKL and LMS but colors can also be specified by a name e g DarkSalmon or by a hexadecimal string e g OOFFOO examples stim visual GratingStim win color 1 1 1 colorSpace rgb will be red stim setColor Firebrick fone of the web X11 color names stim setColor FFFAFO fan off white stim setColor 0 90 1 colorSpace dk1 modulate along S cone axis in isoluminant plane stim setColor 1 0 0 colorSpace r lms fmodulate only on the L cone stim setColor 1 1 1 colorSpace r rgb fall guns to max stim setColor 1 0 0 fthis is ambiguous you need to specify a color space 2 3 Color spaces 7 PsychoPy Psychology software for Python Release 1 81 03 2 3 1 Colors by name Any of the web X11 color names can be used to specify a color These are then converted into RGB space by Ps
260. r stopSd must be specified beta delta and gamma are the parameters of the Weibull psychometric function Parameters startVal Prior threshold estimate or your initial guess threshold startValSd Standard deviation of your starting guess threshold Be generous with the sd as QUEST will have trouble finding the true threshold if it s more than one sd from your initial guess pThreshold Your threshold criterion expressed as probability of response 1 An intensity offset is introduced into the psychometric function so that the threshold i e the midpoint of the table yields pThreshold nTrials None or anumber The maximum number of trials to be conducted stopInterval None or anumber The minimum 5 95 confidence interval required in the threshold estimate before stopping If both this and nTrials is specified whichever happens first will determine when Quest will stop 8 3 psychopy data functions for storing saving analysing data 91 PsychoPy Psychology software for Python Release 1 81 03 method quantile mean mode The method used to determine the next threshold to test If you want to get a specific threshold level at the end of your staircasing please use the quantile mean and mode methods directly stepType log db lin The type of steps that should be taken each time db and log will transform your intensity levels into decibels or log units and will move along t
261. r teaching A WPAN ub oe ee ee ee A PRA GS She be ewan we hee a 12 2 Youtube tutorals i x e Ru alo e Beas Boe Sd Ath he tp St en boii a ba ed de Bee db 12 3 gt Materials Tor Builder x assa sg ea ee WE O MAN yD EDW OH A DR ROW YE A MRYD 12 4 Materials for Coder 442222568 8 5 EE DG GR BA Pe RD GY UU UR eA eS S 12 5 PREVIOUS events s sd G gece ce tales Ge Re do bee Boe Eee a aoe ew te a ow BS Soe yN 13 For Developers 13 1 Using the tepositolY seen ales as bea eh Aa UA we a eee eel ROE AU 13 2 Adding documentation se o cheek aoe A GAS ae he SS a RR SSS 13 3 Adding a new Builder Component FFF I I I I I ThE ee 13 4 Style suideforcoderdemoS s be AA Ru Ud eA Ee eS Rug OO 13 5 Localization I18N translation a 24 4 eee Bae ra e RA GU REIG DU GAR 13 6 Adding anew Menu Men gt i a ey ww Bao o Bee BEd he BAe a Ete tie DDUON 14 PsychoPy Experiment file format psyexp 14 1 Parameters o oosa ks eS ee Se a Be BBS SRG a bee A e Byw dee 14 2 SGIO iel E ee eal a ee eR eae ee te al Rl ae Y 14 3 ROUDES sata a Beg Se heed ee EDM RD a WIR ae A SB ae Rh BL RD ANAW GB Se 14 4 Components lt o eio ee 84 084 8b o Oe dade Gabe wee eee eed a R A 145 BOW beh eo AC Sh Se Boe PEA eS Seale ee Be AE e ad Soe i 14 6 Names 8s desc ew RS ee FU OE OS A te ee eR ee ew Ae Python Module Index Index 173 173 173 173 173 174 175 175 179 179 182 183 186 189 189 189 190 190 190 190 193 195 CHAPTER ONE ABOUT
262. radius float scale factor to be applied to the mask circle with radius of 1 1 will extend just to the edge of the matrix Radius can asymmetric e g 1 0 2 0 will be wider than it is tall 8 6 psychopy filters helper functions for creating filters 101 PsychoPy Psychology software for Python Release 1 81 03 center 2x1 tuple or list default 0 0 0 0 the centre of the mask in the matrix 1 1 is top right corner 1 1 is bottom left fringeWidth float 0 1 The proportion of the raisedCosine that is being blurred range 2x1 tuple or list default 1 1 The minimum and maximum value in the mask ma trix psychopy filters makeRadialMatrix matrixSize center 0 0 0 0 radius 1 0 Generate a square matrix where each element val is its distance from the centre of the matrix Parameters matrixSize integer the size of the resulting matrix on both dimensions e g 256 radius float scale factor to be applied to the mask circle with radius of 1 1 will extend just to the edge of the matrix Radius can be asymmetric e g 1 0 2 0 will be wider than it is tall center 2x1 tuple or list default 0 0 0 0 the centre of the mask in the matrix 1 1 is top right corner 1 1 is bottom left psychopy filters maskMatrix matrix shape circle radius 1 0 center 0 0 0 0 Make and apply a mask to an input matrix e g a grating Parameters matrix a square numpy array array to which the mask should be
263. ramelntervals True win _refreshThreshold 1 85 0 0 004 i ve got 85Hz monitor and want to allow 4ms tolerance set the log module to report warnings to the std output window default is errors only logging console setLevel logging WARNING Show me all the frame times that recorded While recording frame times these are simply appended every frame to win framelIntervals a list You can simply plot these at the end of your script using pylab import pylab pylab plot win frameIntervals pylab show Or you could save them to disk A convenience function is provided for this win saveFrameIntervals fileName None clear True The above will save the currently stored frame intervals using the default filename lastFrameIntervals log and then clears the data The saved file is a simple text file At any time you can also retrieve the time of the last frame flip using win lastFrameT the time is synchronised with logging defaultClock so it will match any logging commands that your script uses 2 8 Timing Issues and synchronisation 19 PsychoPy Psychology software for Python Release 1 81 03 Blocking on the VBI As of version 1 62 PsychoPy blocks on the vertical blank interval meaning that once Window flip has been called no code will be executed until that flip actually takes place The timestamp for the above frame interval measure ments is taken immediately after the flip occurs Run
264. ray Mike MacAskill Jared Roberts and Jonas Lindelov particularly stand out in doing a fantastic job of answering other users questions You can see the most active posters on the users list here https groups google com forum aboutgroup psychopy users 1 2 3 Funding The PsychoPy project has attracted small grants from the HEA Psychology Network and Cambridge Research Systems Thanks to those organisations for their support Jon is paid by The University of Nottingham which allows him to spend time on this and his grants from the BBSRC and Wellcome Trust have also helped the development PsychoPy 2 Chapter 1 About PsychoPy PsychoPy Psychology software for Python Release 1 81 03 1 3 Contributing to the project PsychoPy is an open source community driven project It is written and provided free out of goodwill by people that make no money from it and have other jobs to do The way that open source projects work is that users contribute back some of their time 1 3 1 Why make it free It has taken literally thousands of hours of programming to get PsychoPy where it is today and it is provided absolutely for free Without someone working on it full time which would mean charging you for it the only way for the software to keep getting better is if people contribute back to the project Please please please make the effort to give a little back to this project If you found the documentation hard to understand then
265. re There are general Settings for the experiment then there is a list of Routines and a Flow that describes how these are combined As with any xml file the format contains object nodes which can have direct properties and also child nodes For instance the outermost node of the psyexp file is the experiment node with properties that specify the version of PsychoPy that was used to save the file most recently and the encoding of text within the file ascii unicode etc and with child nodes Settings Routines and Flow 14 1 Parameters Many of the nodes described within this xml description of the experiment contain Param entries representing different parameters of that Component Nearly all parameter nodes have a name property and a val property The parameter node with the name advancedParams does not have them Most also have a valType property which can take values bool code extendedCode num str and an updates property that specifies whether this parameter is changing during the experiment and if so whether it changes every frame of the monitor or every repeat of the Routine 14 2 Settings The Settings node contains a number of parameters that in PsychoPy would normally be set in the Experiment settings dialog such as the monitor to be used This node contains a number of Parameters that map onto the entries in that dialog 189 PsychoPy Psychology software for Python
266. read mode no blocking no timeout more control running will change to False when a response is received or hang indefinitely if something goes wrong so you might want to implement a time out as well resp gs getThread returns immediately while resp running print displays dots while waiting sys stdout flush core wait 0 1 print resp words 4 Options Set up with a different language for the same speech clip you ll get a different response possibly having UTF 8 characters gs Speech2Text speech_clip wav lang ja JP resp gs getResponse Example See Coder demos input speech_recognition py Known limitations Availability is subject to the whims of google Any changes google makes along the way could either cause complete failure disruptive or could cause slightly different results to be obtained without it being readily obvious that something had changed For this reason 8 12 psychopy microphone Capture and analyze sound 133 PsychoPy Psychology software for Python Release 1 81 03 its probably a good idea to re run speech samples through Speech2Text at the end of a study see BatchSpeech2Text Author Jeremy R Gray with thanks to Lefteris Zafiris for his help and excellent command line perl script at https github com zaf asterisk speech recog GPLv2 Parameters filename lt required gt name of the speech file flac wav or spx to process wav fil
267. red in a po file a text file with extension po after editing with poedit these are converted into binary format with extension mo which are used when the app is running Start translation do these steps once Start a translation by opening psychopy app locale LANG LC_MESSAGE messages po in Poedit If there is no such po file create a new one make a new directory psychopy app locale LANG LC_MESSAGE if needed Your LANG will be auto detected within PsychoPy only if you follow this convention You can copy metadata such as the project name from another po file gt Set your name and e mail address from Preferences of File menu Set translation properties such as project name language and charset from Catalog Properties Dialog which can be opened from Properties of Catalog menu In poedit s properties dialog set the source keywords to include _translate This allows poedit to find the strings in PsychoPy that are to be translated To add paths where Poedit scans py files open Sources paths tab on the Catalog Properties Dialog and set Base path to psychopy psychopy Nothing more should be needed If you ve created new catalog save your catalog to psychopy app locale LANG LC_MESSAGE messages po Probably not needed but check anyway Edit the file containing language code and name mappings psy chopy app localization mappings and fill
268. ric function Currently it is not possible to use a different psy chometric function Threshold t is measured on an abstract intensity scale which usually corresponds to log10 contrast 90 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 The Weibull psychometric function p2 delta gamma 1 delta 1 1 gamma exp 10 beta x2 xThreshold Example setup display window create stimulus stimulus visual RadialStim win win tex sinXsin size 1 pos 0 0 units deg create staircase object trying to find out the point where subject s response is 50 50 if wanted to do a 2AFC then the defaults for pThreshold and gamma are good staircase data QuestHandler staircase _nextIntensity 0 2 pThreshold 0 63 gamma 0 01 nTrials 20 minVal 0 maxVal 1 while thisContrast in staircase setup stimulus stimulus setContrast thisContrast stimulus draw win flip core wait 0 5 get response inform QUEST of the response needed to calculate next level staircase addResponse thisResp f can now access 1 of 3 suggested threshold levels staircase mean staircase mode staircase guantile gets the median Typical values for pThreshold are 0 82 which is equivalent to a 3 up 1 down standard staircase 0 63 which is equivalent to a 1 up 1 down standard staircase and might want gamma 0 01 The variable s nTrials and o
269. ription of the color space see the Wikipedia HSV entry The Hue in this case is specified in degrees the saturation ranging 0 1 and the value also ranging 0 1 Examples e 0 1 1 is red 0 0 5 1 is pink anything 0 1 is white e 90 1 1 is cyan anything 0 0 5 is grey e anything anything 0 is black Note that colors specified in this space like in RGB space are not going to be the same another monitor they are device specific They simply specify the intensity of the 3 primaries of your monitor but these differ between monitors As with the RGB space gamma correction is automatically applied if available 8 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 2 3 5 DKL color space To use DKL color space the monitor should be calibrated with an appropriate spectrophotometer such as a PR650 In the Derrington Krauskopf and Lennie color space based on the Macleod and Boynton 7 chromaticity diagram colors are represented in a 3 dimensional space using spherical coordinates that specify the elevation from the isolu minant plane the azimuth the hue and the contrast as a fraction of the maximal modulations along the cardinal axes of the space Achromatic AXIS 90 9 cone In PsychoPy these values are specified in units of degrees for elevation and azimuth and as a float ranging 1 1 for the contrast Note that not all colors that can be specified
270. rnings to a central log file centralLog logging LogFile c psychopyExps log level logging WARNING mode a Updating the logs For performance purposes log files are not actually written when the log commands are sent They are stored in a list and processed automatically when the script ends You might also choose to force a flush of the logged messages manually during the experiment e g during an inter trial interval from psychopy import logging logging flush write messages out to all targets This should only be necessary if you want to see the logged information as the experiment progresses AutoLogging New in version 1 63 00 Certain events will log themselves automatically by default For instance visual stimuli send log messages every time one of their parameters is changed and when autoDraw is toggled they send a message that the stimulus has started stopped All such log messages are timestamped with the frame flip on which they take effect To avoid this logging for stimuli such as fixation points that might not be critical to your analyses or for stimuli that change constantly and will flood the logging system with messages the autoLogging can be turned on off at initialisation of the stimulus and can be altered afterwards with setAutoLog True False Manual methods In addition to a variety of automatic logging messages you can create your own of various levels These can be timestamped immediately
271. rom Builder by clicking on the icon that shows two monitors In Monitor Center you can create settings for multiple configurations e g different viewing distances or different physical devices and then select the appropriate one by name in your experiments or scripts Having set up your monitor settings you should then tell PsychoPy which of your monitor setups to use for this experiment by going to the Experiment settings dialog 6 11 Future developments The builder view still has a few rough edges but is hopefully fairly usable Here are some of the ways I hope it will improve More components Several of the stimuli and events that PsychoPy can handle don t currently show up as components in the builder view but they can be added easily take a look inside the components directory to see how easy it is to create a component Dialogue entry validation Dialogue boxes currently allow you to type almost anything into their windows The only current checking is that a name is given to the component and that this is unigue More checking is needed to reduce errors Similar to the above I hope to add suggested entries to go into dialogs as a form of help e g on right clicking an entry box say for stimulus orientation a context menu should appear with ideas including numeric values known local variables e g thisTrial rgb based on the existing loops in the Flow and global variable ideas e g frameN 360 Better code out
272. rrent_mouse_position mouse getPosition print current mouse position current_mouse_position Returns something like gt gt current mouse position P ZET O 3710 getDevice deviceName Returns the ioHubDeviceView that has a matching name based on the device name property specified in the ioHub_config yaml for the experiment If no device with the given name is found None is returned Example accessing a Keyboard device that was named kb keyboard self getDevice kb kb_events keyboard getEvent This is the same as using the natural naming approach supported by the devices attribute i e keyboard self devices kb kb_events keyboard getEvent However the advantage of using getDevice device_name is that an exception is not created if you provide an invalid device name or if the device is not enabled on the ioHub server for example if the device hardware was not connected when the ioHub server started Instead None is returned by this method This allows for conditional checking for the existance of a requested device within the experiment script which can be useful in some cases Args deviceName str Name given to the ioHub Device to be returned Returns device ioHubDeviceView the PsychoPy Process represention for the device that matches the name provided 120 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 getE
273. rwise it gets full of events that we don t care about like the mouse moving around etc Your finished script should look something like this 7 2 PsychoPy Tutorials 69 PsychoPy Psychology software for Python Release 1 81 03 from psychopy import visual core event import some libraries from PsychoPy fcreate a window mywin visual Window 800 600 monitor testMonitor units deg fcreate some stimuli grating visual GratingStim win mywin mask circle size 3 pos 4 0 sf 3 fixation visual GratingStim win mywin size 0 2 pos 0 0 sf 0 rgb 1 draw the stimuli and update the window while True this creates a never ending loop grating setPhase 0 05 advance phase by 0 05 of a cycle grating draw fixation draw mywin flip if len event getKeys gt 0 break vent clearEvents cleanup mywin close core quit There are several more simple scripts like this in the demos menu of the Coder and Builder views and many more to download If you re feeling like something bigger then go to Tutorial 2 Measuring a JND using a staircase procedure which will show you how to build an actual experiment 7 2 2 Tutorial 2 Measuring a JND using a staircase procedure This tutorial builds an experiment to test your just noticeable difference JND to orientation that is it determines the smallest angular deviation that is needed for you to detect that a gabor stimulus isn t vertical
274. ry the subdirectory name ends in _wav The file names include the unix epoch time of the onset of the recording with milliseconds e g mic 1346437545 759 wav It is possible to stop a recording that is in progress by using a code component Every frame check for a condition such as key q or a mouse click and call the stop method of the microphone component The recording will 50 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 end at that point and be saved For example if mic is the name of your microphone component then in the code component do this on Each frame if event getKeys q mic stop Parameters name string Everything in a PsychoPy experiment needs a unigue name The name should contain only letters numbers and underscores no punctuation marks or spaces start float or integer The time that the stimulus should first play See Defining the onset duration of components for details stop duration The length of time sec to record for An expected duration can be given for visualisation purposes See Defining the onset duration of components for details note that only seconds are allowed See also API reference for AudioCapture 6 4 7 Mouse Component The Mouse component can be used to collect responses from a participant The coordinates of the mouse location are given in the same coordinates as the Window with 0 0 in the centre Scenarios
275. ry formula in the position field and the stimulus will be redrawn at a new position on each frame frameN here refers to the number of frames shown so far and you can extend the formula to produce what you need You might find performance issues jittering motion if you try to render a lot of text in one go in which case you may have to switch to using images of text I wanted my text to scroll from right to left So if you keep your eyes in the middle of the screen the next word to read would come from the right as if you were actually reading text The original formula posted above scrolls the other way So you have to put a negative sign in front of the formula for it to scroll the other way You have to change the units to pixel Also you have to make sure you have an end time set otherwise it just flickers I also set my letter height to 100 pixels The other problem I had was that I wanted the text to start blank and scroll into the screen So I wrote 2000 frameN 0 and this worked really well 10 4 Fade in fade out effects Key idea vary the opacity of the stimulus over frames Question I d like to present an image with the image appearing progressively and disappearing progressively too How to do that Answer The Patch stimulus has an opacity field Set the button next to it to be set every frame so that its value can be changed progressively and enter an equation in the box that does what you want e g if
276. ry to make your code blend in with and look like the existing code e g using about the same level of comments use camelCase for var names despite the conflict with the usual PEP we ll eventually move to the underscore style but for now keep everything consistent within the code base In your own code write however you like of course This is just about when contributing to the project 13 1 9 Add a new feature branch For more substantial work you should create a new branch in your repository Often while working on a new feature other aspects of the code will get broken and the master branch should always be in a working state To create a new branch git branch feature somethingNew You can now switch to your new feature branch with git checkout feature somethingNew And get back to your master branch with git checkout master You can push your new branch back to your fork origin with git push origin feature somethingNew 13 1 10 Completing work on a feature When you re done run the unit tests for your feature branch Set the debug preference setting in the app section to True and restart psychopy This will enable access to the test suite In debug mode from the Coder not Builder you can now do Ctrl T Cmd T see Tools menu Unit Testing to bring up the unit test window You can select a subset of tests to run or run them all It s also possible to run just selected tests such as doctests w
277. s even if it turned out the problem was your own lack of under standing please still contribute the information Others are likely to have similar problems Maybe the documentation could be clearer or your email to the forum will be found by others googling for the same problem To make your message more useful you should please try to e provide info about your system and PsychoPy version e g the output of the sysInfo demo in coder A lot of problems are specific to a particular graphics card or platform provide a minimal example of the breaking code if you re writing scripts 1 3 Contributing to the project 3 PsychoPy Psychology software for Python Release 1 81 03 1 4 Citing PsychoPy If you use this software please cite one of the papers that describe it 1 Peirce JW 2007 PsychoPy Psychophysics software in Python J Neurosci Methods 162 1 2 8 13 2 Peirce JW 2009 Generating stimuli for neuroscience using PsychoPy Front Neuroinform 2 10 doi 10 3389 neuro 11 010 2008 Citing these papers gives the reviewer reader of your study information about how the system works it also attributes some credit for its original creation and it means provides a way to justify the continued development of the package 4 Chapter 1 About PsychoPy CHAPTER TWO GENERAL ISSUES These are issues that users should be aware of whether they are using Builder or Coder views 2 1 Monitor Center PsychoPy provides
278. s are eguivalent here stim pos 0 5 0 2 f Right and a bit up from the center print stim pos array 0 5 0 2 stim pos 0 5 0 2 print stim pos array 0 5 0 2 stim pos numpy array 0 5 0 2 print stim pos array 0 5 0 2 Choose your favorite However you can t assign elementwise stim pos l 4 has no effect Scalar Int or Float Mostly scalars are no brainers to understand E g stim ori 90 Rotate stimulus 90 degrees stim opacity 0 8 Make the stimulus slightly transparent However scalars can also be used to assign x y pairs In that case both x and y get the value of the scalar E g stim size 0 5 print stim size array 0 5 0 5 Operations on attributes Operations during assignment of attributes are a handy way to smoothly alter the appear ance of your stimuli in loops Most scalars and x y pairs support the basic operations stim attribute value addition stim attribute value subtraction stim attribute value multiplication stim attribute value division stim attribute value modulus stim attribute value power They are easy to use and understand on scalars 64 Chapter 7 Coder PsychoPy Psychology software for Python Release 1 81 03 stim ori 5 5 0 set rotation stim ori 3 8 8 8 rotate clockwise stim ori 0 8 8 0 rotate counterclockwise stim ori 2 4 0 home in on zero stim ori 3 64 0 expo
279. s in psychopy gui 102 duration psychopy iohub client keyboard KeyboardRelease get All Axes attribute 127 E enableHighPriority psy chopy iohub client ioHubConnection method 123 endRemoteMode psychopy hardware pr PR655 method 114 error in module psychopy logging 129 eval psychopy data FitCumNormal method 96 eval psychopy data FitLogistic method 95 eval psychopy data FitNakaRushton method 95 eval psychopy data FitWeibull method 94 exp in module psychopy logging 129 ExperimentHandler class in psychopy data 80 F fadeOut psychopy sound SoundPygame method 145 fatal in module psychopy logging 129 fileOpenDlg class in psychopy gui 103 fileSaveDlg class in psychopy gui 104 findPhotometer in module psychopy hardware 116 findPR650 in module psychopy monitors 140 FitCumNormal class in psychopy data 95 fitGammaErrFun chopy monitors GammaCalculator 140 psy method fitGammaFun _ psychopy monitors GammaCalculator method 140 FitLogistic class in psychopy data 95 FitNakaRushton class in psychopy data 95 FitWeibull class in psychopy data 94 flac2wav in module psychopy microphone 135 float_uint16 in module psychopy tools typetools 150 float_uint8 in module psychopy tools typetools 150 flush in module psychopy logging 130 flushDataStoreFile psy chopy iohub client ioHubConnection method 123 fromFile
280. s in this module There are various levels for logged messages with the following order of importance ERROR WARNING DATA EXP INFO and DEBUG 128 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 When setting the level for a particular log target e g LogFile the user can set the minimum level that is required for messages to enter the log For example setting a level of INFO will result in INFO EXP DATA WARNING and ERROR messages to be recorded but not DEBUG messages By default PsychoPy will record messages of WARNING level and above to the console The user can silence that by setting it to receive only CRITICAL messages which PsychoPy doesn t use using the commands from psychopy import logging logging console setLevel logging CRITICAL class psychopy logging LogFile f None level 30 filemode a logger None encoding utfS A text stream to receive inputs from the logging system Create a log file as a target for logged entries of a given level Parameters e f this could be a string to a path that will be created if it doesn t exist Alternatively this could be a file object sys stdout or any object that supports write and flush methods level The minimum level of importance that a message must have to be logged by this target e mode a w Append or overwrite existing log file setLevel level Set a new minimal level for the log
281. s is a useful way to run essentially the same experiment but with different conditions set at run time Enable escape If ticked then the Esc key can be used to exit the experiment at any time even without a keyboard component Data settings Data filename new in version 1 80 00 A formatted string to control the base filename and path often based on variables such as the date and or the participant This base filename will be given the various extensions for the different file types as needed Examples all in data folder data JWP_memoryTask_2014_Feb_15_1648 data s_ s_ s expInfo participant expName expInfo date group by participant folder data JWP memoryTask 2014_Feb_15_1648 data s s s expInfo participant expName expInfo date put into dropbox dropbox data memoryTask JWP 2014_Feb_15_1648 f on Windows you may need to replace with your home directory dropbox data s s s expName expInfo participant expInfo date Save Excel file If this box is checked an Excel data file xlsx will be stored 58 Chapter 6 Builder PsychoPy Psychology software for Python Release 1 81 03 Save csv file If this box is checked a comma separated variable csv will be stored Save psydat file If this box is checked a PsychoPy data file psydat will be stored This is a Python specific format pickle files which contains more information that xlsx or
282. s probably the most sensible is to arrange timing based on a global clock rather than on a relative timing method At the start of each trial you add the known duration that the trial will last to a global timer and then wait until that timer reaches the necessary value To facilitate this the PsychoPy Clock was given a new add method as of version 1 74 00 and a CountdownTimer was also added The non slip method can only be used in cases where the trial is of a known duration at its start It cannot for example be used if the trial ends when the subject makes a response as would occur in most behavioural studies Non slip timing from the Builder new feature as of version 1 74 00 When creating experiments in the Builder PsychoPy will attempt to identify whether a particular Routine has a known endpoint in seconds If so then it will use non slip timing for this Routine based on a global countdown timer called routineTimer Routines that are able to use this non slip method are shown in green in the Flow whereas Routines using relative timing are shown in red So if you are using PsychoPy for imaging studies then make sure that all the Routines within your loop of epochs are showing as green Typically your study will also have a Routine at the start waiting for the first scanner pulse and this will use relative timing which is appropriate Detecting dropped frames Occasionally you will drop frames if you try to do too mu
283. s the default and normally most useful event representation type dict Each event converted to a dict object keys equaling the event attribute names values being well the attribute values for the event object Each event is converted into an instance of the ioHub DeviceEvent subclass based on the event s type This conversion process can take a bit of time if the number of events returned is large and currently there is no real benefit converting events into DeviceEvent Class instances vs the default namedtuple object type Therefore this option should be used rarely Args device_label str Indicates what device to retrieve events for If None the default returns device events from all devices as_type str Indicates how events should be represented when they are returned to the user Default namedtuple Returns tuple A tuple of event objects where the event object type is defined by the as_type parameter clearEvents device_label None Clears events from the ioHub Process s Global Event Buffer by default so that uneeded events are not sent to the PsychoPy Process the next time iohub getEvents is called If device_label is None the default then all events in the ioHub Global Event Buffer are cleared which leaves the Device Event Buffers unaffected If device label is a str giving a valid device name then events that were received from that device are returned and the Device Event Buf
284. set value is you can provide it here and it will be applied to the ioHub time stamp for the MessageEvent sec_time float The time stamp to use for the message in sec msec format If not provided or None then the MessageEvent is time stamped when this method is called using the global timer Returns bool True createTrialHandlerRecordTable trials Create a condition variable table in the ioHub data file based on the a psychopy TrialHandler By doing so the iohub data file can contain the DV and IV values used for each trial of an experiment session along with all the iohub device events recorded by iohub during the session Example psychopy code usage Load a trial handler and create an associated table in th iohub data file from psychopy data import TrialHandler importConditions exp_conditions importConditions trial_conditions xlsx each trial of your experiment for trial an trials do whatever During the trial trial variable trial TRIAL_START J flip_time At the end of each trial before the next trial handler row send variable states to iohub so they reference trials TrialHandler exp_conditions 1 Inform the ioHub server about the TrialHandler io createTrialHandlerRecordTable trials Read a row of the trial handler for values can be updated getting the trial can be stored for future io addTrialHandlerRecord trial values addTrialHandlerRecord cv r
285. so met its minimal reversals See StairHandler Example usage conditions label low startVal label high startVal label low startVal label high startVal stairs data MultiStairHandler conditions conditions nTrials 50 w Lor aS Yy POr gS Fy p ori 290 r GLI 90 SoS Oo o cor oo for thisIntensity thisCondition in stairs thisOri thisCondition ori do something with thisIntensity and thisOri stairs addResponse correctIncorrect this is ESSENTIAL save data as multiple formats stairs saveDataAsExcel fileName easy to browse stairs saveAsPickle fileName contains more info addData result intensity None Deprecated 1 79 00 It was ambiguous whether you were adding the response 0 or 1 or some other data concerning the trial so there is now a pair of explicit methods addResponse corr intensity some data that alters the next trial value addOtherData RT reac tionTime some other data that won t control staircase 88 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 addOtherData name value Add some data about the current trial that will not be used to control the staircase s such as reaction time data addResponse result intensity None Add a 1 or 0 to signify a correct detected or incorrect missed trial This is essential to advance the s
286. spend time working out what application is currently getting keyboard mouse events 2 don t generate your stimuli when you need them Generate them in advance and then just modify them later with the methods like setContrast setOrientation etc 3 calls to the following functions are comparatively slow they require more CPU time than most other functions and then h a GratingStim setTexture b RadialStim setTexture c TextStim setText 4 if you don t have OpenGL 2 0 then calls to setContrast setRGB and setOpacity will also be slow because they also make a call to setTexture If you have shader support then this call is not necessary and a large speed increase will result 20 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 5 avoid loops in your python code use numpy arrays to do maths with lots of elements 6 if you need to create a large number e g greater than 10 similar stimuli then try the ElementArrayStim Possible good ideas It isn t clear that these actually make a difference but they might 1 disconnect the internet cable to prevent programs performing auto updates 2 on Macs you can actually shut down the Finder It might help See Alex Holcombe s page here 3 use a single screen rather than two probably there is some graphics card overhead in managing double the number of pixels Comparing Operating Systems under PsychoPy This is an atte
287. st 10 of all possible trials you can use a code component to count how many have been shown and then finish the loop after doing 10 This example assumes that your loop is named trials You need to add two things the first to initialize the count and the second to update and check it Begin Experiment myCount 0 Begin Routine myCount myCount 1 if myCount gt 10 trials finished True Note In Python there is no end to finish an if statement The content of the if or of a for loop is determined by the indentation of the lines In the above example only one line was indented so that one line will be executed if the statement evaluates to True 10 8 Installing PsychoPy in a classroom administrators For running PsychoPy in a classroom environment it is probably preferable to have a partial network installation The PsychoPy library features frequent new releases including bug fixes and you want to be able to update machines with these new releases But PsychoPy depends on many other python libraries over 200Mb in total that tend not to change so rapidly or at least not in ways critical to the running of experiments If you install the whole PsychoPy application on the network then all of this data has to pass backwards and forwards and starting the app will take even longer than normal The basic aim of this document is to get to a state whereby Python and the major dependencies of PsychoPy are in
288. st be an Nx2 matrix for X and Y values the two cannot be calculated separately in this case With correctFlat True the positions may look strange because more eccentric vertices will be spaced further apart psychopy tools monitorunittools deg2pix degrees monitor correctFlat False Convert size in degrees to size in pixels for a given Monitor object psychopy tools monitorunittools pix2cm pixels monitor Convert size in pixels to size in cm for a given Monitor object psychopy tools monitorunittools pix2deg pixels monitor correctFlat False Convert size in pixels to size in degrees for a given Monitor object 8 18 6 psychopy tools plottools Functions and classes related to plotting 8 18 psychopy tools miscellaneous tools 149 PsychoPy Psychology software for Python Release 1 81 03 psychopy tools plottools plotFrameIntervals intervals Plot a histogram of the frame intervals Where intervals is either a filename to a file saved by Window saveFramelntervals or simply a list or array of frame intervals 8 18 7 psychopy tools typetools Functions and classes related to variable type conversion psychopy tools typetools float_uint8 inarray Converts arrays lists tuples and floats ranging 1 1 into an array of Uint8s ranging 0 255 gt gt gt float_uint8 1 0 gt gt gt float_uint8 0 128 psychopy tools typetools uint8_float inarray Converts arrays lists tuples and UINTs rangin
289. stalled on the local machine probably a disk image to be copied across your lab computers e PsychoPy itself only 2Mb is installed in a network location where it can be updated easily by the administrator a file is created in the installation that provides the path to the network drive location e Start Menu shortcuts need to be set to point to the local Python but the remote PsychoPy application launcher Once this is done the vast majority of updates can be performed simply by replacing the PsychoPy library on the network drive 164 Chapter 10 Recipes How to s PsychoPy Psychology software for Python Release 1 81 03 10 8 1 1 Install dependencies locally Download the latest version of the Standalone PsychoPy distribution and run as administrator This will install a copy of Python and many dependencies to a default location of C Program Files PsychoPy2 10 8 2 2 Move the PsychoPy to the network You need a network location that is going to be available with read only access to all users on your machines You will find all the contents of PsychoPy itself at something like this version dependent obviously C Program Files PsychoPy2 Lib site packages PsychoPy 1 70 00 py2 6 egg Move that entire folder to your network location and call it psychopyLib or similar getting rid of the version specific part of the name Now the following should be a valid path lt NETWORK_LOC gt psychopyLib psychopy 10 8 3 3 Up
290. sure If parse True default The format is a num array with 100 rows nm power otherwise 114 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 The output will be the raw string from the PR650 and should then be passed to parseSpectrumOutput It s more efficient to parse R G B strings at once than each indi vidually getLastTristim Fetches from the device the last CIE 1931 Tristimulus values Returns list status units Tristimulus Values See also measure automatically populates pr655 lastTristim with just the tristimulus coor dinates getLastUV Fetches from the device the last CIE 1976 u v coords Returns list status units Photometric brightness u v See also measure automatically populates pr655 lastUV with u v getLastXY Fetches from the device the last CIE 1931 x y coords Returns list status units Photometric brightness x y See also measure automatically populates pr655 lastXY with x y measure timeOut 30 0 Make a measurement with the device This automatically populates lastLum e lastSpectrum lastCIExy lastCIEuv parseSpectrumOutput rawStr Parses the strings from the PR650 as received after sending the command D5 The input argument rawStr can be the output from a single phosphor spectrum measurement or a list of 3 such measurements rawR rawG rawB sendMessage message timeout 0 5 DEB
291. sychopy gui Dlg title u PsychoPy dialogue pos None size wx Size 1 1 style 536877057 labelButtonOK w OK labelButtonCancel u Cancel A simple dialogue box You can add text or input boxes sequentially and then retrieve the values see also the function dlgFromDict for an even simpler version Example from psychopy import gui myDlg gui Dlg title JWP s experiment myDlg addText Subject info myDlg addField Name myDlg addField Age 21 myDlg addText Experiment Info myDlg addField Grating Ori 45 myDlg addField Group choices Test Control myDlg show show dialog and wait for OK or Cancel if myDlg OK then the user pressed OK thisInfo myDlg data print thisInfo else print user cancel led addField label initial color choices None tip Adds a labelled input field to the dialogue box optional text color and tooltip Returns a handle to the field but not to the label If choices is a list or tuple it will create a dropdown selector addFixedField label value tip Adds a field to the dialogue box like addField but the field cannot be edited e g Display experiment version tool tips are disabled by wx addText text color show Presents the dialog and waits for the user to press either OK or CANCEL This function returns nothing When they do dlg OK will
292. t A spreadsheet data format developed by Microsoft but with an open published format This is the native file format for Excel 2007 or later and can be opened by most modern spreadsheet applications including OpenOffice 3 0 google docs Apple iWork 08 2 9 Glossary 25 PsychoPy Psychology software for Python Release 1 81 03 26 Chapter 2 General issues CHAPTER THREE INSTALLATION 3 1 Overview PsychoPy can be installed in three main ways As an application The Stand Alone versions include everything you need to create and run experiments When in doubt choose this option As libraries PsychoPy and the libraries it depends on can also be installed individually providing greater flexibility This option reguires managing a python environment As source code If you want to customize how PsychoPy works consult the developer s guide for installation and work flow suggestions When you start PsychoPy for the first time a Configuration Wizard will retrieve and summarize key system settings Based on the summary you may want to adjust some preferences to better reflect your environment In addition this is a good time to unpack the Builder demos to a location of your choice See the Demo menu in the Builder If you get stuck or have guestions please email the mailing list If all goes well at this point your installation will be complete See the next section of the manual Getting started
293. t immediately then it needs to be above that component in the view You may want the code not to take effect until next frame however in which case put it at the bottom of the Routine You can move Components up and down the Routine by right clicking on their icons Within your code you can use other variables and modules from the script For example all routines have a stopwatch style C1 currentT trialClock getTime To see what other variables you might want to use and also what terms you need to avoid in your chunks of code compile your script before inserting the code object and take a look at the contents of that script Note that this page is concerned with Code Components specifically and not all cases in which you might use python syntax within the Builder It is also possible to put code into a non code input field such as the duration or text of a Text Component The syntax there is slightly different requiring a to trigger the special handling or to avoid triggering special handling The syntax to use within a Code Component is always regular python syntax 6 4 Components 45 PsychoPy Psychology software for Python Release 1 81 03 Parameters The parameters of the Code Component simply specify the code that will get executed at 5 different points within the experiment You can use as many or as few of these as you need for any Code Component Begin Experiment Things that need to be done just once like impor
294. t should be updated By default the parameters of Components are set to be constant the parameter will be set at the beginning of the experiment and will remain that way for the duration Alternatively they can be set to change either on every repeat in which case the parameter will be set at the beginning of the Routine on each repeat of it Lastly many parameters can even be set on every frame allowing them to change constantly on every refresh of the screen 6 5 Experiment settings The settings menu can be accessed by clicking the icon at the top of the window It allows the user to set various aspects of the experiment such as the size of the window to be used or what information is gathered about the subject and determine what outputs data files will be generated 6 5 1 Settings Basic settings Experiment name A name that will be stored in the metadata of the data file Show info dlg If this box is checked then a dialog will appear at the beginning of the experiment allowing the Experiment Info to be changed Experiment Info This information will be presented in a dialog box at the start and will be saved with any data files and so can be used for storing information about the current run of the study The information stored here can also be used within the experiment For example if the Experiment Info included a field called ori then Builder Components could access expInfo ori to retrieve the orientation set here Obviously thi
295. t If not provided this will be determined as the path of the calling script dataFileName string This is defined in advance and the file will be saved at any point that the handler is removed or discarded unless abort had been called in advance The handler will attempt to populate the file even in the event of a not too serious crash savePickle True default or False save WideText True default or False autoLog True default or False abort Inform the ExperimentHandler that the run was aborted Experiment handler will attempt automatically to save data even in the event of a crash if possible So if you quit your script early you may want to tell the Handler not to save out the data files for this run This is the method that allows you to do that 80 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 addData name value Add the data with a given name to the current experiment Typically the user does not need to use this function if you added your data to the loop and had already added the loop to the experiment then the loop will automatically inform the experiment that it has received data Multiple data name value pairs can be added to any given entry of the data file and is considered part of the same entry until the nextEntry call is made e g fadd some data for this trial exp addData resp rt 0 8 exp addData resp key k fend of tri
296. t exactly 0 5s later than when ISI start was called Parameters e screenHz the frame rate of the monitor leave as None if you don t want this accounted for e name if a visual Window is given then StaticPeriod will also pause restart frame interval recording name give this StaticPeriod a name for more informative logging messages complete Completes the period using up whatever time is remaining with a call to wait Returns for success 0 for fail the period overran start duration Start the period If this is called a second time the timer will be reset and starts again psychopy visual many visual stimuli Window to display all stimuli below Commonly used ImageStim to show images TextStim to show texts Shapes all special classes of ShapeSt im ShapeSt im as a general purpose shape shower Rect to show rectangles Circle to show circles Polygon to show polygons Line to show a line Images and patterns ImageStim to show images SimpleImageStim to show images without bells and whistles GratingSt im to show gratings RadialStim to show annulus a rotating wedge a checkerboard etc Multiple stimuli ElementArrayStim to show many stimuli of the same type DotStim to show and control movement of dots Other stimuli ovieStim to show movies Rat ingScale to collect ratings 8 2 psychopy visual many visual stimuli 79 PsychoPy Psychology software for P
297. t that file as the one to work with and then try to detect the onset marker playMarker Plays the current marker sound This is automatically called at the start of recording but can be called anytime to insert a marker playback block True loops 0 stop False log True Plays the saved wav file as just recorded or resampled Execution blocks by default but can return immediately with block False loops number of extra repetitions O play once stop True immediately stop ongoing playback if there is one and return record sec filename block False Starts recording and plays an onset marker tone just prior to returning The idea is that the start of the tone in the recording indicates when this method returned to enable you to sync a known recording onset with other events resample newRate 16000 keep True log True Re sample the saved file to a new rate return the full path Can take several visual frames to resample a 2s recording The default values for resample are for google speech keeping the original presumably recorded at 48kHz to archive A warning is generated if the new rate not an integer factor multiple of the old rate To control anti aliasing use pyo downsamp or upsamp directly reset log True Restores to fresh state ready to record again setFile filename Sets the name of the file to work with e g for getting onset time setMarker tone 19000 secs 0 015 volume 0 03
298. taircase to a new intensity level getExp Return the ExperimentHandler that this handler is attached to if any Returns None if not attached getOriginPathAndFile originPath None Attempts to determine the path of the script that created this data file and returns both the path to that script and its contents Useful to store the entire experiment with the data If originPath is provided e g from Builder then this is used otherwise the calling script is the originPath fine from a standard python script next Advances to next trial and returns it This can be handled with code such as staircase data MultiStairHandler for eachTrial in staircase automatically stops when done do stuff here for the trial or staircase data MultiStairHandler while True ie forever LEVI thisTrial staircase next except StopIteration we got a StopIteration error break break out of the forever loop do stuff here for the trial nextTrial DEPRECATION WARNING nextTrial will be deprecated please use next instead jwp 19 6 06 printAsText delim t matrixOnly False Write the data to the standard output stream Parameters delim a string the delimitter to be used e g for tab delimitted for csv files matrixOnly True False If True prevents the output of the extralnfo provided at initialisa tion saveAsExcel fileName matrixOnly False appendFile False Save a summary d
299. te that this thread is effectively nothing more than a key pressing metronome emitting a key at the start of every TR doing so with high temporal precision If your MR hardware interface does not deliver a key character as a sync flag you can still use launchScan to test script timing You have to code your experiment to trigger on either a sync character to test timing or your usual sync flag for actual scanning Parameters win a Window object reguired settings a dict containing up to 5 parameters 2 reguired TR volumes 106 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 TR seconds per whole brain volume minimum value 0 1s volumes number of whole brain 3D volumes to obtain in a given scanning run sync optional key for sync timing default 5 skip optional how many volumes to silently omit initially during T1 stabilization no sync pulse default 0 sound optional whether to play a sound when simulating scanner sync pulses globalClock optional but highly recommended Clock to be used during the scan if one is given it is reset to 0 000 when the first sync pulse is received simResponses optional list of tuples time key time key time values are seconds after the first scan pulse is received esc_key key to be used for user interrupt during launch default escape mode if mode is Test or Scan l
300. ter could be a photometer object or a serial port name on which a photometer might be found not recommended 8 14 7 gammaFun psychopy monitors gammaFun xx minLum maxLum gamma eq 1 a None b None k None Returns gamma transformed luminance values y gammaFun x minLum maxLum gamma a and b are calculated directly from minLum maxLum gamma Parameters xx are the input values range 0 255 or 0 0 1 0 minLum the minimum luminance of your monitor emaxLum the maximum luminance of your monitor for this gun gamma the value of gamma for this gun 8 14 8 gammaInvFun psychopy monitors gammaInvFun yy minLum maxLum gamma b None eq 1 Returns inverse gamma function for desired luminance values x gammalnvFun y minLum maxLum gamma a and b are calculated directly from minLum maxLum gamma Parameters exx are the input values range 0 255 or 0 0 1 0 minLum the minimum luminance of your monitor emaxLum the maximum luminance of your monitor for this gun gamma the value of gamma for this gun eg determines the gamma equation used eq 1 default yy a b xx gamma eq 2 yy a b xx gamma 8 14 9 makeDKL2RGB psychopy monitors makeDKL2RGB nm powerRGB creates a 3x3 DKL gt RGB conversion matrix from the spectral input powers 8 14 10 makeLMS2RGB psychopy monitors makeLMS2RGB nm powerRGB Creates a 3x3 LMS gt RGB conversion matrix from the spectral input powers 8
301. ternal file which has been imported to be used in a loop i e XlSx csv Check to make sure that all of the variable names are unigue There can be no repeated variable names anywhere in your experiment 6 8 8 The window opens and immediately closes Have you checked all of your variable entries are accepted commands e g gauss but not Gauss If you compile your experiment and run it from the coder window what does the error message say Does it point you towards a particular variable which may be incorrectly formatted If you are having problems getting the application to run please see Troubleshooting 6 9 Compiling a Script If you click the compile script icon this will display the script for your experiment in the Coder window This can be used for debugging experiments entering small amounts of code and learning a bit about writing scripts amongst other things The code is fully commented and so this can be an excellent introduction to writing your own code 6 9 Compiling a Script 61 PsychoPy Psychology software for Python Release 1 81 03 6 10 Set up your monitor properly It s a really good idea to tell PsychoPy about the set up of your monitor especially the size in cm and pixels and its distance so that PsychoPy can present your stimuli in units that will be consistent in another lab with a different set up e g cm or degrees of visual angle You should do this in Monitor Center which can be opened f
302. th the Coder and various libraries you can do virtually anything that your computer is capable of doing using a full featured modern programming language python For variety lets say hello to the Spanish speaking world PsychoPy knows Unicode UTF 8 If you are not in the Coder switch to it now e Start a new code document Crrl N Cmd N Type or copy amp paste the following from psychopy import visual core win visual Window msg visual TextStim win text u Mu00AlHola mundo msg draw win flip core wait 1 win close Save the file the same way as in Builder Run the script Note that the same events happen on screen with this code version despite the code being much simpler than the code generated by the Builder The Builder actually does more such as prompt for a subject number Coder Shell The shell provides an interactive python interpreter which means you can enter commands here to try them out This provides yet another way to send your salutations to the world By default the Coder s output window is shown at the bottom of the Coder window Click on the Shell tab and you should see python s interactive prompt gt gt gt PyShell in PsychoPy type some commands Type help copyright credits or license for more information gt gt gt At the prompt type gt gt gt print u u00A1Hola mundo 5 3 Coder 37 PsychoPy Psychology software for Python Re
303. that are full screen see if it can work without being full screen If it has to be full screen add some text to say that pressing escape will quit If displaying log messages to the console seems to help understand the demo here s how to do it from psychopy import logging logging console setLevel logging INFO or logging DEBUG for even more stuff End a script with win close assuming the script used a visual Window and then core quit even though it s not strictly necessary 13 5 Localization 118N translation PsychoPy is used worldwide Starting with v1 81 many parts of PsychoPy itself the app can be translated into any language that has a unicode character set A translation affects what the experimenter sees while creating and running experiments it is completely separate from what is shown to the subject Translations of the online documentation will need a completely different approach In the app translation is handled by a function _t ranslate which takes a string argument The standard name is _ but unfortunately this conflicts with _ as used in some external packages that PsychoPy depends on The _translate function returns a translated unicode version of the string in the locale language that was selected when starting the app If no translation is available for that locale the original string is returned English A locale setting e g ja_JP for Japanese allows the end user t
304. the file So you could have a single file named after your experiment and then have one worksheet for each participant Or you could have one file for each participant and then multiple sheets for repeated sessions etc The file extension x sx will be added if not given already The file will contain a set of values specifying the staircase level intensity at each reversal a list of reversal indices trial numbers the raw staircase intensity level on every trial and the corresponding re sponses of the participant on every trial Parameters 8 3 psychopy data functions for storing saving analysing data 93 PsychoPy Psychology software for Python Release 1 81 03 fileName string the name of the file to create or append Can include relative or absolute path sheetName string the name of the worksheet within the file matrixOnly True or False If set to True then only the data itself will be output no addi tional info appendFile True or False If False any existing file with this name will be overwritten If True then a new worksheet will be appended If a worksheet already exists with that name a number will be added to make it unique saveAsPickle fileName Basically just saves a copy of self with data to a pickle file This can be reloaded if necess and further analyses carried out saveAsText fileName delim t matrixOnly False Write a text file with the data Parameters fileName a strin
305. the serial port usage from psychopy hardware import minolta phot minolta LS100 port if phot OK then we successfully made a connection and can send receive print phot getLum Parameters port string the serial port that should be checked maxAttempts int If the device doesn t respond first time how many attempts should be made If you re certain that this is the correct port and the device is on and correctly configured then this could be set high If not then set this low Troubleshooting Various messages are printed to the log regarding the function of this device but to see them you need to set the printing of the log to the correct level 8 8 psychopy hardware hardware interfaces 111 PsychoPy Psychology software for Python Release 1 81 03 from psychopy import logging logging console setLevel logging ERROR error messages only logging console setLevel logging INFO fwill give a little more info DEBUG will export a log of all communications logging console setLevel logging If you re using a keyspan adapter at least on OS X be aware that it needs a driver installed Otherwise no ports wil be found Error messages ERROR Couldn t connect to Minolta LS100 110 on This likely means that the device is not connected to that port although the port has been found and opened Check that the device has the in the bottom right of the display if not turn off and on again holding th
306. the timeByFrames demo in Coder to see the precision of these measurements on your system They should be within 1ms of your mean frame interval Note that Intel integrated graphics chips e g GMA 945 under win32 do not sync to the screen at all and so blocking on those machines is not possible Reducing dropped frames There are many things that can affect the speed at which drawing is achieved on your computer These include but are probably not limited to your graphics card CPU operating system running programs stimuli and your code itself Of these the CPU and the OS appear to make rather little difference To determine whether you are actually dropping frames see Detecting dropped frames Things to change on your system 1 make sure you have a good graphics card Avoid integrated graphics chips especially Intel integrated chips and especially on laptops because on these you don t get to change your mind so easily later In particular try to make sure that your card supports OpenGL 2 0 2 shut down as many programs including background processes Although modern processors are fast and often have mult anti virus auto updating if you re allowed email checking software e file indexing software backup solutions e g TimeMachine Dropbox e Synchronisation software Writing optimal scripts 1 run in full screen mode rather than simply filling the screen with your window This way the OS doesn t have to
307. then see Using the repository You ll mainly be working in the directory psychopy app builder components Take a look at several existing Com ponents such as image py and key files including _base py and _visual py There are three main steps the first being by far the most involved 13 2 Adding documentation 179 PsychoPy Psychology software for Python Release 1 81 03 13 3 1 1 File newcomp py It s pretty straightforward to model a new Component on one of the existing ones Be prepared to specify what your Component needs to do at several different points in time before the first trial every frame at the end of each routine and at the end of the experiment In addition you may need to sacrifice some complexity in order to keep things streamlined enough for a Builder see e g ratingscale py Your new Component class in your file newcomp py should inherit from BaseComponent in _base py VisualCom ponent in _visual py or KeyboardComponent in keyboard py You may need to rewrite some or all some of these methods to override default behavior class NewcompComponent BaseComponent or VisualComponent def init super NewcompComponent self __init__ def writeInitCode self buff def writeRoutineStartCode self buff def writeFrameCode self buff def writeRoutineEndCode self buff Calling super will create the basic default set of params that
308. they work using the method of constants The trialHandler presents a predetermined list of conditions in either a sequential or random without replacement order see TrialHandler for more details StairHandler This generates the next trial using an adaptive staircase The conditions are not predetermined and are generated based on the participant s responses Staircases are predominately used in psychophysics to measure the discrimination and detection thresholds However they can be used in any experiment which varies a numeric value as a result of a 2 alternative forced choice 2AFC response The StairHandler systematically generates numbers based on staircase parameters These can then be used to define a stimulus parameter e g spatial frequency stimulus presentation duration If the participant gives the incorrect response the number generated will get larger and if the participant gives the correct response the number will get smaller see StairHandler for more details 7 2 PsychoPy Tutorials 7 2 1 Tutorial 1 Generating your first stimulus A tutorial to get you going with your first stimulus display Know your monitor PsychoPy has been designed to handle your screen calibrations for you It is also designed to operate if possible in the final experimental units that you like to use e g degrees of visual angle In order to do this PsychoPy needs to know a little about your monitor There is a GUI to help with this sele
309. think about how you would have preferred it to be written and contribute it 1 3 2 How do I contribute changes For simple changes and for users that aren t so confident with things like version control systems then just send your changes to the mailing list If you want to make more substantial changes then it s often good to discuss them first on the developers mailing list The ideal model is to contribute via the repository on github There is more information on that in the For Developers section of the documentation 1 3 3 Contribute to the Forum mailing list The easiest way to help the project is to write to the forum mailing list with suggestions and solutions For documentation suggestions please try to provide actual replacement text You as a user are probably better placed to write this than the actual developers they Know too much to write good docs If you re having problems e g you think you may have found a bug take a look at the 7roubleshooting and Common Mistakes aka Gotcha s first e submit a message with as much information as possible about your system and the problem please try to be precise Rather than say It didn t work try to say what specific form of not working you found did the stimulus not appear or it appeared but poorly rendered or the whole application crashed if there is an error message try to provide it completely If you had problems and worked out how to fix thing
310. thon PsychoPy and makes his lecture materials available on this wiki 173 PsychoPy Psychology software for Python Release 1 81 03 The GestaltReVision group University of Leuven wiki offers a one day crash course to Python and PsychoPy on a Python Notebook and has lots of great information taking you from basic programming to advanced techniques Radboud University Nijmegen also has a PsychoPy programming course 12 5 Previous events ECEM August 2013 Python for eye tracking workshop with Sol Simpson Michael MacAskill and Jon Peirce Download Python for eye tracking materials VSS e Yale 21 23 July The first ever dedicated PsychoPy workshop conference was at Yale 21 23 July 2011 Thanks Jeremy for organising EPS Satellite workshop 8 July 2011 BPS Maths Stats and Computing Section workshop Dec 2010 For developers 174 Chapter 12 Resources e g for teaching CHAPTER THIRTEEN FOR DEVELOPERS There is a separate mailing list to discuss development ideas and issues For developers the best way to use PsychoPy is to install a version to your own copy of python preferably 2 6 but 2 5 is OK Make sure you have all the Dependencies including the extra recommendedPackages for developers Don t install PsychoPy Instead fetch a copy of the git repository and add this to the python path using a pth file Other users of the computer might have their own standalone versions installed w
311. ties responses bins 10 Create a psychometric function by binning data from a staircase procedure Although the default is 10 bins Jon now always uses unique bins fewer bins looks pretty but leads to errors in slope estimation usage intensity meanCorrect n functionFromStaircase intensities responses bins where intensities are a list or array of intensities to be binned 96 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 responses are a list of 0 1 each corresponding to the equivalent intensity value bins can be an integer giving that number of bins or unique each bin is made from aa data for exactly one intensity value intensity a numpy array of intensity values where each is the center of an intensity bin meanCorrect a numpy array of mean correct in each bin n a numpy array of number of responses contributing to each mean 8 312 bootStraps psychopy data bootStraps dat n 1 Create a list of n bootstrapped resamples of the data SLOW IMPLEMENTATION Python for loop Usage out bootStraps dat n 1 Where dat an NxM or 1xN array each row is a different condition each column is a different trial n number of bootstrapped resamples to create out dim 0 conditions e dim 1 trials dim 2 zresamples 8 4 Encryption Some labs may wish to better protect their data from casual inspection or accidental disclosure This is pos s
312. ting a supporting module initialis ing a variable for later use Begin Routine Certain things might need to be done just once at the start of a Routine e g at the beginning of each trial you might decide which side a stimulus will appear Each Frame Things that need to updated constantly throughout the experiment Note that these will be executed exactly once per video frame on the order of every 10ms to give dynamic displays Static displays do not need to be updated every frame End Routine At the end of the Routine e g the trial you may need to do additional things like check ing if the participant got the right answer End Experiment Use this for things like saving data to disk presenting a graph or resetting hardware to its original state Example code uses 1 Set a random location for your target stimulus There are many ways to do this but you could add the following to the Begin Routine section of a Code Component at the top of your Routine Then set your stimulus position to be targetPos and set the correct answer field of a Keyboard Component to be corrAns set both of these to update on every repeat of the Routine if random gt 0 5 targetPos 2 0 0 0 fon the left corrAns left else targetPos 2 0 0 0J on the right corrAns right 2 Create a patch of noise As with the above there are many different ways to create noise but a simple method would be to add the following to the Begin Routine
313. tings Control the color inside the shape If you set this to None then you will have a transparent shape the line will remain line settings Control color and width of the line The line width is always specified in pixels it does not honour the units parameter size w h See note above start The time that the stimulus should first appear See Defining the onset duration of components for details stop Governs the duration for which the stimulus is presented See Defining the onset duration of components for details ori degrees The orientation of the entire patch texture and mask in degrees pos X Y The position of the centre of the stimulus in the units specified by the stimulus or window units deg cm pix norm or inherit from window See Units for the window and stimuli See also API reference for Polygon API reference for Rect API reference for ShapeSt im for arbitrary vertices 6 4 11 RatingScale Component A rating scale is used to collect a numeric rating or a choice from a few alternatives via the mouse the keyboard or both Both the response and time taken to make it are returned A given routine might involve an image patch component along with a rating scale to collect the response A routine from a personality questionnaire could have text plus a rating scale Three common usage styles are enabled on the first settings page visual analog scale the subject uses the mouse to position a
314. tion newcomp rst Just make a descriptively named text file that ends in rsf restructured text and put it in psychopy docs source builder components _ It will get auto formatted and end up at http www psychopy org builder components newcomp html 13 4 Style guide for coder demos Each coder demo is intended to illustrate a key PsychoPy feature or two especially in ways that show usage in practice and go beyond the description in the API The aim is not to illustrate every aspect but to get people up to speed guickly so they understand how basic usage works and could then play around with advanced features As a newcomer to PsychoPy you are in a great position to judge whether the comments and documentation are clear enough or not If something is not clear you may need to ask a PsychoPy contributor for a description email psychopy dev googlegroups com Here are some style guidelines written for the OpenHatch event s but hopefully useful after that too These are intended specifically for the coder demos not for the internal code base although they are generally quite close The idea is to have clean code that looks and works the same way across demos while leaving the functioning mostly untouched Some small changes to function might be needed e g to enable the use of escape to quit but typically only minor changes like this Generally when you run the demo does it look good and help you understand the
315. tional If the remote server is configured to use https passing the parameter https True will encrypt the transmission including all data and basicAuth credentials It is approximately as secure as using a self signed X 509 certificate An important caveat is that the authenticity of the certificate returned from the server is not checked and so the certificate could potentially be spoofed see the warning under HTTPSCon nection http docs python org library httplib html Overall using https can still be much more secure than not using it The encryption is good but that of itself does not eliminate all risk Importantly it is not as secure as one might expect given that all major web browsers do check certificate authenticity The idea behind this parameter is to require people to explicitly indicate that they want to proceed anyway in effect saying I know what I am doing and accept the risks of using un verified certificates Example See Coder demo misc http_upload py Author Jeremy R Gray 2012 8 19 3 Proxy set up and testing psychopy web setupProxy log True Set up the urllib proxy if possible The function will use the following methods in order to try and determine proxies 1 standard urllib2 urlopen which will use any statically defined http proxy settings 2 previous stored proxy address in prefs 3 proxy pac files if these have been added to system settings 4 auto detect proxy settings WPAD technology
316. to any component enclosed within that loop The simplest and default way to address these variables is simply to call them by the name of the parameter prepended with to indicate that this is the name of a variable For example if your Flow contains a loop with the above table as its input trial types file then you could give one of your stimuli an orientation ori which would depend on the current trial type being presented Example scenarios 1 You want to loop randomly over some conditions in a loop called trials Your conditions are stored in a csv file with headings ori text corrAns which you provide to this loop You can then access these values from any component using ori text and corrAns 2 You create a random loop called blocks and give it an Excel file with a single column called movieName listing filenames to be played On each repeat you can access this with movieName 3 You create a staircase loop called stairs On each trial you can access the current value in the staircase with thisStair Note When you set a component to use a parameter that will change e g on each repeat through the loop you should remember to change the component parameter from constant to set every repeat or set every frame or it won t have any effect Reducing namespace clutter advanced The downside of the above approach is that the names of trial parameters must be different between every loop as wel
317. to output data as a spreadsheet The file format is open and supported by nearly all spreadsheet applications including older versions of Excel and also OpenOffice N B because xlsx files are widely supported the older Excel file format xls is not likely to be supported by PsychoPy unless a user contributes the code to the project Data from PsychoPy are output as a table with a header row Each row represents one condition trial type as given to the TrialHandler Each column represents a different type of data as given in the header For some data where there are multiple columns for a single entry in the header This indicates multiple trials For example with a standard data file in which response time has been collected as rt there will be a heading rt_raw with several columns one for each trial that occurred for the various trial types and also an rt_mean heading with just a single column giving the mean reaction time for each condition 12 Chapter 2 General issues PsychoPy Psychology software for Python Release 1 81 03 If you re creating experiments by writing scripts then you can specify the sheet name as well as file name for Excel file outputs This way you can store multiple sessions for a single subject use the subject as the filename and a date stamp as the sheetname or a single file for multiple subjects give the experiment name as the filename and the participant as the sheetname Builder experiments
318. tr time strftime Sb_ for thisStair in stairs 3d_ H3M create a filename based on the subject and start value filename s start3 2f 3s thisStair saveAsPickle filename thisStair saveAsText filename 10 11 Making isoluminant stimuli From the mailing list see there for names etc O1 How can I create colours RGB that are isoluminant amp thisStair extraInfo observer thisIntensity f we can simulate by pushing left for correct so that the staircase adjusts itself time localtime add the current time thisStair extraInfo thisStart A1 The easiest way to create isoluminant stimuli or control the luminance content is to create the stimuli in DKL space and then convert them into RGB space for presentation on the monitor 10 11 Making isoluminant stimuli 167 PsychoPy Psychology software for Python Release 1 81 03 More details on DKL space can be found in the section about Color spaces and conversions between DKL and RGB can be found in the API reference for psychopy misc Q2 There s a difference in luminance between my stimuli How could I correct for that I m running an experiment where I manipulate color chromatic saturation keeping luminance constant I ve coded the colors red and blue in rgb255 for 6 saturation values 10 20 30 40 50 60 90 using a conversion from HSL to RGB color space Note that we don t possess spectrophotometers such as PR
319. trix for a chromatically calibrated monitor matrix is a 3x3 num array setLevelsPost levels Sets the last set of luminance values measured AFTER calibration setLevelsPre levels Sets the last set of luminance values measured during calibration setLineariseMethod method Sets the method for linearising 0 uses y a bx 4gamma 1 uses y a bx gamma 2 uses linear interpola tion over the curve setLumsPost lums Sets the last set of luminance values measured AFTER calibration setLumsPre lums Sets the last set of luminance values measured during calibration setMeanLum meanLum Records the mean luminance for reference only setNotes notes For you to store notes about the calibration setPsychopyVersion version setSizePix pixels setSpectra nm rgb sets the phosphor spectra measured by the spectrometer setUseBits usebits setWidth width Of the viewable screen cm 8 14 psychopy monitors for those that don t like Monitor Center 139 PsychoPy Psychology software for Python Release 1 81 03 8 14 2 GammaCalculator class psychopy monitors GammaCalculator inputs il lums gamma None bitsIN 8 bit sOUT 8 eq 1 Class for managing gamma tables Parameters inputs required values at which you measured screen luminance either in range 0 0 1 0 or range 0 255 Should include the min and max of the monitor Then give EITHER lums or gamma elums measured luminance at
320. tuff getTime Returns the current time left on this timer in secs sub ms precision class psychopy core MonotonicClock start_time None A convenient class to keep track of time in your experiments using a sub millisecond timer Unlike the Clock this cannot be reset to arbitrary times For this clock t 0 always represents the time that the clock was created Don t confuse this class with core monotonicClock which is an instance of it that got created when Psy choPy core was imported That clock instance is deliberately designed always to return the time since the start of the study Version Notes This class was added in PsychoPy 1 77 00 getLastResetTime Returns the current offset being applied to the high resolution timebase used by Clock getTime Returns the current time on this clock in secs sub ms precision class psychopy core StaticPeriod screenHz None win None name StaticPeriod A class to help insert a timing period that includes code to be run Typical usage fixation draw win flip ISI StaticPeriod screenHz 60 TSI start 0 5 start a period of 0 5s stim image largeFile bmp could take some time ISI complete finish the 0 5s taking into account one 60Hz frame stim draw 78 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 8 2 win flip the period takes into account the next frame flip ftime should now be a
321. ui Dlg method 103 addTrialHandlerRecord psy chopy iohub client ioHubConnection method 122 AdvAudioCapture class in psychopy microphone 131 array2image in module psychopy tools imagetools 148 psychopy data MultiStairHandler B BatchSpeech2Text class in psychopy microphone 134 bootStraps in module psychopy data 97 butter2d_bp in module psychopy filters 100 butter2d_hp in module psychopy filters 100 butter2d_lp in module psychopy filters 100 butter2d_lp_elliptic in module psychopy filters 100 ButtonBox class in psychopy hardware forp 107 ButtonBox class in psychopy hardware iolab 108 INDEX C calculateNextIntensity psychopy data QuestHandler method 92 calculateNextIntensity psychopy data StairHandler method 86 cart2pol in module psychopy tools coordinatetools 147 cart2sph in module psychopy tools coordinatetools 148 char psychopy iohub client keyboard KeyboardPress at tribute 126 psychopy iohub client keyboard KeyboardRelease attribute 127 checkOK psychopy hardware minolta LS100 method 112 clear_response_queue pyxid ResponseDevice method 105 clearBuffer psychopy hardware forp ButtonBox method 108 clearEvents in module psychopy event 99 clearEvents psychopy hardware iolab ButtonBox method 108 clearEvents _ psychopy iohub client ioHubConnection method 121 char clearMemory psychopy hardware minolta LS100 meth
322. uivalent function Convert a radian array to degrees gt gt gt rad np arange 12 np pi 6 gt gt gt np degrees rad array Dis 30 CO 90 20er 150 05 80 210 7 240 270 7 300 330 gt gt gt out np zeros rad shape gt gt gt r degrees rad out gt gt gt np all r out True 8 19 psychopy web Web methods 8 19 1 Test for access psychopy web haveInternetAccess forceCheck False Detect active internet connection or fail guickly If forceCheck is False will rely on a cached value if possible psychopy web reguireInternetAccess forceCheck False Checks for access to the internet raise error if no access 8 19 2 Upload a file over http psychopy web upload selector filename basicAuth None host None https False log True Upload a local file over the internet to a configured http server This method handshakes with a php script on a remote server to transfer a local file to another machine via http using POST Returns success plus a sha256 digest of the file on the server and a byte count If the upload was not successful an error code is returned eg too_large if the file size exceeds the limit specified server side in up php or no_file if there was no POST attachment Note The server that receives the files needs to be configured before uploading will work php files and notes for a sys admin are included in psychopy contrib http In particular the php
323. unique name The name should contain only letters numbers and underscores no punctuation marks or spaces Start float or integer The time that the keyboard should first get checked See Defining the onset duration of com ponents for details Stop When the keyboard is no longer checked See Defining the onset duration of components for details Force end routine If this box is checked then the Routine will end as soon as one of the allowed keys is pressed Allowed keys A list of allowed keys can be specified here e g m z 1 2 or the name of a variable holding such a list If this box is left blank then any key that is pressed will be read Only allowed keys count as having been pressed any other key will not be stored and will not force the end of the Routine Note that key names even for number keys should be given in single quotes separated by commas Cursor control keys can be accessed with up down and so on the space bar is space To find other special keys run the Coder Input demo what_key py press the key and check the Coder output window Store Which key press if any should be stored the first to be pressed the last to be pressed or all that have been pressed If the key press is to force the end of the trial then this setting is unlikely to be necessary unless two keys happen to be pressed in the same video frame The response time will also be stored if a keypress is record
324. vents device_label None as_type namedtuple Retrieve any events that have been collected by the ioHub Process from monitored devices since the last call to getEvents or clearEvents By default all events for all monitored devices are returned with each event being represented as a named tuple of all event attributes When events are retrieved from an event buffer they are removed from that buffer as well If events are only needed from one device instead of all devices providing a valid device name as the device_label argument will result in only events from that device being returned Events can be received in one of several object types by providing the optional as_type property to the method Valid values for as_type are the following str values e list Each event is sent from the ioHub Process as a list of ordered attributes This is the most efficient for data transmission but not for human readability or usability However if you do want events to be kept in list form set as_type list astuple Each event is converted to a namedtuple object Event attributes are accessed using natural naming style dot name style or by the index of the event attribute for the event type The namedtuple class definition is created once for each Event type at the start of the experiment so memory overhead is almost the same as the event value list and conversion from the event list to the namedtuple is very fast This i
325. while stimuli are being dynamically updated if you care about the precise timing of your stimuli For further information see the sections on Detecting dropped frames and reducingDroppedFrames 2 7 1 Fast and slow functions The fact that modern graphics processors are extremely powerful they can carry out a great deal of processing from a very small number of commands Consider for instance the PsychoPy Coder demo elementArrayStim in which several hundred Gabor patches are updated frame by frame The graphics card has to blend a sinusoidal grating with a grey background using a Gaussian profile several hundred times each at a different orientation and location and it does this in less than one screen refresh on a good graphics card There are three things that are relatively slow and should be avoided at critical points in time e g when rendering a dynamic or brief stimulus These are a disk accesses b passing large amounts of data to the graphics card and c making large numbers of python calls Functions that are very fast 1 Calls that move resize rotate your stimuli are likely to carry almost no overhead 2 Calls that alter the color contrast or opacity of your stimulus will also have no overhead IF your graphics card supports OpenGL Shaders 3 Updating of stimulus parameters for psychopy visual ElementArrayStim is also surprisingly fast BUT you should try to update your stimuli using numpy arrays for the maths rather than f
326. y shape can be anything that has a contains method like ShapeStim or Polygon Not tested with ImageStim mouseMoveTime mouseMoved distance None reset False Determine whether how far the mouse has moved With no args returns true if mouse has moved at all since last getPos call or distance x y can be set to pos or neg distances from x and y to see if moved either x or y that far from lastPos or distance can be an int float to test if new coordinates are more than that far in a straight line from old coords Retrieve time of last movement from self mouseClock getTime Reset can be to here or to screen coords x y which allows measuring distance from there to mouse when moved if reset is x y and distance is set then prevPos is set to x y and distance from x y to here is checked mouse lastPos is set as current x y by getPos mouse prevPos holds lastPos from last time mouseMoved was called 98 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 setPos newPos 0 0 Sets the current position of the mouse pygame only in the same units as the Window 0 0 is at centre Parameters newPos x y or x y the new position on the screen setVisible visible Sets the visibility of the mouse to or 0 NB when the mouse is not visible its absolute position is held at 0 0 to prevent it from going off the screen and getting lost You can still use getRel
327. y 1 65 00 py2 6 eg f1 C ilProgram Files PsychoPy2 Lib site packages PsychoPy 1 65 00 py2 6 egg psychopy pr preference_files append fl if you might need to import the app files ffor files in os listdir C Program Files PsychoPy2 Lib site packages PsychoPy 1 65 00 py2 6 e f1 C Program Files PsychoPy2 Lib site packages PsychoPy 1 65 00 py2 6 egq psychopy a app_files append f1 fall files psychopy preferences preference files psychopy app app files my_data_file combine the files all files psychopy preferences preference files my_data_files 0 fdefine the setup setup console progName data_files all files options pyZexe skip_archive True optimize 2 10 6 Builder providing feedback If you re using the Builder then the way to provide feedback is with a Code Component to generate an appropriate message and then a 7ext Component to present that message PsychoPy will be keeping track of various aspects of the stimuli and responses for you throughout the experiment and the key is Knowing where to find those The following examples assume you have a Loop called trials containing a Routine with a Keyboard Component called key_resp Obviously these need to be adapted in the code below to fit your experiment Note The following generate strings use python formatted strings These are very powerful and flexible but a little strange wh
328. y data TrialHandler method 84 saveAsText psychopy data MultiStairHandler method 90 saveAsText psychopy data QuestHandler method 94 saveAsText psychopy data StairHandler method 87 saveAsText psychopy data TrialHandler method 84 saveAsWideText psychopy data ExperimentHandler method 81 saveAsWideText psychopy data TrialHandler method 84 saveMon psychopy monitors Monitor method 138 sd psychopy data QuestHandler method 94 sendMessage psychopy hardware minolta LS 100 method 112 sendMessage psychopy hardware pr PR650 method psychopy data MultiStairHandler 114 sendMessage psychopy hardware pr PR655 method 115 sendMessageEvent psy chopy iohub client ioHubConnection method 122 setCalibDate psychopy monitors Monitor method 138 setCurrent psychopy monitors Monitor method 138 setData psychopy parallel static method 143 setData psychopy parallel ParallelPort method 142 setDefaultClock in module psychopy logging 130 setDistance psychopy monitors Monitor method 139 setDKL_RGB psychopy monitors Monitor method 139 setEnabled psychopy hardware iolab ButtonBox method 109 setExp psychopy data MultiStairHandler method 90 setExp psychopy data OuestHandler method 94 setExp psychopy data StairHandler method 87 setExp psychopy data TrialHandler method 85 setFile psychopy microphone AdvAudioCapture method 132 setGamma
329. ychoPy These are not case sensitive but should not include any spaces 2 3 2 Colors by hex value This is really just another way of specifying the r g b values of a color where each gun s value is given by two hexadecimal characters For some examples see this chart To use these in PsychoPy they should be formatted as a string beginning with and with no spaces NB on a British Mac keyboard the key is hidden you need to press Alt 3 2 3 3 RGB color space This is the simplest color space in which colors are represented by a triplet of values that specify the red green and blue intensities These three values each range between 1 and 1 Examples 1 1 1 is white 0 0 0 is grey 1 1 1 is black 1 0 1 1 is red 1 0 0 6 0 6 is pink The reason that these colors are expressed ranging between 1 and 1 rather than 0 1 or 0 255 is that many experiments particularly in visual science where PsychoPy has its roots express colors as deviations from a grey screen Under that scheme a value of 1 is the maximum decrement from grey and 1 is the maximum increment above grey Note that PsychoPy will use your monitor calibration to linearize this for each gun E g 0 will be halfway between the minimum luminance and maximum luminance for each gun if your monitor gammaGrid is set correctly 2 3 4 HSV color space Another way to specify colors is in terms of their Hue Saturation and Value HSV For a desc
330. ygame method 146 setVolume psychopy sound SoundPyo method 145 setWidth psychopy monitors Monitor method 139 show psychopy gui Dlg method 103 shutdown psychopy iohub client ioHubConnection method 124 simulate psychopy data QuestHandler method 94 SoundPygame class in psychopy sound 145 SoundPyo class in psychopy sound 144 Speech2Text class in psychopy microphone 133 sph2cart in module psychopy tools coordinatetools 148 StairHandler class in psychopy data 85 standby psychopy hardware iolab ButtonBox method 109 start psychopy core StaticPeriod method 79 startRemoteMode psychopy hardware pr PR655 method 115 psychopy iohub client keyboard Keyboard at tribute 124 StaticPeriod class in psychopy core 78 stop psychopy microphone AdvAudioCapture method 132 stop psychopy sound SoundPygame method 146 stop psychopy sound SoundPyo method 145 switchOn in module psychopy microphone 131 state 200 Index PsychoPy Psychology software for Python Release 1 81 03 SyncGenerator class in psychopy hardware emulator 107 T time psychopy iohub client keyboard KeyboardPress at tribute 126 time _ psychopy iohub client keyboard KeyboardRelease attribute 127 toFile in module psychopy tools filetools 148 TrialHandler class in psychopy data 81 type psychopy iohub client keyboard KeyboardPress at tribute 127 type psy
331. you re using a regular computer display you have a hardware limited temporal precision of 10 ms irrespective of your response box or software clocks etc and should bear that in mind when looking for effect sizes of less than that Can I have my stimulus to appear with a very precise rate Yes Generally to do that you should time your stimulus its onset offset its rate of change using the frame refresh rather than a clock e g you should write your code to say for 20 frames present this stimulus rather than for 300ms present this stimulus Provided your graphics card is set to synchronise page flips with the vertical blank and provided that you aren t dropping frames the frame rate will always be absolutely constant 2 9 Glossary Adaptive staircase An experimental method whereby the choice of stimulus parameters is not pre determined but based on previous responses For example the difficulty of a task might be varied trial to trial based on the participant s responses These are often used to find psychophysical thresholds Contrast this with the method of constants CRT Cathode Ray Tube Traditional computer monitor rather than an LCD or plasma flat screen csv Comma Separated Value files Type of basic text file with comma separated values This type of file can be opened with most spreadsheet packages e g MS Excel for easy reading and manipulation Method of constants An experimental method w
332. you notice that the grating and the fixation stimuli both call GratingStim but have different arguments One of the nice features about python is that you can select which arguments to set GratingStim has over 15 arguments that can be set but the others just take on default values if they aren t needed That s a bit easy though Let s make the stimulus move at least To do that we need to create a loop where we change the phase or orientation or position of the stimulus and then redraw Add this code in place of the drawing code above for frameN in range 200 grating setPhase 0 05 advance phase by 0 05 of a cycle grating draw fixation draw mywin update That ran for 200 frames and then waited 5 seconds as well Maybe it would be nicer to keep updating until the user hits a key instead That s easy to add too In the first line add event to the list of modules you ll import Then replace the line for frameN in range 200 with the line while True this creates a never ending loop Then within the loop make sure it has the same indentation as the other lines add the lines if len event getKeys gt 0 break vent clearEvents the first line counts how many keys have been pressed since the last frame If more than zero are found then we break out of the never ending loop The second line clears the event buffer and should always be called after you ve collected the events you want othe
333. ython Release 1 81 03 a Windows XP Windows 7 Mac OS X 10 6 Ubuntu 11 10 SP3 Enterprise Snow Leopard Gabor 0 5 0 0 500 dot RDK 0 5 54 3 750 dot RDK 21 7 aborted 1174 1000 dot RDK 776 aborted aborted aborted GPU Radeon 5400 Radeon 5400 Radeon 2400 Radeon 5400 GPU driver Catalyst 11 11 Catalyst 11 11 Catalyst 11 11 CPU Core Duo 3GHz Core Duo 3GHz Core Duo 2 4GHz Core Duo 3GHz RAM 4GB 4GB 2GB 4GB I ll gradually try to update these tests to include e longer runs one per night afaster Mac areal time Linux kernel 2 8 2 Other guestions about timing Can PsychoPy deliver millisecond precision The simple answer is yes given some additional hardware The clocks that PsychoPy uses do have sub millisecond precision but your keyboard has a latency of 4 25ms depending on your platform and keyboard You could buy a response pad e g a Cedrus Response Pad and use PsychoPy s serial port commands to retrieve information about responses and timing with a precision of around 1ms Before conducting your experiment in which effects might be on the order of 1 ms do consider that your screen has a temporal resolution of 10 ms e your visual system has a similar upper limit or you would notice the flickering screen human response times are typically in the range 200 400 ms and very variable USB keyboard latencies are variable in the range 20 30ms That said PsychoPy does aim to give you
334. ython Release 1 81 03 CustomMouse to change the cursor in windows with GUI OBS will be depricated soon General purpose applies to other stimuli BufferImageStim to make a faster to show screenshot of other stimuli Aperture to restrict visibility area of other stimuli See also visualhelperfunctions 8 3 psychopy data functions for storing saving analysing data Routines for handling data structures and analysis 8 3 1 ExperimentHandler class psychopy data ExperimentHandler mame version extralnfo None runtime Info None originPath None savePickle True save WideText True dataFileName autoLog True A container class for keeping track of multiple loops handlers Useful for generating a single data file from an experiment with many different loops e g interleaved staircases or loops within loops Usage exp data ExperimentHandler name Face Preference version 0 1 0 Parameters name a string or unicode As a useful identifier later version usually a string e g 1 1 0 To keep track of which version of the experiment was run extraInfo a dictionary Containing useful information about this run e g _ partici pant jwp gender m orientation 90 runtimeInfo psychopy info RunTimeInfo Containining information about the sys tem as detected at runtime originPath string or unicode The path and filename of the originating script experimen
335. ze of the filter cutoff float relative cutoff frequency of the filter 0 1 0 n int optional order of the filter the higher n is the sharper the transition is Returns numpy ndarray filter kernel in 2D centered psychopy filters butter2d lp elliptic size cutoff_x cutoff_y n 3 alpha 0 offset_x 0 off set_y 0 Butterworth lowpass filter of any elliptical shape Parameters size tuple size of the filter cutoff_x cutoff_y float float relative cutoff frequency of the filter 0 1 0 for x and y axes alpha float optional rotation angle in radians offset_x offset_y float offsets for the ellipsoid n int optional order of the filter the higher n is the sharper the transition is Returns 100 Chapter 8 Reference Manual API PsychoPy Psychology software for Python Release 1 81 03 numpy ndarray filter kernel in 2D centered psychopy filters conv2d smaller larger convolve a pair of 2d numpy matrices Uses fourier transform method so faster if larger matrix has dimensions of size 2 n Actually right now the matrices must be the same size will sort out padding issues another day psychopy filters getRMScontrast matrix Returns the RMS contrast the sample standard deviation of a array psychopy filters imfft X Perform 2D FFT on an image and center low frequencies psychopy filters imifft X Inverse 2D FFT with decentering psychopy filters makeGauss x mean 0 0 sd 1 0 gain 1

Download Pdf Manuals

image

Related Search

Related Contents

Zanussi ZCM ID Installation and Operation Manual  manual - Diputación Provincial de Almería  Fisher FVH-E439 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file