Implement monitor da00 format as fallback timing reference
This commit is contained in:
@@ -29,6 +29,11 @@ class AmorTiming:
|
||||
chopperPhase: float
|
||||
tau: float
|
||||
|
||||
@dataclass
|
||||
class DA00EventBuffer:
|
||||
signal: np.ndarray
|
||||
time: np.ndarray
|
||||
|
||||
# Structured datatypes used for event streams
|
||||
EVENT_TYPE = np.dtype([('tof', np.float64), ('pixelID', np.uint32), ('mask', np.int32)])
|
||||
PACKET_TYPE = np.dtype([('start_index', np.uint32), ('time', np.int64)])
|
||||
|
||||
+8
-8
@@ -7,7 +7,6 @@ import sys
|
||||
import h5py
|
||||
import numpy as np
|
||||
import logging
|
||||
import subprocess
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
@@ -17,7 +16,7 @@ from orsopy.fileio.model_language import SampleModel
|
||||
from . import const, compat
|
||||
from .header import Header
|
||||
from .event_data_types import AmorGeometry, AmorTiming, AmorEventStream, LOG_TYPE, PACKET_TYPE, EVENT_TYPE, PULSE_TYPE, \
|
||||
PC_TYPE
|
||||
PC_TYPE, DA00EventBuffer
|
||||
|
||||
try:
|
||||
import zoneinfo
|
||||
@@ -75,7 +74,7 @@ class AmorHeader:
|
||||
|
||||
data=('entry1/detector/data', None), # data group used to load events from
|
||||
trigger=('entry1/detector/trigger', float),
|
||||
monitor=('entry1/detector/monitor', float),
|
||||
monitor=('entry1/beam_monitor', None), # special data group (da00 flat-buffer scheme)
|
||||
proton_current=('entry1/detector/proton_current', float),
|
||||
acquisition_filter=('entry1/detector/acquisition_filter', int),
|
||||
)
|
||||
@@ -147,6 +146,9 @@ class AmorHeader:
|
||||
return output, unit
|
||||
else:
|
||||
return output
|
||||
elif hdfgrp.attrs.get('writer_module', None) == 'da00':
|
||||
# da00 float-buffer stream data
|
||||
return DA00EventBuffer(signal=hdfgrp['signal'][:], time=hdfgrp['time'][:])
|
||||
elif dtype is str:
|
||||
return self.read_string(hdf_path)
|
||||
else:
|
||||
@@ -455,11 +457,11 @@ class AmorEventData(AmorHeader):
|
||||
events.pixelID = data_group['event_id'][self.first_index:self.last_index+1]
|
||||
events.mask = 0
|
||||
|
||||
self._monitor = self.rv('monitor', default=None)
|
||||
pulses = self.read_chopper_trigger_stream(packets)
|
||||
current = self.read_proton_current_stream(packets)
|
||||
|
||||
# read parameter logs not present in old files to ensure they are in self._log_keys if they exist
|
||||
_monitor = self.rv('monitor', default=None)
|
||||
_acquisition_filter = self.rv('acquisition_filter', default=None)
|
||||
|
||||
self.data = AmorEventStream(events, packets, pulses, current)
|
||||
@@ -519,10 +521,8 @@ class AmorEventData(AmorHeader):
|
||||
pulseTimeS = chopper1TriggerTime
|
||||
else:
|
||||
logging.critical(' No chopper trigger data available, using event steram instead, pulse filtering will fail!')
|
||||
data_group = self.hdf[self.hdf_paths['data'][0]]
|
||||
startTime = np.array(data_group['event_time_zero'][0], dtype=np.int64)
|
||||
stopTime = np.array(data_group['event_time_zero'][-2], dtype=np.int64)
|
||||
pulseTimeS = np.arange(startTime, stopTime, self.timing.tau*1e9, dtype=np.int64)
|
||||
startTime = np.array(self._monitor.time[0], dtype=np.int64)
|
||||
pulseTimeS = self._monitor.time
|
||||
pulses = np.recarray(pulseTimeS.shape, dtype=PULSE_TYPE)
|
||||
pulses.time = pulseTimeS
|
||||
pulses.monitor = 1. # default is monitor pulses as it requires no calculation
|
||||
|
||||
Reference in New Issue
Block a user