Belle II Software  release-05-02-19
clusterFilterValidation.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import os
5 import sys
6 import math
7 import numpy as np
8 
9 import basf2
10 
11 from ROOT import gSystem
12 gSystem.Load('libtracking')
13 gSystem.Load('libtracking_trackFindingCDC')
14 
15 from ROOT import Belle2 # make Belle2 namespace available
16 from ROOT import std
17 
18 from tracking.utilities import NonstrictChoices
19 from tracking.validation.utilities import prob, is_primary
20 from tracking.validation.plot import ValidationPlot
21 
22 import tracking.harvest.harvesting as harvesting
23 import tracking.harvest.refiners as refiners
24 import tracking.metamodules as metamodules
25 
26 from tracking.run.event_generation import StandardEventGenerationRun
27 from tracking.run.mixins import BrowseTFileOnTerminateRunMixin
28 
29 
30 import logging
31 
32 
33 def get_logger():
34  return logging.getLogger(__name__)
35 
36 
37 CONTACT = "oliver.frost@desy.de"
38 
39 
41  """Prepare and execute a basf2 job to read generated events or generate new events then validate the CDC cluster filter"""
42 
43  cluster_preparation_module = basf2.register_module("TFCDC_ClusterPreparer")
44 
45 
46  py_profile = True
47 
48  output_file_name = "ClusterFilterValidation.root" # Specification for BrowseTFileOnTerminateRunMixin
49 
50  def create_argument_parser(self, **kwds):
51  """Configure the basf2 job script using the translated command-line arguments"""
52  argument_parser = super(ClusterFilterValidationRun, self).create_argument_parser(**kwds)
53  return argument_parser
54 
55  def create_path(self):
56  """
57  Sets up a path that plays back pregenerated events or generates events
58  based on the properties in the base class.
59  """
60  main_path = super(ClusterFilterValidationRun, self).create_path()
61 
62  cluster_preparation_module = self.get_basf2_module(self.cluster_preparation_module)
63  main_path.add_module(cluster_preparation_module)
64 
65  # main_path.add_module(AxialStereoPairFitterModule())
66  validation_module = ClusterFilterValidationModule(output_file_name=self.output_file_name)
67  if self.py_profile:
68  main_path.add_module(metamodules.PyProfilingModule(validation_module))
69  else:
70  main_path.add_module(validation_module)
71 
72  return main_path
73 
74 
75 class ClusterFilterValidationModule(harvesting.HarvestingModule):
76 
77  """Module to collect information about the facet creation cuts and compose validation plots on terminate."""
78 
79  def __init__(self, output_file_name):
80  """Constructor"""
81  super(ClusterFilterValidationModule, self).__init__(foreach="CDCWireHitClusterVector",
82  output_file_name=output_file_name)
83 
85 
86  self.cluster_varset = Belle2.TrackFindingCDC.CDCWireHitClusterVarSet()
87 
88  def initialize(self):
89  """Receive signal at the start of event processing"""
91  super(ClusterFilterValidationModule, self).initialize()
92 
93  def terminate(self):
94  """Receive signal at the end of event processing"""
96  super(ClusterFilterValidationModule, self).terminate()
97 
98  def prepare(self):
99  """Fill the MC hit table"""
100  self.mc_hit_lookup.fill()
101 
102  def pick(self, facet):
103  """Always pick, never reject"""
104  return True
105 
106  def peel(self, cluster):
107  """Extract and store CDC hit and cluster information"""
108 
109  mc_hit_lookup = self.mc_hit_lookup
110 
111  self.cluster_varset.extract(cluster)
112  cluster_crops = self.cluster_varset.getNamedValues()
113  cluster_crops = dict(cluster_crops)
114 
115  # Truth variables
116  n_background = 0
117  for wireHit in list(cluster.items()):
118  cdcHit = wireHit.getHit()
119  if mc_hit_lookup.isBackground(cdcHit):
120  n_background += 1
121 
122  truth_dict = dict(
123  n_background_truth=n_background,
124  background_fraction_truth=1.0 * n_background / cluster.size()
125  )
126 
127  cluster_crops.update(truth_dict)
128  return cluster_crops
129 
130 
132  save_tree = refiners.save_tree(folder_name="tree")
133 
134  save_histograms = refiners.save_histograms(outlier_z_score=5.0,
135  allow_discrete=True,
136  folder_name="histograms")
137 
138 
139 def main():
141  run.configure_and_execute_from_commandline()
142 
143 
144 if __name__ == "__main__":
145  logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='%(levelname)s:%(message)s')
146  main()
clusterFilterValidation.ClusterFilterValidationRun.py_profile
bool py_profile
create a python profile
Definition: clusterFilterValidation.py:46
tracking.run.mixins
Definition: mixins.py:1
clusterFilterValidation.ClusterFilterValidationRun
Definition: clusterFilterValidation.py:40
clusterFilterValidation.ClusterFilterValidationModule.peel
def peel(self, cluster)
Definition: clusterFilterValidation.py:106
tracking.run.mixins.BrowseTFileOnTerminateRunMixin
Definition: mixins.py:50
tracking.harvest.refiners
Definition: refiners.py:1
tracking.utilities
Definition: utilities.py:1
tracking.harvest.harvesting
Definition: harvesting.py:1
clusterFilterValidation.ClusterFilterValidationModule.mc_hit_lookup
mc_hit_lookup
reference to the CDCMCHitlookUp singleton
Definition: clusterFilterValidation.py:84
clusterFilterValidation.ClusterFilterValidationModule.pick
def pick(self, facet)
Definition: clusterFilterValidation.py:102
clusterFilterValidation.ClusterFilterValidationModule.initialize
def initialize(self)
Definition: clusterFilterValidation.py:88
clusterFilterValidation.ClusterFilterValidationModule.terminate
def terminate(self)
Definition: clusterFilterValidation.py:93
clusterFilterValidation.ClusterFilterValidationModule.prepare
def prepare(self)
Definition: clusterFilterValidation.py:98
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
clusterFilterValidation.ClusterFilterValidationRun.create_argument_parser
def create_argument_parser(self, **kwds)
Definition: clusterFilterValidation.py:50
tracking.metamodules
Definition: metamodules.py:1
tracking.run.event_generation
Definition: event_generation.py:1
clusterFilterValidation.ClusterFilterValidationRun.create_path
def create_path(self)
Definition: clusterFilterValidation.py:55
Belle2::TrackFindingCDC::CDCMCHitLookUp::getInstance
static const CDCMCHitLookUp & getInstance()
Getter for the singletone instance.
Definition: CDCMCHitLookUp.cc:32
tracking.validation.utilities
Definition: utilities.py:1
clusterFilterValidation.ClusterFilterValidationModule
Definition: clusterFilterValidation.py:75
clusterFilterValidation.ClusterFilterValidationModule.__init__
def __init__(self, output_file_name)
Definition: clusterFilterValidation.py:79
clusterFilterValidation.ClusterFilterValidationRun.cluster_preparation_module
cluster_preparation_module
basf2 module for CDC cluster preparation
Definition: clusterFilterValidation.py:43
tracking.validation.plot
Definition: plot.py:1
clusterFilterValidation.ClusterFilterValidationModule.cluster_varset
cluster_varset
reference to the CDCWireHitClusterVarSet
Definition: clusterFilterValidation.py:86
tracking.run.mixins.BrowseTFileOnTerminateRunMixin.output_file_name
output_file_name
There is no default for the name of the output TFile.
Definition: mixins.py:54