4 ROOT.gSystem.Load(
"libtracking")
5 from ROOT
import Belle2
17 """Module to perform event-by-event tracking validation."""
19 """ Expert level behavior:
20 expert_level <= default_expert_level: all figures and plots from this module except tree entries
21 expert_level > default_expert_level: everything including tree entries
25 default_expert_level = 10
30 output_file_name=None,
31 reco_tracks_name='RecoTracks',
32 mc_reco_tracks_name='MCRecoTracks',
36 output_file_name = output_file_name
or name +
'TrackingValidation.root'
38 super().
__init__(foreach=
"EventMetaData",
40 output_file_name=output_file_name,
42 expert_level=expert_level)
52 """Initialization signal at the start of the event processing"""
58 def pick(self, event_meta_data=None):
62 def peel(self, event_meta_data=None):
63 """Peel information from the event"""
74 n_mc_particles = mc_particles.getEntries()
79 n_mc_reco_tracks = mc_reco_tracks.getEntries()
83 n_reco_tracks = reco_tracks.getEntries()
86 all_mc_tracks_det_hit_ids = set()
87 n_matched_mc_reco_tracks = 0
88 n_merged_mc_reco_tracks = 0
89 n_missing_mc_reco_tracks = 0
90 for mc_reco_track
in mc_reco_tracks:
91 mc_reco_track_det_hit_ids = utilities.get_det_hit_ids(mc_reco_track)
92 all_mc_tracks_det_hit_ids.update(mc_reco_track_det_hit_ids)
94 is_matched = track_match_look_up.isMatchedMCRecoTrack(mc_reco_track)
95 is_merged = track_match_look_up.isMergedMCRecoTrack(mc_reco_track)
96 is_missing = track_match_look_up.isMissingMCRecoTrack(mc_reco_track)
99 n_matched_mc_reco_tracks += 1
101 n_merged_mc_reco_tracks += 1
103 n_missing_mc_reco_tracks += 1
106 n_matched_reco_tracks = 0
107 n_clone_reco_tracks = 0
108 n_background_reco_tracks = 0
109 n_ghost_reco_tracks = 0
111 all_tracks_det_hit_ids = set()
113 for reco_track
in reco_tracks:
114 is_matched = track_match_look_up.isMatchedPRRecoTrack(reco_track)
115 is_clone = track_match_look_up.isClonePRRecoTrack(reco_track)
116 is_background = track_match_look_up.isBackgroundPRRecoTrack(reco_track)
117 is_ghost = track_match_look_up.isGhostPRRecoTrack(reco_track)
120 n_matched_reco_tracks += 1
122 n_clone_reco_tracks += 1
124 n_background_reco_tracks += 1
126 n_ghost_reco_tracks += 1
128 reco_track_det_hit_ids = utilities.get_det_hit_ids(reco_track)
130 all_tracks_det_hit_ids.update(reco_track_det_hit_ids)
131 if is_matched
or is_clone:
134 mc_reco_track_det_hit_ids = utilities.get_det_hit_ids(mc_reco_track)
135 n_matched_hits += len(reco_track_det_hit_ids & mc_reco_track_det_hit_ids)
138 n_mc_particles=n_mc_particles,
139 n_mc_reco_tracks=n_mc_reco_tracks,
140 n_reco_tracks=n_reco_tracks,
142 n_matched_mc_reco_tracks=n_matched_mc_reco_tracks,
143 n_merged_mc_reco_tracks=n_merged_mc_reco_tracks,
144 n_missing_mc_reco_tracks=n_missing_mc_reco_tracks,
146 n_matched_reco_tracks=n_matched_reco_tracks,
147 n_clone_reco_tracks=n_clone_reco_tracks,
148 n_background_reco_tracks=n_background_reco_tracks,
149 n_ghost_reco_tracks=n_ghost_reco_tracks,
151 n_cdc_hits=cdc_hits.getEntries(),
152 n_all_mc_track_hits=len(all_mc_tracks_det_hit_ids),
153 n_all_track_hits=len(all_tracks_det_hit_ids),
154 n_found_hits=len(all_mc_tracks_det_hit_ids & all_tracks_det_hit_ids),
155 n_matched_hits=n_matched_hits
162 save_tree = refiners.save_tree(folder_name=
"event_tree",
164 above_expert_level=default_expert_level)
167 save_clone_rate = refiners.save_fom(
168 name=
"{module.id}_hit_figures_of_merit",
169 title=
"Hit sums in {module.title}",
173 "n_all_mc_track_hits",