1
2
3
4
5
6
7
8
9
10
11
12
13 """
14 Response control during a presentation is running.
15
16 """
17
18
19
20
21
22
23
24 import logging
25 import logging.handlers
26
27 import VisionEgg
28 import VisionEgg.Core
29 import VisionEgg.FlowControl
30 import VisionEgg.DaqKeyboard
31 import VisionEgg.ParameterTypes as ve_types
32 import pygame
33
34 __version__ = VisionEgg.release_name
35
36
37
38
39
40
41
43 """This abstract base class defines the interface to any ResponseController.
44
45 This module provides an interface to collect responses during a
46 presentation is running. To interface with real data acquisition devices,
47 use a module that subclasses the classes defined here.
48
49 """
50
52 self.responses = []
53 self.responses_since_go = []
54 self.time_responses_since_go = []
55 self.first_responses_since_go = []
56 self.time_first_responses_since_go = None
57 self.status_first_responses_since_go = False
58 self.last_responses_since_go = []
59 self.time_last_responses_since_go = None
60
63
65 """Returns the responses in the current frame."""
66 return self.responses
67
68 get_data = get_responses
69
71 """Returns all responses since the main 'go' loop has been
72 started."""
73 return self.responses_since_go
74
76 """Returns the time stamps for all responses since the main 'go'
77 loop has been started."""
78 return self.time_responses_since_go
79
81 """Returns the first response since the main 'go' loop has been
82 started."""
83 if self.first_responses_since_go == []:
84 return []
85 else:
86 return self.first_responses_since_go[index]
87
89 """Returns the first responses since the main 'go' loop has been
90 started."""
91 return self.first_responses_since_go
92
94 """Returns the time stamp for first responses since the main 'go'
95 loop has been started."""
96 return self.time_first_responses_since_go
97
98 get_time_first_responses_since_go = get_time_first_response_since_go
99
101 """Returns the last response since the main 'go' loop has been
102 started."""
103 if self.last_responses_since_go == []:
104 return []
105 else:
106 return self.last_responses_since_go[index]
107
109 """Returns the last responses since the main 'go' loop has been
110 started."""
111 return self.last_responses_since_go
112
114 """Returns the time stamp for last response since the main 'go'
115 loop has been started."""
116 return self.time_last_responses_since_go
117
118 get_time_last_responses_since_go = get_time_last_response_since_go
119
121 """Evaluate between runs of the main 'go' loop.
122
123 Override this method in subclasses."""
124 raise RuntimeError("%s: Definition of between_go_eval() in abstract base class ResponseController must be overriden."%(str(self),))
125
127 """Evaluate during the main 'go' loop.
128
129 Override this method in subclasses."""
130 raise RuntimeError("%s: Definition of during_go_eval() in abstract base class ResponseController must be overriden."%(str(self),))
131
132
133
134
135
136
137
138
139
141 """Use the keyboard to collect responses during a presentation is running."""
142
150
153
155 if self.time_sec_since_go <= 0.01:
156 self._reset()
157
158 self.responses = self.input.get_string_data()
159 if len(self.responses) > 0:
160 self.responses_since_go.append(self.responses)
161 self.time_responses_since_go.append(self.time_sec_since_go)
162 if self.status_first_responses_since_go == False:
163 self.time_first_responses_since_go = self.time_sec_since_go
164 self.first_responses_since_go = self.responses
165 self.status_first_responses_since_go = True
166 self.time_last_responses_since_go = self.time_sec_since_go
167 self.last_responses_since_go = self.responses
168 return None
169