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
122 byte_idx = 0
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
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
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)
170
171 if self._verbosity >= 2:
172 print("INFO: Finished reading.")
173 print("="*60)
174 return np_ta_datum
175