Home
PyEPL: A Cross-Platform Experiment-Programming Library
Contents
1. RETURN 1133749106225 0 P R 1133749106337 1 R R 1133749090086 0 E Logging Ends The first column of the log contains the time of each event The second column contains imprecision values for the time stamps in the first column The motivation for and implementation of recording imprecision values is described in the Implementation section under Timing The third column codes a key down event with a P press and a key up event with an R release The fourth column gives the kind of key event Sample Experiment 2 TinyCab This program is a stripped down version of the virtual navigation task employed by Ekstrom et al 2003 The program does the following 1 Simulates a trivial 3D environment with a floor four walls and sky 2 Simulates navigation of the environment as the participant drives around it with a joystick 3 Presents a sprite a 2D image always facing the user at a specific location in the environment 4 Quits when the participant drives into the sprite Again we present the code and then explain it Because this experiment is sub stantially more complex than the preceding one our exposition emphasizes the high level organizing concepts We begin with an overview of the program and its underlying strategy PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 8 The programming paradigm differs substantially between Sample Experiments 1 and 2 Whereas Experiment 1 completely specifies a finite sequence of stimuli
2. To provide maximum timing precision of visual stimulus onset PyEPL makes use of double buffering and vertical blanking loop VBL synchronization functionality provided by the OpenGL library Double buffering allows PyEPL to draw the next screen before it is necessary to show it and then simply flip the new screen to the display when it is ready With OpenGL the screen flip can be made to wait until the next vertical blank before it executes This ensures that the entire screen is updated at once and that PyEPL knows when that update has occurred Consequently when synchronization to the VBL is activated in PyEPL the experimenter can know within 1 ms when a stimulus is presented to the participant When synchronized to the vertical refresh screen updates are assumed to have sub stantial delays on a 60 Hz monitor up to 16 6 ms Thus they constitute an exception to the time stamping regime described above instead of returning time stamps both from before and after the screen update has run only the post update time stamp is returned This time of this stamp is known to be approximately 1 ms after the actual time of the update Synchronization Pulsing Given the widespread interest in the neural substrates of cognition the desire to conjoin behavioral cognitive tasks with electrophysiological measures we will take elec troencepalographic or EEG recordings as an example is natural In order to precisely characterize the behavioral im
3. and their dura tions Experiment 2 merely simulates a virtual environment which is left to the participant to explore The paradigm therefore shifts from enumerating a stimulus sequence to con figuring the virtual environment and the participant s possible interactions with it With this configuration done we start PyEPL s renderLoop function to allow those interactions to occur in principle indefinitely The organization of our program is as follows 1 Preliminaries lines 1 16 2 Configuration of the environment lines 20 70 3 Configuration of the avatar lines 73 89 4 Configuration of the Eye lines 92 95 5 Navigating the environment lines 99 111 1 usr bin python 2 3 import PyEPL 4 from pyepl locals import 5 6 create the experiment object 7 exp Experiment 8 9 create the video track 10 video VideoTrack video 11 12 create the virtual reality track 13 vr VRTrack vr 14 15 create the joystick track 16 joystick JoyTrack joystick 17 18 done remains false until the avatar hits 19 the sprite 20 done False 21 22 add the sky to the environment 23 vr addSkyBox Image sky png 24 25 add the floor and walls to the environment 26 vr addFloorBox x 0 y 0 z 0 27 xsize 50 0 28 ysize 7 0 zsize 50 0 29 floorimage Image floor png 30 wallimage Image wall png ew 32 33 34 35 36 37 38 39 40 Al 42 43 44 45 46 47 48 49 50 51
4. him or her with specific traits such as velocity and mass and potentially an appearance although not in our example From a programming point of view the avatar is a data structure that contains these traits minimally the virtual location and velocity and continually updates their values based on input from the participant This experiment demonstrates creating an avatar line 73 and configuring it for joystick control lines 79 89 Eye The final component of the VR system that needs to be set up is the Eye The Eye is essentially the virtual camera it picks a specific view of the environment and renders it on screen To provide the feeling of exploring the virtual environment the Eye in our experiment follows the avatar That is the view on screen is updated to reproduce what is viewable at the current position of and in the current direction of the participant An PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 12 Eye need not be fixed with an avatar however it is possible for example to render the environment as seen from a fixed position as in a bird s eye view The Eye is fixed on the avatar by calling the avatar s newEye method on line 92 and its field of view is set on line 95 Starting the Navigation The final step in the program is to start the navigation This has two parts displaying the initial view from the Eye line 99 and calling the renderLoop function to start the simulation On line 111 the re
5. 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY set some gravity vr setGravity x 0 0 y 0 1 z 0 0 add an infinite plane impassible barrier for the floor vr addPlaneGeom a 0 0 b 1 0 c 0 0 d 0 0 mu 0 0 add infinite plane impassible barriers for the walls so the avatar can t travel through them vr addPlaneGeom a 1 0 b 0 0 c 0 0 d 14 99 mu 0 vr addPlaneGeom a 1 0 b 0 0 c 0 0 d 14 99 mu 0 vr addPlaneGeom a 0 0 b 0 0 c 1 0 d 14 99 mu 0 vr addPlaneGeom a 0 0 b 0 0 c 1 0 d 14 99 mu 0 add a sprite at 10 0 0 0 10 0 vr addSprite x 10 0 y 0 0 z 10 0 image Image sprite png xsize 3 0 ysize 5 0 when the avatar hits the sprite this function will be called def hitTheSprite global done done True add a permeable invisible sphere in the same place as the sprite vr addSphereGeom x 10 0 y 0 5 z 10 0 radius 2 2 permeable True callback hitTheSprite create the subject s avatar av vr newAvatar subject_avatar eyeheight 1 0 radius 0 5 9 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 10 cre
6. PyEPL A Cross Platform Experiment Programming Library Aaron S Geller Department of Psychology University of Pennsylvania Ian K Schleifer Volen National Center for Complex Systems Brandeis University Per B Sederberg Neuroscience Graduate Group University of Pennsylvania Joshua Jacobs Neuroscience Graduate Group University of Pennsylvania Michael J Kahana Department of Psychology University of Pennsylvania Date January 26 2006 Abstract PyEPL the Python Experiment Programming Library is a Python library which allows cross platform and object oriented coding of psychology exper iments It provides functions for displaying text and images onscreen as well as playing and recording sound and is capable of rendering 3D virtual environments for spatial navigation tasks It interfaces with Activewire USB cards for synchronization of experimental events with physiological record ings It is currently tested for Mac OS X and Linux In this article we first present 2 sample programs which illustrate core PyEPL features The examples demonstrate visual stimulus presentation keyboard input and simulation and exploration of a simple 3D environment We then describe the components and strategies used in implementing PyEPL The proliferation of personal computers PCs during the past three decades and their ability to control both input and output devices have made them the standard tool for experimentation in the psych
7. accessible by PyEPL are provided by very few programming utilities that are currently available Future directions for PyEPL development include en hancing our documentation and sample code base streamlining the installation of PyEPL and its dependencies and possible implementation on Windows Accessed via the PYODE module Baas 2005 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 16 Resources PyEPL and the PyEPL User s Manual as well as the source code for the sample experiments may be downloaded from http memory psych upenn edu pyepl1 References Baas M 2005 PyODE Python bindings for the Open Dynamics Engine Computer Software Retrieved December 29 2005 from http pyode sourceforge net Bates T amp D Olivero L 2003 Psyscript A Macintosh application for scripting experiments Behavior Research Methods Instruments amp Computers 4 565 576 Beazley D 2005 SWIG Simplified Wrapper and Interface Generator Computer Software Retrieved December 28 2005 from http www swig org Brainard D H 1997 The psychophysics toolbox Spatial Vision 10 443 446 Castro Lopo E de 2005a libsamplerate Computer Software Retrieved December 28 2005 from http www mega nerd com SRC Castro Lopo E de 2005b libsndfile Computer Software Retrieved December 28 2005 from http www mega nerd com libsndfile Ekstrom A Kahana M J Caplan J B Fields T A Is
8. aham Schneider Daniel Rizzuto Jeremy Caplan Kelly Addis Travis Gebhardt and Benjamin Burack Correspondence concerning this article may be addressed to Michael Kahana kahana psych upenn edu 32 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 3 Sample Experiment 1 EasyStroop The first sample experiment demonstrates the use of PyEPL for simple screen output and keyboard input Specifically it does the following 1 Shows the instructions to the participant 2 Presents a textual stimulus on screen this is a single trial of a forced choice Stroop task so the participant must choose between two possibilities for the text s color 3 Waits for the participant s response 4 Decides whether the response was correct and gives correct incorrect feedback with the response time We first present the Python code and then explain it Note at the outset though that lines beginning with are comments and are ignored by the Python interpreter Also note that line numbers are provided for convenience and are not part of the code usr bin python get access to pyepl objects amp functions from pyepl locals import create an experiment object parse command line arguments amp initialize pyepl subsystems exp Experiment Create a VideoTrack object for interfacing with monitor and a KeyTrack object for interfacing with keyboard vt VideoTrack video kt KeyTrack key reset th
9. ate an axis which will control the avatar s turn speed turning JoyAxis 0O 0 0 0009 create an axis which will control the avatar s forward speed forward ScaledAxis JoyAxis 0 1 0 0025 0 009 set the avatar s forward and turn speed controls av setControls forward_speed forward yaw_speed turning create the eye object eye av newEye subject_view set the eye s field of view to 60 0 degrees eye setFOV 60 0 show the eye view so that it fills the whole screen video show eye 0 0 this function will be called by PyEPL as part of the render loop When it returns False the render loop will finish def checkStillGoing t global done global video video updateScreen return not done Start the render loop video renderLoop checkStillGoing Preliminaries The first section of the experiment resembles the beginning of Sample Experiment 1 The purpose of the Experiment and VideoTrack instances are identical to those in that example In this experiment we also instantiate a VRTrack line 13 to gain access to the PyEPL VR application programming interface API and a JoyTrack line 16 to enable joystick input Environment Currently only square environments are supported by PyEPL To make these environments moderately plausible we circumscribe these virtual worlds with a visible and impassible barrier i e a square wall Together with the sky rendered as a large box ove
10. cal code by writing it in C The second is to provide an estimate of the precision of all measured event times by associating a lag value with each event We describe both strategies here To minimize any extra latency in timing due to code interpretation critical sections of PyEPL are implemented as compiled code invoked by the interpreter Two software layers participate in this strategy First the main libraries that PyEPL uses to interact with hardware are all C code These include SDL the Simple DirectMedia Layer 2005 which PyEPL uses to manage both manual input keyboard mouse and joystick and video output and RtAudio Scavone 2005 which manages audio input and output see Fig 3 The second layer of compiled software are PyEPL functions which frequently interact with the preceding layer The most important of these is the pollEvents function which monitors manual inputs PyEPL uses PyGame s 2005 event loop to manage hardware inputs User inputs such as keystrokes or joystick manipulations are available as PyGame events and PyEPL continually checks for these and logs them The pollEvents function also exemplifies the second strategy mentioned above pro viding a precision estimate for event times Using the PyGame event loop is a powerful PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 13 tool for simplifying experiment code especially for programs such VR tasks which receive continual user inputs This technique com
11. e display to black vt clear black create a PresentationClock object for timing clk PresentationClock open the instructions file instructions open instruct txt show the experiment instructions instruct instructions read clk clk create the stimulus stim Text green color red create a ButtonChooser object 33 34 35 36 37 38 39 40 Al 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 4 to watch for specific keys bc ButtonChooser Key R Key G request a 1 second delay clk delay 1000 delay then present the test cue and process the participant s response ts b rt stim present clk clk duration 5000 bc bc time the response response_time rt 0 ts 0 score the response if b Key R feedback Text Correct d ms response_time else feedback Text Incorrect d ms response_time give feedback for the default duration flashStimulus feedback clk clk wait for final display to finish clk wait The Experiment Class The first nontrivial line of the script is line 9 which creates an instance of the Experiment class The Experiment class manages three functions which pertain to all experiments Our simple example relies only on the first of these creating and maintaining a directory structure for each participant The experiment program is run by invo
12. e the function until the system time is greater than or equal to that contained by the PresentationClock This arrangement greatly improves ISI timing as it decouples presentation times from program execution latencies Because ISI delays are executed both as part of the presentation function and in terms of system time stamps as opposed to offsets relative to prior presentations they PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 6 are not affected by the execution time of any code between the call to delay and the call to the presentation function Because no delay is introduced before the call to flashStimulus on line 56 the use of a PresentationClock on that line is not entirely straightforward In this instance we take advantage of the fact that presentation functions not only use PresentationClocks for timing but also update them in the course of executing In PyEPL the final stimulus presentation call needs to be protected from early termination by a call to clk wait Be cause flashStimulus increments the PresentationClock to reflect the duration of the stimulus presentation in this case by 1000 ms the default duration clk wait when called on line 59 causes the program to terminate immediately after this duration but not before The use of clk on line 27 is similar in that the PresentationClock does not con strain the visual presentation Here the instruct function displays the instructions for the experiment to the par
13. es PyGame to receive input from hardware controllers such as a joystick or keyboard Sound PyEPL s sound module is another component implemented in C but exposed to Python Using the cross platform RtAudio Scavone 2005 library to gain low level access to the audio devices we coded two circular buffers one providing read record functional ity the other providing write play functionality This code is exposed to Python with the SWIG Beazley 2005 utility Sound file I O is implemented with the libsndfile Castro Lopo 2005b and libsam plerate Castro Lopo 2005a libraries These enable PyEPL to play sound from all conven tional file formats and sampling rates File output is currently restricted to 44100 Hz WAV format State Management For experiments run in noncontrolled environments easy interruption and resumption of experiments is critical and requires saving to disk serializing one or more program variables In general experiment programs consist of a loop that iterates through a list of trials so this state management task entails at a minimum saving both the list of trials and the index of the trial to be run PyEPL uses the Python pickle serialization module to record experimental state variables Conclusions PyEPL makes the coding of feature rich experiments quite easy The sample experi ments described above can with a modicum of effort be scaled up into real experiments Furthermore the features made
14. es with a potential degradation in timing accu racy however The problem is that PyGame s event functions provide only the kind of events that have occurred e g key F depressed but not the time at which they occurred Timing events that are registered in PyGame s event loop thus depends on rapid continual checking for these events PyEPL compensates for the potential inaccuracy by recording the time elapsed be tween pollEvents calls which defines the maximum error in their time stamp The time stamps thus take the form of ordered pairs t where t is the time the event was retrieved from PyGame and e is the time elapsed since the last call to pollEvents For 306 849 key events recorded during a typical experiment on a Mac G5 tower running OS 10 3 with Python 2 3 we observed a mean e of 96 02 ms for key down events and 3 47 12 ms for key up events 95 confidence intervals A similar error estimate is provided for output events In general output functions in PyEPL do not block that is execution proceeds to the program s next line as soon as the particular function has started running This makes possible a timing precision estimation as follows Any output operation such as drawing to the screen or playing a sound is preceded and followed by checking the system time These two time stamps again define an interval inside which the output function is known to have run Screen Refresh Synchronization
15. ffers tools for synchronizing behavioral and electrophysiological data Additional features include screen refresh synchronization automated logging of experimental events and management of participant data hierarchies Finally the Python language itself may be considered an additional feature Python has a very simple syntax which makes pro gramming minimally daunting for the novice but provides advanced software engineering features such as inheritance and polymorphism for the initiate Table 1 Features of interest provided by several experiment generation packages Package Platform Sound recording Sync pulsing VR E Prime 1 1 Windows no yes no PsyScope X Beta I Mac OS X no no no SuperLab 2 0 Windows yes yes no PsyScript Mac OS 9 yes yes no Usage Here we present some of the main aspects of experiment coding in PyEPL by exam ining two simple experiment programs Versions 95 98 ME 2000 XP Functionality exists via third party hardware and or software 3Latest version as of June 2005 Versions 95 and later Also runs on Mac OS 9 and earlier See Bates and D Olivero 2003 We acknowledge support from NIH grants MH55687 MH61975 MH62196 NSF CELEST grant SBE 354378 as well as the Swartz Foundation We thank Jacob Wiseman for his work on the installation system The PyEPL project grew out of earlier C C libraries developed by Michael Kahana Daniil Utin Igor Khazan Joshua Jacobs Marc Howard Abr
16. ham E A Newman E L et al 2003 Cellular networks underlying human spatial navigation Nature 425 184 187 Keck D 2005 ActiveWire USB card drivers for Mac OS X Computer Software Retrieved December 28 2005 from http www docdave com apps activewire html Pelli D G 1997 The videotoolbox software for visual psychophysics Transforming numbers into movies Spatial Vision 10 437 442 PyGame 2005 Computer Software Retrieved December 28 2005 from http www pygame org Scavone G P 2005 RtAudio Computer Software Retrieved December 28 2005 from http www music mcgill ca gary rtaudio Simple DirectMedia Layer 2005 Computer Software Retrieved December 28 2005 from http www libsdl org Smith R 2005 Open Dynamics Engine Computer Software Retrieved December 28 2005 from http www ode org Straw A 2006 VisionEgg Computer Software Retrieved January 25 2006 from http visionegg org
17. king the Python interpreter on the experiment script from the command line and the participant label is passed to PyEPL as a command line parameter For example if the script above is saved in a file called easyStroop py it could be run from the command line with the command python easyStroop py s sub001 The Experiment object processes the flag s sub001 and creates a data directory for participant sub001 The second function served by the Experiment class is that of parsing the experi ment s configuration file To facilitate their modification global experiment variables are typically separated into a separate file called config py The experimenter sets global vari ables in config py as a series of Python assignments as in numTrials 12 Upon creation an Experiment instance parses the configuration file and makes the settings available to the experiment program Maintaining global variables in a separate file has the additional ben efit of modularizing the experiment That is a specific configuration file can be associated with a specific session for a specific participant Thus even if config py should change PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 5 over time the settings used for each participant are known because the current version of the configuration file is copied into the data directory for the participant for whom the experiment is being run The third function served by the Experiment class is that of managi
18. n the program occurs on line 18 where the VideoTrack instance is used to clear the screen However all screen output and all keyboard input is mediated by the above mentioned Track objects The PresentationClock Class For the class of psychology experiments consisting of a list of stimulus presentations two kinds of intervals need to be specified The first is the duration of the stimulus presentation and the second is the duration of empty time between stimuli or interstimulus interval ISI A third kind of interval during which the program waits for a participant s response will be considered later because this duration is not controlled by the experiment program The PresentationClock class is critical for specifying known durations that is the first two kinds of intervals PresentationClocks occur both implicitly and explicitly in several parts of the pro gram Here we consider its use on lines 37 and 41 of the program which constitutes its most straightforward application A PresentationClock instance contains the system time and provides the delay method to introduce ISIs into a program The delay call for example on line 37 does not actually cause a delay Instead it simply increments the time contained by the PresentationClock instance it is thus a simple addition and takes less than 1 ms to execute Then when the PresentationClock is passed as an argument to a presentation function as it is on line 41 PyEPL waits to execut
19. nderLoop is started with the function checkStillGoing as an argument On each iteration of the renderLoop PyEPL calls the function that the loop was given checkStillGoing in this case if the function returns True the simulation continues In our experiment checkStillGoing inspects the global variable done which records whether the participant s avatar has collided with the sprite Logs Just as in Sample Experiment 1 the Track instances used in Experiment 2 provide automated and comprehensive logging The JoyTrack creates a log called joystick joylog which records the x y displacement of every joystick manipulation More importantly the VRTrack creates a log called vr vrlog which records the virtual 3D coordinates of the avatar at each iteration of the renderLoop as well as its virtual yaw pitch and roll Implementation Timing Timing is perhaps the most basic and essential aspect of any experiment programming library It is essential for controlling the duration of stimulus presentation for measuring the response latencies and for synchronizing behavioral and physiological measurements Because operating systems on nearly all PCs perform multitasking accurate timing presents a serious challenge to the experimenter These problems are exacerbated by an interpreted language such as Python which can never be as fast as a compiled language In PyEPL we address the timing problem in two ways The first strategy is to optimize criti
20. ng experimental state As described in greater detail below under Implementation PyEPL provides functions to facilitate interruption and resumption of experiments These functions are provided by the Experiment class in the methods saveState and restoreState The Track Classes On lines 14 and 15 the program instantiates two kinds of Track objects Tracks which lie at the center of the PyEPL programming philosophy entail two concepts The first is that any experimental quantity that varies over the course of an experiment should be monitored both comprehensively and without explicit coding by the experimenter This is a demand for convenient logging of both stimulus presentations and participant responses The second concept entailed in the Track philosophy demands that the convenient logging reside inside the stimulus presentation classes in the case of output or the responses processing classes in the case of input Thus when on line 14 the program creates a VideoTrack instance it is doing two important things First it sets up the interface by which PyEPL puts images onscreen That is it enables a specific mode of stimulus presentation Second it prepares PyEPL to log the visual stimulus presentations as they occur Similarly when on line 15 the program creates a KeyTrack instance it is does two distinct things It is instructs PyEPL both to listen for and record any keyboard inputs The only explicit use of either of our Track objects i
21. nvert the two sets of time stamps EEG synchronization pulsing sync pulsing in PyEPL is one instance in which cross platform uniformity is not possible Most Intel based Windows and Linux systems have parallel ports which can be used for sending transistor transistor logic TTL pulses for synchronization On Macs which lack parallel ports we send sync pulses from an Ac tiveWire USB card Our sync pulsing routines check which platform they are running on 8Mac OS X drivers provided by Keck 2005 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 15 and select the appropriate port Virtual Reality VR PyEPL uses another C library the Open Dynamics Engine ODE Smith 2005 together with PyGame and OpenGL to create a VR API PyEPL uses ODE to manage non graphical aspects of VR This includes modeling the boundaries of the virtual environment the locations and trajectories of objects in it and their interactions Interactions generally correspond to the action of a force either mechanical as in a collision or the presence of friction or gravity any or none of these interactions may be included in a given virtual world PyEPL visualizes this nonvisual environment by maintaining a special virtual object called an Eye that selects a specific view of the virtual world In a VR program PyEPL runs in a loop that computes what the Eye currently sees and uses OpenGL to render this view to the screen As mentioned above PyEPL us
22. ological laboratory Unlike the early days of the PC when researchers had to write their own low level code to control experiments there now exist numerous software tools that enable researchers with relatively modest programming skills to develop sophisticated experiments Broadly speaking these tools either take the form PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 2 of function libraries used in conjunction with scripting languages e g the Psychophysical toolbox as used with the Matlab scripting language Brainard 1997 Pelli 1997 or they take the form of graphical experiment creation tools that allow users without any formal programming skills to develop experiments e g the E package sold by Psychology Software Tools Inc PyEPL pronounced pr e p el is an experiment programming library written for and mostly in the Python programming language It uses only cross platform software components and thus may be used on both Mac OS X and Linux Although the present version has not yet been ported to Microsoft Windows such an extension is possible PyEPL offers several advantages over existing programming libraries and graphical development tools Table 1 PyEPL adds facilities for recording vocal responses and for the creation of desktop based virtual reality experiments to the standard suite of tools commonly avail able in other packages e g timing stimulus control response acquisition etc PyEPL also o
23. port of a particular segment of EEG however it is necessary See e g http www pygame org docs tut newbieguide html 11 In implementing this we have drawn on work by Straw 2006 PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 14 PyEPL Python AIR V V ActiveWire C SDL OpenGL RtAudio driver Mac Keyboard ActiveWire Hardware Mouse Monitor Sound I O card Joystick Mac Figure 3 The software infrastructure of PyEPL and its hardware interfaces The leftmost boxes describe three system layers Python C and hardware SDL is the Simple DirectMedia Layer a cross platform library for hardware management The rightmost boxes describe the system for sync pulsing via an ActiveWire card which is only done on Mac OS X On Linux PyEPL accesses the serial port via the kernel to know with maximal precision when with respect to the behavioral paradigm a given electrophysiological signal was observed This requires a mechanism that allows the experi menter to interconvert two kinds of time stamps those associated with physiological signals on the one hand and those associated with behavioral events on the other PyEPL achieves this synchronization by sending intermittent brief pulses to the recording equipment throughout the behavioral task By recording when the pulse was sent as recorded by PyEPL and observing when the pulse was received as recorded by the EEG equipment one can easily compute the mapping to interco
24. rhead and the ground or floor these boundaries are the first main category that needs PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 11 to be configured in our environment This is done in two steps First on lines 23 30 we describe the barriers appearance Then on lines 37 51 we given them virtual physical properties specifically the property of impassibility The other kind of object requiring configuration in our experiment is the sprite see Fig 2 In contrast to the boundaries whose rendering includes both scaling to convey proximity and deforming to convey orientation the sprite is rendered only to convey dis tance its display does not vary with orientation and always faces the Eye concerning which see below Figure 2 Screen shot of Sample Experiment 2 showing sprite person with hand extended The interface for sprite configuration parallels that for the walls Its visual component is set up first lines 54 55 followed by its virtual physical properties lines 60 70 The sprite configuration however has an added wrinkle in that the program must do something should the participant s avatar concerning which see below collide with it It must quit To arrange this we create a function to be called just in case of such a collision and register it with the PYEPL VR module line 70 Avatar The avatar is the participant s virtual body fixing him or her in a specific location and endowing
25. s they occur in order to respond to them The program must explicitly expose the keystroke events by creating an object to listen for them The ButtonChooser object created on line 34 does just this The ButtonChooser groups a specific set of keys that may then be monitored as potential stimulus responses In the example program the keys R and G are potential responses and are grouped in a ButtonChooser called bc When bc is passed as an argument to the present function as it is on line 43 the stimulus is presented only until one of the keys in bc is pressed or until the duration passed as the duration argument elapses As seen on line 41 the present function returns a 3 tuple when used to elicit a keyboard response The first element of the 3 tuple is the time of stimulus presentation the second is the Key of the response and the third is the time of response This is how an experiment is made interactive with keyboard input in PyEPL Experiment Output and Logs By default PyEPL runs in full screen mode Fig 1 As mentioned in the section on Tracks all screen and keyboard events are automatically PYEPL A CROSS PLATFORM EXPERIMENT PROGRAMMING LIBRARY 7 Correct 936 ms Figure 1 Screen shot of Sample Experiment 1 logged Thus for example after the experiment has run the file key keylog generated automatically by the KeyTrack contains the following 1133749093393 0 B Logging Begins 1133749104225 1 P RETURN 1133749104337 0 R
26. ticipant These are shown onscreen indefinitely in a pager envi ronment capable of scrolling backward and forward through the instruction text Instead of controlling this presentation the PresentationClock is passed as an argument so that it has a fresh timestamp once the program leaves the instruct function Consider the following example A participant begins the experiment at time and therefore the clk reads approximately t and spends 30 s reading the instructions Unless the time in clk is updated after instruct has returned the call to delay will not work at all This is because it will increment a stale time value that is the time in clk will be incremented from t to t 1 but the current time is approximately t 30 Because the current time exceeds that contained in clk no delay will occur Thus even output functions that are not constrained by PresentationClocks accept them as arguments and increment them by the duration of the output Passing a PresentationClock into these functions keeps its time stamp fresh that is useful for timing control later in the experiment The ButtonChooser Class Although the KeyTrack instance created on line 15 is necessary for processing keyboard input and sufficient for logging of all keystrokes the keystrokes themselves are not available to the experiment program without further coding That is a PyEPL experiment with just a KeyTrack will record keystrokes but will not be aware of them a
Download Pdf Manuals
Related Search
Related Contents
HD-1/HD-2 Series User`s Manual Avis Technique 13/07-1014 Ardex 8 + 9 082598 - サンケン電気 Leica AS400 Installation Manual 取扱説明書 - ソフトバンク Capítulo 3 Smeg CIR34XS Instructions for Use Seagate 1TB GoFlex for Mac Ultra-portable with Thunderbolt user manual használati útmutató instrukcja obsługi Dishwasher CAPÍTULO 4 - Repositório da Universidade de Lisboa Copyright © All rights reserved.
Failed to retrieve file