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(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)