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