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