DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
trgtools
python
trgtools
TAReader.py
Go to the documentation of this file.
1
"""
2
Reader class for TA 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
TAReader
(
HDF5Reader
):
14
"""
15
Class that reads a given HDF5 data file and can
16
process the TA fragments within.
17
18
Loading fragments appends to :self.ta_data: and :self.tp_data:.
19
NumPy dtypes of :self.ta_data: and :self.tp_data: are available
20
as :TAReader.ta_dt: and :TAReader.tp_dt:.
21
22
TA 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
# TA data type
27
ta_dt = np.dtype([
28
(
'adc_integral'
, np.uint64),
29
(
'adc_peak'
, np.uint64),
30
(
'algorithm'
, trgdataformats.TriggerActivityData.Algorithm),
31
(
'channel_end'
, np.int32),
32
(
'channel_peak'
, np.int32),
33
(
'channel_start'
, np.int32),
34
(
'detid'
, np.uint16),
35
(
'num_tps'
, np.uint64),
# Greedy
36
(
'time_activity'
, np.uint64),
37
(
'time_end'
, np.uint64),
38
(
'time_peak'
, np.uint64),
39
(
'time_start'
, np.uint64),
40
(
'type'
, trgdataformats.TriggerActivityData.Type),
41
(
'version'
, np.uint16),
42
(
'trigger_number'
, np.uint64)
43
])
44
45
# TP data type
46
tp_dt = np.dtype([
47
(
'adc_integral'
, np.uint32),
48
(
'adc_peak'
, np.uint16),
49
(
'channel'
, np.uint32),
50
(
'detid'
, np.uint8),
51
(
'flag'
, np.uint8),
52
(
'samples_over_threshold'
, np.uint16),
53
(
'samples_to_peak'
, np.uint16),
54
(
'time_start'
, np.uint64),
55
(
'version'
, np.uint8)
56
])
57
58
def
__init__
(self, filename: str, verbosity: int = 0, batch_mode: bool =
False
) ->
None
:
59
"""
60
Loads a given HDF5 file.
61
62
Parameters:
63
filename (str): HDF5 file to open.
64
verbosity (int): Verbose level. 0: Only errors. 1: Warnings. 2: All.
65
66
Returns nothing.
67
"""
68
super().
__init__
(filename, verbosity, batch_mode)
69
self.
ta_data
= np.array([], dtype=self.
ta_dt
)
70
self.
tp_data
= []
71
return
None
72
73
def
__getitem__
(self, key: int | str) -> NDArray[ta_dt]:
74
return
self.
ta_data
[key]
75
76
def
__setitem__
(self, key: int | str, value: NDArray[ta_dt]) ->
None
:
77
self.
ta_data
[key] = value
78
return
79
80
def
__len__
(self) -> int:
81
return
len(self.
ta_data
)
82
83
def
_filter_fragment_paths
(self) -> None:
84
""" Filter the fragment paths for TAs. """
85
fragment_paths = []
86
87
# TA fragment paths contain their name in the path.
88
for
path
in
self.
_fragment_paths
:
89
if
"Trigger_Activity"
in
path:
90
fragment_paths.append(path)
91
92
self.
_fragment_paths
= fragment_paths
93
return
None
94
95
def
read_fragment
(self, fragment_path: str) -> NDArray:
96
"""
97
Read from the given data fragment path.
98
99
Returns a np.ndarray of the first TA that was read and appends all TAs in the fragment to :self.ta_data:.
100
"""
101
if
self.
_verbosity
>= 2:
102
print(
"="
*60)
103
print(f
"INFO: Reading from the path\n{fragment_path}"
)
104
105
fragment = self.
_h5_file
.get_frag(fragment_path)
106
fragment_data_size = fragment.get_data_size()
107
trigger_number = fragment.get_trigger_number()
108
109
if
fragment_data_size == 0:
110
self.
_num_empty
+= 1
111
if
self.
_verbosity
>= 1:
112
print(
113
self.
_FAIL_TEXT_COLOR
114
+ self.
_BOLD_TEXT
115
+
"WARNING: Empty fragment. Returning empty array."
116
+ self.
_END_TEXT_COLOR
117
)
118
print(
"="
*60)
119
return
np.array([], dtype=self.
ta_dt
)
120
121
ta_idx = 0
# Debugging output.
122
byte_idx = 0
# Variable TA sizing, must do while loop.
123
while
byte_idx < fragment_data_size:
124
if
self.
_verbosity
>= 2:
125
print(f
"INFO: Fragment Index: {ta_idx}."
)
126
ta_idx += 1
127
print(f
"INFO: Byte Index / Frag Size: {byte_idx} / {fragment_data_size}"
)
128
129
# Read TA data
130
ta_datum = trgdataformats.TriggerActivity(fragment.get_data(byte_idx))
131
np_ta_datum = np.array([(
132
ta_datum.data.adc_integral,
133
ta_datum.data.adc_peak,
134
ta_datum.data.algorithm,
135
ta_datum.data.channel_end,
136
ta_datum.data.channel_peak,
137
ta_datum.data.channel_start,
138
np.uint16(ta_datum.data.detid),
139
ta_datum.n_inputs(),
140
ta_datum.data.time_activity,
141
ta_datum.data.time_end,
142
ta_datum.data.time_peak,
143
ta_datum.data.time_start,
144
ta_datum.data.type,
145
np.uint16(ta_datum.data.version),
146
trigger_number)],
147
dtype=self.
ta_dt
)
148
149
self.
ta_data
= np.hstack((self.
ta_data
, np_ta_datum))
150
151
byte_idx += ta_datum.sizeof()
152
if
self.
_verbosity
>= 2:
153
print(f
"INFO: Upcoming byte index: {byte_idx}"
)
154
155
# Process TP data
156
np_tp_data = np.zeros(np_ta_datum[
'num_tps'
], dtype=self.
tp_dt
)
157
for
tp_idx, tp
in
enumerate(ta_datum):
158
np_tp_data[tp_idx] = np.array([(
159
tp.adc_integral,
160
tp.adc_peak,
161
tp.channel,
162
tp.detid,
163
tp.flag,
164
tp.samples_over_threshold,
165
tp.samples_to_peak,
166
tp.time_start,
167
tp.version)],
168
dtype=self.
tp_dt
)
169
self.
tp_data
.append(np_tp_data)
# Jagged array
170
171
if
self.
_verbosity
>= 2:
172
print(
"INFO: Finished reading."
)
173
print(
"="
*60)
174
return
np_ta_datum
175
176
def
clear_data
(self) -> None:
177
self.
ta_data
= np.array([], dtype=self.
ta_dt
)
178
self.
tp_data
= []
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.TAReader.TAReader
Definition
TAReader.py:13
trgtools.TAReader.TAReader.read_fragment
NDArray read_fragment(self, str fragment_path)
Definition
TAReader.py:95
trgtools.TAReader.TAReader.ta_dt
ta_dt
Definition
TAReader.py:27
trgtools.TAReader.TAReader.clear_data
None clear_data(self)
Definition
TAReader.py:176
trgtools.TAReader.TAReader.__getitem__
NDArray[ta_dt] __getitem__(self, int|str key)
Definition
TAReader.py:73
trgtools.TAReader.TAReader.tp_data
list tp_data
Definition
TAReader.py:70
trgtools.TAReader.TAReader.__init__
None __init__(self, str filename, int verbosity=0, bool batch_mode=False)
Definition
TAReader.py:58
trgtools.TAReader.TAReader.__len__
int __len__(self)
Definition
TAReader.py:80
trgtools.TAReader.TAReader._filter_fragment_paths
None _filter_fragment_paths(self)
Definition
TAReader.py:83
trgtools.TAReader.TAReader.__setitem__
None __setitem__(self, int|str key, NDArray[ta_dt] value)
Definition
TAReader.py:76
trgtools.TAReader.TAReader.tp_dt
tp_dt
Definition
TAReader.py:46
trgtools.TAReader.TAReader.ta_data
ta_data
Definition
TAReader.py:69
Generated on
for DUNE-DAQ by
1.17.0