| 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
30
33 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 defaults
60
62 self.p.remove_controller(self.stim,'on')
63 self.p.remove_controller(self.stim,'position')
64 Pyro.core.ObjBase.__del__(self) # call base class
65
67 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 again
73
76
78 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
91
93 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()
98
100 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
115
117 self.p.parameters.quit = 1
118
120 return TargetExperimentMetaController
121
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 |