From d1c66c32308e696ae9fe8161198a6febf744145d Mon Sep 17 00:00:00 2001 From: Laurent Mercadier <laurent.mercadier@xfel.eu> Date: Thu, 23 Apr 2020 09:59:30 +0200 Subject: [PATCH] calibrateXGMs(): attempts to load slowTrain data and adds plot --- xgm.py | 62 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/xgm.py b/xgm.py index edade0b..ecb78ef 100644 --- a/xgm.py +++ b/xgm.py @@ -234,29 +234,49 @@ def calibrateXGMs(data, rollingWindow=200, plot=False): factors: numpy ndarray of shape 1 x 2 containing [XTD10 calibration factor, SCS calibration factor] ''' - XTD10_factor = np.nan - SCS_factor = np.nan - if "XTD10_slowTrain" in data or "SCS_slowTrain" in data: - if "XTD10_slowTrain" in data: - XTD10_factor = np.mean(data.XTD10_photonFlux/data.XTD10_slowTrain) - - else: - print('no XTD10 XGM data. Skipping calibration for XTD10 XGM') - if "SCS_slowTrain" in data: - #XTD10_SA3_contrib = data.XTD10_slowTrain_SA3 * data.npulses_sase3 / ( - # data.XTD10_slowTrain * (data.npulses_sase3+data.npulses_sase1)) - #SCS_SA3_SLOW = data.SCS_photonFlux*(data.npulses_sase3+ - # data.npulses_sase1)*XTD10_SA3_contrib/data.npulses_sase3 - #SCS_factor = np.mean(SCS_SA3_SLOW/data.SCS_slowTrain_SA3) - SCS_factor = np.mean(data.SCS_photonFlux/data.SCS_slowTrain) + noSlowTrain=False + results = np.array([np.nan, np.nan], dtype=float) + slowTrainTraces = [] + for i,whichXgm in enumerate(['XTD10', 'SCS']): + if f'{whichXgm}_slowTrain' not in data: + mnemo = tb.mnemonics[f'{whichXgm}_slowTrain'] + if mnemo['key'] in data.attrs['run'].keys_for_source(mnemo['source']): + slowTrain = data.attrs['run'].get_array(mnemo['source'], mnemo['key']) + else: + noSlowTrain=True + print('No averages of fast data (slowTrain) available.'+ + ' Attempting calibration from fast data.') + break else: - print('no SCS XGM data. Skipping calibration for SCS XGM') - - #TODO: plot the results of calibration - return np.array([XTD10_factor, SCS_factor]) - else: + slowTrain = data[f'{whichXgm}_slowTrain'] + results[i] = np.mean(data[f'{whichXgm}_photonFlux']/slowTrain) + slowTrainTraces.append(slowTrain) + if noSlowTrain: return calibrateXGMsFromAllPulses(data, rollingWindow, plot) - + else: + if plot: + plt.figure(figsize=(8,4)) + plt.subplot(211) + plt.plot(data['XTD10_photonFlux'], label='XTD10 photon flux') + plt.plot(slowTrainTraces[0]*results[0], label='calibrated XTD10 fast signal') + plt.ylabel(r'Energy [$\mu$J]') + plt.xlabel('train Id') + plt.legend(fontsize=8, loc='upper left') + plt.twinx() + plt.plot(slowTrainTraces[0], label='uncalibrated XTD10 fast signal', color='C4') + plt.ylabel(r'Uncalibrated energy') + plt.legend(fontsize=8, loc='upper right') + plt.subplot(212) + plt.plot(data['SCS_photonFlux'], label='SCS photon flux') + plt.plot(slowTrainTraces[1]*results[1], label='calibrated SCS fast signal') + plt.ylabel(r'Energy [$\mu$J]') + plt.xlabel('train Id') + plt.legend(fontsize=8, loc='upper left') + plt.twinx() + plt.plot(slowTrainTraces[1], label='uncalibrated SCS fast signal', color='C4') + plt.ylabel(r'Uncalibrated energy') + plt.legend(fontsize=8, loc='upper right') + return results def calibrateXGMsFromAllPulses(data, rollingWindow=200, plot=False): ''' Calibrate the fast (pulse-resolved) signals of the XTD10 and SCS XGM -- GitLab