diff --git a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-DTF-filtered.py b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-DTF-filtered.py index 7df6c01a390c17b632b8a30c6c1caef955aa0eec..7fa5067f92e8d971017348926a26471b0394a8f8 100644 --- a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-DTF-filtered.py +++ b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-DTF-filtered.py @@ -24,7 +24,7 @@ from Gaudi.Configuration import INFO from DaVinci import options from DaVinci.algorithms import filter_on, add_filter from DecayTreeFitter import DTFAlg -from FunTuple import FunctorCollection +from FunTuple import FunctorCollection as FC from FunTuple import FunTuple_Particles as Funtuple #fields for FunTuple @@ -42,19 +42,22 @@ data_filtered = filter_on( DTF = DTFAlg(Input=data_filtered, MassConstraints=["D_s-"], OutputLevel=INFO) DTFRelations = DTF.OutputRelations # Relations +#make a helper lambda function +DTF_func = lambda func: F.MAP_INPUT(Functor=func, Relations=DTFRelations) + #make collection of functors for all particles -variables_all = FunctorCollection({ +variables_all = FC({ 'THOR_P': F.P, 'THOR_PT': F.PT, 'THOR_MASS': F.MASS, }) #make collection of functors for Ds meson -variables_ds = FunctorCollection({ - 'DTF_PT': - F.MAP_INPUT(Functor=F.PT, Relations=DTFRelations), - 'DTF_MASS': - F.MAP_INPUT(Functor=F.MASS, Relations=DTFRelations), +variables_ds = FC({ + 'DTF_PT': DTF_func(F.PT), + 'DTF_MASS': DTF_func(F.MASS), + 'DTF_CHILD1_ID': DTF_func(F.CHILD(1, F.PARTICLE_ID)), + 'DTF_CHILD1_MASS': DTF_func(F.CHILD(1, F.MASS)), }) #associate FunctorCollection to field (branch) name diff --git a/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py b/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py index e7ffca8fcab51a62110fd12a59ecb14424306b39..4de162d748f4ebff4564aeeaf42c65b4d3d0a7b5 100644 --- a/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py +++ b/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py @@ -12,7 +12,7 @@ Read an HLT2 file and create an ntuple with the new DaVinci configuration. """ import Functors as F -from FunTuple import FunctorCollection +from FunTuple import FunctorCollection as FC from FunTuple import FunTuple_Particles as Funtuple from PyConf.components import force_location from DaVinci.reco_objects import make_pvs_v2 @@ -33,7 +33,7 @@ fields = { # Creating v2 reconstructed vertices to be used in the following functor v2_pvs = make_pvs_v2(process=options.process) -d0_variables = FunctorCollection({ +d0_variables = FC({ "ID": F.PARTICLE_ID, "KEY": F.OBJECT_KEY, "PT": F.PT, @@ -48,7 +48,7 @@ d0_variables = FunctorCollection({ "BPVIPCHI2": F.BPVIPCHI2(v2_pvs) }) -daughter_variables = FunctorCollection({ +daughter_variables = FC({ "ID": F.PARTICLE_ID, "PT": F.PT, "PX": F.PX, @@ -76,38 +76,34 @@ def main(): #get configured "MCTruthAndBkgCatAlg" algorithm for HLT2 output mctruth = configured_MCTruthAndBkgCatAlg( inputs=d02kpi_data, process=options.process) + #add helper lambda that configures a functor to get truth information + MC_TRUTH = lambda func: F.MAP_INPUT(Functor=func, Relations=mctruth.MCAssocTable) #Add true ID info to each of the fields (branches) trueid_bkgcat_info = { - "TRUEID": - F.MAP_INPUT(Functor=F.PARTICLE_ID, Relations=mctruth.MCAssocTable), - "TRUEKEY": - F.MAP_INPUT(Functor=F.OBJECT_KEY, Relations=mctruth.MCAssocTable), - "TRUEPT": - F.MAP_INPUT(Functor=F.PT, Relations=mctruth.MCAssocTable), - "TRUEPX": - F.MAP_INPUT(Functor=F.PX, Relations=mctruth.MCAssocTable), - "TRUEPY": - F.MAP_INPUT(Functor=F.PY, Relations=mctruth.MCAssocTable), - "TRUEPZ": - F.MAP_INPUT(Functor=F.PZ, Relations=mctruth.MCAssocTable), - "TRUEENERGY": - F.MAP_INPUT(Functor=F.ENERGY, Relations=mctruth.MCAssocTable), - "TRUEP": - F.MAP_INPUT(Functor=F.P, Relations=mctruth.MCAssocTable), - "TRUEFOURMOMENTUM": - F.MAP_INPUT(Functor=F.FOURMOMENTUM, Relations=mctruth.MCAssocTable), - "BKGCAT": - F.BKGCAT(Relations=mctruth.BkgCatTable) + "TRUEID": MC_TRUTH(F.PARTICLE_ID), + "TRUEKEY": MC_TRUTH(F.OBJECT_KEY), + "TRUEPT": MC_TRUTH(F.PT), + "TRUEPX": MC_TRUTH(F.PX), + "TRUEPY": MC_TRUTH(F.PY), + "TRUEPZ": MC_TRUTH(F.PZ), + "TRUEENERGY": MC_TRUTH(F.ENERGY), + "TRUEP": MC_TRUTH(F.P), + "TRUEFOURMOMENTUM": MC_TRUTH(F.FOURMOMENTUM), + "BKGCAT": F.BKGCAT(Relations=mctruth.BkgCatTable) } for field in variables.keys(): - variables[field] += FunctorCollection(trueid_bkgcat_info) + variables[field] += FC(trueid_bkgcat_info) + + ##doesn't work since no "decayProducts" method in MCParticle + #sort of related issue (https://gitlab.cern.ch/lhcb/Rec/-/issues/356) + #variables['D0'] += FC({'TRUEPT_Kaon': MC_TRUTH(F.CHILD(1, F.PT))}) #get ODIN and DecReports location odin = get_odin(options) hlt2_dec = get_decreports("Hlt2", options) #define event level variables - evt_variables = FunctorCollection({ + evt_variables = FC({ "RUNNUMBER": F.RUNNUMBER(odin), "EVENTNUMBER": F.EVENTNUMBER(odin) }) diff --git a/DaVinciExamples/tests/refs/test_davinci_tupling-DTF-filtered.ref b/DaVinciExamples/tests/refs/test_davinci_tupling-DTF-filtered.ref index 507645d7abf31ab492dae5a5e2652a89e672e755..516b2441788f7eceb455403b4b006692684bf27a 100644 --- a/DaVinciExamples/tests/refs/test_davinci_tupling-DTF-filtered.ref +++ b/DaVinciExamples/tests/refs/test_davinci_tupling-DTF-filtered.ref @@ -9,7 +9,6 @@ NTupleSvc INFO Added stream file:DV-example-tupling RootHistSvc INFO Writing ROOT histograms to: DV-example-tupling-DTF-his-filtered.root HistogramPersistencySvc INFO Added successfully Conversion service:RootHistSvc FSROutputStreamDstWriter INFO Data source: EventDataSvc output: SVC='Gaudi::RootCnvSvc' -EventClockSvc.FakeEventTime INFO Event times generated from 0 with steps of 0 ApplicationMgr INFO Application Manager Initialized successfully DeFTDetector INFO Current FT geometry version = 63 ApplicationMgr INFO Application Manager Started successfully @@ -22,7 +21,7 @@ FSROutputStreamDstWriter INFO Set up File Summary Record FSROutputStreamDstWriter INFO Events output: 1 B0DsK_Tuple SUCCESS Booked 1 N-Tuples and 0 Event Tag Collections B0DsK_Tuple SUCCESS List of booked N-Tuples in directory "FILE1/B0DsK_Tuple" -B0DsK_Tuple SUCCESS ID=DecayTree Title="DecayTree" #items=11 {B0_THOR_P,B0_THOR_PT,B0_THOR_MASS,Ds_DTF_PT,Ds_DTF_MASS,Ds_THOR_P,Ds_THOR_PT,Ds_T} +B0DsK_Tuple SUCCESS ID=DecayTree Title="DecayTree" #items=13 {B0_THOR_P,B0_THOR_PT,B0_THOR_MASS,Ds_DTF_PT,Ds_DTF_MASS,Ds_DTF_CHILD1_ID,Ds_DTF_C} LAZY_AND: DaVinci #=10 Sum=8 Eff=|( 80.00000 +- 12.6491 )%| NONLAZY_OR: FileSummaryRecords #=10 Sum=10 Eff=|( 100.0000 +- 0.00000 )%| LAZY_AND: GenFSR #=10 Sum=10 Eff=|( 100.0000 +- 0.00000 )%|