diff --git a/xgm.py b/xgm.py index 9b62b14a332b21be5e3a4daf3388657f7c0fd935..b9a7a92f178cff3cf2734f078e6f2e5e9846e66f 100644 --- a/xgm.py +++ b/xgm.py @@ -335,21 +335,26 @@ def calibrateXGMs(data, rollingWindow=200, plot=False): print('not enough consecutive data points with the largest number of pulses per train') start += rollingWindow 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'] + # Calibrate SASE3 XGM with all signal from SASE1 and SASE3 if not noSA3: - xgm_avg = data['SA3_XGM'].where(data['SA3_XGM'] != 1.0).mean(axis=1) + xgm_avg = selectSASEinXGM(data, 'sase3', 'SA3_XGM').mean(axis=1) rolling_sa3_xgm = xgm_avg.rolling(trainId=rollingWindow).mean() - ratio = data['SA3_XGM_SLOW']/rolling_sa3_xgm + ratio = SA3_SLOW/rolling_sa3_xgm sa3_calib_factor = ratio[start:stop].mean().values print('calibration factor SA3 XGM: %f'%sa3_calib_factor) # Calibrate SCS XGM with SASE3-only contribution - sa3contrib = saseContribution(data, 'sase3', 'SA3_XGM') if not noSCS: scs_sase3_fast = selectSASEinXGM(data, 'sase3', 'SCS_XGM').mean(axis=1) meanFast = scs_sase3_fast.rolling(trainId=rollingWindow).mean() - ratio = ((data['npulses_sase3']+data['npulses_sase1']) * - data['SCS_XGM_SLOW'] * sa3contrib) / (meanFast * data['npulses_sase3']) + ratio = SCS_SLOW/meanFast scs_calib_factor = ratio[start:stop].median().values print('calibration factor SCS XGM: %f'%scs_calib_factor) @@ -357,31 +362,26 @@ def calibrateXGMs(data, rollingWindow=200, plot=False): plt.figure(figsize=(8,8)) plt.subplot(211) plt.title('E[uJ] = %.2f x IntensityTD' %(sa3_calib_factor)) - plt.plot(data['SA3_XGM_SLOW'], label='SA3 slow', color='C1') + plt.plot(SA3_SLOW, label='SA3 slow', color='C1') plt.plot(rolling_sa3_xgm*sa3_calib_factor, label='SA3 fast signal rolling avg', color='C4') + plt.plot(xgm_avg*sa3_calib_factor, label='SA3 fast signal train avg', alpha=0.2, color='C4') plt.ylabel('Energy [uJ]') plt.xlabel('train in run') plt.legend(loc='upper left', fontsize=10) plt.twinx() - plt.plot(xgm_avg*sa3_calib_factor, label='SA3 fast signal train avg', alpha=0.2, color='C4') - plt.ylabel('Calibrated SA3 fast signal [uJ]') + plt.plot(SA1_SLOW, label='SA1 slow', alpha=0.2, color='C2') + plt.ylabel('SA1 slow signal [uJ]') plt.legend(loc='lower right', fontsize=10) plt.subplot(212) plt.title('E[uJ] = %.2f x HAMP' %scs_calib_factor) - plt.plot(data['SCS_XGM_SLOW'], label='SCS slow (all SASE)', color='C0') - slow_avg_sase3 = data['SCS_XGM_SLOW']*(data['npulses_sase1'] - +data['npulses_sase3'])*sa3contrib/data['npulses_sase3'] - plt.plot(slow_avg_sase3, label='SCS slow (SASE3 only)', color='C1') + plt.plot(SCS_SLOW, label='SCS slow', color='C1') plt.plot(meanFast*scs_calib_factor, label='SCS HAMP rolling avg', color='C2') plt.ylabel('Energy [uJ]') plt.xlabel('train in run') - plt.legend(loc='upper left', fontsize=10) - plt.twinx() plt.plot(scs_sase3_fast*scs_calib_factor, label='SCS HAMP train avg', alpha=0.2, color='C2') - plt.ylabel('Calibrated HAMP signal [uJ]') - plt.legend(loc='lower right', fontsize=10) + plt.legend(loc='upper left', fontsize=10) plt.tight_layout() return np.array([sa3_calib_factor, scs_calib_factor])