94 def read_fragment(self, fragment_path: str) -> NDArray:
95 """
96 Read from the given data fragment path.
97
98 Returns a np.ndarray of the first TA that was read and appends all TAs in the fragment to :self.ta_data:.
99 """
100 if self._verbosity >= 2:
101 print("="*60)
102 print(f"INFO: Reading from the path\n{fragment_path}")
103
104 fragment = self._h5_file.get_frag(fragment_path)
105 fragment_data_size = fragment.get_data_size()
106
107 if fragment_data_size == 0:
108 self._num_empty += 1
109 if self._verbosity >= 1:
110 print(
111 self._FAIL_TEXT_COLOR
112 + self._BOLD_TEXT
113 + "WARNING: Empty fragment. Returning empty array."
114 + self._END_TEXT_COLOR
115 )
116 print("="*60)
117 return np.array([], dtype=self.ta_dt)
118
119 ta_idx = 0
120 byte_idx = 0
121 while byte_idx < fragment_data_size:
122 if self._verbosity >= 2:
123 print(f"INFO: Fragment Index: {ta_idx}.")
124 ta_idx += 1
125 print(f"INFO: Byte Index / Frag Size: {byte_idx} / {fragment_data_size}")
126
127
128 ta_datum = trgdataformats.TriggerActivity(fragment.get_data(byte_idx))
129 np_ta_datum = np.array([(
130 ta_datum.data.adc_integral,
131 ta_datum.data.adc_peak,
132 ta_datum.data.algorithm,
133 ta_datum.data.channel_end,
134 ta_datum.data.channel_peak,
135 ta_datum.data.channel_start,
136 np.uint16(ta_datum.data.detid),
137 ta_datum.n_inputs(),
138 ta_datum.data.time_activity,
139 ta_datum.data.time_end,
140 ta_datum.data.time_peak,
141 ta_datum.data.time_start,
142 ta_datum.data.type,
143 np.uint16(ta_datum.data.version))],
144 dtype=self.ta_dt)
145
146 self.ta_data = np.hstack((self.ta_data, np_ta_datum))
147
148 byte_idx += ta_datum.sizeof()
149 if self._verbosity >= 2:
150 print(f"INFO: Upcoming byte index: {byte_idx}")
151
152
153 np_tp_data = np.zeros(np_ta_datum['num_tps'], dtype=self.tp_dt)
154 for tp_idx, tp in enumerate(ta_datum):
155 np_tp_data[tp_idx] = np.array([(
156 tp.adc_integral,
157 tp.adc_peak,
158 tp.channel,
159 tp.detid,
160 tp.flag,
161 tp.samples_over_threshold,
162 tp.samples_to_peak,
163 tp.time_start,
164 tp.version)],
165 dtype=self.tp_dt)
166 self.tp_data.append(np_tp_data)
167
168 if self._verbosity >= 2:
169 print("INFO: Finished reading.")
170 print("="*60)
171 return np_ta_datum
172