5 from basf2
import B2FATAL, B2RESULT, Path, process, conditions, register_module
7 import modularAnalysis
as ma
8 from variables
import variables
10 from ROOT
import TFile
21 def make_1D_bin(name, min_val, max_val):
22 return {name: [min_val, max_val]}
25 def make_2D_bin(bin_x, bin_y):
31 def make_3D_bin(bin_x, bin_y, bin_z):
33 bin_3d.update(bin_y).update(bin_z)
37 def check(ntupleName, treeName):
39 Verify results make sense.
41 ntuplefile = TFile(ntupleName)
42 ntuple = ntuplefile.Get(treeName)
44 if ntuple.GetEntries() == 0:
45 B2FATAL(
"No pions saved")
47 if not(ntuple.GetEntries(
"binID > 0 ") > 0):
48 B2FATAL(
"Binning was applied incorrectly: no pions in physical bins")
50 B2RESULT(
"Bins are defined")
52 if not(ntuple.GetEntries(
"Weight > 0") > 0):
53 B2FATAL(
"Weights are not applied")
55 B2RESULT(
"Weights are applied")
67 bins_x = [make_1D_bin(
"p", 0, 2),
68 make_1D_bin(
"p", 2, 3),
69 make_1D_bin(
"p", 3, 4)]
71 bins_y = [make_1D_bin(
"pz", 0, 1),
72 make_1D_bin(
"pz", 1, 5)]
93 weightInfo[
"Weight"] = float(random.randint(0, 100)) / 100
94 weightInfo[
"StatErr"] = float(random.randint(100, 200)) / 100
95 weightInfo[
"SystErr"] = float(10)
96 tableIDNotSpec.append([weightInfo, make_2D_bin(xbin, ybin)])
121 weightInfo[
"Weight"] = float(random.randint(0, 100)) / 100
122 weightInfo[
"StatErr"] = float(random.randint(100, 200)) / 100
123 weightInfo[
"SystErr"] = float(10)
124 tableIDSpec.append([[weightInfo, make_2D_bin(xbin, ybin)], binID])
127 outOfRangeWeightInfo = {}
128 outOfRangeWeightInfo[
"Weight"] = -1
129 outOfRangeWeightInfo[
"StatErr"] = -1
130 outOfRangeWeightInfo[
"SystErr"] = -1
134 conditions.testing_payloads = [
"localdb/database.txt"]
137 addtable = register_module(
'ParticleWeightingLookUpCreator')
138 addtable.param(
'tableIDNotSpec', tableIDNotSpec)
139 addtable.param(
'outOfRangeWeight', outOfRangeWeightInfo)
140 addtable.param(
'experimentHigh', 1000)
141 addtable.param(
'experimentLow', 0)
142 addtable.param(
'runHigh', 1000)
143 addtable.param(
'runLow', 0)
144 addtable.param(
'tableName',
"ParticleReweighting:TestMomentum")
146 addtable2 = register_module(
'ParticleWeightingLookUpCreator')
147 addtable2.param(
'tableIDSpec', tableIDSpec)
148 addtable2.param(
'outOfRangeWeight', outOfRangeWeightInfo)
149 addtable2.param(
'experimentHigh', 1000)
150 addtable2.param(
'experimentLow', 0)
151 addtable2.param(
'runHigh', 1000)
152 addtable2.param(
'runLow', 0)
153 addtable2.param(
'tableName',
"ParticleReweighting:TestMomentum2")
156 testpath.add_module(addtable)
157 testpath.add_module(addtable2)
158 testpath.add_module(
'EventInfoSetter', evtNumList=[100], runList=[1], expList=[1])
162 B2RESULT(
"Weights are created and loaded to DB")
166 ntupleName =
'particleWeighting.root'
169 ma.inputMdst(
"default", inputfile, path=main)
172 ma.fillParticleListFromMC(
'pi+:gen',
'', path=main)
175 weight_table_id =
"ParticleReweighting:TestMomentum"
179 variables.addAlias(
'Weight',
'extraInfo(' + weight_table_id +
'_Weight)')
180 variables.addAlias(
'StatErr',
'extraInfo(' + weight_table_id +
'_StatErr)')
181 variables.addAlias(
'SystErr',
'extraInfo(' + weight_table_id +
'_SystErr)')
182 variables.addAlias(
'binID',
'extraInfo(' + weight_table_id +
'_binID)')
183 varsPi = [
'p',
'pz',
'Weight',
'StatErr',
'SystErr',
'binID']
186 reweighter = register_module(
'ParticleWeighting')
187 reweighter.param(
'tableName', weight_table_id)
188 reweighter.param(
'particleList',
'pi+:gen')
189 main.add_module(reweighter)
192 ma.variablesToNtuple(
'pi+:gen', varsPi, filename=ntupleName, treename=treeName, path=main)
197 check(ntupleName, treeName)
199 B2RESULT(
"Weights were applied correctly")