| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 """Handle perspective-distorted sinusoidal gratings (server-side)"""
3
4 # Copyright (c) 2002-2003 Andrew Straw. Distributed under the terms
5 # of the GNU Lesser General Public License (LGPL).
6
7 import VisionEgg, string
8 __version__ = VisionEgg.release_name
9 __cvs__ = string.split('$Revision$')[1]
10 __date__ = string.join(string.split('$Date$')[1:3], ' ')
11 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
12
13 import sys, os, math
14 import VisionEgg.Core
15 import VisionEgg.FlowControl
16 import VisionEgg.SphereMap
17 import VisionEgg.PyroHelpers
18 import Pyro.core
19
20 from VisionEgg.PyroApps.ScreenPositionServer import ScreenPositionMetaController
21 from VisionEgg.PyroApps.ScreenPositionGUI import ScreenPositionParameters
22 from VisionEgg.PyroApps.SphereGratingGUI import SphereGratingMetaParameters
23
26
27 # get stimuli
28 assert( stimuli[0][0] == '3d_perspective')
29 assert( stimuli[1][0] == '3d_perspective')
30 sphere_grating = stimuli[0][1]
31 sphere_window = stimuli[1][1]
32
33 Pyro.core.ObjBase.__init__(self)
34 self.meta_params = SphereGratingMetaParameters()
35 if not isinstance(screen,VisionEgg.Core.Screen):
36 raise ValueError("Expecting instance of VisionEgg.Core.Screen")
37 if not isinstance(presentation,VisionEgg.FlowControl.Presentation):
38 raise ValueError("Expecting instance of VisionEgg.FlowControl.Presentation")
39 if not isinstance(sphere_grating,VisionEgg.SphereMap.SphereGrating):
40 raise ValueError("Expecting instance of VisionEgg.SphereMap.SphereGrating")
41 if not isinstance(sphere_window,VisionEgg.SphereMap.SphereWindow):
42 raise ValueError("Expecting instance of VisionEgg.SphereMap.SphereWindow")
43 self.p = presentation
44 self.stim = sphere_grating
45 self.window = sphere_window
46
47 screen.parameters.bgcolor = (0.5, 0.5, 0.5, 0.0)
48
49 self.p.add_controller(self.stim,'on',VisionEgg.FlowControl.FunctionController(
50 during_go_func=self.on_function_during_go,
51 between_go_func=self.on_function_between_go))
52
56
58 """Compute when the grating is on"""
59 if t <= self.meta_params.pre_stim_sec:
60 return 0 # not on yet
61 elif t <= (self.meta_params.pre_stim_sec + self.meta_params.stim_sec):
62 return 1 # on
63 else:
64 return 0 # off again
65
69
72
74 if isinstance(new_parameters, SphereGratingMetaParameters):
75 self.meta_params = new_parameters
76 else:
77 raise ValueError("Argument to set_parameters must be instance of SphereGratingMetaParameters")
78 # self.meta_params = new_parameters
79 self.update()
80
82 stim_params = self.stim.parameters # shorthand
83 window_params = self.window.parameters # shorthand
84 meta_params = self.meta_params # shorthand
85 stim_params.contrast = meta_params.contrast
86 stim_params.orientation = meta_params.orient
87 stim_params.spatial_freq_cpd = meta_params.sf
88 stim_params.temporal_freq_hz = meta_params.tf
89 stim_params.grating_center_azimuth = meta_params.window_az
90 stim_params.grating_center_elevation = meta_params.window_el
91 self.p.parameters.go_duration = ( meta_params.pre_stim_sec + meta_params.stim_sec + meta_params.post_stim_sec, 'seconds')
92 window_params.window_shape = meta_params.window_func
93 window_params.window_shape_radius_parameter = meta_params.window_radius
94 window_params.window_center_azimuth = meta_params.window_az
95 window_params.window_center_elevation = meta_params.window_el
96
99
101 self.p.parameters.quit = 1
102
104 return SphereGratingExperimentMetaController
105
107 stimulus = VisionEgg.SphereMap.SphereGrating(radius=1.0,
108 spatial_freq_cpd=1.0/9.0,
109 temporal_freq_hz = 1.0)
110 mask = VisionEgg.SphereMap.SphereWindow(radius=0.95)
111 return [('3d_perspective',stimulus),('3d_perspective',mask)]
112
115
116 # Don't do anything unless this script is being run
117 if __name__ == '__main__':
118
119 pyro_server = VisionEgg.PyroHelpers.PyroServer()
120
121 screen = VisionEgg.Core.Screen.create_default()
122
123 # get Vision Egg stimulus ready to go
124 stimuli = make_stimuli()
125 stimulus = stimuli[0][1]
126 mask = stimuli[1][1]
127
128 temp = ScreenPositionParameters()
129
130 left = temp.left
131 right = temp.right
132 bottom = temp.bottom
133 top = temp.top
134 near = temp.near
135 far = temp.far
136 projection = VisionEgg.Core.PerspectiveProjection(left,
137 right,
138 bottom,
139 top,
140 near,
141 far)
142 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[stimulus,mask],projection=projection)
143 p = VisionEgg.FlowControl.Presentation(viewports=[viewport])
144
145 # now hand over control of projection to ScreenPositionMetaController
146 projection_controller = ScreenPositionMetaController(p,projection)
147 pyro_server.connect(projection_controller,"projection_controller")
148
149 # now hand over control of grating and mask to SphereGratingExperimentMetaController
150 meta_controller = SphereGratingExperimentMetaController(screen,p,stimuli)
151 pyro_server.connect(meta_controller,get_meta_controller_stimkey())
152
153 # get listener controller and register it
154 p.add_controller(None,None, pyro_server.create_listener_controller())
155
156 # enter endless loop
157 p.run_forever()
158
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Jun 7 09:06:50 2008 | http://epydoc.sourceforge.net |