From 77c198d1ee46dab58ff4e4cbedd71fb54cf33e20 Mon Sep 17 00:00:00 2001 From: Laurent Mercadier <laurent.mercadier@xfel.eu> Date: Fri, 13 Mar 2020 09:53:08 +0100 Subject: [PATCH] Added mnemonics for GPC motors, improved knife edge function --- Load.py | 12 ++++++++++++ knife_edge.py | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Load.py b/Load.py index e6f6066..7db62c2 100644 --- a/Load.py +++ b/Load.py @@ -237,6 +237,18 @@ mnemonics = { "GPC_EOS_DelayLine": {'source':'SCS_CDIDET_GRD/MOTOR/IMAGER', 'key':'actualPosition.value', 'dim':None}, + "GPC_X": {'source':'SCS_GPC_MOV/MOTOR/X', + 'key':'actualPosition.value', + 'dim':None}, + "GPC_Y": {'source':'SCS_GPC_MOV/MOTOR/Y', + 'key':'actualPosition.value', + 'dim':None}, + "GPC_THETA": {'source':'SCS_GPC_MOV/MOTOR/THETA', + 'key':'actualPosition.value', + 'dim':None}, + "GPC_THETAMAG": {'source':'SCS_GPC_MOV/MOTOR/THETAMAG', + 'key':'actualPosition.value', + 'dim':None}, # FFT "scannerX": {'source':'SCS_CDIFFT_SAM/LMOTOR/SCANNERX', diff --git a/knife_edge.py b/knife_edge.py index e7b906b..099f2f7 100644 --- a/knife_edge.py +++ b/knife_edge.py @@ -63,11 +63,11 @@ def knife_edge(nrun, axisKey='scannerX', signalKey='FastADC4peaks', if axisRange[1] <= positions[0]: raise ValueError('The maximum value of axisRange is too small') idxMax = bisect.bisect(positions, axisRange[1]) + 1 - positions = positions[idxMin:idxMax] - intensities = intensities[idxMin:idxMax] + pos_sel = positions[idxMin:idxMax] + int_sel = intensities[idxMin:idxMax] # estimate a linear slope fitting the data to determine which function to fit - slope = np.cov(positions, intensities)[0][1]/np.var(positions) + slope = np.cov(pos_sel, int_sel)[0][1]/np.var(pos_sel) if slope < 0: func = integPowerDown funcStr = 'a*erfc(np.sqrt(2)*(x-x0)/w0) + b' @@ -75,8 +75,8 @@ def knife_edge(nrun, axisKey='scannerX', signalKey='FastADC4peaks', func = integPowerUp funcStr = 'a*erfc(-np.sqrt(2)*(x-x0)/w0) + b' if p0 is None: - p0 = [np.mean(positions), 0.1, np.max(intensities)/2, 0] - popt, pcov = curve_fit(func, positions, intensities, p0=p0) + p0 = [np.mean(pos_sel), 0.1, np.max(int_sel)/2, 0] + popt, pcov = curve_fit(func, pos_sel, int_sel, p0=p0) print('fitting function:', funcStr) print('w0 = (%.1f +/- %.1f) um'%(popt[1]*1e3, pcov[1,1]**0.5*1e3)) print('x0 = (%.3f +/- %.3f) mm'%(popt[0], pcov[0,0]**0.5)) @@ -87,7 +87,7 @@ def knife_edge(nrun, axisKey='scannerX', signalKey='FastADC4peaks', xfit = np.linspace(positions.min(), positions.max(), 1000) yfit = func(xfit, *popt) plt.figure(figsize=(7,4)) - plt.scatter(positions, intensities, color='C1', label='exp', s=2, alpha=0.01) + plt.scatter(positions, intensities, color='C1', label='exp', s=2, alpha=0.1) plt.plot(xfit, yfit, color='C4', label=r'fit $\rightarrow$ $w_0=$(%.1f $\pm$ %.1f) $\mu$m'%(popt[1]*1e3, pcov[1,1]**0.5*1e3)) leg = plt.legend() -- GitLab