diff --git a/xgm.py b/xgm.py index d4daf34ed36713283335de8093df0fdd756470a4..5d4e7d99e7a2496f812d2319b91531b4027c17eb 100644 --- a/xgm.py +++ b/xgm.py @@ -83,14 +83,37 @@ def pulsePatternInfo(data, plot=False): print('\n') if plot: plt.figure(figsize=(6,3)) - plt.plot(data['npulses_sase3'].trainId, data['npulses_sase3'], 'o-', ms=3, label='SASE 3') + plt.plot(data['npulses_sase3'].trainId, data['npulses_sase3'], 'o-', + ms=3, label='SASE 3') plt.xlabel('trainId') plt.ylabel('pulses per train') - plt.plot(data['npulses_sase1'].trainId, data['npulses_sase1'], '^-', ms=3, color='C2', label='SASE 1') + plt.plot(data['npulses_sase1'].trainId, data['npulses_sase1'], '^-', + ms=3, color='C2', label='SASE 1') plt.legend() plt.tight_layout() - + +def repRate(data, sase='sase3'): + ''' Calculates the pulse repetition rate in sase according + to the bunch pattern and assuming a minimum pulse + separation of 222e-9 seconds. + Inputs: + data: xarray Dataset containing pulse pattern + sase: sase in which the repetition rate is + calculated (1,2 or 3) + Output: + f: repetition rate in kHz + ''' + assert sase in data, 'key "{}" not found in data!'.format(sase) + sase = data[sase].where(data['npulses_{}'.format(sase)]>1, + drop=True).values + if len(sase)==0: + print('Not enough pulses to extract repetition rate') + return 0 + f = 1/((sase[0,1] - sase[0,0])*222e-6) + return f + + def selectSASEinXGM(data, sase='sase3', xgm='SCS_XGM'): ''' Extract SASE1- or SASE3-only XGM data. There are various cases depending on i) the mode of operation (10 Hz