4 from ROOT
import Belle2
10 """Gather the MC VXD-CDC-merger results into ROOT file"""
16 output_file_name (str): name of the output ROOT file
18 HarvestingModule.__init__(self, foreach=
"MCParticles", output_file_name=output_file_name)
25 def pick(self, mc_particle):
26 """Return true if the MCParticle has a related MCRecoTrack"""
29 mc_track = mc_particle.getRelatedFrom(
"MCRecoTracks")
35 def peel(self, mc_particle):
36 """Collect information related to the MCParticle into a dictionary"""
37 mc_track = mc_particle.getRelatedFrom(
"MCRecoTracks")
41 result = peelers.peel_mc_particle(mc_particle)
42 result.update(peelers.peel_reco_track_hit_content(mc_track))
43 result.update(peelers.peel_event_info(event_info))
45 result[
"mc_store_array_number"] = mc_track.getArrayIndex()
50 result.update(peelers.peel_reco_track_hit_content(this_best_track_cdc, key=
"cdc_{part_name}"))
51 result.update(peelers.peel_reco_track_seed(this_best_track_cdc, key=
"cdc_{part_name}"))
52 if this_best_track_cdc:
53 result[
"cdc_store_array_number"] = this_best_track_cdc.getArrayIndex()
54 result[
"cdc_was_fitted"] = this_best_track_cdc.wasFitSuccessful()
56 result[
"cdc_store_array_number"] = -1
57 result[
"cdc_was_fitted"] = -1
59 result.update(peelers.peel_reco_track_hit_content(this_best_track_vxd, key=
"vxd_{part_name}"))
60 result.update(peelers.peel_reco_track_seed(this_best_track_vxd, key=
"vxd_{part_name}"))
61 if this_best_track_vxd:
62 result[
"vxd_store_array_number"] = this_best_track_vxd.getArrayIndex()
63 result[
"vxd_was_fitted"] = this_best_track_vxd.wasFitSuccessful()
65 result[
"vxd_store_array_number"] = -1
66 result[
"vxd_was_fitted"] = -1
68 if this_best_track_cdc:
69 merged_vxd_track = this_best_track_cdc.getRelated(
"SVDRecoTracks")
71 merged_vxd_track =
None
72 if this_best_track_vxd:
73 merged_cdc_track = this_best_track_vxd.getRelated(
"CDCRecoTracks")
75 merged_cdc_track =
None
77 flag_incorrect_not_merged =
False
78 flag_correct_merged =
False
79 flag_not_found =
False
80 flag_correct_not_merged_cdcmissing =
False
81 flag_incorrect_merged_cdcwrong_although_not_there =
False
82 flag_correct_not_merged_vxdmissing =
False
83 flag_incorrect_merged_vxdwrong_although_not_there =
False
85 flag_incorrect_merged =
False
90 if not this_best_track_cdc
and not this_best_track_vxd:
95 elif not this_best_track_cdc:
97 if not merged_cdc_track:
99 flag_correct_not_merged_cdcmissing =
True
103 flag_incorrect_merged_cdcwrong_although_not_there =
True
106 elif not this_best_track_vxd:
108 if not merged_vxd_track:
110 flag_correct_not_merged_vxdmissing =
True
114 flag_incorrect_merged_vxdwrong_although_not_there =
True
117 elif not merged_vxd_track
and not merged_cdc_track:
119 flag_incorrect_not_merged =
True
122 elif this_best_track_cdc == merged_cdc_track
and this_best_track_vxd == merged_vxd_track:
124 flag_correct_merged =
True
129 if merged_cdc_track != this_best_track_cdc:
130 flag_incorrect_merged =
True
136 "flag_correct_not_merged_cdcmissing": flag_correct_not_merged_cdcmissing,
137 "flag_correct_not_merged_vxdmissing": flag_correct_not_merged_vxdmissing,
138 "flag_correct_merged": flag_correct_merged,
139 "flag_incorrect_not_merged": flag_incorrect_not_merged,
140 "flag_incorrect_merged": flag_incorrect_merged,
141 "flag_incorrect_merged_cdcwrong_although_not_there": flag_incorrect_merged_cdcwrong_although_not_there,
142 "flag_incorrect_merged_vxdwrong_although_not_there": flag_incorrect_merged_vxdwrong_although_not_there,
143 "flag_not_found": flag_not_found,
149 save_tree = refiners.SaveTreeRefiner()
153 def peel_matching_information(pr_track_and_mc_track_matcher, key="{part_name}"):
154 pr_track, mc_track_matcher = pr_track_and_mc_track_matcher
156 is_matched = mc_track_matcher.isMatchedPRRecoTrack(pr_track)
157 is_clone = mc_track_matcher.isClonePRRecoTrack(pr_track)
158 is_background = mc_track_matcher.isBackgroundPRRecoTrack(pr_track)
159 is_ghost = mc_track_matcher.isGhostPRRecoTrack(pr_track)
162 is_matched=is_matched,
164 is_background=is_background,
166 is_clone_or_match=(is_matched
or is_clone),
167 is_fake=
not (is_matched
or is_clone),
168 hit_purity=mc_track_matcher.getRelatedPurity(pr_track),
177 is_clone_or_match=nan,
184 """Gather the reconstructed VXD-CDC-merger results into ROOT file"""
185 def __init__(self, foreach, others, output_file_name):
189 others (str): name of other-tracks collection related to the reconstructed tracks
190 output_file_name (str): name of the output ROOT file
192 super().
__init__(foreach, output_file_name)
203 """Collect information related to the reconstructed track into a dictionary"""
206 result = peelers.peel_reco_track_hit_content(pr_track)
207 result.update(peelers.peel_reco_track_seed(pr_track))
208 result.update(peelers.peel_event_info(event_info))
210 result[
"store_array_number"] = pr_track.getArrayIndex()
215 result[
"mc_store_array_number"] = mc_track.getArrayIndex()
217 result[
"mc_store_array_number"] = -1
221 matched_track = pr_track.getRelated(self.
others)
223 result.update(peel_matching_information((matched_track, self.
mc_track_matcher_other), key=
"other_{part_name}"))
226 result[
"matched_store_array_number"] = matched_track.getArrayIndex()
228 result[
"matched_store_array_number"] = -1
230 result[
"number_of_matches"] = pr_track.getRelationsWith(self.
others).size()
235 save_tree = refiners.SaveTreeRefiner()