added lots of .py
This commit is contained in:
90
dioderata/arrival_times.py
Executable file
90
dioderata/arrival_times.py
Executable file
@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
import epics
|
||||
from epics import caput
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def goodshots(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((fel, laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
STAGEpv = epics.PV('SLAAR11-LMOT-M452:MOTOR_1.VAL') # global globi
|
||||
chname_amplitude = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
chname_jitter = "SARES11-SPEC125-M1.edge_position"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_iZero = "SAROP11-PBPS110:INTENSITY"
|
||||
length = 500
|
||||
mm2fs = 6671.2 # lightspeed and delay stages
|
||||
|
||||
# create channel
|
||||
ch_amp = BS(chname_amplitude)
|
||||
ch_jitter = BS(chname_jitter)
|
||||
ch_events = BS(chname_events)
|
||||
ch_iZero = BS(chname_iZero)
|
||||
|
||||
n = 100
|
||||
amp = np.empty(n)
|
||||
jitter = np.empty(n)
|
||||
iZero = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create a buffer for the plotting
|
||||
jitter_vals = deque(maxlen=length)
|
||||
jitter_stds = deque(maxlen=length)
|
||||
amplitude_vals = deque(maxlen=length)
|
||||
iZero_vals = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle("arrival time, fs")
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(15)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
evts[i] = ch_events.get()
|
||||
jitter[i] = ch_jitter.get()
|
||||
amp[i] = ch_amp.get()
|
||||
iZero[i] = ch_iZero.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
edge_amp, edge_pos, i_zero = goodshots(evts, amp, jitter, iZero)
|
||||
|
||||
jitter_avg = np.mean(edge_pos[edge_amp > 10])
|
||||
jitter_std = np.std(edge_pos[edge_amp > 10])
|
||||
jitter_vals.append(jitter_avg)
|
||||
jitter_stds.append(jitter_std)
|
||||
|
||||
edge_amp_avg = np.mean(edge_amp)
|
||||
amplitude_vals.append(edge_amp_avg)
|
||||
|
||||
xs = np.arange(len(jitter_vals))
|
||||
pd.set(xs, amplitude_vals)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
# if (np.abs(jitter_avg) > 100) & (np.abs(jitter_avg) < 500):
|
||||
# moveTo = STAGEpv.get()*mm2fs - jitter_avg
|
||||
# STAGEpv.put(moveTo/mm2fs)
|
||||
# print('Stage moved.')
|
||||
|
||||
bsstream.close()
|
Reference in New Issue
Block a user