diff --git a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py index bd10770e0bd6a2edbe42dcd097fda75a45754e7d..13a6ee771d8346ea5e7d3d55b9d3731003556df8 100644 --- a/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py +++ b/DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors.py @@ -12,7 +12,7 @@ Example of a DaVinci job filling all available functors. This is obviously a stress test and not realistic. This example is meant to be run with - $ ./run davinci run-mc --inputfiledb Spruce_all_lines_dst Phys/DaVinci/options/DaVinciDB-Example.yaml --joboptfile DaVinciTests/tests/options/option_davinci_sprucing.yaml --user_algorithms DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors:alg_config --evt_max 100 |& cat | tee log + $ ./run davinci run-mc --inputfiledb Spruce_all_lines_dst Phys/DaVinci/options/DaVinciDB-Example.yaml --joboptfile DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_spruce.yaml --user_algorithms DaVinciExamples/python/DaVinciExamples/tupling/example-tupling-AllFunctors:alg_config --evt_max 100 |& cat | tee log """ __author__ = "P. Koppenburg" __date__ = "2021-11-23" @@ -40,85 +40,121 @@ _composite = 'composite' def all_variables(pvs, DTFR, ptype): """ function that returns dictonary of functors that work. + + functors are listed in order of https://gitlab.cern.ch/lhcb/Rec/-/blob/master/Phys/FunctorCore/python/Functors/__init__.py """ if ptype not in [_basic, _composite]: Exception("I want {0} or {1}. Got {2}".format(_basic, _composite, ptype)) - vars = {} - - vars['P'] = F.P - vars['PT'] = F.PT - vars['PHI'] = F.PHI - vars['ETA'] = F.ETA - vars['PX'] = F.PX - vars['PY'] = F.PY - vars['PZ'] = F.PZ - vars['ENERGY'] = F.ENERGY - vars['FOURMOMENTUM'] = F.FOURMOMENTUM + all_vars = {} + + all_vars['REFERENCEPOINT_X'] = F.REFERENCEPOINT_X + all_vars['REFERENCEPOINT_Y'] = F.REFERENCEPOINT_Y + all_vars['REFERENCEPOINT_Z'] = F.REFERENCEPOINT_Z + all_vars['TX'] = F.TX + all_vars['TY'] = F.TY + # all_vars['COV'] = F.COV # 'Track__Covariance' object has no attribute 'to_json' + all_vars['P'] = F.P + all_vars['FOURMOMENTUM'] = F.FOURMOMENTUM + all_vars['PX'] = F.PX + all_vars['PY'] = F.PY + all_vars['PZ'] = F.PZ + all_vars['ENERGY'] = F.ENERGY + all_vars['PT'] = F.PT + all_vars['PHI'] = F.PHI + all_vars['ETA'] = F.ETA if (_basic == ptype): - vars['MINIP'] = F.MINIP(pvs) # crashes on composites - vars['MINIPCHI2'] = F.MINIPCHI2(pvs) # crashes on composites - - # if (_composite == ptype): - # vars['CHILD'] = F.CHILD(1,F.PT) # Needs ParticleCombination - # vars['SUBCOMB'] = F.SUBCOMB - # vars['MASSWITHHYPOTHESES'] = F.MASSWITHHYPOTHESES([939.,939.]) relies on numChildren. Not in LHCb::Particle - vars['MASS'] = F.MASS + all_vars['ISMUON'] = F.ISMUON + + # all_vars['NDOF'] = F.NDOF # no member named 'nDoF' in 'LHCb::Particle + + #if (_basic == ptype): + # all_vars['QOVERP'] = F.QOVERP # no member named 'qOverP' in 'LHCb::Particle' + + all_vars['CHI2DOF'] = F.CHI2DOF # should work on both + all_vars['CHI2'] = F.CHI2 # should work on both + + if (_basic == ptype): + all_vars['GHOSTPROB'] = F.GHOSTPROB + # all_vars['CLOSESTTOBEAM'] = F.CLOSESTTOBEAM # 'Track__ClosestToBeamState' object has no attribute 'to_json' + # all_vars['NHITS'] = F.NHITS # 'no member named 'nHits' in 'LHCb::Particle'' + # all_vars['NVPHITS'] = F.NVPHITS + # all_vars['NUTHITS'] = F.NUTHITS + # all_vars['NFTHITS'] = F.NFTHITS + # all_vars['TRACKHISTORY'] = F.TRACKHISTORY + + all_vars['MINIP'] = F.MINIP(pvs) # crashes on composites @CHECK + all_vars['MINIPCHI2'] = F.MINIPCHI2(pvs) # crashes on composites @CHECK + if (_composite == ptype): - vars['END_VX'] = F.END_VX - vars['END_VY'] = F.END_VY - vars['END_VZ'] = F.END_VZ - vars['END_VRho'] = F.END_VRho - vars['Ds_END_VZ'] = F.CHILD(1, F.END_VZ) - vars['Delta_END_VZ_DsB0'] = F.CHILD(1, F.END_VZ) - F.END_VZ - - # vars['DOCA'] = F.DOCA(Child1=1,Child2=2) # no member named 'doca' in 'LHCb::Particle' (?) - # vars['DOCACHI2'] = F.DOCACHI2(Child1=1,Child2=2) # same here - # vars['ALV'] = F.ALV(Child1=1,Child2=2) # wants cos_angle_prod - # vars['MAXDOCA'] = F.MAXDOCA # does not work - # vars['MAXDOCACHI2'] = F.MAXDOCACHI2 - vars['CHARGE'] = F.CHARGE - # vars['SIZE'] = F.SIZE(DTFParts) # doesn't work - - vars['BPVIP'] = F.BPVIP(pvs) - vars['BPVIPCHI2'] = F.BPVIPCHI2(pvs) + all_vars['CHILD'] = F.CHILD(1, F.PT) # Needs ParticleCombination +# all_vars['SUBCOMB'] = F.SUBCOMB(1,2,F.PT) +# all_vars['MASSWITHHYPOTHESES'] = F.MASSWITHHYPOTHESES([939.,939.]) # relies on numChildren. Not in LHCb::Particle + all_vars['MASS'] = F.MASS + + if (_composite == ptype): + all_vars['END_VX'] = F.END_VX + all_vars['END_VY'] = F.END_VY + all_vars['END_VZ'] = F.END_VZ + all_vars['END_VRho'] = F.END_VRho + all_vars['Ds_END_VZ'] = F.CHILD(1, F.END_VZ) + all_vars['Delta_END_VZ_DsB0'] = F.CHILD(1, F.END_VZ) - F.END_VZ + + # https://gitlab.cern.ch/lhcb/DaVinci/-/merge_requests/656 + # all_vars['SDOCA'] = F.SDOCA(Child1=1,Child2=2) # no member named 'doca' in 'LHCb::Particle' (?) + # all_vars['DOCA'] = F.DOCA(Child1=1,Child2=2) # no member named 'doca' in 'LHCb::Particle' (?) + # all_vars['DOCACHI2'] = F.DOCACHI2(Child1=1,Child2=2) # same here + # all_vars['MAXDOCA'] = F.MAXDOCA # does not work + # all_vars['MAXDOCACHI2'] = F.MAXDOCACHI2 + # all_vars['ALV'] = F.ALV(Child1=1,Child2=2) # wants cos_angle_prod + + all_vars['CHARGE'] = F.CHARGE + + if (_basic == ptype): + all_vars['PID_MU'] = F.PID_MU + all_vars['PID_PI'] = F.PID_PI + all_vars['PID_K'] = F.PID_K + all_vars['PID_P'] = F.PID_P + all_vars['PID_E'] = F.PID_E + all_vars['PROBNN_D'] = F.PROBNN_D + all_vars['PROBNN_E'] = F.PROBNN_E + all_vars['PROBNN_GHOST'] = F.PROBNN_GHOST + all_vars['PROBNN_K'] = F.PROBNN_K + all_vars['PROBNN_MU'] = F.PROBNN_MU + all_vars['PROBNN_P'] = F.PROBNN_P + all_vars['PROBNN_PI'] = F.PROBNN_PI + + +# all_vars['SIZE'] = F.SIZE(DTFR) # no matching function for call to 'invoke' + if (_composite == ptype): # all these require a vertex - vars['BPVETA'] = F.BPVETA(pvs) - vars['BPVCORRM'] = F.BPVCORRM(pvs) - vars['BPVDIRA'] = F.BPVDIRA(pvs) - vars['BPVFDCHI2'] = F.BPVFDCHI2(pvs) - vars['BPVVDZ'] = F.BPVVDZ(pvs) - vars['BPVVDRHO'] = F.BPVVDRHO(pvs) - vars['BPVLTIME'] = F.BPVLTIME(pvs) - vars['BPVDLS'] = F.BPVDLS(pvs) - # vars['RUNNUMBER'] = F.RUNNUMBER(ODINLocation) # doesn't work. - # vars['EVENTNUMBER'] = F.EVENTNUMBER('/Event/DAQ/RawBanks/ODIN') - # vars['EVENTTYPE'] = F.EVENTTYPE('/Event/DAQ/RawBanks/ODIN') - # vars['MVA'] = F.MVA # needs an MVA - # vars['COMB'] = F.COMB # starts from combination - # vars['POD'] = F.POD # starts from combination - - vars['DTF_PT'] = F.MAP_INPUT(Functor=F.PT, Relations=DTFR) - vars['DTF_BPVIPCHI2'] = F.MAP_INPUT( + all_vars['BPVETA'] = F.BPVETA(pvs) + all_vars['BPVCORRM'] = F.BPVCORRM(pvs) + all_vars['BPVDIRA'] = F.BPVDIRA(pvs) + + all_vars['BPVIP'] = F.BPVIP(pvs) + all_vars['BPVIPCHI2'] = F.BPVIPCHI2(pvs) + + if (_composite == ptype): # all these require a vertex + all_vars['BPVFDCHI2'] = F.BPVFDCHI2(pvs) + all_vars['BPVVDZ'] = F.BPVVDZ(pvs) + all_vars['BPVVDRHO'] = F.BPVVDRHO(pvs) + all_vars['BPVLTIME'] = F.BPVLTIME(pvs) + all_vars['BPVDLS'] = F.BPVDLS(pvs) + # all_vars['RUNNUMBER'] = F.RUNNUMBER(ODINLocation) # doesn't work. + # all_vars['EVENTNUMBER'] = F.EVENTNUMBER('/Event/DAQ/RawBanks/ODIN') + # all_vars['EVENTTYPE'] = F.EVENTTYPE('/Event/DAQ/RawBanks/ODIN') + # all_vars['MVA'] = F.MVA # needs an MVA + # all_vars['COMB'] = F.COMB # starts from combination + # all_vars['POD'] = F.POD # starts from combination + + all_vars['DTF_PT'] = F.MAP_INPUT(Functor=F.PT, Relations=DTFR) + all_vars['DTF_BPVIPCHI2'] = F.MAP_INPUT( Functor=F.BPVIPCHI2(pvs), Relations=DTFR) - if (_basic == ptype): - vars['PID_MU'] = F.PID_MU - vars['PID_PI'] = F.PID_PI - vars['PID_K'] = F.PID_K - vars['PID_P'] = F.PID_P - vars['PID_E'] = F.PID_E - vars['PROBNN_D'] = F.PROBNN_D - vars['PROBNN_E'] = F.PROBNN_E - vars['PROBNN_GHOST'] = F.PROBNN_GHOST - vars['PROBNN_K'] = F.PROBNN_K - vars['PROBNN_MU'] = F.PROBNN_MU - vars['PROBNN_P'] = F.PROBNN_P - vars['PROBNN_PI'] = F.PROBNN_PI - - print("For {0} returning variables {1}".format(ptype, vars.keys())) - return vars + print("For {0} returning variables {1}".format(ptype, all_vars.keys())) + return all_vars def alg_config(): diff --git a/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt b/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt index f8d5d6ead0ca16942d7996491a6e4d9a54790fa0..333d1b0b8a6fe4d5e84a67ac79b3a61e8b108c4f 100755 --- a/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt +++ b/DaVinciExamples/tests/qmtest/tupling.qms/test_davinci_tupling_All.qmt @@ -40,70 +40,7 @@ findReferenceBlock("""B0DsK_Tuple SUCCESS Booked 1 N-Tup import sys, os, glob from ROOT import TFile -B_vars_stored = ['B0_BPVCORRM' -, 'B0_BPVDIRA' -, 'B0_BPVDLS' -, 'B0_BPVETA' -, 'B0_BPVFDCHI2' -, 'B0_BPVIPCHI2' -, 'B0_BPVLTIME' -, 'B0_BPVVDRHO' -, 'B0_BPVVDZ' -, 'B0_CHARGE' -, 'B0_DTF_BPVIPCHI2' -, 'B0_DTF_PT' -, 'B0_ENERGY' -, 'B0_ETA' -, 'B0_FOURMOMENTUME' -, 'B0_FOURMOMENTUMX' -, 'B0_FOURMOMENTUMY' -, 'B0_FOURMOMENTUMZ' -, 'B0_MASS' -, 'B0_P' -, 'B0_PHI' -, 'B0_PT' -, 'B0_PX' -, 'B0_PY' -, 'B0_PZ' -, 'B0_END_VRho' -, 'B0_END_VX' -, 'B0_END_VY' -, 'B0_END_VZ' -, 'B0_Ds_END_VZ' -, 'B0_Delta_END_VZ_DsB0' -, 'B0_BPVIP' -, 'Kaon_BPVIP' -, 'Kaon_BPVIPCHI2' -, 'Kaon_CHARGE' -, 'Kaon_DTF_BPVIPCHI2' -, 'Kaon_DTF_PT' -, 'Kaon_ENERGY' -, 'Kaon_ETA' -, 'Kaon_FOURMOMENTUME' -, 'Kaon_FOURMOMENTUMX' -, 'Kaon_FOURMOMENTUMY' -, 'Kaon_FOURMOMENTUMZ' -, 'Kaon_MASS' -, 'Kaon_MINIP' -, 'Kaon_MINIPCHI2' -, 'Kaon_P' -, 'Kaon_PHI' -, 'Kaon_PID_E' -, 'Kaon_PID_K' -, 'Kaon_PID_MU' -, 'Kaon_PID_P' -, 'Kaon_PID_PI' -, 'Kaon_PROBNN_D' -, 'Kaon_PROBNN_E' -, 'Kaon_PROBNN_GHOST' -, 'Kaon_PROBNN_K' -, 'Kaon_PROBNN_MU' -, 'Kaon_PROBNN_P' -, 'Kaon_PROBNN_PI' -, 'Kaon_PT' -, 'Kaon_PX' -, 'Kaon_PY' -, 'Kaon_PZ'] +B_vars_stored = [ 'B0_BPVCORRM', 'B0_BPVDIRA', 'B0_BPVDLS', 'B0_BPVETA', 'B0_BPVFDCHI2', 'B0_BPVIP', 'B0_BPVIPCHI2', 'B0_BPVLTIME', 'B0_BPVVDRHO', 'B0_BPVVDZ', 'B0_CHARGE', 'B0_CHI2', 'B0_CHI2DOF', 'B0_CHILD', 'B0_DTF_BPVIPCHI2', 'B0_DTF_PT', 'B0_Delta_END_VZ_DsB0', 'B0_Ds_END_VZ', 'B0_END_VRho', 'B0_END_VX', 'B0_END_VY', 'B0_END_VZ', 'B0_ENERGY', 'B0_ETA', 'B0_FOURMOMENTUME', 'B0_FOURMOMENTUMX', 'B0_FOURMOMENTUMY', 'B0_FOURMOMENTUMZ', 'B0_MASS', 'B0_MINIP', 'B0_MINIPCHI2', 'B0_P', 'B0_PHI', 'B0_PT', 'B0_PX', 'B0_PY', 'B0_PZ', 'B0_REFERENCEPOINT_X', 'B0_REFERENCEPOINT_Y', 'B0_REFERENCEPOINT_Z', 'B0_TX', 'B0_TY', 'Kaon_BPVIP', 'Kaon_BPVIPCHI2', 'Kaon_CHARGE', 'Kaon_ISMUON', 'Kaon_CHI2', 'Kaon_CHI2DOF', 'Kaon_DTF_BPVIPCHI2', 'Kaon_DTF_PT', 'Kaon_ENERGY', 'Kaon_ETA', 'Kaon_FOURMOMENTUME', 'Kaon_FOURMOMENTUMX', 'Kaon_FOURMOMENTUMY', 'Kaon_FOURMOMENTUMZ', 'Kaon_GHOSTPROB', 'Kaon_MASS', 'Kaon_MINIP', 'Kaon_MINIPCHI2', 'Kaon_P', 'Kaon_PHI', 'Kaon_PID_E', 'Kaon_PID_K', 'Kaon_PID_MU', 'Kaon_PID_P', 'Kaon_PID_PI', 'Kaon_PROBNN_D', 'Kaon_PROBNN_E', 'Kaon_PROBNN_GHOST', 'Kaon_PROBNN_K', 'Kaon_PROBNN_MU', 'Kaon_PROBNN_P', 'Kaon_PROBNN_PI', 'Kaon_PT', 'Kaon_PX', 'Kaon_PY', 'Kaon_PZ', 'Kaon_REFERENCEPOINT_X', 'Kaon_REFERENCEPOINT_Y', 'Kaon_REFERENCEPOINT_Z', 'Kaon_TX', 'Kaon_TY'] #sort the expected vars B_vars_stored = sorted(B_vars_stored) diff --git a/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml b/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml index bed9d600d315a2cbb8b4223c44ad9253514d7f10..e121906a3576648553a2f9b1b49037037c22a823 100644 --- a/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml +++ b/DaVinciTests/tests/options/Upgrade/DaVinci-Options.yaml @@ -12,4 +12,5 @@ ntuple_file: 'DV-Ntuple.root' histo_file: 'DV-Histos.root' lumi: False enable_unpack: False -process: 'Turbo' \ No newline at end of file +process: 'Turbo' +evt_max: 10