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