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