Belle II Software development
eclNormalizedTimePayload.py
1#!/usr/bin/env python
2
3
10
11# eclNormalizedTimePayload.py creates an ECLTimingNormalization payload
12# (analysis/dbobjects/include/ECLTimingNormalization.h) from histograms
13# read from disk. Except for minimum normalization time, which is
14# hardwired.
15#
16# usage:
17# basf2 eclNormalizedTimePayload.py
18
19from ROOT import Belle2 # noqa: make Belle2 namespace available
20from ROOT.Belle2 import ECLTimingNormalization, Database, IntervalOfValidity
21from ROOT import TFile
22import numpy as np
23
24# ..Job parameters: input file name, and output payload name
25# inputName = "tNormalized_data.root"
26# payloadName = "ECLTimingNormalization_data"
27# tNormalizedMin = 3.0 # ns, for data
28
29inputName = "tNormalized_MC.root"
30payloadName = "ECLTimingNormalization_MC"
31tNormalizedMin = 1.6 # ns, for mc
32
33
34# ..Preliminaries
35inputFile = TFile(inputName, "READ")
36parameters = ECLTimingNormalization()
37nCrystals = 8736
38
39
40# --------------------------------------------------
41# ..Time walk
42timeWalkHistogram = inputFile.Get("timeWalkParameters")
43nParHist = timeWalkHistogram.GetNbinsY()
44nParDBObject = 7 # dimension of array in dbobject
45if nParHist != nParDBObject:
46 print(f'ERROR in time walk: nParHist = {nParHist}, nParDBObject = {nParDBObject}')
47
48timeWalk2DArray = np.empty((nCrystals, nParDBObject))
49for cellID in range(1, nCrystals + 1):
50 for ybin in range(1, nParHist + 1):
51 value = timeWalkHistogram.GetBinContent(cellID, ybin)
52 timeWalk2DArray[cellID-1, ybin-1] = value
53
54parameters.setTimeWalkPar(timeWalk2DArray)
55
56
57# --------------------------------------------------
58# ..Background level dependence
59backgroundHistogram = inputFile.Get("backgroundParameters")
60nParHist = backgroundHistogram.GetNbinsY()
61nParDBObject = 5 # dimension of array in dbobject
62if nParHist != nParDBObject:
63 print(f'ERROR in background: nParHist = {nParHist}, nParDBObject = {nParDBObject}')
64
65background2DArray = np.empty((nCrystals, nParDBObject))
66for cellID in range(1, nCrystals + 1):
67 for ybin in range(1, nParHist + 1):
68 value = backgroundHistogram.GetBinContent(cellID, ybin)
69 background2DArray[cellID-1, ybin-1] = value
70
71parameters.setBackgroundPar(background2DArray)
72
73
74# --------------------------------------------------
75# ..Energy dependence
76energyHistogram = inputFile.Get("energyParameters")
77nParHist = energyHistogram.GetNbinsY()
78nParDBObject = 7 # dimension of array in dbobject
79if nParHist != nParDBObject:
80 print(f'ERROR in enegy: nParHist = {nParHist}, nParDBObject = {nParDBObject}')
81
82energy2DArray = np.empty((nCrystals, nParDBObject))
83for cellID in range(1, nCrystals + 1):
84 for ybin in range(1, nParHist + 1):
85 value = energyHistogram.GetBinContent(cellID, ybin)
86 energy2DArray[cellID-1, ybin-1] = value
87
88parameters.setEnergyPar(energy2DArray)
89
90
91# --------------------------------------------------
92# ..Minimum normalization time
93parameters.setMinTNormalization(tNormalizedMin)
94
95
96# --------------------------------------------------
97# ..Create the payload
98inputFile.Close()
99database = Database.Instance()
100
101iov = IntervalOfValidity(0, 0, -1, -1)
102database.storeData(payloadName, parameters, iov)
103print(f'Created ECLTimingNormalization payload with name {payloadName}')