some prototypes
This commit is contained in:
20
prototypes/c2cache.py
Normal file
20
prototypes/c2cache.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
from collections import deque
|
||||||
|
from time import time
|
||||||
|
|
||||||
|
|
||||||
|
class Cache:
|
||||||
|
|
||||||
|
def __init__(self, size=100):
|
||||||
|
self.times = deque(maxlen=size)
|
||||||
|
self.values = deque(maxlen=size)
|
||||||
|
|
||||||
|
def append(self, value):
|
||||||
|
self.times.append(time())
|
||||||
|
self.values.append(value)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cache = Cache()
|
||||||
|
|
||||||
|
|
||||||
|
|
57
prototypes/cabokeh1.py
Normal file
57
prototypes/cabokeh1.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from time import sleep, time
|
||||||
|
from random import random
|
||||||
|
import numpy as np
|
||||||
|
from epics import PV
|
||||||
|
from bokeh.plotting import curdoc, figure
|
||||||
|
from bokeh.models import ColumnDataSource
|
||||||
|
from bokeh.layouts import row
|
||||||
|
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"x": [],
|
||||||
|
"y": []
|
||||||
|
}
|
||||||
|
|
||||||
|
source = ColumnDataSource(data=data)
|
||||||
|
histo = ColumnDataSource(dict(left=[], right=[], top=[]))
|
||||||
|
|
||||||
|
fig1 = figure()
|
||||||
|
fig1.step(x="x", y="y", source=source, mode="after")
|
||||||
|
fig1.circle(x="x", y="y", source=source)
|
||||||
|
|
||||||
|
fig2 = figure()
|
||||||
|
fig2.quad(left="left", right="right", top="top", bottom=0, source=histo)
|
||||||
|
|
||||||
|
pv = PV("MTEST:RAND0")
|
||||||
|
|
||||||
|
cache = {
|
||||||
|
"x": [],
|
||||||
|
"y": []
|
||||||
|
}
|
||||||
|
|
||||||
|
def cb(value=None, **kwargs):
|
||||||
|
x = time()
|
||||||
|
y = value
|
||||||
|
cache["x"].append(x)
|
||||||
|
cache["y"].append(y)
|
||||||
|
|
||||||
|
def update():
|
||||||
|
source.stream(cache, rollover=50)
|
||||||
|
cache["x"] = []
|
||||||
|
cache["y"] = []
|
||||||
|
data = source.data["y"]
|
||||||
|
counts, edges = np.histogram(data, bins="auto")
|
||||||
|
histo.data.update(left=edges[:-1], right=edges[1:], top=counts)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pv.add_callback(cb)
|
||||||
|
doc = curdoc()
|
||||||
|
doc.add_periodic_callback(update, 1000)
|
||||||
|
plt = row(fig1, fig2)
|
||||||
|
doc.add_root(plt)
|
||||||
|
|
||||||
|
|
||||||
|
|
93
prototypes/cabokeh2.py
Normal file
93
prototypes/cabokeh2.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from time import sleep, time
|
||||||
|
from random import random
|
||||||
|
import numpy as np
|
||||||
|
from epics import PV
|
||||||
|
from bokeh.plotting import curdoc, figure
|
||||||
|
from bokeh.models import ColumnDataSource
|
||||||
|
from bokeh.layouts import row
|
||||||
|
|
||||||
|
from c2cache import cache
|
||||||
|
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"x": [],
|
||||||
|
"y": []
|
||||||
|
}
|
||||||
|
|
||||||
|
source = ColumnDataSource(data=data)
|
||||||
|
histo = ColumnDataSource(dict(left=[], right=[], top=[]))
|
||||||
|
image = ColumnDataSource(dict(image=[np.random.random((1000, 1000))]))
|
||||||
|
|
||||||
|
fig1 = figure()
|
||||||
|
fig1.step(x="x", y="y", source=source, mode="after")
|
||||||
|
fig1.circle(x="x", y="y", source=source)
|
||||||
|
|
||||||
|
fig2 = figure()
|
||||||
|
fig2.quad(left="left", right="right", top="top", bottom=0, source=histo)
|
||||||
|
|
||||||
|
fig3 = figure()
|
||||||
|
fig3.image(source=image, x=0, y=0, dw=1, dh=1, palette="Spectral11")
|
||||||
|
|
||||||
|
pv = PV("MTEST:RAND0")
|
||||||
|
|
||||||
|
pv_img = PV("MTEST:CHAN-IMAGE:FPICTURE", auto_monitor=True)
|
||||||
|
pv_height = PV("MTEST:CHAN-IMAGE:HEIGHT")
|
||||||
|
pv_width = PV("MTEST:CHAN-IMAGE:WIDTH")
|
||||||
|
|
||||||
|
|
||||||
|
def cb(value=None, **kwargs):
|
||||||
|
cache.append(value)
|
||||||
|
|
||||||
|
|
||||||
|
image_data = None
|
||||||
|
|
||||||
|
def cb_img(value=None, **kwargs):
|
||||||
|
print(len(value))
|
||||||
|
global image_data
|
||||||
|
if value is None:
|
||||||
|
return
|
||||||
|
height = pv_height.get()
|
||||||
|
width = pv_width.get()
|
||||||
|
if height is None or value is None:
|
||||||
|
return
|
||||||
|
image_data = value
|
||||||
|
image_data.shape = (height, width)
|
||||||
|
|
||||||
|
pv_img.add_callback(cb_img)
|
||||||
|
|
||||||
|
|
||||||
|
def update():
|
||||||
|
# print(cache.values)
|
||||||
|
times = cache.times
|
||||||
|
values = cache.values
|
||||||
|
data = {
|
||||||
|
"x": times,
|
||||||
|
"y": values
|
||||||
|
}
|
||||||
|
source.data.update(data)
|
||||||
|
|
||||||
|
counts, edges = np.histogram(values, bins="auto")
|
||||||
|
histo.data.update(left=edges[:-1], right=edges[1:], top=counts)
|
||||||
|
|
||||||
|
if image_data is not None:
|
||||||
|
# print(image_data.shape)
|
||||||
|
image.data.update(image=[image_data])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pv.add_callback(cb)
|
||||||
|
doc = curdoc()
|
||||||
|
doc.add_periodic_callback(update, 1000)
|
||||||
|
|
||||||
|
plt = row(
|
||||||
|
fig1,
|
||||||
|
fig2,
|
||||||
|
fig3
|
||||||
|
)
|
||||||
|
|
||||||
|
doc.add_root(plt)
|
||||||
|
|
||||||
|
|
||||||
|
|
39
prototypes/stream-bokeh.py
Normal file
39
prototypes/stream-bokeh.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from time import sleep
|
||||||
|
from random import random
|
||||||
|
from bokeh.plotting import curdoc, figure
|
||||||
|
from bokeh.models import ColumnDataSource
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"x": [0, 1, 2, 3, 4],
|
||||||
|
"y": [6, 7, 2, 3, 5]
|
||||||
|
}
|
||||||
|
|
||||||
|
i = len(data["x"])
|
||||||
|
|
||||||
|
source = ColumnDataSource(data=data)
|
||||||
|
|
||||||
|
p = figure()
|
||||||
|
p.line(x="x", y="y", source=source)
|
||||||
|
|
||||||
|
|
||||||
|
def update():
|
||||||
|
global i
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
new = {
|
||||||
|
"x": [i],
|
||||||
|
"y": [random()*10]
|
||||||
|
}
|
||||||
|
|
||||||
|
source.stream(new, rollover=50)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
doc = curdoc()
|
||||||
|
doc.add_periodic_callback(update, 500)
|
||||||
|
doc.add_root(p)
|
||||||
|
|
||||||
|
|
||||||
|
|
73
prototypes/stream-streamlit.py
Executable file
73
prototypes/stream-streamlit.py
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from time import sleep, time
|
||||||
|
import streamlit as st
|
||||||
|
import altair as alt
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
|
||||||
|
st.title(__file__.rsplit("/")[-1])
|
||||||
|
|
||||||
|
|
||||||
|
chart_data = pd.DataFrame(
|
||||||
|
np.random.randn(20, 3),
|
||||||
|
columns=['a', 'b', 'c'],
|
||||||
|
index=np.arange(10, 30)
|
||||||
|
)
|
||||||
|
|
||||||
|
ch1 = st.line_chart(chart_data)
|
||||||
|
|
||||||
|
c = alt.Chart(chart_data.reset_index()).mark_line().encode(
|
||||||
|
x='index',
|
||||||
|
y='a',
|
||||||
|
tooltip="a"
|
||||||
|
)
|
||||||
|
|
||||||
|
ch2 = st.altair_chart(c)
|
||||||
|
|
||||||
|
|
||||||
|
img_data = np.random.randn(2500, 2500)
|
||||||
|
img_data -= img_data.min()
|
||||||
|
img_data /= img_data.max()
|
||||||
|
|
||||||
|
img = st.image(img_data)
|
||||||
|
|
||||||
|
|
||||||
|
times = []
|
||||||
|
last_time = time()
|
||||||
|
|
||||||
|
for i in range(1000):
|
||||||
|
cd = pd.DataFrame(
|
||||||
|
np.random.randn(1, 3),
|
||||||
|
columns=['a', 'b', 'c'],
|
||||||
|
index=[chart_data.index.max()+1]
|
||||||
|
)
|
||||||
|
|
||||||
|
ch1.add_rows(cd)
|
||||||
|
|
||||||
|
chart_data = chart_data.append(cd)
|
||||||
|
chart_data = chart_data.iloc[1:]
|
||||||
|
|
||||||
|
c = alt.Chart(chart_data.reset_index()).mark_line().encode(
|
||||||
|
x='index',
|
||||||
|
y='a',
|
||||||
|
tooltip="a"
|
||||||
|
)
|
||||||
|
|
||||||
|
ch2.altair_chart(c)
|
||||||
|
|
||||||
|
img_data = np.random.randn(250, 250)
|
||||||
|
img_data -= img_data.min()
|
||||||
|
img_data /= img_data.max()
|
||||||
|
img.image(img_data)
|
||||||
|
|
||||||
|
current_time = time()
|
||||||
|
delta_t = current_time - last_time
|
||||||
|
times.append(delta_t)
|
||||||
|
last_time = current_time
|
||||||
|
print(delta_t, np.mean(times))
|
||||||
|
|
||||||
|
sleep(1)
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user