| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 #
3 # The Vision Egg: SpinningDrumServer
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 import VisionEgg, string
15 __version__ = VisionEgg.release_name
16 __cvs__ = string.split('$Revision$')[1]
17 __date__ = string.join(string.split('$Date$')[1:3], ' ')
18 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
19
20 import sys, os, math
21 import VisionEgg.Core
22 import VisionEgg.FlowControl
23 import VisionEgg.Textures
24 import VisionEgg.PyroHelpers
25 import Pyro.core
26
27 from VisionEgg.PyroApps.ScreenPositionServer import ScreenPositionMetaController
28 from VisionEgg.PyroApps.ScreenPositionGUI import ScreenPositionParameters
29 from VisionEgg.PyroApps.SpinningDrumGUI import SpinningDrumMetaParameters
30
33
34 # get the instance of Stimulus that was created
35 assert( stimuli[0][0] == '3d_perspective' )
36 spinning_drum = stimuli[0][1]
37
38 Pyro.core.ObjBase.__init__(self)
39 self.meta_params = SpinningDrumMetaParameters()
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(spinning_drum,VisionEgg.Textures.SpinningDrum):
45 raise ValueError("Expecting instance of VisionEgg.Textures.SpinningDrum")
46 self.p = presentation
47 self.stim = spinning_drum
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
55 self.p.add_controller(self.stim,'angular_position',VisionEgg.FlowControl.FunctionController(
56 during_go_func=self.angular_position_during_go,
57 between_go_func=self.angular_position_between_go))
58
60 self.p.remove_controller(self.stim,'on')
61 self.p.remove_controller(self.stim,'angular_position')
62 Pyro.core.ObjBase.__del__(self) # call base class
63
65 if t <= self.meta_params.pre_stim_sec:
66 return 0 # not on yet
67 elif t <= (self.meta_params.pre_stim_sec + self.meta_params.stim_sec):
68 return 1 # on
69 else:
70 return 0 # off again
71
74
76 adjusted_t = t - self.meta_params.pre_stim_sec
77 return (adjusted_t * self.meta_params.velocity_dps) + self.meta_params.startpos_deg
78
81
84
86 if isinstance(new_parameters, SpinningDrumMetaParameters):
87 self.meta_params = new_parameters
88 else:
89 raise ValueError("Argument to set_parameters must be instance of SpinningDrumMetaParameters")
90 self.update()
91
93 stim_params = self.stim.parameters # shorthand
94 meta_params = self.meta_params # shorthand
95 stim_params.contrast = meta_params.contrast
96 self.p.parameters.go_duration = ( meta_params.pre_stim_sec + meta_params.stim_sec + meta_params.post_stim_sec, 'seconds')
97
100
102 self.p.parameters.quit = 1
103
105 return SpinningDrumExperimentMetaController
106
108 filename = os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data/panorama.jpg")
109 texture = VisionEgg.Textures.Texture(filename)
110 stimulus = VisionEgg.Textures.SpinningDrum(texture=texture) # could add shrink_texture_ok=1
111 return [('3d_perspective',stimulus)] # return ordered list of tuples
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 temp = ScreenPositionParameters()
127
128 projection = VisionEgg.Core.PerspectiveProjection(temp.left,
129 temp.right,
130 temp.bottom,
131 temp.top,
132 temp.near,
133 temp.far)
134 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[stimulus],projection=projection)
135 p = VisionEgg.FlowControl.Presentation(viewports=[viewport])
136
137 # now hand over control of projection to ScreenPositionMetaController
138 projection_controller = ScreenPositionMetaController(p,projection)
139 pyro_server.connect(projection_controller,"projection_controller")
140
141 # now hand over control of drum to SpinningDrumExperimentMetaController
142 meta_controller = SpinningDrumExperimentMetaController(screen,p,stimuli)
143 pyro_server.connect(meta_controller,get_meta_controller_stimkey())
144
145 # get listener controller and register it
146 p.add_controller(None,None, pyro_server.create_listener_controller())
147
148 # enter endless loop
149 p.run_forever()
150
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Jun 7 09:06:47 2008 | http://epydoc.sourceforge.net |