From a66a627b4a0fad2f34d40cbb826e3796d1ca78ee Mon Sep 17 00:00:00 2001
From: Laurent Mercadier <laurent.mercadier@xfel.eu>
Date: Thu, 17 Aug 2023 09:53:49 +0200
Subject: [PATCH] fix: assign pId coords when extracting BAM

---
 doc/changelog.rst                          |  1 +
 src/toolbox_scs/detectors/bam_detectors.py | 18 ++++++------------
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/doc/changelog.rst b/doc/changelog.rst
index 9bdcef0..36ab46d 100644
--- a/doc/changelog.rst
+++ b/doc/changelog.rst
@@ -6,6 +6,7 @@ unreleased
 
 - **Bug fixes**
 
+    - fix :issue:`75` regarding pulse Id assignment when reading BAM data :mr:`272`
 
 - **Improvements**
 
diff --git a/src/toolbox_scs/detectors/bam_detectors.py b/src/toolbox_scs/detectors/bam_detectors.py
index 2eca1e7..fde4b8e 100644
--- a/src/toolbox_scs/detectors/bam_detectors.py
+++ b/src/toolbox_scs/detectors/bam_detectors.py
@@ -89,13 +89,13 @@ def get_bam(run, mnemonics=None, merge_with=None, bunchPattern='sase3',
     else:
         ds_mw = xr.Dataset()
 
+    dim_names = {'sase3': 'sa3_pId', 'sase1': 'sa1_pId',
+                 'scs_ppl': 'ol_pId'}
     bpt = load_bpt(run, ds_mw)
     if bpt is not None:
         mask = is_pulse_at(bpt, bunchPattern)
-        pattern_changed = ~(mask == mask[0]).all().values
+        mask = mask.rename({'pulse_slot': dim_names[bunchPattern]})
     ds = xr.Dataset()
-    dim_names = {'sase3': 'sa3_pId', 'sase1': 'sa1_pId',
-                 'scs_ppl': 'ol_pId'}
     run_mnemonics = mnemonics_for_run(run)
     for m in mnemonics:
         if merge_with is not None and m in merge_with:
@@ -105,15 +105,9 @@ def get_bam(run, mnemonics=None, merge_with=None, bunchPattern='sase3',
         da_bam = da_bam.sel(BAMbunchId=slice(0, 5400, 2))
         # align the pulse Id
         if bpt is not None:
-            if not pattern_changed:
-                pulseIds = np.nonzero(mask[0].values)[0]
-                da_bam = da_bam.isel(BAMbunchId=pulseIds)
-                da_bam = da_bam.assign_coords(BAMbunchId=pulseIds)
-                da_bam = da_bam.rename(BAMbunchId=dim_names[bunchPattern])
-            else:
-                mask = mask.rename({'pulse_slot': dim_names[bunchPattern]})
-                da_bam = da_bam.rename(BAMbunchId=dim_names[bunchPattern])
-                da_bam = da_bam.where(mask, drop=True)
+            da_bam = da_bam.assign_coords(BAMbunchId=np.arange(0, 2700))
+            da_bam = da_bam.rename(BAMbunchId=dim_names[bunchPattern])
+            da_bam = da_bam.where(mask, drop=True)
         if run_mnemonics[m]['key'] != 'data.lowChargeArrivalTime':
             da_bam *= 1e-3
         ds = ds.merge(da_bam, join='inner')
-- 
GitLab