added lots of .py
This commit is contained in:
134
camerata/main.py
Executable file
134
camerata/main.py
Executable file
@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
|
||||
|
||||
|
||||
# config
|
||||
cam_name = "SARES11-XMI125-C4P1"
|
||||
xmin = 0
|
||||
xmax = 400
|
||||
ymin = 400
|
||||
ymax = 700
|
||||
proj_axis = 0
|
||||
um_per_px = 2.28
|
||||
buffer_length = 100
|
||||
|
||||
|
||||
|
||||
def get_data(cam):
|
||||
img = 0
|
||||
for i in range(1):
|
||||
img += cam.get()
|
||||
next(bsstream)
|
||||
cropped = img[xmin:xmax, ymin:ymax]
|
||||
projx = cropped.mean(axis=proj_axis)
|
||||
projy = cropped.mean(axis=int(not proj_axis))
|
||||
return cropped, projx, projy
|
||||
|
||||
|
||||
def find_spacing(py, extend=5):
|
||||
py -= py.mean()
|
||||
|
||||
if extend > 1:
|
||||
py = np.concatenate((py, np.zeros(len(py) * extend)))
|
||||
|
||||
spectrum = np.abs(np.fft.fft(py))
|
||||
freq = np.fft.fftfreq(len(spectrum))
|
||||
|
||||
which = (freq > 0.005)
|
||||
spectrum = spectrum[which]
|
||||
freq = freq[which]
|
||||
|
||||
index_peaks = scipy.signal.find_peaks(spectrum)[0]
|
||||
peaks_pos = freq[index_peaks]
|
||||
peak_height = spectrum[index_peaks]
|
||||
|
||||
cut_freq = peaks_pos[np.argmax(peak_height)]
|
||||
return freq, spectrum, cut_freq
|
||||
|
||||
|
||||
def make_xs(arr):
|
||||
return np.arange(len(arr))
|
||||
|
||||
|
||||
# create channel
|
||||
cam = BS(cam_name + ".roi_signal_x_profile", modulo=5)
|
||||
cropped, width, proj = get_data(cam)
|
||||
pixel_proj = make_xs(proj)
|
||||
pixel_width = make_xs(width)
|
||||
|
||||
|
||||
plt.fig.set_figheight(12)
|
||||
plt.fig.set_figwidth(9)
|
||||
|
||||
plt.suptitle(cam_name)
|
||||
|
||||
plt.subplot(321)
|
||||
plt.title(f"cropped image\n[{xmin}:{xmax}, {ymin}:{ymax}]")
|
||||
pimg = plt.imshow(cropped, origin="lower")
|
||||
|
||||
plt.subplot(322)
|
||||
plt.title("projection")
|
||||
pln_proj = plt.plot(proj, pixel_proj)
|
||||
|
||||
plt.subplot(323)
|
||||
plt.title("projection")
|
||||
pln_width = plt.plot([0])
|
||||
|
||||
plt.subplot(324)
|
||||
plt.title("FFT")
|
||||
plt.xlabel("frequency in 1/pixel")
|
||||
pln_fft_spec = plt.plot([0])
|
||||
plt.xlim(0,0.2)
|
||||
pln_fft_cut = plt.plot([0])
|
||||
|
||||
plt.subplot(313)
|
||||
plt.title(f"spacing assuming {um_per_px} μm per pixel")
|
||||
pln_spac = plt.plot([0], 'o')
|
||||
plt.ylim(0,250)
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
spacings = deque(maxlen=buffer_length)
|
||||
|
||||
for counter in plt.show():
|
||||
print(counter)
|
||||
next(bsstream)
|
||||
|
||||
|
||||
cropped, width, proj = get_data(cam)
|
||||
|
||||
pimg.set(cropped)
|
||||
pln_proj.set(proj, pixel_proj)
|
||||
pln_width.set(pixel_width, width)
|
||||
|
||||
freq, spectrum, cut_freq = find_spacing(proj, extend=10)
|
||||
spac = um_per_px / cut_freq
|
||||
spacings.append(spac)
|
||||
|
||||
pln_spac.set(make_xs(spacings), spacings)
|
||||
pln_fft_spec.set(freq, spectrum)
|
||||
pln_fft_cut.set([cut_freq]*2, [spectrum.min(), spectrum.max()])
|
||||
pln_fft_spec.ax.set_title(f"FFT\ncurrent spacing: {spac:.1f} μm")
|
||||
|
||||
|
||||
# this, I need to move into the library
|
||||
ps = [pln_proj, pln_width, pln_spac, pln_fft_spec]
|
||||
for p in ps:
|
||||
p.ax.relim()
|
||||
p.ax.autoscale_view()
|
||||
|
||||
|
||||
|
||||
bsstream.close()
|
||||
|
||||
|
||||
|
132
camerata/main_less_simple.py
Executable file
132
camerata/main_less_simple.py
Executable file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
from scipy import signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
|
||||
# config
|
||||
#cam_name = "SARES11-XMI125-C4P1.jet_projection"
|
||||
cam_name = "SARES11-SPEC125-M2.jet_projection"
|
||||
#xmin = 0
|
||||
#xmax = 400
|
||||
#ymin = 400
|
||||
#ymax = 700
|
||||
#proj_axis = 0
|
||||
#um_per_px = 2.28
|
||||
um_per_px = 3.33
|
||||
buffer_length = 1000
|
||||
shots = 10
|
||||
|
||||
def get_data(cam):
|
||||
jet = np.empty((shots, 550))
|
||||
for i in range(shots):
|
||||
jet[i] = cam.get()
|
||||
next(bsstream)
|
||||
proj = jet.max(axis=0)
|
||||
return proj
|
||||
|
||||
|
||||
#def get_data(cam):
|
||||
# jet = np.empty(550)
|
||||
# jet = cam.get()
|
||||
# next(bsstream)
|
||||
# proj = jet
|
||||
# return proj
|
||||
|
||||
|
||||
def find_spacing(py, extend=5):
|
||||
py -= py.mean()
|
||||
#tukey_filter = np.concatenate((signal.tukey(120)[0:30],np.ones(291),signal.tukey(120)[-30:-1]))
|
||||
#tukey_filter = signal.gaussian(350, 100)
|
||||
#py *= tukey_filter
|
||||
#py = signal.savgol_filter(py, 39, polyorder=2)
|
||||
|
||||
if extend > 1:
|
||||
py = np.concatenate((py, np.zeros(len(py) * extend)))
|
||||
|
||||
spectrum = np.abs(np.fft.fft(py))**2
|
||||
freq = np.fft.fftfreq(len(spectrum))
|
||||
|
||||
which = (freq > 0.005)
|
||||
spectrum = spectrum[which]
|
||||
freq = freq[which]
|
||||
|
||||
index_peaks = signal.find_peaks(spectrum)[0]
|
||||
peaks_pos = freq[index_peaks]
|
||||
peak_height = spectrum[index_peaks]
|
||||
|
||||
cut_freq = peaks_pos[np.argmax(peak_height)]
|
||||
return freq, spectrum, cut_freq
|
||||
|
||||
|
||||
def make_xs(arr):
|
||||
return np.arange(len(arr))
|
||||
|
||||
|
||||
# create channel
|
||||
cam = BS(cam_name)
|
||||
proj = get_data(cam)
|
||||
pixel_proj = make_xs(proj)
|
||||
|
||||
plt.fig.set_figheight(9)
|
||||
plt.fig.set_figwidth(9)
|
||||
plt.suptitle(cam_name)
|
||||
|
||||
plt.subplot(221)
|
||||
plt.title("projection")
|
||||
pln_proj = plt.plot(proj, pixel_proj)
|
||||
plt.xlim(-45,45)
|
||||
plt.grid()
|
||||
|
||||
plt.subplot(222)
|
||||
plt.title("FFT")
|
||||
plt.xlabel("frequency in 1/pixel")
|
||||
pln_fft_spec = plt.plot([0])
|
||||
plt.xlim(0,0.25)
|
||||
plt.grid()
|
||||
#plt.ylim(0,500000)
|
||||
pln_fft_cut = plt.plot([0])
|
||||
|
||||
plt.subplot(212)
|
||||
plt.title(f"spacing assuming {um_per_px} μm per pixel")
|
||||
pln_spac = plt.plot([0], 'o')
|
||||
pln_spac.ax.axhline(y=120, color='r') # 120um spacing set for Neutze cytco
|
||||
plt.xlabel('1000 (*10) most recent images')
|
||||
plt.ylabel('ladder spacing in $\mu$m')
|
||||
plt.ylim(0,250)
|
||||
plt.xlim(0,buffer_length)
|
||||
|
||||
plt.grid()
|
||||
plt.tight_layout()
|
||||
|
||||
spacings = deque(maxlen=buffer_length)
|
||||
|
||||
for counter in plt.show():
|
||||
print(counter)
|
||||
next(bsstream)
|
||||
|
||||
proj = get_data(cam)
|
||||
|
||||
pln_proj.set(proj, pixel_proj)
|
||||
|
||||
freq, spectrum, cut_freq = find_spacing(proj, extend=10)
|
||||
spac = um_per_px / cut_freq
|
||||
spacings.append(spac)
|
||||
|
||||
pln_spac.set(make_xs(spacings), spacings)
|
||||
pln_fft_spec.set(freq, spectrum)
|
||||
pln_fft_cut.set([cut_freq]*2, [spectrum.min(), spectrum.max()])
|
||||
pln_fft_spec.ax.set_title(f"FFT\ncurrent spacing: {spac:.1f} μm")
|
||||
|
||||
# this, I need to move into the library
|
||||
ps = [pln_proj, pln_spac, pln_fft_spec]
|
||||
for p in ps:
|
||||
p.ax.relim()
|
||||
p.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
116
camerata/main_simple.py
Executable file
116
camerata/main_simple.py
Executable file
@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
|
||||
|
||||
|
||||
# config
|
||||
cam_name = "SARES11-XMI125-C4P1.jet_projection"
|
||||
#xmin = 0
|
||||
#xmax = 400
|
||||
#ymin = 400
|
||||
#ymax = 700
|
||||
#proj_axis = 0
|
||||
um_per_px = 2.28
|
||||
buffer_length = 1000
|
||||
|
||||
|
||||
def get_data(cam):
|
||||
jet = 0
|
||||
for i in range(1):
|
||||
jet += cam.get()
|
||||
next(bsstream)
|
||||
proj = jet
|
||||
return proj
|
||||
|
||||
|
||||
def find_spacing(py, extend=5):
|
||||
py -= py.mean()
|
||||
|
||||
if extend > 1:
|
||||
py = np.concatenate((py, np.zeros(len(py) * extend)))
|
||||
|
||||
spectrum = np.abs(np.fft.fft(py))
|
||||
freq = np.fft.fftfreq(len(spectrum))
|
||||
|
||||
which = (freq > 0.005)
|
||||
spectrum = spectrum[which]
|
||||
freq = freq[which]
|
||||
|
||||
index_peaks = scipy.signal.find_peaks(spectrum)[0]
|
||||
peaks_pos = freq[index_peaks]
|
||||
peak_height = spectrum[index_peaks]
|
||||
|
||||
cut_freq = peaks_pos[np.argmax(peak_height)]
|
||||
return freq, spectrum, cut_freq
|
||||
|
||||
|
||||
def make_xs(arr):
|
||||
return np.arange(len(arr))
|
||||
|
||||
|
||||
# create channel
|
||||
cam = BS(cam_name)
|
||||
proj = get_data(cam)
|
||||
pixel_proj = make_xs(proj)
|
||||
|
||||
plt.fig.set_figheight(12)
|
||||
plt.fig.set_figwidth(9)
|
||||
|
||||
plt.suptitle(cam_name)
|
||||
|
||||
plt.subplot(311)
|
||||
plt.title("projection")
|
||||
pln_proj = plt.plot(proj, pixel_proj)
|
||||
plt.grid()
|
||||
|
||||
plt.subplot(312)
|
||||
plt.title("FFT")
|
||||
plt.xlabel("frequency in 1/pixel")
|
||||
pln_fft_spec = plt.plot([0])
|
||||
plt.xlim(0,0.2)
|
||||
plt.grid()
|
||||
pln_fft_cut = plt.plot([0])
|
||||
|
||||
plt.subplot(313)
|
||||
plt.title(f"spacing assuming {um_per_px} μm per pixel")
|
||||
pln_spac = plt.plot([0], 'o')
|
||||
pln_spac.ax.axhline(y=80, color='r')
|
||||
plt.ylim(0,250)
|
||||
|
||||
plt.grid()
|
||||
plt.tight_layout()
|
||||
|
||||
spacings = deque(maxlen=buffer_length)
|
||||
|
||||
for counter in plt.show():
|
||||
print(counter)
|
||||
next(bsstream)
|
||||
|
||||
proj = get_data(cam)
|
||||
|
||||
pln_proj.set(proj, pixel_proj)
|
||||
|
||||
freq, spectrum, cut_freq = find_spacing(proj, extend=10)
|
||||
spac = um_per_px / cut_freq
|
||||
spacings.append(spac)
|
||||
|
||||
pln_spac.set(make_xs(spacings), spacings)
|
||||
pln_fft_spec.set(freq, spectrum)
|
||||
pln_fft_cut.set([cut_freq]*2, [spectrum.min(), spectrum.max()])
|
||||
pln_fft_spec.ax.set_title(f"FFT\ncurrent spacing: {spac:.1f} μm")
|
||||
|
||||
# this, I need to move into the library
|
||||
ps = [pln_proj, pln_spac, pln_fft_spec]
|
||||
for p in ps:
|
||||
p.ax.relim()
|
||||
p.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
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()
|
72
dioderata/arrival_times_feedback.py
Executable file
72
dioderata/arrival_times_feedback.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/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
|
||||
from datetime import datetime
|
||||
|
||||
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
|
||||
threshold = 7
|
||||
|
||||
|
||||
# create channel
|
||||
ch_amp = BS(chname_amplitude)
|
||||
ch_jitter = BS(chname_jitter)
|
||||
ch_events = BS(chname_events)
|
||||
ch_iZero = BS(chname_iZero)
|
||||
|
||||
n = 500
|
||||
amp = np.empty(n)
|
||||
jitter = np.empty(n)
|
||||
iZero = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
while True:
|
||||
# print(counter)
|
||||
|
||||
timeofdata = datetime.now()
|
||||
|
||||
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 > threshold])
|
||||
jitter_std = np.std(edge_pos[edge_amp > threshold])
|
||||
|
||||
if len(edge_pos[edge_amp > threshold] > 125):
|
||||
|
||||
print("{} statistics on {} shots: offset of {} fs, jitter of {} fs rms".format(timeofdata.strftime('%Y-%m-%d-%H:%M:%S'), len(edge_pos[edge_amp > threshold]), round(jitter_avg, 2), round(jitter_std, 2)))
|
||||
|
||||
if (np.abs(jitter_avg) > 100) & (np.abs(jitter_avg) < 500):
|
||||
moveTo = STAGEpv.get()*mm2fs - jitter_avg
|
||||
STAGEpv.put(moveTo/mm2fs)
|
||||
print('Stage moved.')
|
||||
|
||||
else:
|
||||
print ("{} Where are my X-rays?!".format(timeofdata.strftime('%Y-%m-%d-%H:%M:%S')))
|
||||
|
||||
bsstream.close()
|
64
dioderata/correlate.py
Executable file
64
dioderata/correlate.py
Executable file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def pumpedshots(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
#chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
#chname_diode1 = "SARES11-GES1:CH1_VAL_GET"
|
||||
chname_diode1 = "SARES12-GES1:PR1_CH2_VAL_GET"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_diode1 = BS(chname_diode1)
|
||||
ch_i0 = BS(chname_i0)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 200
|
||||
sigs1 = np.empty(n)
|
||||
i0s = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.fig.set_figheight(6)
|
||||
plt.fig.set_figwidth(7)
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
sigs1[i] = ch_diode1.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
evts[i] = ch_events.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
pearscoeff1, _ = pearsonr(i0s, sigs1)
|
||||
pumpi0s, pumpsigs = pumpedshots(evts, i0s, sigs1)
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.tight_layout()
|
||||
plt.clf()
|
||||
plt.scatter(i0s, sigs1)
|
||||
plt.scatter(pumpi0s, pumpsigs)
|
||||
plt.title("{}".format(round(pearscoeff1, 4)))
|
||||
plt.xlabel('sarop11-pbps110:intensity')
|
||||
plt.ylabel('tfy, sares11-ges1:ch1_val_get')
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
66
dioderata/correlate_2diodes.py
Executable file
66
dioderata/correlate_2diodes.py
Executable file
@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
#chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
chname_diode1 = "SARES12-GES1:PR1_CH1_VAL_GET"
|
||||
chname_diode2 = "SARES12-GES1:PR1_CH2_VAL_GET"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_diode1 = BS(chname_diode1)
|
||||
ch_diode2 = BS(chname_diode2)
|
||||
ch_i0 = BS(chname_i0)
|
||||
|
||||
n = 200
|
||||
sigs1 = np.empty(n)
|
||||
sigs2 = np.empty(n)
|
||||
i0s = np.empty(n)
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle("{}, {}".format(chname_diode1, chname_diode2))
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(5)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
sigs1[i] = ch_diode1.get()
|
||||
sigs2[i] = ch_diode2.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
pearscoeff1, _ = pearsonr(i0s, sigs1)
|
||||
pearscoeff2, _ = pearsonr(i0s, sigs2)
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.clf()
|
||||
plt.scatter(i0s, sigs1, label=chname_diode1)
|
||||
plt.scatter(i0s, sigs2, label=chname_diode2)
|
||||
plt.title("{}, ch1:{}, ch2:{}".format(chname_i0.split(':')[0].split('-')[-1], round(pearscoeff1, 4), round(pearscoeff2, 4)))
|
||||
plt.legend(loc='best')
|
||||
plt.show()
|
||||
|
||||
# this, I need to move into the library
|
||||
# pd.ax.relim()
|
||||
# pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
72
dioderata/correlate_2tt.py
Executable file
72
dioderata/correlate_2tt.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def pumpedshots(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
|
||||
chname_tt1 = "SARES11-SPEC125-M1.edge_position"
|
||||
chname_tt2 = "SARES11-SPEC125-M1.edge_position2"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_tt1 = BS(chname_tt1)
|
||||
ch_tt2 = BS(chname_tt2)
|
||||
ch_i0 = BS(chname_i0)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 200
|
||||
tt1 = np.empty(n)
|
||||
tt2 = np.empty(n)
|
||||
i0s = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle("{}, {}".format(chname_tt1, chname_tt2))
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(5)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
tt1[i] = ch_tt1.get()
|
||||
tt2[i] = ch_tt2.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
evts[i] = ch_events.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
|
||||
pumptt1, pumptt2 = pumpedshots(evts, tt1, tt2)
|
||||
pearscoeff1, _ = pearsonr(pumptt1, pumptt2)
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.clf()
|
||||
plt.scatter(pumptt1, pumptt2)
|
||||
plt.title("{}".format(round(pearscoeff1, 4)))
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
72
dioderata/correlate_2tt_amp.py
Executable file
72
dioderata/correlate_2tt_amp.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def pumpedshots(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
|
||||
chname_tt1 = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
chname_tt2 = "SARES11-SPEC125-M1.edge_amplitude2"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_tt1 = BS(chname_tt1)
|
||||
ch_tt2 = BS(chname_tt2)
|
||||
ch_i0 = BS(chname_i0)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 200
|
||||
tt1 = np.empty(n)
|
||||
tt2 = np.empty(n)
|
||||
i0s = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle("{}, {}".format(chname_tt1, chname_tt2))
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(5)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
tt1[i] = ch_tt1.get()
|
||||
tt2[i] = ch_tt2.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
evts[i] = ch_events.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
|
||||
pumptt1, pumptt2 = pumpedshots(evts, tt1, tt2)
|
||||
pearscoeff1, _ = pearsonr(pumptt1, pumptt2)
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.clf()
|
||||
plt.scatter(pumptt1, pumptt2)
|
||||
plt.title("{}".format(round(pearscoeff1, 4)))
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
59
dioderata/correlate_2wieser.py
Executable file
59
dioderata/correlate_2wieser.py
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
chname_x1 = "SLAAR-LADC-WL001:ADCX_VAL"
|
||||
chname_x2 = "SLAAR-LADC-WL002:ADCX_VAL"
|
||||
chname_i0 = "SLAAR-LADC-WL003:ADCI_VAL"
|
||||
|
||||
# create channel
|
||||
ch_x1 = BS(chname_x1)
|
||||
ch_x2 = BS(chname_x2)
|
||||
#ch_i0 = BS(chname_i0)
|
||||
|
||||
n = 100
|
||||
sigs1 = np.empty(n)
|
||||
sigs2 = np.empty(n)
|
||||
#i0s = np.empty(n)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
#plt.suptitle("{}, {}".format(chname_diode1, chname_diode2))
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(5)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
sigs1[i] = ch_x1.get()
|
||||
sigs2[i] = ch_x2.get()
|
||||
#i0s[i] = ch_i0.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.clf()
|
||||
#plt.plot(sigs1)
|
||||
plt.scatter(sigs1, sigs2)
|
||||
#plt.title("{}, ch1:{}, ch2:{}".format(chname_i0.split(':')[0].split('-')[-1], round(pearscoeff1, 4), round(pearscoeff2, 4)))
|
||||
#plt.legend(loc='best')
|
||||
plt.show()
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
16
dioderata/dark_light.py
Executable file
16
dioderata/dark_light.py
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import epics
|
||||
import time
|
||||
|
||||
# config
|
||||
darkPV = epics.PV('SLAAR03-LTIM-PDLY:DARKSHOT.PROC')
|
||||
normalPV = epics.PV('SLAAR03-LTIM-PDLY:NORMAL.PROC')
|
||||
|
||||
while True:
|
||||
time.sleep(20)
|
||||
darkPV.put(1)
|
||||
print('dark')
|
||||
time.sleep(20)
|
||||
normalPV.put(1)
|
||||
print('light')
|
72
dioderata/fft.py
Executable file
72
dioderata/fft.py
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
import epics
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
|
||||
def goodshots(events, *arrays):
|
||||
#fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
chname_diode = "SARES12-LSCP11-FNS:CH4:VAL_GET"
|
||||
#chname_diode = "SLAAR-LSCP1-FNS:CH4:VAL_GET"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_laserRate = "SIN-TIMAST-TMA:Evt-23-Freq-SP"
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
ch_laserRate = epics.PV(chname_laserRate)
|
||||
|
||||
|
||||
n = 1000
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
plt.suptitle("{}".format(chname_diode))
|
||||
plt.fig.set_figheight(4)
|
||||
plt.fig.set_figwidth(8)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
sigs[i] = ch_diode.get()
|
||||
evts[i] = ch_events.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
laserRate = ch_laserRate.get()
|
||||
if not(laserRate):
|
||||
laserRate = 100
|
||||
|
||||
goodsigs, _ = goodshots(evts, sigs, sigs)
|
||||
x=np.arange(0,np.ceil(laserRate),np.ceil(laserRate)/len(goodsigs))
|
||||
vals = np.hstack((goodsigs-np.mean(goodsigs), np.zeros_like(goodsigs)))
|
||||
power = np.abs(np.fft.fft(vals))**2
|
||||
|
||||
print(x[0])
|
||||
print(len(x))
|
||||
print(x[-1])
|
||||
print(len(power))
|
||||
|
||||
plt.clf()
|
||||
plt.plot(x[0:200]/2, power[0:200])
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
24
dioderata/infinite_jest.py
Executable file
24
dioderata/infinite_jest.py
Executable file
@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python
|
||||
import epics
|
||||
from epics import caput
|
||||
import numpy as np
|
||||
|
||||
# config
|
||||
#STAGEpv = epics.PV('SLAAR11-LMOT-M452:MOTOR_1.VAL') # global globi
|
||||
stagePV = epics.PV('SLAAR11-LMOT-M424:MOT.VAL')
|
||||
|
||||
c = 299792458
|
||||
|
||||
def mm2fs(d):
|
||||
# d in mm, output in fs
|
||||
return np.around(2*d*10**(-3)/c*10**15, decimals=5)
|
||||
|
||||
def fs2mm(t):
|
||||
# t in fs, output in mm
|
||||
return np.around(c*t/2*10**(-12), decimals=5)
|
||||
|
||||
t0 = 168.760
|
||||
|
||||
while True:
|
||||
stagePV.put(t0 - fs2mm(200))
|
||||
stagePV.put(t0 + fs2mm(500))
|
88
dioderata/knife_edge.py
Executable file
88
dioderata/knife_edge.py
Executable file
@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
from scipy.special import erf
|
||||
from scipy.optimize import curve_fit
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
# config
|
||||
#chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
chname_diode = "SARES11-GES1:CH1_VAL_GET"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
chname_xhuber = "SARES11-XSAM125:ENC_X1_BS"
|
||||
chname_yhuber = "SARES11-XSAM125:ENC_Y1_BS"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 5000
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_i0 = BS(chname_i0)
|
||||
ch_xhuber = BS(chname_xhuber)
|
||||
ch_yhuber = BS(chname_yhuber)
|
||||
ch_evts = BS(chname_events)
|
||||
|
||||
n = 100
|
||||
sigs = np.empty(n)
|
||||
i0s = np.empty(n)
|
||||
x_pos = np.empty(n)
|
||||
y_pos = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create a buffer for the plotting
|
||||
#ke_sigs = deque(maxlen=length)
|
||||
#x_poses = deque(maxlen=length)
|
||||
#y_poses = deque(maxlen=length)
|
||||
ke_sigs = []
|
||||
x_poses = []
|
||||
y_poses = []
|
||||
i_zeroes = []
|
||||
|
||||
# fit stuff for knife edge scans
|
||||
def errfunc_fwhm(x, x0, amplitude, width, offset):
|
||||
return offset + amplitude*erf((x0-x)*2*np.sqrt(np.log(2))/(np.abs(width))) #d is fwhm
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle(chname_diode)
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(5)
|
||||
plt.tight_layout()
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
# sigs[i] = ch_diode.get()
|
||||
# i0s[i] = ch_i0.get()
|
||||
# x_pos[i] = ch_xhuber.get()
|
||||
# y_pos[i] = ch_yhuber.get()
|
||||
ke_sigs.append(ch_diode.get())
|
||||
x_poses.append(ch_xhuber.get())
|
||||
y_poses.append(ch_yhuber.get())
|
||||
i_zeroes.append(ch_i0.get())
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
# sig_norm = sigs#/np.asarray(i0s)
|
||||
# ke_sigs.append(sig_norm)
|
||||
|
||||
pd.set(x_poses, np.asarray(ke_sigs)/(i_zeroes))
|
||||
# popt, pcov = curve_fit(errfunc_fwhm, np.asarray(x_poses), np.asarray(ke_sigs)/(i_zeroes), p0=[np.mean(x_poses), (np.max(ke_sigs)-np.min(ke_sigs)), 10, 0])
|
||||
# pd.set(x_poses, errfunc_fwhm(x_poses, *popt))
|
||||
|
||||
print(np.shape(x_poses))
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
# pd.ax.suptitle("{}, {}".format(popt[0], popt[2]))
|
||||
|
||||
bsstream.close()
|
80
dioderata/lost_pids.py
Executable file
80
dioderata/lost_pids.py
Executable file
@ -0,0 +1,80 @@
|
||||
#!/photonics/home/gac-alvra/.conda/envs/adaq/bin/python
|
||||
|
||||
from collections import defaultdict
|
||||
import numpy as np
|
||||
|
||||
from bstrd import BS, bsstream
|
||||
#from zoetrope import aniplot as plt
|
||||
#plt.blit = False
|
||||
|
||||
|
||||
chname = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
ch = BS(chname)
|
||||
pids = BS("pid")
|
||||
|
||||
nblock = 100
|
||||
|
||||
|
||||
def analyse(data):
|
||||
data = np.array(data)
|
||||
delta = np.diff(data)
|
||||
x, y = discrete_histogram(delta)
|
||||
return x, y
|
||||
|
||||
def discrete_histogram(data):
|
||||
left_of_first_bin = data.min() - 1/2
|
||||
right_of_last_bin = data.max() + 1/2
|
||||
bins = np.arange(left_of_first_bin, right_of_last_bin+1)
|
||||
hist, edges = np.histogram(data, bins=bins)
|
||||
edges += 1/2
|
||||
edges = edges.astype(int)
|
||||
return edges, hist
|
||||
|
||||
|
||||
|
||||
#xs = [1]
|
||||
#ys = [0]
|
||||
#pd = plt.step([1], [0])
|
||||
|
||||
|
||||
i = 0
|
||||
seen = []
|
||||
accum = defaultdict(int)
|
||||
#for counter, _ in zip(plt.show(), bsstream):
|
||||
# print(counter)
|
||||
for _ in bsstream:
|
||||
curr = pids.get()
|
||||
seen.append(curr)
|
||||
|
||||
if len(seen) == nblock:
|
||||
res = analyse(seen)
|
||||
for x, y in zip(*res):
|
||||
accum[x] += y
|
||||
|
||||
xs, ys = zip(*accum.items())
|
||||
print(xs)
|
||||
print(ys)
|
||||
print()
|
||||
|
||||
xs = np.array(xs)
|
||||
ys = np.array(ys)
|
||||
one = (xs == 1)
|
||||
other = (xs != 1)
|
||||
one = ys[one].sum()
|
||||
other = ( (xs[other] - 1) * ys[other] ).sum()
|
||||
print(round(other / one * 100, 1), one, other)
|
||||
|
||||
# pd.set(xs, ys)
|
||||
|
||||
# i += 1
|
||||
# if i == 3:
|
||||
# break
|
||||
|
||||
last = seen[-1]
|
||||
seen = [last] # use the last entry of the previous round as new first entry
|
||||
|
||||
|
||||
bsstream.stop()
|
||||
|
||||
|
||||
|
53
dioderata/lost_pids1.py
Executable file
53
dioderata/lost_pids1.py
Executable file
@ -0,0 +1,53 @@
|
||||
#!/photonics/home/gac-alvra/.conda/envs/adaq/bin/python
|
||||
|
||||
#from time import sleep
|
||||
#from collections import deque
|
||||
#import numpy as np
|
||||
#import scipy.signal
|
||||
|
||||
from bstrd import BS, bsstream
|
||||
#from zoetrope import aniplot as plt
|
||||
#plt.blit = False
|
||||
|
||||
|
||||
chname = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
ch = BS(chname)
|
||||
pids = BS("pid")
|
||||
|
||||
seen = set()
|
||||
|
||||
#last = None
|
||||
missing_prev = set()
|
||||
#missing_next = set()
|
||||
|
||||
for _ in bsstream:
|
||||
p_curr = pids.get()
|
||||
p_prev = p_curr - 1
|
||||
p_next = p_curr + 1
|
||||
|
||||
seen.add(p_curr)
|
||||
|
||||
if p_prev not in seen:
|
||||
missing_prev.add(p_curr)
|
||||
|
||||
# miss_prev.remove(prev)
|
||||
|
||||
last_few = sorted(seen)[-23:]
|
||||
|
||||
if missing_prev:
|
||||
print("missing prev:", missing_prev)
|
||||
print("last few: ", last_few)
|
||||
|
||||
print(p_curr)
|
||||
to_be_removed = set()
|
||||
for p in missing_prev:
|
||||
if p-1 in seen:
|
||||
print("late:", p)
|
||||
print("max:", max(seen), "-- min:", min(seen))
|
||||
to_be_removed.add(p)
|
||||
raise SystemExit
|
||||
|
||||
missing_prev -= to_be_removed
|
||||
|
||||
|
||||
|
13
dioderata/mod_mod.py
Executable file
13
dioderata/mod_mod.py
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import epics
|
||||
import time
|
||||
|
||||
# config
|
||||
modPV = epics.PV('SIN-TIMAST-TMA:Evt-23-Off-SP')
|
||||
|
||||
while True:
|
||||
time.sleep(5)
|
||||
modPV.put(0)
|
||||
time.sleep(5)
|
||||
modPV.put(1)
|
80
dioderata/online_abs.py
Executable file
80
dioderata/online_abs.py
Executable file
@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def unpumpedXrays(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
background_shots = np.logical_and.reduce((laser, darkShot))
|
||||
return [a[background_shots] for a in arrays]
|
||||
|
||||
def pumpedXrays(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
#chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
chname_diode = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
#chname_diode = "SARES11-GES1:CH2_VAL_GET"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 10
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle(chname_diode)
|
||||
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()
|
||||
sigs[i] = ch_diode.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
# sigs_p = pumpedXrays(evts, sigs)
|
||||
# sigs_u = unpumpedXrays(evts, sigs)
|
||||
|
||||
sig = np.mean(sigs)
|
||||
|
||||
# sig_p = np.mean(sigs_p)
|
||||
# sig_u = np.mean(sigs_u)
|
||||
|
||||
# sig = -np.log10(sig_p/sig_u)
|
||||
|
||||
pp_sigs.append(sig)
|
||||
|
||||
xs = np.arange(len(pp_sigs))
|
||||
pd.set(xs, pp_sigs)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
83
dioderata/prime_pp.py
Executable file
83
dioderata/prime_pp.py
Executable file
@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def unpumped(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
background_shots = np.logical_and.reduce((laser, darkShot))
|
||||
return [a[background_shots] for a in arrays]
|
||||
|
||||
def pumped(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
#chname_diode = "SARES11-GES1:CH1_VAL_GET"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
length = 100
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
ch_i0 = BS(chname_i0)
|
||||
|
||||
n = 50
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
i0s = np.empty(n)
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle(chname_diode)
|
||||
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()
|
||||
sigs[i] = ch_diode.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
sigs_p = pumped(evts, sigs)
|
||||
sigs_u = unpumped(evts, sigs)
|
||||
i0s_p = pumped(evts, i0s)
|
||||
i0s_u = unpumped(evts, i0s)
|
||||
|
||||
sig_p = np.mean(np.asarray(sigs_p))#/np.asarray(i0s_p))
|
||||
sig_u = np.mean(np.asarray(sigs_u))#/np.asarray(i0s_u))
|
||||
|
||||
sig = -np.log10(sig_p/sig_u)
|
||||
|
||||
pp_sigs.append(sig)
|
||||
|
||||
xs = np.arange(len(pp_sigs))
|
||||
pd.set(xs, pp_sigs)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
81
dioderata/prime_pp2.py
Executable file
81
dioderata/prime_pp2.py
Executable file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def unpumpedXrays(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
background_shots = np.logical_and.reduce((laser, darkShot))
|
||||
return [a[background_shots] for a in arrays]
|
||||
|
||||
def pumpedXrays(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
#chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
#chname_diode = "SARES11-SPEC125-M1.edge_position"
|
||||
#chname_diode = "SARES11-GES1:CH2_VAL_GET"
|
||||
chname_diode = "SARES11-SPEC125-M1.edge_amplitude"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 10
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle(chname_diode)
|
||||
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()
|
||||
sigs[i] = ch_diode.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
# sigs_p = pumpedXrays(evts, sigs)
|
||||
# sigs_u = unpumpedXrays(evts, sigs)
|
||||
|
||||
sig = np.mean(sigs)
|
||||
|
||||
# sig_p = np.mean(sigs_p)
|
||||
# sig_u = np.mean(sigs_u)
|
||||
|
||||
# sig = -np.log10(sig_p/sig_u)
|
||||
|
||||
pp_sigs.append(sig)
|
||||
|
||||
xs = np.arange(len(pp_sigs))
|
||||
pd.set(xs, pp_sigs)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
88
dioderata/prime_pp_sigma.py
Executable file
88
dioderata/prime_pp_sigma.py
Executable file
@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def unpumped(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
background_shots = np.logical_and.reduce((laser, darkShot))
|
||||
return [a[background_shots] for a in arrays]
|
||||
|
||||
def pumped(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
#chname_diode = "SARES11-GES1:CH1_VAL_GET"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
length = 100
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
ch_i0 = BS(chname_i0)
|
||||
|
||||
n = 50
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
i0s = np.empty(n)
|
||||
|
||||
# create a buffer for the plotting
|
||||
u_std = deque(maxlen=length)
|
||||
p_std = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle('std of {}'.format(chname_diode))
|
||||
plt.fig.set_figheight(5)
|
||||
plt.fig.set_figwidth(15)
|
||||
plt.tight_layout()
|
||||
plt.legend(loc='best')
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
evts[i] = ch_events.get()
|
||||
sigs[i] = ch_diode.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
sigs_p = pumped(evts, sigs)
|
||||
sigs_u = unpumped(evts, sigs)
|
||||
i0s_p = pumped(evts, i0s)
|
||||
i0s_u = unpumped(evts, i0s)
|
||||
|
||||
# sig = np.mean(sigs)
|
||||
|
||||
std_p = np.nanstd(np.asarray(sigs_p))#/np.asarray(i0s_p))
|
||||
std_u = np.nanstd(np.asarray(sigs_u))#/np.asarray(i0s_u))
|
||||
|
||||
#sig = -np.log10(sig_p/sig_u)
|
||||
|
||||
u_std.append(std_u)
|
||||
p_std.append(std_p)
|
||||
|
||||
xs = np.arange(len(p_std))
|
||||
pd.set(xs, p_std)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
85
dioderata/spec_pp.py
Executable file
85
dioderata/spec_pp.py
Executable file
@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
import scipy.signal
|
||||
|
||||
from zoetrope import aniplot as plt
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def unpumped(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
background_shots = np.logical_and.reduce((laser, darkShot))
|
||||
return [a[background_shots] for a in arrays]
|
||||
|
||||
def pumped(events, *arrays):
|
||||
fel = events[:, 13]
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
# config
|
||||
chname_diode = "SLAAR11-LSCP1-FNS:CH0:VAL_GET"
|
||||
#chname_diode = "SARES11-GES1:CH1_VAL_GET"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_i0 = "SAROP11-PBPS110:INTENSITY"
|
||||
length = 100
|
||||
|
||||
# create channel
|
||||
ch_diode = BS(chname_diode)
|
||||
ch_events = BS(chname_events)
|
||||
ch_i0 = BS(chname_i0)
|
||||
|
||||
n = 50
|
||||
sigs = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
i0s = np.empty(n)
|
||||
|
||||
# create a buffer for the plotting
|
||||
pp_sigs = deque(maxlen=length)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.suptitle(chname_diode)
|
||||
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()
|
||||
sigs[i] = ch_diode.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
sigs_p = pumped(evts, sigs)
|
||||
sigs_u = unpumped(evts, sigs)
|
||||
i0s_p = pumped(evts, i0s)
|
||||
i0s_u = unpumped(evts, i0s)
|
||||
|
||||
# sig = np.mean(sigs)
|
||||
|
||||
sig_p = np.mean(np.asarray(sigs_p))#/np.asarray(i0s_p))
|
||||
sig_u = np.mean(np.asarray(sigs_u))#/np.asarray(i0s_u))
|
||||
|
||||
sig = -np.log10(sig_p/sig_u)
|
||||
|
||||
pp_sigs.append(sig)
|
||||
|
||||
xs = np.arange(len(pp_sigs))
|
||||
pd.set(xs, pp_sigs)
|
||||
|
||||
# this, I need to move into the library
|
||||
pd.ax.relim()
|
||||
pd.ax.autoscale_view()
|
||||
|
||||
bsstream.close()
|
70
dioderata/spectrum_ta.py
Executable file
70
dioderata/spectrum_ta.py
Executable file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
wav = np.linspace(409.914, 672.792, num=2048)
|
||||
|
||||
def unpumpedshots(pulseids, *arrays):
|
||||
unpumped_shots = (pulseids%2 == 0)
|
||||
return [a[unpumped_shots] for a in arrays]
|
||||
|
||||
|
||||
def pumpedshots(pulseids, *arrays):
|
||||
pumped_shots = (pulseids%2 == 1)
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
chname_specsig = "SARES11-SPEC125-M2.projection_signal"
|
||||
chname_specback = "SARES11-SPEC125-M2.projection_background"
|
||||
chname_i0 = "SLAAR11-LSCP1-FNS:CH5:VAL_GET"
|
||||
#chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
chname_pids = "SATCB01-RLLE-STA:MASTER-EVRPULSEID"
|
||||
|
||||
# create channel
|
||||
ch_spec1 = BS(chname_specsig)
|
||||
ch_back1 = BS(chname_specback)
|
||||
ch_i0 = BS(chname_i0)
|
||||
ch_pids = BS(chname_pids)
|
||||
|
||||
n = 200
|
||||
sigs1 = np.empty((n, 2048))
|
||||
backs1 = np.empty((n, 2048))
|
||||
i0s = np.empty(n)
|
||||
pids = np.empty(n)
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.fig.set_figheight(6)
|
||||
plt.fig.set_figwidth(7)
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
sigs1[i] = ch_spec1.get()
|
||||
backs1[i] = ch_back1.get()
|
||||
i0s[i] = ch_i0.get()
|
||||
pids[i] = int(ch_pids.get())
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
pumpi0s, pumpsigs, pumpbacks = pumpedshots(pids, i0s, sigs1, backs1)
|
||||
unpumpi0s, unpumpsigs, unpumpbacks = unpumpedshots(pids, i0s, sigs1, backs1)
|
||||
|
||||
diffa = np.mean((pumpsigs - pumpbacks), axis=0) / np.mean((unpumpsigs - unpumpbacks), axis=0)
|
||||
|
||||
plt.tight_layout()
|
||||
plt.clf()
|
||||
plt.xlim(450, 650)
|
||||
plt.ylim(-0.05, 0.05)
|
||||
plt.plot(wav, -np.log10(diffa))
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
61
dioderata/tt_vs_stage.py
Executable file
61
dioderata/tt_vs_stage.py
Executable file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from time import sleep
|
||||
from collections import deque
|
||||
import numpy as np
|
||||
from zoetrope import aniplot as plt
|
||||
from scipy.stats.stats import pearsonr
|
||||
from bstrd import BS, bsstream
|
||||
plt.blit = False
|
||||
plt.style.use('ggplot')
|
||||
|
||||
def pumpedshots(events, *arrays):
|
||||
laser = events[:, 18]
|
||||
darkShot = events[:, 21]
|
||||
pumped_shots = np.logical_and.reduce((laser, np.logical_not(darkShot)))
|
||||
return [a[pumped_shots] for a in arrays]
|
||||
|
||||
chname_tt = "SARES11-SPEC125-M1.edge_position"
|
||||
chname_stage = "SLAAR11-LMOT-M452:ENC_1_BS"
|
||||
chname_events = "SAR-CVME-TIFALL4:EvtSet"
|
||||
length = 500
|
||||
|
||||
# create channel
|
||||
ch_tt = BS(chname_tt)
|
||||
ch_stage = BS(chname_stage)
|
||||
ch_events = BS(chname_events)
|
||||
|
||||
n = 200
|
||||
tt = np.empty(n)
|
||||
stage = np.empty(n)
|
||||
evts = np.empty((n, 256))
|
||||
|
||||
# create the empty plot
|
||||
pd = plt.plot([0])
|
||||
|
||||
# some plot settings
|
||||
plt.fig.set_figheight(6)
|
||||
plt.fig.set_figwidth(7)
|
||||
|
||||
for counter, data in zip(plt.show(), bsstream):
|
||||
print(counter)
|
||||
|
||||
for i in range(n):
|
||||
tt[i] = ch_tt.get()
|
||||
stage[i] = ch_stage.get()
|
||||
evts[i] = ch_events.get()
|
||||
next(bsstream) # this gets the next set of data
|
||||
|
||||
pumpstage, pumptt = pumpedshots(evts, stage, tt)
|
||||
pearscoeff1, _ = pearsonr(stage, tt)
|
||||
|
||||
#xs = np.arange(len(pp_sigs))
|
||||
plt.tight_layout()
|
||||
plt.clf()
|
||||
plt.scatter(pumpstage, pumptt)
|
||||
plt.title("{}".format(round(pearscoeff1, 4)))
|
||||
plt.xlabel('m452')
|
||||
plt.ylabel('arrival time')
|
||||
plt.show()
|
||||
|
||||
bsstream.close()
|
Reference in New Issue
Block a user