From acc508e9eae26fa403ffad029bfde5c791fd0da7 Mon Sep 17 00:00:00 2001 From: jochenstahn Date: Wed, 25 Sep 2024 16:35:31 +0200 Subject: [PATCH] timestamps are now all of type np.int64 with unit ns --- libeos/file_reader.py | 26 +++++++++++++------------- libeos/nb_helpers.py | 3 +-- libeos/reduction.py | 6 +++--- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/libeos/file_reader.py b/libeos/file_reader.py index c159400..8ebcb2a 100644 --- a/libeos/file_reader.py +++ b/libeos/file_reader.py @@ -206,14 +206,14 @@ class AmorData: logging.info(f' number of events: total = {totalNumber:7d}, filtered = {np.shape(self.lamda_e)[0]:7d}') def sort_pulses(self): - chopperPeriod = int(2*self.tau*1e9) + chopperPeriod = np.int64(2*self.tau*1e9) pulseTime = np.sort(self.dataPacketTime_p) pulseTime = pulseTime[np.abs(pulseTime[:]-np.roll(pulseTime, 1)[:])>5] if self.seriesStartTime is None: - self.seriesStartTime = float(pulseTime[0]) + self.seriesStartTime = pulseTime[0] pulseTime -= self.seriesStartTime - self.stopTime = float(pulseTime[-1]) + self.stopTime = pulseTime[-1] # fill in missing pulse times # TODO: check for real end time @@ -250,7 +250,6 @@ class AmorData: self.monitor = 1. def extract_walltime(self, norm): - #self.dataPacketTime_p = np.array(self.dataPacketTime_p, dtype=float) / 1e9 if nb_helpers: self.wallTime_e = nb_helpers.extract_walltime(self.tof_e, self.dataPacket_p, self.dataPacketTime_p) else: @@ -261,16 +260,17 @@ class AmorData: #if not self.startTime and not norm: # self.startTime = self.wallTime_e[0] self.wallTime_e -= np.int64(self.seriesStartTime) - logging.debug(f' wall time from {self.wallTime_e[0]/1e9} to {self.wallTime_e[-1]/1e9}') + logging.debug(f' wall time from {self.wallTime_e[0]/1e9:6.1f} s to {self.wallTime_e[-1]/1e9:6.1f} s') def monitor_threshold(self): - goodTimeS = self.pulseTimeS[self.charge!=0] - filter_e = np.where(np.isin(self.wallTime_e, goodTimeS), True, False) - self.tof_e = self.tof_e[filter_e] - self.pixelID_e = self.pixelID_e[filter_e] - self.wallTime_e = self.wallTime_e[filter_e] - logging.warning(f' rejected {np.shape(self.charge)[0]-np.shape(goodTimeS)[0]} pulses due to low beam current') - logging.warning(f' rejected {np.shape(filter_e)[0]-np.shape(self.tof_e)[0]} events due to low beam current') + if self.monitorType == 'protonCharge': # fix to check for file compatibility + goodTimeS = self.pulseTimeS[self.charge!=0] + filter_e = np.where(np.isin(self.wallTime_e, goodTimeS), True, False) + self.tof_e = self.tof_e[filter_e] + self.pixelID_e = self.pixelID_e[filter_e] + self.wallTime_e = self.wallTime_e[filter_e] + logging.warning(f' rejected {np.shape(self.charge)[0]-np.shape(goodTimeS)[0]} pulses due to low beam current') + logging.warning(f' rejected {np.shape(filter_e)[0]-np.shape(self.tof_e)[0]} events due to low beam current') def filter_qz_range(self, norm): if self.config.qzRange[1]<0.3 and not norm: @@ -353,7 +353,7 @@ class AmorData: self.pixelID_e = np.array(self.hdf['/entry1/Amor/detector/data/event_id'][:], dtype=np.int64) self.dataPacket_p = np.array(self.hdf['/entry1/Amor/detector/data/event_index'][:], dtype=np.uint64) #self.dataPacketTime_p = np.array(self.hdf['/entry1/Amor/detector/data/event_time_zero'][:], dtype=np.uint64)/1e9 - self.dataPacketTime_p = np.array(self.hdf['/entry1/Amor/detector/data/event_time_zero'][:], dtype=float) + self.dataPacketTime_p = np.array(self.hdf['/entry1/Amor/detector/data/event_time_zero'][:], dtype=np.int64) try: self.currentTime = np.array(self.hdf['entry1/Amor/detector/proton_current/time'][:], dtype=np.int64) self.current = np.array(self.hdf['entry1/Amor/detector/proton_current/value'][:,0], dtype=float) diff --git a/libeos/nb_helpers.py b/libeos/nb_helpers.py index 68113a7..ad11041 100644 --- a/libeos/nb_helpers.py +++ b/libeos/nb_helpers.py @@ -11,12 +11,11 @@ def merge_frames(tof_e, tofCut, tau, total_offset): tof_e_out[ti] = ((tof_e[ti]-dt)%tau)+total_offset # tof shifted to 1 frame return tof_e_out -@nb.jit(nb.float64[:](nb.float64[:], nb.uint64[:], nb.float64[:]), +@nb.jit(nb.float64[:](nb.float64[:], nb.uint64[:], nb.int64[:]), nopython=True, parallel=True, cache=True) def extract_walltime(tof_e, dataPacket_p, dataPacketTime_p): # assigning every event the wall time of the event packet (absolute time of pulse ?start?) totalNumber = np.shape(tof_e)[0] - #wallTime_e = np.empty(totalNumber, dtype=np.float64) wallTime_e = np.empty(totalNumber, dtype=np.int64) for i in nb.prange(len(dataPacket_p)-1): for j in range(dataPacket_p[i], dataPacket_p[i+1]): diff --git a/libeos/reduction.py b/libeos/reduction.py index e5112b2..131a0d4 100644 --- a/libeos/reduction.py +++ b/libeos/reduction.py @@ -170,7 +170,7 @@ class AmorReduction: j += 1 def read_timeslices(self, i): - wallTime_e = self.file_reader.wallTime_e + wallTime_e = np.float64(self.file_reader.wallTime_e)/1e9 interval = self.reduction_config.timeSlize[0] try: start = self.reduction_config.timeSlize[1] @@ -183,7 +183,7 @@ class AmorReduction: # make overwriting log lines possible by removing newline at the end logging.StreamHandler.terminator = "\r" for ti, time in enumerate(np.arange(start, stop, interval)): - logging.warning(f' time slize {ti:4d}') + logging.warning(f' time slize {ti:4d}') filter_e = np.where((time