Home | Trees | Indices | Help |
|
---|
|
1 #!/usr/bin/env python 2 # 3 # The Vision Egg: TargetServer 4 # 5 # Copyright (C) 2001-2003 Andrew Straw. 6 # Author: Andrew Straw <astraw@users.sourceforge.net> 7 # URL: <http://www.visionegg.org/> 8 # 9 # Distributed under the terms of the GNU Lesser General Public License 10 # (LGPL). See LICENSE.TXT that came with this file. 11 # 12 # $Id$ 13 14 """Handle small targets gratings (server-side)""" 15 16 import VisionEgg 17 __version__ = VisionEgg.release_name 18 __cvs__ = '$Revision$'.split()[1] 19 __date__ = ' '.join('$Date$'.split()[1:3]) 20 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>' 21 22 import sys, os, math 23 import VisionEgg.Core 24 import VisionEgg.FlowControl 25 import VisionEgg.MoreStimuli 26 import VisionEgg.PyroHelpers 27 import Pyro.core 28 29 from VisionEgg.PyroApps.TargetGUI import TargetMetaParameters 3011833 Pyro.core.ObjBase.__init__(self) 34 35 # get stimulus 36 assert( stimuli[0][0] == '2d_overlay') 37 target = stimuli[0][1] 38 39 self.meta_params = TargetMetaParameters() 40 if not isinstance(screen,VisionEgg.Core.Screen): 41 raise ValueError("Expecting instance of VisionEgg.Core.Screen") 42 if not isinstance(presentation,VisionEgg.FlowControl.Presentation): 43 raise ValueError("Expecting instance of VisionEgg.FlowControl.Presentation") 44 if not isinstance(target,VisionEgg.MoreStimuli.Target2D): 45 raise ValueError("Expecting instance of VisionEgg.MoreStimuli.Target2D") 46 47 self.screen = screen 48 self.p = presentation 49 self.stim = target 50 51 self.p.add_controller(self.stim,'on',VisionEgg.FlowControl.FunctionController( 52 during_go_func=self.on_function_during_go, 53 between_go_func=self.on_function_between_go)) 54 55 self.p.add_controller(self.stim,'position',VisionEgg.FlowControl.FunctionController( 56 during_go_func=self.center_during_go, 57 between_go_func=self.center_between_go)) 58 59 self.update() # set stimulus parameters to initial defaults6062 self.p.remove_controller(self.stim,'on') 63 self.p.remove_controller(self.stim,'position') 64 Pyro.core.ObjBase.__del__(self) # call base class6567 if t <= self.meta_params.pre_stim_sec: 68 return 0 # not on yet 69 elif t <= (self.meta_params.pre_stim_sec + self.meta_params.stim_sec): 70 return 1 # on 71 else: 72 return 0 # off again73 7678 t_adjusted = t - self.meta_params.pre_stim_sec 79 distance = self.meta_params.velocity_pps * t_adjusted 80 x_offset = math.cos(self.meta_params.direction_deg / 180.0 * math.pi)*distance 81 y_offset = math.sin(self.meta_params.direction_deg / 180.0 * math.pi)*distance 82 83 return (self.meta_params.start_x + x_offset, 84 self.meta_params.start_y + y_offset)85 88 9193 if isinstance(new_parameters, TargetMetaParameters): 94 self.meta_params = new_parameters 95 else: 96 raise ValueError("Argument to set_parameters must be instance of TargetMetaParameters") 97 self.update()98100 stim_params = self.stim.parameters # shorthand 101 meta_params = self.meta_params # shorthand 102 103 # colors 104 stim_params.color = meta_params.color 105 self.screen.parameters.bgcolor = meta_params.bgcolor 106 107 # size and orientation 108 stim_params.size = (meta_params.width, meta_params.height) 109 stim_params.orientation = meta_params.orientation_deg 110 111 self.p.parameters.go_duration = ( meta_params.pre_stim_sec + meta_params.stim_sec + meta_params.post_stim_sec, 'seconds')112 115117 self.p.parameters.quit = 1120 return TargetExperimentMetaController121 125 128 129 # Don't do anything unless this script is being run 130 if __name__ == '__main__': 131 132 pyro_server = VisionEgg.PyroHelpers.PyroServer() 133 134 screen = VisionEgg.Core.Screen.create_default() 135 136 # get Vision Egg stimulus ready to go 137 stimuli = make_stimuli() 138 stimulus = stimuli[0][1] 139 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[stimulus]) 140 p = VisionEgg.FlowControl.Presentation(viewports=[viewport]) 141 142 # now hand over control of grating and mask to FlatGratingExperimentMetaController 143 meta_controller = TargetExperimentMetaController(screen,p,stimuli) 144 pyro_server.connect(meta_controller,get_meta_controller_stimkey()) 145 146 # get listener controller and register it 147 p.add_controller(None,None, pyro_server.create_listener_controller()) 148 149 # enter endless loop 150 p.run_forever() 151
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Sat Jun 7 09:06:50 2008 | http://epydoc.sourceforge.net |