-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathobserver_test.py
More file actions
71 lines (58 loc) · 2.15 KB
/
observer_test.py
File metadata and controls
71 lines (58 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import experiment as exp
import video_system as vid
import numpy as np
class ObserverTest(exp.Experiment):
"""
A simple experiment to test ImageObservers
"""
default_params = {
"obs_ids": None,
}
def run(self):
obs_ids = exp.get_params()["obs_ids"]
if obs_ids is None:
obs_id = list(vid.image_observers.values())
for obs_id in obs_ids:
if obs_id in vid.image_observers:
vid.image_observers[obs_id].start_observing()
def end(self):
obs_ids = exp.get_params()["obs_ids"]
if obs_ids is None:
for obs in vid.image_observers.values():
obs.stop_observing()
else:
for obs_id in obs_ids:
if obs_id in vid.image_observers:
vid.image_observers[obs_id].stop_observing()
def run_trial(self):
self.remove_listeners = []
self.log.info("run trial")
self.update_count = {}
self.last_ts = {}
obs_ids = exp.get_params().get("obs_ids", None)
if obs_ids is not None:
for obs_id in obs_ids:
self.log.info(f"Adding listener for {obs_id}")
self.remove_listeners.append(vid.image_observers[obs_id].add_listener(
self.on_obs_update(obs_id), exp.state
))
def end_trial(self):
self.log.info("end trial")
for ls in self.remove_listeners:
ls()
def on_obs_update(self, obs_id):
self.update_count[obs_id] = 0
self.last_ts[obs_id] = None
def on_update(data, timestamp):
self.update_count[obs_id] += 1
if self.last_ts[obs_id] is None:
ts_delta = None
else:
ts_delta = timestamp - self.last_ts[obs_id]
self.last_ts[obs_id] = timestamp
if (self.update_count[obs_id] % 100) == 0:
cs = np.cumsum(data)
median = cs[-1] / 2
cs_med = np.argmax(cs > median)
self.log.info(f"{obs_id}: {self.update_count[obs_id]} {timestamp} {ts_delta} {data.shape} {cs_med}")
return on_update