12 from basf2
import B2FATAL, B2RESULT, Path, process, conditions, register_module
14 import modularAnalysis
as ma
15 from variables
import variables
17 from ROOT
import TFile
28 def make_1D_bin(name, min_val, max_val):
29 return {name: [min_val, max_val]}
32 def make_2D_bin(bin_x, bin_y):
38 def make_3D_bin(bin_x, bin_y, bin_z):
40 bin_3d.update(bin_y).update(bin_z)
44 def check(ntupleName, treeName):
46 Verify results make sense.
48 ntuplefile = TFile(ntupleName)
49 ntuple = ntuplefile.Get(treeName)
51 if ntuple.GetEntries() == 0:
52 B2FATAL(
"No pions saved")
54 if not(ntuple.GetEntries(
"binID > 0 ") > 0):
55 B2FATAL(
"Binning was applied incorrectly: no pions in physical bins")
57 B2RESULT(
"Bins are defined")
59 if not(ntuple.GetEntries(
"Weight > 0") > 0):
60 B2FATAL(
"Weights are not applied")
62 B2RESULT(
"Weights are applied")
74 bins_x = [make_1D_bin(
"p", 0, 2),
75 make_1D_bin(
"p", 2, 3),
76 make_1D_bin(
"p", 3, 4)]
78 bins_y = [make_1D_bin(
"pz", 0, 1),
79 make_1D_bin(
"pz", 1, 5)]
100 weightInfo[
"Weight"] = float(random.randint(0, 100)) / 100
101 weightInfo[
"StatErr"] = float(random.randint(100, 200)) / 100
102 weightInfo[
"SystErr"] = float(10)
103 tableIDNotSpec.append([weightInfo, make_2D_bin(xbin, ybin)])
128 weightInfo[
"Weight"] = float(random.randint(0, 100)) / 100
129 weightInfo[
"StatErr"] = float(random.randint(100, 200)) / 100
130 weightInfo[
"SystErr"] = float(10)
131 tableIDSpec.append([[weightInfo, make_2D_bin(xbin, ybin)], binID])
134 outOfRangeWeightInfo = {}
135 outOfRangeWeightInfo[
"Weight"] = -1
136 outOfRangeWeightInfo[
"StatErr"] = -1
137 outOfRangeWeightInfo[
"SystErr"] = -1
141 conditions.testing_payloads = [
"localdb/database.txt"]
144 addtable = register_module(
'ParticleWeightingLookUpCreator')
145 addtable.param(
'tableIDNotSpec', tableIDNotSpec)
146 addtable.param(
'outOfRangeWeight', outOfRangeWeightInfo)
147 addtable.param(
'experimentHigh', 1003)
148 addtable.param(
'experimentLow', 1003)
149 addtable.param(
'runHigh', 1000)
150 addtable.param(
'runLow', 0)
151 addtable.param(
'tableName',
"ParticleReweighting:TestMomentum")
153 addtable2 = register_module(
'ParticleWeightingLookUpCreator')
154 addtable2.param(
'tableIDSpec', tableIDSpec)
155 addtable2.param(
'outOfRangeWeight', outOfRangeWeightInfo)
156 addtable2.param(
'experimentHigh', 1003)
157 addtable2.param(
'experimentLow', 1003)
158 addtable2.param(
'runHigh', 1000)
159 addtable2.param(
'runLow', 0)
160 addtable2.param(
'tableName',
"ParticleReweighting:TestMomentum2")
163 testpath.add_module(addtable)
164 testpath.add_module(addtable2)
165 testpath.add_module(
'EventInfoSetter', evtNumList=[100], runList=[0], expList=[1003])
169 B2RESULT(
"Weights are created and loaded to DB")
173 ntupleName =
'particleWeighting.root'
176 ma.inputMdst(
"default", inputfile, path=main)
179 ma.fillParticleListFromMC(
'pi+:gen',
'', path=main)
182 weight_table_id =
"ParticleReweighting:TestMomentum"
186 variables.addAlias(
'Weight',
'extraInfo(' + weight_table_id +
'_Weight)')
187 variables.addAlias(
'StatErr',
'extraInfo(' + weight_table_id +
'_StatErr)')
188 variables.addAlias(
'SystErr',
'extraInfo(' + weight_table_id +
'_SystErr)')
189 variables.addAlias(
'binID',
'extraInfo(' + weight_table_id +
'_binID)')
190 varsPi = [
'p',
'pz',
'Weight',
'StatErr',
'SystErr',
'binID']
193 reweighter = register_module(
'ParticleWeighting')
194 reweighter.param(
'tableName', weight_table_id)
195 reweighter.param(
'particleList',
'pi+:gen')
196 main.add_module(reweighter)
199 ma.variablesToNtuple(
'pi+:gen', varsPi, filename=ntupleName, treename=treeName, path=main)
204 check(ntupleName, treeName)
206 B2RESULT(
"Weights were applied correctly")
def require_file(filename, data_type="", py_case=None)
def clean_working_directory()
def safe_process(*args, **kwargs)