Skip to content

Treatment of hull entering tracks that are not found in the MCTree #832

@sevmag

Description

@sevmag

Describe the bug
This bug happens when using the I3Calorimetry Extractor. This extractor counts all energies that are present within a hull around the detector with a specified padding value. The core functionality of this extractor is the get_energies function, which recursively calculates the energy left in this hull.

The problem is the treatment of tracks entering this detector hull from outside (e.g. throughgoing_tracks, etc.).

The following if clause determines the treatment of tracks:

if particle.is_track & (particle.id in track_lookup):

The if statement checks if the event is a track and if it is in the track_lookup, which is a dictionary created by looping through the MMCTrackList and harvesting the tracks with MuonGun. See:

MMCTrackList = frame[self.mmctracklist]
# Filter tracks that are not daughters of the desired
if self.daughters:
temp_MMCTrackList = []
for track in MMCTrackList:
for p in primaries:
if frame[self.mctree].is_in_subtree(
p.id, track.GetI3Particle().id
):
temp_MMCTrackList.append(track)
break
MMCTrackList = temp_MMCTrackList
# Create a lookup dict for the tracks
track_lookup = {}
for track in MuonGun.Track.harvest(
frame[self.mctree], MMCTrackList
):
track_lookup[track.id] = track
e_cascade, e_dep_track, e_ent_track = self.get_energies(
frame, primaries, track_lookup
)

If an event is a track that is not in the track_lookup, we only consider its daughters, here:

else:
(
e_cascade,
e_dep_track,
e_ent_track,
) = tuple(
np.add(
(e_cascade, e_dep_track, e_ent_track),
self.get_energies(
frame,
dataclasses.I3MCTree.get_daughters(
frame[self.mctree], particle
),
track_lookup,
),
)
)

This can happen, e.g. if a track is very far away from the detector. In this case, the track mostly does not cross the boundary of the hull, and it is fine to just look at the daughters.

The problem, however, arises when a track crosses the boundary of the hull but is NOT in the track_lookup. In this case, we cannot get the necessary information that we need--the energy of the track at the entry of the hull--to calculate the desired energy, because the track is not stored in the MMCTrackList or harvestable by MuonGun.

In this case, we should return Nans to mark that for this event, we cannot calculate the correct energy proxies. But currently, we just ignore this and continue on to the children of this track.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions