163 def check_fragments(self, k_nrecords):
164 if self.record_type != "TriggerRecord":
165 print("Check fragments only works on TriggerRecord data.")
166 else:
167 report = []
168 n = 0
169 for i in self.records:
170 if n >= k_nrecords and k_nrecords > 0:
171 break
172 dset = self.h5file[i.header]
173 data_array = bytearray(dset[:])
174 (trh_version, ) = struct.unpack('<I', data_array[4:8])
175 if trh_version != TRIGGER_RECORD_HEADER_VERSION:
176 raise ValueError(f"Invalid TriggerRecord Header format version: expected {TRIGGER_RECORD_HEADER_VERSION} and found {trh_version}")
177 (h, j, k) = struct.unpack('<3Q', data_array[8:32])
178 (s, ) = struct.unpack('<H', data_array[48:50])
179 nf = len(i.fragments)
180 empty_frag_count = 0
181 for frag in i.fragments:
182 frag_dset = self.h5file[frag]
183 frag_data = bytearray(frag_dset[:])
184 (frag_version, ) = struct.unpack('<I', frag_data[4:8])
185 if frag_version != FRAGMENT_HEADER_VERSION:
186 raise ValueError(f"Invalid Fragment Header format version: expected {FRAGMENT_HEADER_VERSION} and found {frag_version}")
187 (frag_size, ) = struct.unpack('<Q', frag_data[8:16])
188 if frag_size <= 72:
189 empty_frag_count += 1
190 report.append((h, s, k, nf, nf - k, empty_frag_count))
191 n += 1
192 print("{:-^80}".format("Column Definitions"))
193 print("i: Trigger record number;")
194 print("s: Sequence number;")
195 print("N_frag_exp: expected no. of fragments stored in header;")
196 print("N_frag_act: no. of fragments written in trigger record;")
197 print("N_diff: N_frag_act - N_frag_exp")
198 print("N_frag_empty: no. of empty fragments (size <= 72)")
199 print("{:-^80}".format("Column Definitions"))
200 print("{:^10}{:^10}{:^15}{:^15}{:^10}{:^12}".format(
201 "i", "s", "N_frag_exp", "N_frag_act", "N_diff", "N_frag_empty"))
202 for i in range(len(report)):
203 print("{:^10}{:^10}{:^15}{:^15}{:^10}{:^12}".format(*report[i]))
204 return
205