Belle II Software  release-05-01-25
test_VariablesToHistogram.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import os
5 import basf2
6 import ROOT
7 import b2test_utils
8 from ROOT import Belle2
9 
10 inputFile = b2test_utils.require_file('mdst12.root', 'validation')
11 path = basf2.create_path()
12 path.add_module('RootInput', inputFileName=inputFile)
13 path.add_module('ParticleLoader', decayStringsWithCuts=[('e+', '')])
14 
15 # Write out electron id and mc information of all electron candidates into histograms
16 path.add_module('VariablesToHistogram',
17  particleList='e+',
18  variables=[('electronID', 100, 0, 1), ('isSignal', 2, -0.5, 1.5)],
19  variables_2d=[('mcErrors', 513, -0.5, 512.5, 'isSignal', 2, -0.5, 1.5)],
20  fileName='particleListNtuple.root')
21 
22 # Write out number of tracks and ecl-clusters in every event into histograms
23 path.add_module('VariablesToHistogram',
24  particleList='',
25  variables=[('nTracks', 31, -0.5, 30.5), ('nKLMClusters', 51, -0.5, 50.5)],
26  variables_2d=[('nTracks', 31, -0.5, 30.5, 'nKLMClusters', 51, -0.5, 50.5)],
27  fileName='eventNtuple.root')
28 
29 
31  basf2.process(path)
32 
33  # Testing
34  assert os.path.isfile('particleListNtuple.root'), "particleListNtuple.root wasn't created"
35  f = ROOT.TFile('particleListNtuple.root')
36  t = f.Get('electronID')
37  assert bool(t), "electronID histogram isn't contained in file"
38  assert t.GetBinContent(1) > t.GetBinContent(
39  100), 'Expected fewer candidates with a highest electronID compared to lowest electronID'
40  t = f.Get('isSignal')
41  assert bool(t), "isSignal histogram isn't contained in file"
42  assert t.GetBinContent(1) > t.GetBinContent(2), 'Expected more background than signal'
43  signal_1d = t.GetBinContent(2)
44  t = f.Get('mcErrorsisSignal')
45  assert bool(t), "mcErrorsisSignal histogram isn't contained in file"
46 
47  signal_2d = []
48  for i in range(513):
49  if i >= 4:
50  assert t.GetBinContent(i, 2) == 0, 'Expected no entries for mcError >= 4 and true electron candidates'
51  else:
52  assert t.GetBinContent(i, 1) == 0, 'Expected no entries for mcError < 4 and false electron candidates'
53  signal_2d.append(t.GetBinContent(i, 2))
54  assert signal_1d == sum(signal_2d),\
55  'Expected same amount of signal in 1D and 2D histograms got {} {}'.format(signal_1d, sum(signal_2d))
56 
57  assert os.path.isfile('eventNtuple.root'), "eventNtuple.root wasn't created"
58  f = ROOT.TFile('eventNtuple.root')
59  t = f.Get('nTracks')
60  assert bool(t), "nTracks histogram isn't contained in file"
61  assert t.GetBinContent(13) > t.GetBinContent(1), 'Expected more 12 track events than 1 track events'
62  assert t.GetBinContent(13) > t.GetBinContent(2), 'Expected more 12 track events than 2 track events'
63  assert t.GetBinContent(13) > t.GetBinContent(3), 'Expected more 12 track events than 3 track events'
64  assert t.GetBinContent(13) > t.GetBinContent(4), 'Expected more 12 track events than 4 track events'
65  assert t.GetBinContent(13) > t.GetBinContent(26), 'Expected more 12 track events than 26 track events'
66  assert t.GetBinContent(13) > t.GetBinContent(27), 'Expected more 12 track events than 27 track events'
67  assert t.GetBinContent(13) > t.GetBinContent(28), 'Expected more 12 track events than 28 track events'
68  assert t.GetBinContent(13) > t.GetBinContent(29), 'Expected more 12 track events than 29 track events'
69  ntracks_12_1d = t.GetBinContent(13)
70 
71  t = f.Get('nKLMClusters')
72  assert bool(t), "nKLMClusters histogram isn't contained in file"
73 
74  t = f.Get('nTracksnKLMClusters')
75  assert bool(t), "nTracksnKLMClusters 2d histogram isn't contained in file"
76  ntracks_12_2d = []
77  for i in range(53):
78  ntracks_12_2d.append(t.GetBinContent(13, i))
79  assert ntracks_12_1d == sum(ntracks_12_2d),\
80  'Expected same amount of events with 12 tracks in 1D and 2D histograms got {} {}'.format(ntracks_12_1d, sum(ntracks_12_2d))
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
b2test_utils.clean_working_directory
def clean_working_directory()
Definition: __init__.py:176
b2test_utils.require_file
def require_file(filename, data_type="", py_case=None)
Definition: __init__.py:47