import strax
import numpy as np
export, __all__ = strax.exporter()
[docs]@export
class nVETOEventsSync(strax.OverlapWindowPlugin):
"""Plugin which computes time stamps which are synchronized with the TPC.
Uses delay set in the DAQ.
"""
depends_on = ("events_nv", "detector_time_offsets")
delay_field_name = "time_offset_nv"
provides = "events_sync_nv"
save_when = strax.SaveWhen.EXPLICIT
__version__ = "0.0.3"
[docs] def infer_dtype(self):
dtype = []
dtype += strax.time_fields
dtype += [
(
(
"Time of the event synchronized according to the total digitizer delay.",
"time_sync",
),
np.int64,
),
(
(
"Endtime of the event synchronized according to the total digitizer delay.",
"endtime_sync",
),
np.int64,
),
]
return dtype
[docs] def get_window_size(self):
# Ensure to have at least 12 offset-values from detector_time_offsets
# to compute average time delay. Otherwise we may get unlucky with
# our pacemaker (unlikely but could happen).
return 120 * 10**9
[docs] def compute(self, events_nv, detector_time_offsets):
delay = detector_time_offsets[self.delay_field_name]
delay = np.median(delay[delay > 0])
delay = delay.astype(np.int64)
# Check if delay is >= 0 otherwise something went wrong with
# the sync signal.
assert delay >= 0, f"Missing the GPS sync signal for run {self.run_id}."
events_sync_nv = np.zeros(len(events_nv), self.dtype)
events_sync_nv["time"] = events_nv["time"]
events_sync_nv["endtime"] = events_nv["endtime"]
events_sync_nv["time_sync"] = events_nv["time"] + delay
events_sync_nv["endtime_sync"] = events_nv["endtime"] + delay
return events_sync_nv