Belle II Software  release-08-01-10
vxdCdcMergerValidationCreatePlots.py
1 #!/usr/bin/env python3
2 
3 
10 
11 """
12 <header>
13  <contact>software-tracking@belle2.org</contact>
14  <input>VxdCdcValidationHarvested.root</input>
15  <description>This module creates efficiency plots for the V0 validation.</description>
16 </header>
17 """
18 
19 
20 import ROOT
21 
22 ACTIVE = True
23 
24 
26  """Create efficiency plots for the V0 validation"""
27 
28  def __init__(self, input_file='../VxdCdcValidationHarvested.root', output_file='VxdCdcMergerValidation.root'):
29  """Constructor"""
30 
31  self.input_fileinput_file = input_file
32 
33  self.output_fileoutput_file = output_file
34 
35 
36  self.hist_merged_hitshist_merged_hits = ROOT.TH1F("merged_hits", "Merged Hits", 70, 0, 140)
37 
38  self.hist_good_over_pthist_good_over_pt = ROOT.TProfile("good_over_pt", "Good Merge over Pt", 50, 0, 4)
39 
40  self.hist_good_over_thetahist_good_over_theta = ROOT.TProfile("good_over_theta", "Good Merge over Theta", 50, 0, 4)
41 
42  def collect_histograms(self):
43  """Fill the histograms in each event"""
44  input_root_file = ROOT.TFile.Open(self.input_fileinput_file, "READ")
45 
46  for event in input_root_file.VxdCdcMergerHarvester_tree:
47  self.hist_merged_hitshist_merged_hits.Fill(event.PR_NHITS)
48  self.hist_good_over_pthist_good_over_pt.Fill(event.MC_PT, event.GOOD_MERGE)
49  self.hist_good_over_thetahist_good_over_theta.Fill(event.MC_THETA, event.GOOD_MERGE)
50 
51  input_root_file.Close()
52  return self
53 
54  @staticmethod
55  def histogram_plot(hist, title, x_variable, x_unit=None, description='', check='', contact='', meta_options=''):
56  """Label and annotate the histograms"""
57  hist.SetName("".join(title.split()))
58  xlabel = '{} / ({})'.format(x_variable, x_unit) if x_unit is not None else '{}'.format(x_variable)
59  ylabel = 'Entries / ({} {})'.format((hist.GetXaxis().GetXmax() -
60  hist.GetXaxis().GetXmin()) /
61  hist.GetNbinsX(), x_unit) if x_unit is not None \
62  else 'Entries / ({})'.format((hist.GetXaxis().GetXmax() - hist.GetXaxis().GetXmin()) / hist.GetNbinsX())
63  hist.SetTitle("{};{};{}".format(title, xlabel, ylabel))
64  hist.GetListOfFunctions().Add(ROOT.TNamed('Description', description))
65  hist.GetListOfFunctions().Add(ROOT.TNamed('Check', check))
66  hist.GetListOfFunctions().Add(ROOT.TNamed('Contact', contact))
67  hist.GetListOfFunctions().Add(ROOT.TNamed('MetaOptions', meta_options))
68  return hist
69 
70  def plot(self):
71  """Draw all of the histograms to the output ROOT file"""
72  output_root_file = ROOT.TFile.Open(self.output_fileoutput_file, "RECREATE")
73 
74  VxdCdcMergerValidationPlots.histogram_plot(self.hist_merged_hitshist_merged_hits, "Number of hits of merged tracks", "Number of Hits", None,
75  description='Number of hits of merged tracks',
76  check='',
77  contact='',
78  meta_options='').Write()
79 
80  VxdCdcMergerValidationPlots.histogram_plot(self.hist_good_over_pthist_good_over_pt, "Good Merge over Pt", "MC Track Pt (GeV)", None,
81  description='Good Merge over Pt',
82  check='',
83  contact='',
84  meta_options='').Write()
85 
86  VxdCdcMergerValidationPlots.histogram_plot(self.hist_good_over_thetahist_good_over_theta, "Good Merge over Theta", "MC Track Theta (1)", None,
87  description='Good Merge over Theta',
88  check='',
89  contact='',
90  meta_options='').Write()
91 
92  output_root_file.Write()
93  output_root_file.Close()
94  return self
95 
96 
97 if __name__ == '__main__':
98  if ACTIVE:
100  else:
101  print("This validation deactivated and thus basf2 is not executed.\n"
102  "If you want to run this validation, please set the 'ACTIVE' flag above to 'True'.\n"
103  "Exiting.")
def histogram_plot(hist, title, x_variable, x_unit=None, description='', check='', contact='', meta_options='')
def __init__(self, input_file='../VxdCdcValidationHarvested.root', output_file='VxdCdcMergerValidation.root')
hist_good_over_pt
Profile histogram of good merged hits by transverse momentum.
hist_good_over_theta
Profile histogram of good merged hits by polar angle.
Definition: plot.py:1