| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 #
3 # The Vision Egg: FlatGratingServer
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 sinusoidal gratings (server-side)"""
15
16 import VisionEgg, string
17 __version__ = VisionEgg.release_name
18 __cvs__ = string.split('$Revision$')[1]
19 __date__ = string.join(string.split('$Date$')[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.Gratings
26 import VisionEgg.PyroHelpers
27 import Pyro.core
28
29 from VisionEgg.PyroApps.FlatGratingGUI import FlatGratingMetaParameters
30
33
34 # get stimulus
35 assert( stimuli[0][0] == '2d_overlay')
36 grating = stimuli[0][1]
37
38 Pyro.core.ObjBase.__init__(self)
39 self.meta_params = FlatGratingMetaParameters()
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(grating,VisionEgg.Gratings.SinGrating2D):
45 raise ValueError("Expecting instance of VisionEgg.Gratings.SinGrating2D")
46 self.p = presentation
47 self.stim = grating
48
49 screen.parameters.bgcolor = (0.5, 0.5, 0.5, 0.0)
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
58
60 """Compute when the grating is on"""
61 if t <= self.meta_params.pre_stim_sec:
62 return 0 # not on yet
63 elif t <= (self.meta_params.pre_stim_sec + self.meta_params.stim_sec):
64 return 1 # on
65 else:
66 return 0 # off again
67
71
74
76 if isinstance(new_parameters, FlatGratingMetaParameters):
77 self.meta_params = new_parameters
78 else:
79 raise ValueError("Argument to set_parameters must be instance of FlatGratingMetaParameters")
80 self.update()
81
83 stim_params = self.stim.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 = meta_params.sf
88 stim_params.temporal_freq_hz = meta_params.tf
89 stim_params.size = (meta_params.size_x, meta_params.size_y)
90 stim_params.position = (meta_params.center_x, meta_params.center_y)
91 self.p.parameters.go_duration = ( meta_params.pre_stim_sec + meta_params.stim_sec + meta_params.post_stim_sec, 'seconds')
92
95
97 self.p.parameters.quit = 1
98
100 return FlatGratingExperimentMetaController
101
103 stimulus = VisionEgg.Gratings.SinGrating2D( spatial_freq=1.0/100.0, # wavelength = 100 pixels
104 temporal_freq_hz = 1.0,
105 anchor='center',
106 )
107 return [('2d_overlay',stimulus)]
108
111
112 # Don't do anything unless this script is being run
113 if __name__ == '__main__':
114
115 pyro_server = VisionEgg.PyroHelpers.PyroServer()
116
117 screen = VisionEgg.Core.Screen.create_default()
118
119 # get Vision Egg stimulus ready to go
120 stimuli = make_stimuli()
121 stimulus = stimuli[0][1]
122 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[stimulus])
123 p = VisionEgg.FlowControl.Presentation(viewports=[viewport])
124
125 # now hand over control of grating and mask to FlatGratingExperimentMetaController
126 meta_controller = FlatGratingExperimentMetaController(screen,p,stimuli)
127 pyro_server.connect(meta_controller,get_meta_controller_stimkey())
128
129 # get listener controller and register it
130 p.add_controller(None,None, pyro_server.create_listener_controller())
131
132 # enter endless loop
133 p.run_forever()
134
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Jun 7 09:06:47 2008 | http://epydoc.sourceforge.net |