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