beginning with autotune feature for plots
This commit is contained in:
parent
e5203efcb1
commit
335352e7bd
|
@ -1,3 +1,13 @@
|
||||||
|
# Set the prefix to ^A.
|
||||||
|
unbind C-b
|
||||||
|
set -g prefix ^A
|
||||||
|
bind a send-prefix
|
||||||
|
|
||||||
|
# detach ^D d
|
||||||
|
unbind ^D
|
||||||
|
bind ^D detach
|
||||||
|
|
||||||
|
|
||||||
set -g set-titles on
|
set -g set-titles on
|
||||||
set -g set-titles-string "T"
|
set -g set-titles-string "T"
|
||||||
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
|
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
|
||||||
|
@ -42,10 +52,10 @@ new-window -n 'test-pulse-uwe' -t 'csession:25' 'python /home/stefan/dev/ps
|
||||||
new-window -n 'test-ehealth-bjoern' -t 'csession:26' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-bjoern-in'
|
new-window -n 'test-ehealth-bjoern' -t 'csession:26' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-bjoern-in'
|
||||||
new-window -n 'test-ehealth-merle' -t 'csession:27' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-merle-in'
|
new-window -n 'test-ehealth-merle' -t 'csession:27' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-merle-in'
|
||||||
new-window -n 'test-ehealth-uwe' -t 'csession:28' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-uwe-in'
|
new-window -n 'test-ehealth-uwe' -t 'csession:28' 'python /home/stefan/dev/psychose/sensors2osc/sensors2osc/socat_ehealth_test.py /tmp/ehealth2osc-uwe-in'
|
||||||
new-window -n 'ekgplotter' -t 'csession:29' 'sleep 5 && ekgplotter -s'
|
# new-window -n 'ekgplotter' -t 'csession:29' 'sleep 5 && ekgplotter -s'
|
||||||
new-window -n 'vlc' -t 'csession:30' 'sleep 10 && vlc "http://localhost:9000/camera.mjpeg"'
|
# new-window -n 'vlc' -t 'csession:30' 'sleep 10 && vlc "http://localhost:9000/camera.mjpeg"'
|
||||||
|
|
||||||
select-window -t 'csession:29'
|
select-window -t 'csession:1'
|
||||||
|
|
||||||
set aggressive-resize on
|
set aggressive-resize on
|
||||||
|
|
||||||
|
|
|
@ -166,6 +166,38 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
scale = 254 / max_items * ix
|
scale = 254 / max_items * ix
|
||||||
return [value / max_items + scale for value in data]
|
return [value / max_items + scale for value in data]
|
||||||
|
|
||||||
|
def set_point(plotPoint, pos, value, ix, max_items):
|
||||||
|
scale = 254 / max_items * ix
|
||||||
|
plotPoint.setData(x = [pos], y = [6*ix + value / max_items + scale])
|
||||||
|
|
||||||
|
|
||||||
|
def setValue(dataItem, pos, maxPos, value):
|
||||||
|
dataItem[pos] = value
|
||||||
|
return (pos + 1) % maxPos
|
||||||
|
|
||||||
|
def findMax(dataItem):
|
||||||
|
max_value = 0
|
||||||
|
max_index = 0
|
||||||
|
for ix, i in enumerate(dataItem):
|
||||||
|
if i > max_value:
|
||||||
|
max_value = i
|
||||||
|
max_index = ix
|
||||||
|
return max_index
|
||||||
|
|
||||||
|
def rearrange(data, index, max_items):
|
||||||
|
max_value = findMax(data)
|
||||||
|
mean = int(max_items / 2.)
|
||||||
|
start = mean - max_value
|
||||||
|
data.rotate(start)
|
||||||
|
pos = (index + start) % max_items
|
||||||
|
print "rearrange", index, max_items, pos
|
||||||
|
return pos
|
||||||
|
|
||||||
|
def checkDataPoints(value, data_max_value):
|
||||||
|
if value > max_value and value > 200:
|
||||||
|
return True, value
|
||||||
|
return False, data_max_value
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.path=re.sub('[^.a-zA-Z0-9]', "",str(self.path))
|
self.path=re.sub('[^.a-zA-Z0-9]', "",str(self.path))
|
||||||
if self.path=="" or self.path==None or self.path[:1]==".":
|
if self.path=="" or self.path==None or self.path[:1]==".":
|
||||||
|
@ -179,22 +211,38 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
self.wfile.write(f.read())
|
self.wfile.write(f.read())
|
||||||
f.close()
|
f.close()
|
||||||
elif self.path.endswith(".mjpeg"):
|
elif self.path.endswith(".mjpeg"):
|
||||||
data_points = 1000
|
data_points = 21
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
plot_data1 = data = deque([0] * data_points)
|
pos1 = 0
|
||||||
plot_data2 = data = deque([0] * data_points)
|
pos2 = 0
|
||||||
plot_data3 = data = deque([0] * data_points)
|
pos3 = 0
|
||||||
|
|
||||||
|
data1_max_value = 0
|
||||||
|
data2_max_value = 0
|
||||||
|
data3_max_value = 0
|
||||||
|
|
||||||
|
data1_distance = data_points
|
||||||
|
data2_distance = data_points
|
||||||
|
data3_distance = data_points
|
||||||
|
|
||||||
|
plot_data1 = deque([0] * data_points)
|
||||||
|
plot_data2 = deque([0] * data_points)
|
||||||
|
plot_data3 = deque([0] * data_points)
|
||||||
plt = PlotWidget(title="<h1>EKG</h1>", name="Merle")
|
plt = PlotWidget(title="<h1>EKG</h1>", name="Merle")
|
||||||
plt.hide()
|
plt.hide()
|
||||||
plotItem1 = pg.PlotCurveItem(pen=pg.mkPen('r', width=2), name="bjoern")
|
plotItem1 = pg.PlotCurveItem(pen=pg.mkPen('r', width=2), width=2, name="bjoern")
|
||||||
plotItem2 = pg.PlotCurveItem(pen=pg.mkPen('g', width=2), name="merle")
|
plotItem2 = pg.PlotCurveItem(pen=pg.mkPen('g', width=2), width=2, name="merle")
|
||||||
plotItem3 = pg.PlotCurveItem(pen=pg.mkPen('b', width=2), name="uwe")
|
plotItem3 = pg.PlotCurveItem(pen=pg.mkPen('b', width=2), width=2, name="uwe")
|
||||||
print type(plotItem1)
|
shadowPen = pg.mkPen("w", width=10)
|
||||||
pen = pg.mkPen(254, 254, 254)
|
plotItem1.setShadowPen(pen=shadowPen, width=6, cosmetic=True)
|
||||||
plotItem1.setShadowPen(pen=pen, width=6, cosmetic=True)
|
plotItem2.setShadowPen(pen=shadowPen, width=6, cosmetic=True)
|
||||||
plotItem2.setShadowPen(pen=pen, width=6, cosmetic=True)
|
plotItem3.setShadowPen(pen=shadowPen, width=6, cosmetic=True)
|
||||||
plotItem3.setShadowPen(pen=pen, width=6, cosmetic=True)
|
pen = pg.mkPen("w", size=1)
|
||||||
|
brush = pg.mkBrush("w")
|
||||||
|
plotPoint1 = pg.ScatterPlotItem(pen=pen, brush=brush, size=10)
|
||||||
|
plotPoint2 = pg.ScatterPlotItem(pen=pen, brush=brush, size=10)
|
||||||
|
plotPoint3 = pg.ScatterPlotItem(pen=pen, brush=brush, size=10)
|
||||||
actors.append(plotItem1)
|
actors.append(plotItem1)
|
||||||
actors.append(plotItem2)
|
actors.append(plotItem2)
|
||||||
actors.append(plotItem3)
|
actors.append(plotItem3)
|
||||||
|
@ -204,6 +252,9 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
plt.addItem(plotItem1)
|
plt.addItem(plotItem1)
|
||||||
plt.addItem(plotItem2)
|
plt.addItem(plotItem2)
|
||||||
plt.addItem(plotItem3)
|
plt.addItem(plotItem3)
|
||||||
|
plt.addItem(plotPoint1)
|
||||||
|
plt.addItem(plotPoint2)
|
||||||
|
plt.addItem(plotPoint3)
|
||||||
|
|
||||||
plt.setLabel('left', "<h2>Amplitude</h2>")
|
plt.setLabel('left', "<h2>Amplitude</h2>")
|
||||||
plt.setLabel('bottom', "<h2>Time</h2>")
|
plt.setLabel('bottom', "<h2>Time</h2>")
|
||||||
|
@ -226,27 +277,38 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
osc_address, args = queue.get_nowait()
|
osc_address, args = queue.get_nowait()
|
||||||
except Queue.Empty:
|
except Queue.Empty:
|
||||||
break
|
break
|
||||||
|
max_items = len(actors)
|
||||||
value = args[0]
|
value = args[0]
|
||||||
|
|
||||||
if osc_address == "/bjoern/ekg":
|
if osc_address == "/bjoern/ekg":
|
||||||
plot_data1.append(value)
|
ix = actors.index(plotItem1)
|
||||||
plot_data1.popleft()
|
res, tmp = checkDataPoints(value, data1_max_value)
|
||||||
|
if res and res > 20:
|
||||||
|
data_points = tmp
|
||||||
|
data1_maxdata1_max_value = 0
|
||||||
|
set_point(plotPoint1, pos1, value, ix, max_items)
|
||||||
|
pos1 = setValue(plot_data1, pos1, data_points, value)
|
||||||
|
pos1 = rearrange(plot_data1, pos1, data_points)
|
||||||
try:
|
try:
|
||||||
plotItem1.setData(y=np.array(scale_data(plot_data1, actors.index(plotItem1), len(actors))), clear=True)
|
plotItem1.setData(y=np.array(scale_data(plot_data1, ix, max_items)), clear=True)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
elif osc_address == "/merle/ekg":
|
elif osc_address == "/merle/ekg":
|
||||||
plot_data2.append(value)
|
ix = actors.index(plotItem2)
|
||||||
plot_data2.popleft()
|
set_point(plotPoint2, pos2, value, ix, max_items)
|
||||||
|
pos2 = setValue(plot_data2, pos2, data_points, value)
|
||||||
|
pos2 = rearrange(plot_data2, pos2, data_points)
|
||||||
try:
|
try:
|
||||||
plotItem2.setData(y=np.array(scale_data(plot_data2, actors.index(plotItem2), len(actors))), clear=True)
|
plotItem2.setData(y=np.array(scale_data(plot_data2, ix, max_items)), clear=True)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
elif osc_address == "/uwe/ekg":
|
elif osc_address == "/uwe/ekg":
|
||||||
plot_data3.append(value)
|
ix = actors.index(plotItem3)
|
||||||
plot_data3.popleft()
|
set_point(plotPoint3, pos3, value, ix, max_items)
|
||||||
|
pos3 = setValue(plot_data3, pos3, data_points, value)
|
||||||
|
pos3 = rearrange(plot_data3, pos3, data_points)
|
||||||
try:
|
try:
|
||||||
plotItem3.setData(y=np.array(scale_data(plot_data3, actors.index(plotItem3), len(actors))), clear=True)
|
plotItem3.setData(y=np.array(scale_data(plot_data3, ix, max_items)), clear=True)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
elif osc_address == "/plot/uwe":
|
elif osc_address == "/plot/uwe":
|
||||||
|
@ -312,10 +374,6 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
except IOError:
|
except IOError:
|
||||||
self.send_error(404,'File Not Found: %s' % self.path)
|
self.send_error(404,'File Not Found: %s' % self.path)
|
||||||
|
|
||||||
def __del__(self):
|
|
||||||
self.thread.running = False
|
|
||||||
self.thread.join()
|
|
||||||
|
|
||||||
|
|
||||||
class JustAHTTPServer(HTTPServer):
|
class JustAHTTPServer(HTTPServer):
|
||||||
pass
|
pass
|
||||||
|
@ -324,7 +382,7 @@ class JustAHTTPServer(HTTPServer):
|
||||||
def main():
|
def main():
|
||||||
a = create_arg_parser("ekgplotter")
|
a = create_arg_parser("ekgplotter")
|
||||||
own_group = add_main_group(a)
|
own_group = add_main_group(a)
|
||||||
own_group.add_argument('-x', "--http_host", default=socket.gethostname(),
|
own_group.add_argument('-x', "--http_host", default="0.0.0.0",
|
||||||
help='my host, defaults to "socket.gethostname()"')
|
help='my host, defaults to "socket.gethostname()"')
|
||||||
own_group.add_argument('-X', "--http_port", default=9000,
|
own_group.add_argument('-X', "--http_port", default=9000,
|
||||||
type=int, help='my port, defaults to 9000')
|
type=int, help='my port, defaults to 9000')
|
||||||
|
|
|
@ -29,7 +29,30 @@ serial_sock.baudrate = 115200
|
||||||
serial_sock.timeout = 0
|
serial_sock.timeout = 0
|
||||||
serial_sock.open()
|
serial_sock.open()
|
||||||
|
|
||||||
|
data_points = 0
|
||||||
|
|
||||||
|
steps = 20
|
||||||
|
count = 0
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
serial_sock.write(struct.pack("B", random.randint(0,255)))
|
value = random.randint(0, steps)
|
||||||
time.sleep(0.1)
|
if count < int(steps / 100. * 20):
|
||||||
|
value = random.randint(0,20)
|
||||||
|
elif count < int(steps / 100. * 45):
|
||||||
|
value = random.randint(20,50)
|
||||||
|
elif count == int(steps / 2.):
|
||||||
|
value = 255
|
||||||
|
elif count < int(steps / 100. * 70):
|
||||||
|
value = random.randint(20,50)
|
||||||
|
elif count <= steps:
|
||||||
|
value = random.randint(0,20)
|
||||||
|
elif count >= steps:
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
if data_points % 100 == 0:
|
||||||
|
steps +=1
|
||||||
|
|
||||||
|
time.sleep(0.04)
|
||||||
|
count += 1
|
||||||
|
data_points += 1
|
||||||
|
serial_sock.write(struct.pack("B", value))
|
||||||
|
|
Loading…
Reference in New Issue