Belle II Software  release-05-01-25
validateOverlay.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """
5 <header>
6  <output>overlayPlots.root</output>
7  <contact>marko.staric@ijs.si</contact>
8  <description>Runs BG overlay and makes validation histograms</description>
9 </header>
10 """
11 
12 from basf2 import *
13 from simulation import add_simulation
14 import os
15 import glob
16 import sys
17 import math
18 from ROOT import Belle2
19 from ROOT import TH1F, TFile, TNamed
20 
21 set_random_seed(123452)
22 
23 
24 class Histogrammer(Module):
25 
26  '''
27  Make validation histograms for BG overlay.
28  '''
29 
30  def initialize(self):
31  ''' Initialize the Module: book histograms and set descriptions and checks'''
32 
33 
34  self.hist = []
35  self.hist.append(TH1F('PXDDigits', 'PXDDigits (no data reduction)',
36  100, 30000, 40000))
37  self.hist.append(TH1F('SVDShaperDigits', 'SVDShaperDigits', 100, 0, 4000))
38  self.hist.append(TH1F('CDCHits', 'CDCHits', 100, 0, 4000))
39  self.hist.append(TH1F('TOPDigits', 'TOPDigits', 100, 0, 2000))
40  self.hist.append(TH1F('ARICHDigits', 'ARICHDigits', 100, 0, 300))
41  self.hist.append(TH1F('ECLDigits', 'ECLDigits, m_Amp > 500 (roughly 25 MeV)',
42  100, 0, 100))
43  self.hist.append(TH1F('KLMDigits', 'KLMDigits', 150, 0, 150))
44 
45  for h in self.hist:
46  h.SetXTitle('number of digits in event')
47  h.SetYTitle('entries per bin')
48  descr = TNamed('Description', 'Number of background ' + h.GetName() +
49  ' per event (with BG overlay only and no event generator)')
50  h.GetListOfFunctions().Add(descr)
51  check = TNamed('Check', 'Distribution must agree with its reference')
52  h.GetListOfFunctions().Add(check)
53  contact = TNamed('Contact', 'marko.staric@ijs.si')
54  h.GetListOfFunctions().Add(contact)
55  options = TNamed('MetaOptions', 'shifter')
56  h.GetListOfFunctions().Add(options)
57 
58  def event(self):
59  ''' Event processor: fill histograms '''
60 
61  for h in self.hist:
62  digits = Belle2.PyStoreArray(h.GetName())
63  if h.GetName() == 'ECLDigits':
64  n = 0
65  for digit in digits:
66  if digit.getAmp() > 500: # roughly 25 MeV
67  n += 1
68  h.Fill(n)
69  else:
70  h.Fill(digits.getEntries())
71 
72  def terminate(self):
73  """ Write histograms to file."""
74 
75  tfile = TFile('overlayPlots.root', 'recreate')
76  for h in self.hist:
77  h.Write()
78  tfile.Close()
79 
80 
81 bg = None
82 if 'BELLE2_BACKGROUND_DIR' in os.environ:
83  bg = glob.glob(os.environ['BELLE2_BACKGROUND_DIR'] + '/*.root')
84  if bg is None:
85  B2FATAL('No beam background samples found in folder ' +
86  os.environ['BELLE2_BACKGROUND_DIR'])
87  B2INFO('Using background samples from ' + os.environ['BELLE2_BACKGROUND_DIR'])
88 else:
89  B2FATAL('variable BELLE2_BACKGROUND_DIR is not set')
90 
91 # Create path
92 main = create_path()
93 
94 # Set number of events to generate
95 eventinfosetter = register_module('EventInfoSetter')
96 eventinfosetter.param({'evtNumList': [1000], 'runList': [1]})
97 main.add_module(eventinfosetter)
98 
99 # Simulation
100 add_simulation(main, bkgfiles=bg, bkgOverlay=True, usePXDDataReduction=False, forceSetPXDDataReduction=True)
101 
102 # Make histograms
103 main.add_module(Histogrammer())
104 
105 # Show progress of processing
106 progress = register_module('Progress')
107 main.add_module(progress)
108 
109 # Process events
110 process(main)
111 
112 # Print call statistics
113 print(statistics)
validateOverlay.Histogrammer
Definition: validateOverlay.py:24
validateOverlay.Histogrammer.initialize
def initialize(self)
Definition: validateOverlay.py:30
validateOverlay.Histogrammer.hist
hist
list of histograms
Definition: validateOverlay.py:34
validateOverlay.Histogrammer.terminate
def terminate(self)
Definition: validateOverlay.py:72
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
validateOverlay.Histogrammer.event
def event(self)
Definition: validateOverlay.py:58