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