From d01505d3e935ea063e4ca81c3ccc43fa12830c1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Le=20Guyader?= <loic.le.guyader@xfel.eu>
Date: Mon, 3 Jun 2019 15:33:09 +0200
Subject: [PATCH] Adds slowTrain channels

---
 Load.py | 46 ++++++++++++++++++++++++++++++++++++----------
 xgm.py  | 34 +++++++++++++++++-----------------
 2 files changed, 53 insertions(+), 27 deletions(-)

diff --git a/Load.py b/Load.py
index d05679c..43e773c 100644
--- a/Load.py
+++ b/Load.py
@@ -59,31 +59,57 @@ mnemonics = {
                'key':'data.image.pixels',
                'dim':['x','y']},
 
-    # XGMs
-    "SA3_XGM": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
+    # XTD10 XGM
+    ## keithley
+    "XTD10_photonFlux": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
+                     'key':'pulseEnergy.photonFlux.value',
+                     'dim':None},
+    ## ADC
+    "XTD10_XGM": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
                 'key':'data.intensityTD',
                 'dim':['XGMbunchId']},
-    "SA3_XGM_SA3": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
+    "XTD10_SA3": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
                 'key':'data.intensitySa3TD',
                 'dim':['XGMbunchId']},
-    "SA3_XGM_SA1": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
+    "XTD10_SA1": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
                 'key':'data.intensitySa1TD',
                 'dim':['XGMbunchId']},
-    "SA3_XGM_SLOW": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
+    ## low pass averaged ADC
+    "XTD10_slowTrain": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrain.value',
+                    'dim':None},
+    "XTD10_slowTrain_SA1": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrainSa1.value',
+                    'dim':None},
+    "XTD10_slowTrain_SA3": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrainSa3.value',
+                    'dim':None},
+
+    # SCS XGM
+    ## keithley
+    "SCS_photonFlux": {'source':'SCS_BLU_XGM/XGM/DOOCS',
                      'key':'pulseEnergy.photonFlux.value',
                      'dim':None},
+    ## ADC
     "SCS_XGM": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
                 'key':'data.intensityTD',
                 'dim':['XGMbunchId']},
-    "SCS_XGM_SA1": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
+    "SCS_SA1": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
                 'key':'data.intensitySa1TD',
                 'dim':['XGMbunchId']},
-    "SCS_XGM_SA3": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
+    "SCS_SA3": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
                 'key':'data.intensitySa3TD',
                 'dim':['XGMbunchId']},
