Belle II Software  release-05-01-25
fitValidation.py
1 import basf2
2 import ROOT
3 from ROOT import Belle2
4 
5 from ROOT import gSystem
6 gSystem.Load('libtracking')
7 gSystem.Load('libtracking_trackFindingCDC')
8 
9 from tracking.harvest.harvesting import HarvestingModule
10 from tracking.harvest import refiners
11 import logging
12 import sys
13 
14 from trackfindingcdc.cdcdisplay import CDCSVGDisplayModule
15 
16 
18  """Validate the track fit"""
19 
20  def __init__(
21  self,
22  mc_track_cands_store_array_name,
23  legendre_track_cand_store_array_name,
24  output_file_name):
25  """Constructor"""
26  super(
27  FitValidationModule,
28  self).__init__(
29  foreach=legendre_track_cand_store_array_name,
30  output_file_name=output_file_name)
31 
32 
33  self.mc_track_cands_store_array_name = mc_track_cands_store_array_name
34 
35  self.legendre_track_cand_store_array_name = legendre_track_cand_store_array_name
36 
37 
39 
40  self.fast_fitter = Belle2.TrackFindingCDC.TrackFitter()
41 
42  def prepare(self):
43  """ Initialize the harvester"""
44 
45  self.cdcHits = Belle2.PyStoreArray("CDCHits")
46  return HarvestingModule.prepare(self)
47 
48  def peel(self, legendre_track_cand):
49  """Aggregate the track and MC information for track-fit validation"""
50 
51  cdc_hit_store_array = self.cdcHits
52 
53  observations_variance = Belle2.TrackFindingCDC.CDCObservations2D()
55  hits = ROOT.std.vector("Belle2::TrackFindingCDC::TrackHit*")()
56 
57  cdc_hit_ids = legendre_track_cand.getHitIDs(Belle2.Const.CDC)
58  for cdc_hit_id in cdc_hit_ids:
59  cdc_hit = cdc_hit_store_array[cdc_hit_id]
60 
61  # We will only use the axial hits here as the FastFit can only process axial hits too
62  if cdc_hit.getISuperLayer() % 2 == 0:
63  cdc_wire_hit = Belle2.TrackFindingCDC.CDCWireHit(cdc_hit)
64 
65  wireRefPos2D = cdc_wire_hit.getRefPos2D()
66  drift_length = cdc_wire_hit.getRefDriftLength()
67  observations.append(wireRefPos2D.x(), wireRefPos2D.y(), 0, 1 / abs(drift_length))
68  hits.push_back(Belle2.TrackFindingCDC.TrackHit(cdc_wire_hit))
69 
70  # Viktors method
71  track_par = ROOT.std.pair("double, double")()
72  ref_point = ROOT.std.pair("double, double")()
73  # Careful: viktors result is a reduced chi2
74  viktor_chi2 = self.fast_fitter.fitTrackCandidateFast(hits, track_par, ref_point, False) * (hits.size() - 4)
75 
76  # Riemann without drift variances
78  self.circle_fitter.update(trajectory2D, observations)
79  riemann_chi2 = trajectory2D.getChi2()
80 
81  return_dict = dict(
82  riemann_chi2=riemann_chi2,
83  viktor_chi2=viktor_chi2,
84  )
85 
86  return return_dict
87 
88 
90  save_tree = refiners.save_tree(folder_name="tree")
91 
92 
93 from tracking.run.event_generation import StandardEventGenerationRun
94 from tracking import modules
95 
96 
98  """Read generated events or generate new events, simulate, fit the tracks and validate"""
99  def create_path(self):
100  """Create and populate the basf2 path"""
101 
102  main_path = super(FitValidation, self).create_path()
103 
104  main_path.add_module("TFCDC_WireHitPreparer")
105 
106  main_path.add_module(modules.CDCMCFinder())
107 
108  main_path.add_module(FitValidationModule(mc_track_cands_store_array_name="MCTrackCands",
109  legendre_track_cand_store_array_name="MCTrackCands",
110  output_file_name="fit_validation.root"))
111 
112  return main_path
113 
114 
115 def main():
116  run = FitValidation()
117  run.configure_and_execute_from_commandline()
118 
119 if __name__ == "__main__":
120  logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='%(levelname)s:%(message)s')
121  main()
fitValidation.FitValidation
Definition: fitValidation.py:97
fitValidation.FitValidationModule.mc_track_cands_store_array_name
mc_track_cands_store_array_name
cached name of the MCTrackCands StoreArray
Definition: fitValidation.py:29
fitValidation.FitValidation.create_path
def create_path(self)
Definition: fitValidation.py:99
tracking.harvest
Definition: __init__.py:1
fitValidation.FitValidationModule.prepare
def prepare(self)
Definition: fitValidation.py:42
tracking.harvest.harvesting
Definition: harvesting.py:1
trackfindingcdc.cdcdisplay
Definition: __init__.py:1
Belle2::TrackFindingCDC::CDCTrajectory2D
Particle trajectory as it is seen in xy projection represented as a circle.
Definition: CDCTrajectory2D.h:46
tracking.run.event_generation.StandardEventGenerationRun
Definition: event_generation.py:188
main
int main(int argc, char **argv)
Run all tests.
Definition: test_main.cc:77
Belle2::TrackFindingCDC::CDCObservations2D
Class serving as a storage of observed drift circles to present to the Riemann fitter.
Definition: CDCObservations2D.h:53
fitValidation.FitValidationModule.fast_fitter
fast_fitter
Use the standard track fitter for speed.
Definition: fitValidation.py:36
fitValidation.FitValidationModule
Definition: fitValidation.py:17
fitValidation.FitValidationModule.__init__
def __init__(self, mc_track_cands_store_array_name, legendre_track_cand_store_array_name, output_file_name)
Definition: fitValidation.py:20
fitValidation.FitValidationModule.legendre_track_cand_store_array_name
legendre_track_cand_store_array_name
cached name of the LegendreTrackCands StoreArray
Definition: fitValidation.py:31
fitValidation.FitValidationModule.circle_fitter
circle_fitter
Use the Riemann fitter for circles.
Definition: fitValidation.py:34
tracking.run.event_generation
Definition: event_generation.py:1
Belle2::TrackFindingCDC::CDCRiemannFitter::getFitter
static const CDCRiemannFitter & getFitter()
Static getter for a general Riemann fitter.
Definition: CDCRiemannFitter.cc:22
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
fitValidation.FitValidationModule.peel
def peel(self, legendre_track_cand)
Definition: fitValidation.py:48
Belle2::TrackFindingCDC::CDCWireHit
Class representing a hit wire in the central drift chamber.
Definition: CDCWireHit.h:65
tracking.harvest.harvesting.HarvestingModule
Definition: harvesting.py:86
fitValidation.FitValidationModule.cdcHits
cdcHits
cached name of the CDCHits StoreArray
Definition: fitValidation.py:45