Skip to content

Commit f24b6ec

Browse files
committed
catch runtime errors
1 parent 30f795f commit f24b6ec

1 file changed

Lines changed: 41 additions & 9 deletions

File tree

src/graphnet/data/extractors/icecube/i3calorimetry.py

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,26 @@ def total_track_energy(
168168

169169
MMCTrackList = frame[self.mmctracklist]
170170
if self.daughters:
171-
MMCTrackList = [
172-
track
173-
for track in MMCTrackList
174-
if frame[self.mctree].get_primary(track.GetI3Particle())
175-
in primaries
176-
]
177-
MMCTrackList = simclasses.I3MMCTrackList(MMCTrackList)
171+
MMCTrackList_filtered = []
172+
for track in MMCTrackList:
173+
try:
174+
if (
175+
frame[self.mctree].get_primary(track.GetI3Particle())
176+
in primaries
177+
):
178+
MMCTrackList_filtered.append(track)
179+
except RuntimeError as e:
180+
if "particle not found" in str(e):
181+
# log warning with event header
182+
self.warning(
183+
f"Could not find primary for track {track.GetI3Particle()}"
184+
f" in event {frame['I3EventHeader']}: {e}"
185+
)
186+
# continue to next track
187+
else:
188+
raise e
189+
190+
MMCTrackList = simclasses.I3MMCTrackList(MMCTrackList_filtered)
178191

179192
track_list = np.array(
180193
MuonGun.Track.harvest(frame[self.mctree], MMCTrackList)
@@ -202,8 +215,24 @@ def total_track_energy(
202215
continue
203216

204217
# Get the corresponding energies
205-
e0 = track.get_energy(intersections.first)
206-
e1 = track.get_energy(intersections.second)
218+
try:
219+
e0 = track.get_energy(intersections.first)
220+
e1 = track.get_energy(intersections.second)
221+
222+
except RuntimeError as e:
223+
if (
224+
"sum of losses is smaller than "
225+
"energy at last checkpoint" in str(e)
226+
):
227+
hdr = frame["I3EventHeader"]
228+
e.add_note(f"Error in MuonGun track in event {hdr}")
229+
self.warning(
230+
f"Skipping bad track {hdr}: {e}"
231+
f"\nTotal energy of offending particle: {particle.energy}"
232+
)
233+
continue
234+
else:
235+
raise
207236

208237
# Accumulate
209238
e_deposited += e0 - e1
@@ -260,6 +289,9 @@ def total_cascade_energy(
260289
cascade_bool.append(p.is_cascade)
261290
energies.append(p.energy)
262291

292+
if len(energies) == 0:
293+
return 0.0
294+
263295
length = np.array(length_list).astype(float)
264296
length[np.isnan(length)] = 0
265297
pos = np.asarray(pos_list)

0 commit comments

Comments
 (0)