DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
trgtools
python
trgtools
TPReader.py
Go to the documentation of this file.
1
"""
2
Reader class for TP data.
3
"""
4
from
.HDF5Reader
import
HDF5Reader
5
6
import
daqdataformats
# noqa: F401 : Not used, but needed to recognize formats.
7
import
trgdataformats
8
9
import
numpy
as
np
10
from
numpy.typing
import
NDArray
11
12
13
class
TPReader
(
HDF5Reader
):
14
"""
15
Class that reads a given HDF5 data file and can
16
process the TP fragments within.
17
18
Loading fragments appends to :self.tp_data:. The
19
NumPy dtypes of :self.tp_data: is available as
20
:TPReader.tp_dt:.
21
22
TP reading can print information that is relevant about the
23
loading process by specifying the verbose level. 0 for errors
24
only. 1 for warnings. 2 for all information.
25
"""
26
# TP data type
27
tp_dt = np.dtype([
28
(
'adc_integral'
, np.uint32),
29
(
'adc_peak'
, np.uint16),
30
(
'channel'
, np.uint32),
31
(
'detid'
, np.uint8),
32
(
'flag'
, np.uint8),
33
(
'samples_over_threshold'
, np.uint16),
34
(
'samples_to_peak'
, np.uint16),
35
(
'time_start'
, np.uint64),
36
(
'version'
, np.uint8)
37
])
38
39
def
__init__
(self, filename: str, verbosity: int = 0, batch_mode: bool =
False
) ->
None
:
40
"""
41
Loads a given HDF5 file.
42
43
Parameters:
44
filename (str): HDF5 file to open.
45
verbosity (int): Verbose level. 0: Only errors. 1: Warnings. 2: All.
46
47
Returns nothing.
48
"""
49
super().
__init__
(filename, verbosity, batch_mode)
50
self.
tp_data
= np.array([], dtype=self.
tp_dt
)
51
return
None
52
53
def
__getitem__
(self, key: int | str) -> NDArray[tp_dt]:
54
return
self.
tp_data
[key]
55
56
def
__setitem__
(self, key: int | str, value: NDArray[tp_dt]) ->
None
:
57
self.
tp_data
[key] = value
58
return
59
60
def
__len__
(self) -> int:
61
return
len(self.
tp_data
)
62
63
def
_filter_fragment_paths
(self) -> None:
64
""" Filter the fragment paths for TAs. """
65
fragment_paths = []
66
67
# TA fragment paths contain their name in the path.
68
for
path
in
self.
_fragment_paths
:
69
if
"Trigger_Primitive"
in
path:
70
fragment_paths.append(path)
71
72
self.
_fragment_paths
= fragment_paths
73
return
None
74
75
def
read_fragment
(self, fragment_path: str) -> NDArray:
76
"""
77
Read from the given data fragment path.
78
79
Returns a np.ndarray of the TPs that were read and appends to
80
:self.tp_data:.
81
"""
82
if
self.
_verbosity
>= 2:
83
print(
"="
*60)
84
print(f
"INFO: Reading from the path\n{fragment_path}"
)
85
86
fragment = self.
_h5_file
.get_frag(fragment_path)
87
fragment_data_size = fragment.get_data_size()
88
89
if
fragment_data_size == 0:
90
self.
_num_empty
+= 1
91
if
self.
_verbosity
>= 1:
92
print(
93
self.
_FAIL_TEXT_COLOR
94
+ self.
_BOLD_TEXT
95
+
"WARNING: Empty fragment. Returning empty array."
96
+ self.
_END_TEXT_COLOR
97
)
98
print(
"="
*60)
99
return
np.array([], dtype=self.
tp_dt
)
100
101
tp_size = trgdataformats.TriggerPrimitive.sizeof()
102
num_tps = fragment_data_size // tp_size
103
if
self.
_verbosity
>= 2:
104
print(f
"INFO: Loaded fragment with {num_tps} TPs."
)
105
106
np_tp_data = np.zeros((num_tps,), dtype=self.
tp_dt
)
107
for
idx, byte_idx
in
enumerate(range(0, fragment_data_size, tp_size)):
# Increment by TP size
108
tp_datum = trgdataformats.TriggerPrimitive(fragment.get_data(byte_idx))
109
110
np_tp_data[idx] = np.array([(
111
tp_datum.adc_integral,
112
tp_datum.adc_peak,
113
tp_datum.channel,
114
tp_datum.detid,
115
tp_datum.flag,
116
tp_datum.samples_over_threshold,
117
tp_datum.samples_to_peak,
118
tp_datum.time_start,
119
tp_datum.version)],
120
dtype=self.
tp_dt
)
121
self.
tp_data
= np.hstack((self.
tp_data
, np_tp_data))
122
123
if
self.
_verbosity
>= 2:
124
print(
"INFO: Finished reading."
)
125
print(
"="
*60)
126
return
np_tp_data
127
128
def
clear_data
(self) -> None:
129
self.
tp_data
= np.array([], dtype=self.
tp_dt
)
trgtools.HDF5Reader.HDF5Reader
Definition
HDF5Reader.py:10
trgtools.HDF5Reader.HDF5Reader._END_TEXT_COLOR
str _END_TEXT_COLOR
Definition
HDF5Reader.py:22
trgtools.HDF5Reader.HDF5Reader._verbosity
_verbosity
Definition
HDF5Reader.py:41
trgtools.HDF5Reader.HDF5Reader._FAIL_TEXT_COLOR
str _FAIL_TEXT_COLOR
Definition
HDF5Reader.py:19
trgtools.HDF5Reader.HDF5Reader._num_empty
int _num_empty
Definition
HDF5Reader.py:45
trgtools.HDF5Reader.HDF5Reader._fragment_paths
_fragment_paths
Definition
HDF5Reader.py:37
trgtools.HDF5Reader.HDF5Reader._BOLD_TEXT
str _BOLD_TEXT
Definition
HDF5Reader.py:21
trgtools.HDF5Reader.HDF5Reader._h5_file
_h5_file
Definition
HDF5Reader.py:36
trgtools.TPReader.TPReader
Definition
TPReader.py:13
trgtools.TPReader.TPReader._filter_fragment_paths
None _filter_fragment_paths(self)
Definition
TPReader.py:63
trgtools.TPReader.TPReader.read_fragment
NDArray read_fragment(self, str fragment_path)
Definition
TPReader.py:75
trgtools.TPReader.TPReader.clear_data
None clear_data(self)
Definition
TPReader.py:128
trgtools.TPReader.TPReader.__init__
None __init__(self, str filename, int verbosity=0, bool batch_mode=False)
Definition
TPReader.py:39
trgtools.TPReader.TPReader.tp_dt
tp_dt
Definition
TPReader.py:27
trgtools.TPReader.TPReader.__getitem__
NDArray[tp_dt] __getitem__(self, int|str key)
Definition
TPReader.py:53
trgtools.TPReader.TPReader.__len__
int __len__(self)
Definition
TPReader.py:60
trgtools.TPReader.TPReader.tp_data
tp_data
Definition
TPReader.py:50
trgtools.TPReader.TPReader.__setitem__
None __setitem__(self, int|str key, NDArray[tp_dt] value)
Definition
TPReader.py:56
Generated on
for DUNE-DAQ by
1.17.0