Belle II Software  release-08-00-04
fullTrackingTableValidationCreateData.py
1 #!/usr/bin/env python3
2 
3 
10 
11 """
12 <header>
13  <contact>software-tracking@belle2.org</contact>
14  <output>matching_validation.root</output>
15  <input>EvtGenSim.root</input>
16  <description>This module generates events for the validation using the full tracking with a tabular output.</description>
17 </header>
18 """
19 import basf2
20 from ROOT import Belle2
21 
22 import tracking
23 from tracking.harvest.peelers import peel_mc_particle, peel_reco_track_hit_content
24 
25 from tracking.harvest.harvesting import HarvestingModule
26 from tracking.harvest import refiners
27 
28 
30  """
31  Harvester module to extract the information, if a MCTrack was found by the CDC
32  and/or the VXD tracking reconstruction.
33  """
34 
35  def __init__(self, output_file_name):
36  """
37  Init harvester
38  """
39  HarvestingModule.__init__(self, foreach="MCRecoTracks", output_file_name=output_file_name)
40 
41 
42  self.mc_track_matcher_cdcmc_track_matcher_cdc = Belle2.TrackMatchLookUp("MCRecoTracks", "CDCRecoTracks")
43 
44  self.mc_track_matcher_vxdmc_track_matcher_vxd = Belle2.TrackMatchLookUp("MCRecoTracks", "SVDRecoTracks")
45 
46  self.mc_track_matchermc_track_matcher = Belle2.TrackMatchLookUp("MCRecoTracks", "RecoTracks")
47 
48  self.fitted_mc_track_matcherfitted_mc_track_matcher = Belle2.TrackMatchLookUp("MCRecoTracks", "FittedRecoTracks")
49 
50  def peel(self, mc_track):
51  """
52  Extract the information.
53  """
54  this_best_track_cdc = self.mc_track_matcher_cdcmc_track_matcher_cdc.getAnyChargeMatchedPRRecoTrack(mc_track)
55  this_best_track_vxd = self.mc_track_matcher_vxdmc_track_matcher_vxd.getAnyChargeMatchedPRRecoTrack(mc_track)
56  # reco_track = self.mc_track_matcher.getAnyChargeMatchedPRRecoTrack(mc_track)
57 
58  mc_particle = mc_track.getRelated("MCParticles")
59 
60  return_dict = {
61  "vxd_was_found": bool(this_best_track_vxd),
62  "cdc_was_found": bool(this_best_track_cdc),
63  "cdc_has_related": False,
64  "vxd_has_related": False,
65  "both_related": False,
66  }
67 
68  if this_best_track_vxd and this_best_track_cdc:
69  return_dict["both_related"] = this_best_track_cdc.getRelated("VXDRecoTracks") == this_best_track_vxd
70 
71  if this_best_track_vxd:
72  return_dict["vxd_has_related"] = bool(this_best_track_vxd.getRelated("CDCRecoTracks"))
73  if this_best_track_cdc:
74  return_dict["cdc_has_related"] = bool(this_best_track_cdc.getRelated("VXDRecoTracks"))
75 
76  return_dict.update(peel_reco_track_hit_content(mc_track))
77  return_dict.update(peel_mc_particle(mc_particle))
78 
79  return_dict.update(dict(
80  is_matched=self.mc_track_matchermc_track_matcher.isAnyChargeMatchedMCRecoTrack(mc_track),
81  is_merged=self.mc_track_matchermc_track_matcher.isAnyChargeMergedMCRecoTrack(mc_track),
82  is_missing=self.mc_track_matchermc_track_matcher.isMissingMCRecoTrack(mc_track),
83  hit_efficiency=self.mc_track_matchermc_track_matcher.getRelatedEfficiency(mc_track),
84  ))
85 
86  return_dict.update(dict(
87  fitted_is_matched=self.fitted_mc_track_matcherfitted_mc_track_matcher.isAnyChargeMatchedMCRecoTrack(mc_track),
88  fitted_is_merged=self.fitted_mc_track_matcherfitted_mc_track_matcher.isAnyChargeMergedMCRecoTrack(mc_track),
89  fitted_is_missing=self.fitted_mc_track_matcherfitted_mc_track_matcher.isMissingMCRecoTrack(mc_track),
90  fitted_hit_efficiency=self.fitted_mc_track_matcherfitted_mc_track_matcher.getRelatedEfficiency(mc_track),
91  ))
92 
93  return return_dict
94 
95 
97  save_tree = refiners.SaveTreeRefiner()
98 
99 
100 def run():
101  path = basf2.create_path()
102 
103  # Read in the pre generated events
104  path.add_module('RootInput', inputFileName='../EvtGenSim.root')
105  path.add_module("Gearbox")
106 
107  # Add the tracking reconstruction and store the fitted RecoTracks elsewhere
108  tracking.add_tracking_reconstruction(path, prune_temporary_tracks=False, components=["SVD", "CDC"])
109  path.add_module("FittedTracksStorer", inputRecoTracksStoreArrayName="RecoTracks",
110  outputRecoTracksStoreArrayName="FittedRecoTracks")
111 
112  # Also do a matching for all RecoTracks in sub detectors
113  path.add_module(
114  "MCRecoTracksMatcher",
115  UsePXDHits=False,
116  UseSVDHits=False,
117  UseCDCHits=True,
118  mcRecoTracksStoreArrayName="MCRecoTracks",
119  prRecoTracksStoreArrayName="CDCRecoTracks")
120  path.add_module(
121  "MCRecoTracksMatcher",
122  UsePXDHits=True,
123  UseSVDHits=True,
124  UseCDCHits=False,
125  mcRecoTracksStoreArrayName="MCRecoTracks",
126  prRecoTracksStoreArrayName="SVDRecoTracks")
127 
128  path.add_module(
129  "MCRecoTracksMatcher",
130  UsePXDHits=True,
131  UseSVDHits=True,
132  UseCDCHits=True,
133  mcRecoTracksStoreArrayName="MCRecoTracks",
134  prRecoTracksStoreArrayName="FittedRecoTracks")
135 
136  # Gather the results into ROOT files
137  path.add_module(VxdCdcPartFinderHarvester("../matching_validation.root"))
138 
139  path.add_module("ProgressBar")
140  basf2.process(path)
141  print(basf2.statistics)
142 
143 
144 if __name__ == "__main__":
145  run()
Class to provide convenient methods to look up matching information between pattern recognition and M...