Belle II Software  release-05-01-25
vxdCdcMergerValidationGenerateSample.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """
5 <header>
6  <contact>software-tracking@belle2.org</contact>
7  <output>VxdCdcValidationHarvested.root</output>
8  <input>EvtGenSimNoBkg.root</input>
9  <description>This module generates events for the V0 validation.</description>
10 </header>
11 """
12 
13 import basf2
14 from ROOT import Belle2
15 from simulation import add_simulation
16 from tracking import add_tracking_reconstruction
17 from tracking.harvest.harvesting import HarvestingModule
18 from tracking.harvest import refiners
19 from tracking.validation import tracking_efficiency_helpers
20 import numpy
21 
22 
23 def run():
24  """
25  Generate and reconstruct Generic BBar
26  and evaluate the merger performance
27  """
28  basf2.set_random_seed(1337)
29  path = basf2.create_path()
30 
31  rootinput = basf2.register_module('RootInput')
32  rootinput.param('inputFileName', "../EvtGenSimNoBkg.root")
33  path.add_module(rootinput)
34  path.add_module('Gearbox')
35 
36  add_tracking_reconstruction(path, components=["CDC", "SVD"], pruneTracks=False, prune_temporary_tracks=False)
37 
38  # add additional matching for vxd and cdc only tracks here
39 
40  # for VXD only track
41  mctrackmatcher_vxd = basf2.register_module('MCRecoTracksMatcher')
42  mctrackmatcher_vxd.param('mcRecoTracksStoreArrayName', 'MCRecoTracks')
43  mctrackmatcher_vxd.param('prRecoTracksStoreArrayName', 'SVDRecoTracks')
44  mctrackmatcher_vxd.param('UseCDCHits', False)
45  path.add_module(mctrackmatcher_vxd)
46 
47  # for CDC only tracks
48  mctrackmatcher_cdc = basf2.register_module('MCRecoTracksMatcher')
49  mctrackmatcher_cdc.param('mcRecoTracksStoreArrayName', 'MCRecoTracks')
50  mctrackmatcher_cdc.param('prRecoTracksStoreArrayName', 'CDCRecoTracks')
51  mctrackmatcher_cdc.param('UsePXDHits', False)
52  mctrackmatcher_cdc.param('UseSVDHits', False)
53  path.add_module(mctrackmatcher_cdc)
54 
55  path.add_module(VxdCdcMergerHarvester())
56 
57  basf2.process(path)
58  print(basf2.statistics)
59 
60 
62  """
63  Harvester module to extract useful information from VXD-CDC track merging.
64  """
65 
66  def __init__(self):
67  """
68  Init harvester
69  """
70  HarvestingModule.__init__(self, foreach="MCParticles", output_file_name="../VxdCdcValidationHarvested.root")
71 
72 
74 
75  self.mc_track_matcher_cdc = Belle2.TrackMatchLookUp("MCRecoTracks", "CDCRecoTracks")
76 
77  self.mc_track_matcher_vxd = Belle2.TrackMatchLookUp("MCRecoTracks", "SVDRecoTracks")
78 
79  def pick(self, mc_particle):
80  """Select the MCParticle if it is related to an MCRecoTrack"""
81  # mc_track = mc_particle.getRelated("MCRecoTracks")
82  # return mc_track is not None
83  mc_track = mc_particle.getRelatedFrom("MCRecoTracks")
84  if mc_track:
85  return True
86  else:
87  return False
88 
89  def peel(self, mc_particle):
90  """
91  Extract the information.
92  """
93 
94  # mc is a genfit::TrackCand
95 
96  mc_track = mc_particle.getRelatedFrom("MCRecoTracks")
97 
98  mc_nhits = mc_track.getNumberOfTotalHits()
99  mc_pt = mc_particle.getMomentum().Pt()
100  mc_theta = mc_particle.getMomentum().Theta()
101 
102  reco_tracks = Belle2.PyStoreArray('RecoTracks')
103 
104  this_best_track_cdc = self.mc_track_matcher_cdc.getRelatedPRRecoTrack(mc_track)
105  this_best_track_vxd = self.mc_track_matcher_vxd.getRelatedPRRecoTrack(mc_track)
106 
107  # here we know, the above tracks should have been merged because they stem
108  # from the same MC Track. Have they?
109 
110  this_best_track_merged = self.mc_track_matcher.getRelatedPRRecoTrack(mc_track)
111 
112  good_merge = False
113  vxd_hits = 0
114  cdc_hits = 0
115 
116  merged_hits = 0
117 
118  if this_best_track_merged:
119  if this_best_track_cdc:
120  cdc_hits = this_best_track_cdc.getNumberOfTotalHits()
121  if this_best_track_vxd:
122  vxd_hits = this_best_track_vxd.getNumberOfTotalHits()
123 
124  merged_hits = vxd_hits + cdc_hits
125  good_merge = merged_hits == this_best_track_merged.getNumberOfTotalHits()
126 
127  return {
128  "MC_PT": mc_pt,
129  "MC_THETA": mc_theta,
130  "MC_NHITS": mc_nhits,
131  "PR_NHITS": merged_hits,
132  "PR_CDC_NHITS": cdc_hits,
133  "PR_VXD_NHITS": vxd_hits,
134  "GOOD_MERGE": good_merge
135  }
136 
137 
139  save_tree = refiners.SaveTreeRefiner()
140 
141 
142 if __name__ == '__main__':
143  run()
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester
Definition: vxdCdcMergerValidationGenerateSample.py:61
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.pick
def pick(self, mc_particle)
Definition: vxdCdcMergerValidationGenerateSample.py:79
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.__init__
def __init__(self)
Definition: vxdCdcMergerValidationGenerateSample.py:66
tracking.harvest
Definition: __init__.py:1
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
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.mc_track_matcher
mc_track_matcher
matcher used for the final MCTrack list
Definition: vxdCdcMergerValidationGenerateSample.py:73
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
tracking.validation
Definition: __init__.py:1
tracking.harvest.harvesting.HarvestingModule
Definition: harvesting.py:86
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.peel
def peel(self, mc_particle)
Definition: vxdCdcMergerValidationGenerateSample.py:89
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.mc_track_matcher_cdc
mc_track_matcher_cdc
matcher used for the MCTracks from the CDC
Definition: vxdCdcMergerValidationGenerateSample.py:75
vxdCdcMergerValidationGenerateSample.VxdCdcMergerHarvester.mc_track_matcher_vxd
mc_track_matcher_vxd
matcher used for the MCTracks from the VXD
Definition: vxdCdcMergerValidationGenerateSample.py:77