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