-    "SCS_XGM_SLOW": {'source':'SCS_BLU_XGM/XGM/DOOCS',
-                     'key':'pulseEnergy.photonFlux.value',
-                     'dim':None},
+    ## low pass averaged ADC
+    "SCS_slowTrain": {'source':'SCS_BLU_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrain.value',
+                    'dim':None},
+    "SCS_slowTrain_SA1": {'source':'SCS_BLU_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrainSa1.value',
+                    'dim':None},
+    "SCS_slowTrain_SA3": {'source':'SCS_BLU_XGM/XGM/DOOCS',
+                    'key':'controlData.slowTrainSa3.value',
+                    'dim':None},
 
     # KBS
     "HFM_CAPB": {'source':'SCS_KBS_HFM/ASENS/CAPB',
diff --git a/xgm.py b/xgm.py
index b9a7a92..769fbb2 100644
--- a/xgm.py
+++ b/xgm.py
@@ -241,7 +241,7 @@ def selectSASEinXGM(data, sase='sase3', xgm='SCS_XGM', sase3First=True, npulses=
     return result
 
 
-def saseContribution(data, sase='sase1', xgm='SA3_XGM'):
+def saseContribution(data, sase='sase1', xgm='XTD10_XGM'):
     ''' Calculate the relative contribution of SASE 1 or SASE 3 pulses 
         for each train in the run. Supports fresh bunch, dedicated trains
         and pulse on demand modes.
@@ -249,7 +249,7 @@ def saseContribution(data, sase='sase1', xgm='SA3_XGM'):
         Inputs:
             data: xarray Dataset containing xgm data
             sase: key of sase for which the contribution is computed: {'sase1', 'sase3'}
-            xgm: key of xgm to select: {'SA3_XGM', 'SCS_XGM'}
+            xgm: key of xgm to select: {'XTD10_XGM', 'SCS_XGM'}
             
         Output:
             1D DataArray equal to sum(sase)/sum(sase1+sase3)
@@ -316,8 +316,8 @@ def calibrateXGMs(data, rollingWindow=200, plot=False):
     if 'SCS_XGM' not in data:
         print('no SCS XGM data. Skipping calibration for SCS XGM')
         noSCS = True
-    if 'SA3_XGM' not in data:
-        print('no SASE3 XGM data. Skipping calibration for SASE3 XGM')
+    if 'XTD10_XGM' not in data:
+        print('no XTD10 XGM data. Skipping calibration for XTD10 XGM')
         noSA3 = True
     if noSCS and noSA3:
         return np.array([None, None])
@@ -337,14 +337,14 @@ def calibrateXGMs(data, rollingWindow=200, plot=False):
         stop = np.min((ntrains, stop+rollingWindow))
 
     # Calculate SASE3 slow data
-    sa3contrib = saseContribution(data, 'sase3', 'SA3_XGM')
-    SA3_SLOW = data['SA3_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3']
-    SA1_SLOW = data['SA3_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*(1-sa3contrib)/data['npulses_sase1']
-    SCS_SLOW = data['SCS_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3'] 
+    sa3contrib = saseContribution(data, 'sase3', 'XTD10_XGM')
+    SA3_SLOW = data['XTD10_photonFlux']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3']
+    SA1_SLOW = data['XTD10_photonFlux']*(data['npulses_sase3']+data['npulses_sase1'])*(1-sa3contrib)/data['npulses_sase1']
+    SCS_SLOW = data['SCS_photonFlux']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3'] 
 
     # Calibrate SASE3 XGM with all signal from SASE1 and SASE3
     if not noSA3:
-        xgm_avg = selectSASEinXGM(data, 'sase3', 'SA3_XGM').mean(axis=1)
+        xgm_avg = selectSASEinXGM(data, 'sase3', 'XTD10_XGM').mean(axis=1)
         rolling_sa3_xgm = xgm_avg.rolling(trainId=rollingWindow).mean()
         ratio = SA3_SLOW/rolling_sa3_xgm
         sa3_calib_factor = ratio[start:stop].mean().values
@@ -581,18 +581,18 @@ def calibrateTIM(data, rollingWindow=200, mcp=1, plot=False, use_apd=True, intst
         start += rollingWindow
         stop = np.min((ntrains, stop+rollingWindow))
     filteredTIM = getTIMapd(data, mcp, use_apd, intstart, intstop, bkgstart, bkgstop, t_offset, npulses_apd)
-    sa3contrib = saseContribution(data, 'sase3', 'SA3_XGM')
+    sa3contrib = saseContribution(data, 'sase3', 'XTD10_XGM')
     avgFast = filteredTIM.mean(axis=1).rolling(trainId=rollingWindow).mean()
     ratio = ((data['npulses_sase3']+data['npulses_sase1']) *
-             data['SCS_XGM_SLOW'] * sa3contrib) / (avgFast*data['npulses_sase3'])
+             data['SCS_photonFlux'] * sa3contrib) / (avgFast*data['npulses_sase3'])
     F = float(ratio[start:stop].median().values)
 
     if plot:
         fig = plt.figure(figsize=(8,5))
         ax = plt.subplot(211)
         ax.set_title('E[uJ] = {:2e} x TIM (MCP{})'.format(F, mcp))
-        ax.plot(data['SCS_XGM_SLOW'], label='SCS XGM slow (all SASE)', color='C0')
-        slow_avg_sase3 = data['SCS_XGM_SLOW']*(data['npulses_sase1']
+        ax.plot(data['SCS_photonflux'], label='SCS XGM slow (all SASE)', color='C0')
+        slow_avg_sase3 = data['SCS_photonflux']*(data['npulses_sase1']
                                                     +data['npulses_sase3'])*sa3contrib/data['npulses_sase3']
         ax.plot(slow_avg_sase3, label='SCS XGM slow (SASE3 only)', color='C1')
         ax.plot(avgFast*F, label='Calibrated TIM rolling avg', color='C2')
@@ -824,10 +824,10 @@ def matchXgmTimPulseId(data, use_apd=True, intstart=None, intstop=None,
     dropList = ['SCS_XGM']
     mergeList = [res]
 
-    if 'SA3_XGM' in data: 
-        res2 = selectSASEinXGM(data, xgm='SA3_XGM', npulses=npulses,
-                   sase3First=sase3First).rename({'XGMbunchId':'pId'}).rename('SA3_XGM')
-        dropList.append('SA3_XGM')
+    if 'XTD10_XGM' in data: 
+        res2 = selectSASEinXGM(data, xgm='XTD10_XGM', npulses=npulses,
+                   sase3First=sase3First).rename({'XGMbunchId':'pId'}).rename('XTD10_XGM')
+        dropList.append('XTD10_XGM')
         mergeList.append(res2)
 
     for mcp in range(1,5):
-- 
GitLab