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