diff --git a/dst_to_dee/DV.py b/dst_to_dee/DV.py deleted file mode 100644 index 03ea773b76944934b5ec9d0226d8995e6c0c5d31..0000000000000000000000000000000000000000 --- a/dst_to_dee/DV.py +++ /dev/null @@ -1,339 +0,0 @@ - -import Functors as F -from Functors.math import log -from DaVinci import Options, make_config -from DaVinci.algorithms import create_lines_filter -from PyConf.reading import get_particles -from FunTuple import FunctorCollection -from PyConf.reading import get_particles, get_pvs -import FunTuple.functorcollections as FC -from FunTuple import FunTuple_Particles as Funtuple -from DecayTreeFitter import DecayTreeFitter -from Hlt2Conf.lines.charm.dst_to_dee_makers import (dst_BDT_functor) -from .tupling import ( - make_DeltaM_variable, - make_basic_variables, - make_composite_variables, - make_composite_variables_3body, - make_composite_variables_4body, - make_hlt2_event_variables, - make_basic_dtf_variables, - make_composite_dtf_variables, - make_composite_dtf_variables_3body, - make_composite_dtf_variables_4body, - Hlt1_lines, - photon_isolation_variables -) -extra_brem_variables= (FunctorCollection( - { - "BREMHYPODELTAX": F.BREMHYPODELTAX, - "BREMHYPOENERGY": F.BREMHYPOENERGY, - "BREMHYPOID": F.BREMHYPOID, - "BREMHYPOMATCH_CHI2": F.BREMHYPOMATCH_CHI2, - "BREMPIDE": F.BREMPIDE, - "INBREM": F.INBREM, - "MASS_WITH_BREM": F.MASS_WITH_BREM, - "PT_WITH_BREM": F.PT_WITH_BREM, - "P_WITH_BREM": F.P_WITH_BREM, - "ECALPIDE": F.ECALPIDE, - "HCALPIDE": F.HCALPIDE, - "ELECTRONSHOWEREOP": F.ELECTRONSHOWEREOP, - "CLUSTERMATCH_CHI2": F.CLUSTERMATCH_CHI2, - "ELECTRONMATCH_CHI2": F.ELECTRONMATCH_CHI2, - "ELECTRONENERGY": F.ELECTRONENERGY, - "ELECTRONID": F.ELECTRONID, - "HCALEOP": F.HCALEOP, - "CALO_NEUTRAL_SHOWER_SHAPE": F.CALO_NEUTRAL_SHOWER_SHAPE, - "RICH_DLL_E": F.VALUE_OR(F.NaN)@F.RICH_DLL_E, - "TRACKPX": F.VALUE_OR(-1) @ F.TRACK_PX, - "TRACKPY": F.VALUE_OR(-1) @ F.TRACK_PY, - "TRACKPZ": F.VALUE_OR(-1) @ F.TRACK_PZ, - }) - ) - - - -decay_descriptor = { - 'dst_kpi_os' : { - "Dst0": "[ D*(2007)0 -> (D0 -> K- pi+) (gamma -> e+ e-)]CC", - "D0": "[ D*(2007)0 -> ^(D0 -> K- pi+) (gamma -> e+ e-)]CC", - "Kminus": "[ D*(2007)0 -> (D0 -> ^K- pi+) (gamma -> e+ e-)]CC", - "piplus": "[ D*(2007)0 -> (D0 -> K- ^pi+) (gamma -> e+ e-)]CC", - "gamma": "[ D*(2007)0 -> (D0 -> K- pi+) ^(gamma -> e+ e-)]CC", - "eplus": "[ D*(2007)0 -> (D0 -> K- pi+) (gamma -> ^e+ e-)]CC", - "eminus": "[ D*(2007)0 -> (D0 -> K- pi+) (gamma -> e+ ^e-)]CC", - }, - - 'dst_kpi_ss' : { - "Dst0": "[ D*(2007)0 -> (D0 -> K- pi+) ([gamma -> e+ e+]CC)]CC", - "D0": "[ D*(2007)0 -> ^(D0 -> K- pi+) ([gamma -> e+ e+]CC)]CC", - "Kminus": "[ D*(2007)0 -> (D0 -> ^K- pi+) ([gamma -> e+ e+]CC)]CC", - "piplus": "[ D*(2007)0 -> (D0 -> K- ^pi+) ([gamma -> e+ e+]CC)]CC", - "gamma": "[ D*(2007)0 -> (D0 -> K- pi+) ^([gamma -> e+ e+]CC)]CC", - "eplus": "[ D*(2007)0 -> (D0 -> K- pi+) ([gamma -> ^e+ e+]CC)]CC", - "eminus": "[ D*(2007)0 -> (D0 -> K- pi+) ([gamma -> e+ ^e+]CC)]CC", - }, - - 'dst_k3pi_os' : { - "Dst0": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) (gamma -> e+ e-)]CC", - "D0": "[ D*(2007)0 -> ^(D0 -> K- pi- pi+ pi+) (gamma -> e+ e-)]CC", - "Kminus": "[ D*(2007)0 -> (D0 -> ^K- pi- pi+ pi+) (gamma -> e+ e-)]CC", - "piminus": "[ D*(2007)0 -> (D0 -> K- ^pi- pi+ pi+) (gamma -> e+ e-)]CC", - "piplus1": "[ D*(2007)0 -> (D0 -> K- pi- ^pi+ pi+) (gamma -> e+ e-)]CC", - "piplus2": "[ D*(2007)0 -> (D0 -> K- pi- pi+ ^pi+) (gamma -> e+ e-)]CC", - "gamma": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) ^(gamma -> e+ e-)]CC", - "eplus": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) (gamma -> ^e+ e-)]CC", - "eminus": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) (gamma -> e+ ^e-)]CC", - }, - - 'dst_k3pi_ss' : { - "Dst0": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) ([gamma -> e+ e+]CC)]CC", - "D0": "[ D*(2007)0 -> ^(D0 -> K- pi- pi+ pi+) ([gamma -> e+ e+]CC)]CC", - "Kminus": "[ D*(2007)0 -> (D0 -> ^K- pi- pi+ pi+) ([gamma -> e+ e+]CC)]CC", - "piminus": "[ D*(2007)0 -> (D0 -> K- ^pi- pi+ pi+) ([gamma -> e+ e+]CC)]CC", - "piplus1": "[ D*(2007)0 -> (D0 -> K- pi- ^pi+ pi+) ([gamma -> e+ e+]CC)]CC", - "piplus2": "[ D*(2007)0 -> (D0 -> K- pi- pi+ ^pi+) ([gamma -> e+ e+]CC)]CC", - "gamma": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) ^([gamma -> e+ e+]CC)]CC", - "eplus": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) ([gamma -> ^e+ e+]CC)]CC", - "eminus": "[ D*(2007)0 -> (D0 -> K- pi- pi+ pi+) ([gamma -> e+ ^e+]CC)]CC", - }, - - 'dsstp_2kpi_os' : { - "Dstp": "[ D*_s+ -> (D_s+ -> K- K+ pi+) (gamma -> e+ e-)]CC", - "DpDs": "[ D*_s+ -> ^(D_s+ -> K- K+ pi+) (gamma -> e+ e-)]CC", - "Kminus": "[ D*_s+ -> (D_s+ -> ^K- K+ pi+) (gamma -> e+ e-)]CC", - "Kplus": "[ D*_s+ -> (D_s+ -> K- ^K+ pi+) (gamma -> e+ e-)]CC", - "piplus": "[ D*_s+ -> (D_s+ -> K- K+ ^pi+) (gamma -> e+ e-)]CC", - "gamma": "[ D*_s+ -> (D_s+ -> K- K+ pi+) ^(gamma -> e+ e-)]CC", - "eplus": "[ D*_s+ -> (D_s+ -> K- K+ pi+) (gamma -> ^e+ e-)]CC", - "eminus": "[ D*_s+ -> (D_s+ -> K- K+ pi+) (gamma -> e+ ^e-)]CC", - }, - 'dsstp_2kpi_ss' : { - "Dstp": "[ D*_s+ -> (D_s+ -> K- K+ pi+) ([gamma -> e+ e+]CC)]CC", - "DpDs": "[ D*_s+ -> ^(D_s+ -> K- K+ pi+) ([gamma -> e+ e+]CC)]CC", - "Kminus": "[ D*_s+ -> (D_s+ -> ^K- K+ pi+) ([gamma -> e+ e+]CC)]CC", - "Kplus": "[ D*_s+ -> (D_s+ -> K- ^K+ pi+) ([gamma -> e+ e+]CC)]CC", - "piplus": "[ D*_s+ -> (D_s+ -> K- K+ ^pi+) ([gamma -> e+ e+]CC)]CC", - "gamma": "[ D*_s+ -> (D_s+ -> K- K+ pi+) ^([gamma -> e+ e+]CC)]CC", - "eplus": "[ D*_s+ -> (D_s+ -> K- K+ pi+) ([gamma -> ^e+ e+]CC)]CC", - "eminus": "[ D*_s+ -> (D_s+ -> K- K+ pi+) ([gamma -> e+ ^e+]CC)]CC", - }, - -} - -def MVA_dst_variables(line, pvs): - return (FunctorCollection( { "MVA": dst_BDT_functor(pvs, line=line)})) -#make_dtf_variables(options, input_data, ptype): -def make_dtf_variables(options, input_data, pvs, ptype="basic", mass_constrain = ["D*(2007)0", "D0" ], nparticles=2): - - DTF = DecayTreeFitter( - name="DTF_{hash}", - input_particles=input_data, - ) - - DTF_DMass_BestPV = DecayTreeFitter( - name="DTF_DMass_BestPV_{hash}", - input_particles=input_data, - mass_constraints=mass_constrain, - input_pvs=pvs, - fit_all_pvs=False, - ) - DTF_Mass_BestPV = DecayTreeFitter( - name="DTF_Mass_BestPV_{hash}", - input_particles=input_data, - mass_constraints=[mass_constrain[1]], - input_pvs=pvs, - fit_all_pvs=False, - ) - - DTF_BestPV = DecayTreeFitter( - name="DTF_BestPV_{hash}", - input_particles=input_data, - #mass_constraints=["D*(2007)0", "D0" ], - input_pvs=pvs, - fit_all_pvs=False, - ) - - DTF_DMass = DecayTreeFitter( - name="DTF_DMass_{hash}", - input_particles=input_data, - mass_constraints=mass_constrain, - output_level=3, - ) - DTF_Mass = DecayTreeFitter( - name="DTF_Mass_{hash}", - input_particles=input_data, - mass_constraints=[mass_constrain[1]], - output_level=3, - ) - - if ptype == "basic": - dtf_variables = make_basic_dtf_variables - elif ptype == "composite": - if nparticles == 2: - dtf_variables = make_composite_dtf_variables - elif nparticles == 3: - dtf_variables = make_composite_dtf_variables_3body - elif nparticles == 4: - dtf_variables = make_composite_dtf_variables_4body - - #dtf_vars = dtf_variables(options, pvs, input_data, -# DTF=DTF, -# pv_constraint=False, -# mass_constraint=False) - dtf_vars = dtf_variables(options, pvs, input_data, - DTF=DTF_BestPV, - pv_constraint=True, - mass_constraint=False) - #dtf_vars += dtf_variables(options, pvs, input_data, - # DTF=DTF_Mass, - # pv_constraint=False, - # mass_constraint=True, particle_name="D") - #dtf_vars += dtf_variables(options, pvs, input_data, - # DTF=DTF_Mass_BestPV, - # pv_constraint=True, - # mass_constraint=True, particle_name="D") - dtf_vars += dtf_variables(options, pvs, input_data, - DTF=DTF_DMass, - pv_constraint=False, - mass_constraint=True, particle_name="DstD") - dtf_vars += dtf_variables(options, pvs, input_data, - DTF=DTF_DMass_BestPV, - pv_constraint=True, - mass_constraint=True, particle_name="DstD") - - return dtf_vars - - -def make_Dst0ToD0EmEp_D0ToKmPip_tuple(options, line, pvs , rec_summary, dd='dst_kpi_os'): - - input_data=get_particles(f"/Event/HLT2/{line}/Particles") - extra_photons = get_particles(f"/Event/HLT2/{line}/{line[10:]}_prompt_Photons/Particles") - my_filter = create_lines_filter(f"LineFilter_{line}_{{hash}}",[line],) - - fields = decay_descriptor[dd] - - extra_variables= photon_isolation_variables(input_data, extra_photons) - composite_tuple_variables = { - "Dst0" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite") +\ - MVA_dst_variables("Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip", pvs) + make_DeltaM_variable(options), - "D0" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite"), - "gamma" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite")+extra_variables - } - basic_tuple_variables = { - "Kminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "piplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "eplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic") + extra_brem_variables, - "eminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic") + extra_brem_variables, - } - - my_tuple = Funtuple( - name=f"Tuple_{line}_{dd}", - tuple_name="DecayTree", - fields=fields, - variables= {**composite_tuple_variables, **basic_tuple_variables}, - event_variables=make_hlt2_event_variables(options, pvs, rec_summary), - inputs=input_data, - store_multiple_cand_info=True - ) - return [ my_filter, my_tuple] - -def make_Dst0ToD0EmEp_D0ToKmPimPipPip_tuple(options, line, pvs, rec_summary, dd='dst_k3pi_os'): - - input_data=get_particles(f"/Event/HLT2/{line}/Particles") - extra_photons = get_particles(f"/Event/HLT2/{line}/{line[10:]}_prompt_Photons/Particles") - my_filter = create_lines_filter(f"LineFilter_{line}_{{hash}}",[line],) - - fields = decay_descriptor[dd] - - extra_variables= photon_isolation_variables(input_data, extra_photons) - composite_tuple_variables = { - "Dst0" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite") +\ - MVA_dst_variables("Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip", pvs) + make_DeltaM_variable(options), - "D0" : make_composite_variables_4body(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite", nparticles=4), - "gamma" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite")+extra_variables - } - basic_tuple_variables = { - "Kminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "piminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "piplus1" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "piplus2" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic"), - "eplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic") + extra_brem_variables, - "eminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic") + extra_brem_variables, - } - - my_tuple = Funtuple( - name=f"Tuple_{line}_{dd}", - tuple_name="DecayTree", - fields=fields, - variables= {**composite_tuple_variables, **basic_tuple_variables}, - event_variables=make_hlt2_event_variables(options, pvs, rec_summary), - inputs=input_data, - store_multiple_cand_info=True - ) - return [ my_filter, my_tuple] - - -def make_DstpToDpDspEmEp_DpDspToKmKpPip_tuple(options, line, pvs , rec_summary, dd='dsstp_2kpi_os'): - - input_data=get_particles(f"/Event/HLT2/{line}/Particles") - extra_photons = get_particles(f"/Event/HLT2/{line}/{line[10:]}_prompt_Photons/Particles") - my_filter = create_lines_filter(f"LineFilter_{line}_{{hash}}",[line],) - - fields = decay_descriptor[dd] - - extra_variables= photon_isolation_variables(input_data, extra_photons) - composite_tuple_variables = { - "Dstp" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite", mass_constrain = ["D*_s+", "D_s+"]) +\ - MVA_dst_variables("Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip", pvs) + make_DeltaM_variable(options), - "DpDs" : make_composite_variables_3body(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite", mass_constrain = ["D*_s+", "D_s+"], nparticles=3), - "gamma" : make_composite_variables(options, pvs, input_data) + make_dtf_variables(options, input_data, pvs, "composite", mass_constrain = ["D*_s+", "D_s+"])+extra_variables, - } - basic_tuple_variables = { - "Kminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic", mass_constrain = ["D*_s+", "D_s+"]), - "Kplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic", mass_constrain = ["D*_s+", "D_s+"]), - "piplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic", mass_constrain = ["D*_s+", "D_s+"]), - "eplus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic", mass_constrain = ["D*_s+", "D_s+"])+ extra_brem_variables, - "eminus" : make_basic_variables(options, pvs, input_data)+make_dtf_variables(options, input_data, pvs, "basic", mass_constrain = ["D*_s+", "D_s+"])+ extra_brem_variables, - } - - my_tuple = Funtuple( - name=f"Tuple_{line}_{dd}", - tuple_name="DecayTree", - fields=fields, - variables= {**composite_tuple_variables, **basic_tuple_variables}, - event_variables=make_hlt2_event_variables(options, pvs, rec_summary), - inputs=input_data, - store_multiple_cand_info=True - ) - return [ my_filter, my_tuple] - -from DaVinci import Options, make_config -from PyConf.reading import get_pvs, get_rec_summary - -def main(options: Options): - - # get ODIN and DecReports location - pvs = get_pvs() - rec_summary = get_rec_summary() - - tuples = { - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS': make_Dst0ToD0EmEp_D0ToKmPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS", pvs, rec_summary, 'dst_kpi_os'), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS': make_Dst0ToD0EmEp_D0ToKmPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS", pvs, rec_summary, 'dst_kpi_ss'), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS_MVA': make_Dst0ToD0EmEp_D0ToKmPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS_MVA", pvs, rec_summary, 'dst_kpi_os'), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS_MVA': make_Dst0ToD0EmEp_D0ToKmPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS_MVA", pvs, rec_summary, 'dst_kpi_ss'), - - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS': make_Dst0ToD0EmEp_D0ToKmPimPipPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS", pvs, rec_summary,'dst_k3pi_os' ), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS': make_Dst0ToD0EmEp_D0ToKmPimPipPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS", pvs, rec_summary, 'dst_k3pi_ss'), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS_MVA': make_Dst0ToD0EmEp_D0ToKmPimPipPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS_MVA", pvs, rec_summary, 'dst_k3pi_os'), - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS_MVA': make_Dst0ToD0EmEp_D0ToKmPimPipPip_tuple(options, "Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS_MVA", pvs, rec_summary, 'dst_k3pi_ss'), - - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS': make_DstpToDpDspEmEp_DpDspToKmKpPip_tuple(options, "Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS", pvs, rec_summary, "dsstp_2kpi_os"), - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS': make_DstpToDpDspEmEp_DpDspToKmKpPip_tuple(options, "Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS", pvs, rec_summary, "dsstp_2kpi_ss"), - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS_MVA': make_DstpToDpDspEmEp_DpDspToKmKpPip_tuple(options, "Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS_MVA", pvs, rec_summary, "dsstp_2kpi_os"), - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS_MVA': make_DstpToDpDspEmEp_DpDspToKmKpPip_tuple(options, "Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS_MVA", pvs, rec_summary, "dsstp_2kpi_ss"), - } - - config = make_config(options, tuples) - - return config diff --git a/dst_to_dee/README.md b/dst_to_dee/README.md deleted file mode 100644 index ef730cb6d64738b78c8816fb19e70df9ba6a0f5a..0000000000000000000000000000000000000000 --- a/dst_to_dee/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Analysis production for dst_to_dee charm module. -Creates tuples for Charm 2024-validation MC and data - -## Analysis motivation -The module dst_to_dee contains several HLT2 lines to search for dark photons produced by a Charm decay. \ No newline at end of file diff --git a/dst_to_dee/hlt1.py b/dst_to_dee/hlt1.py deleted file mode 100644 index 9f65550e018e238562b48a8f54c1899b94f06d3f..0000000000000000000000000000000000000000 --- a/dst_to_dee/hlt1.py +++ /dev/null @@ -1,39 +0,0 @@ -############################################################################### -# (c) Copyright 2023 CERN for the benefit of the LHCb Collaboration # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -""" -Configures running HLT1 via Moore. -""" - -""" -Configures running HLT1 via Moore. -""" - -from Moore import Options -from Moore.config import allen_control_flow -from RecoConf.hlt1_allen import allen_gaudi_config, get_allen_line_names -from PyConf.application import configure_input, configure - -from RecoConf.muonid import make_muon_hits -make_muon_hits.global_bind(geometry_version=3) - - -def alg_config(options: Options): - """ - Configures algorithm running of HLT1 via Moore to be passed to Analysis Productions. - """ - - config = configure_input(options) - with allen_gaudi_config.bind(sequence="hlt1_pp_matching_no_ut_1000KHz"): - line_names = get_allen_line_names() - allen_node = allen_control_flow(options) - config.update(configure(options, allen_node)) - - return config \ No newline at end of file diff --git a/dst_to_dee/hlt2-Excl-UT.py b/dst_to_dee/hlt2-Excl-UT.py deleted file mode 100644 index 9a6b0507ea945a90652574c5298ad4262485d2b9..0000000000000000000000000000000000000000 --- a/dst_to_dee/hlt2-Excl-UT.py +++ /dev/null @@ -1,70 +0,0 @@ - -############################################################################### -# (c) Copyright 2024 CERN for the benefit of the LHCb Collaboration # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -"""Options for running a set of HLT2 lines -> mdf to calculate BW. - -Run like any other options file: - - ./Moore/run gaudirun.py hlt2_bandwidth_example.py - file_size = ls -lh --si hlt2_bandwidth_example.mdf - b/w (GB/s) = input rate (1140 kHz for this min bias) x file_size (MB) / options.evt_max -""" - -from Moore import Options, run_moore -from DDDB.CheckDD4Hep import UseDD4Hep -from Hlt2Conf.settings.hlt2_binds import config_pp_2024_without_UT -# Imports for 2024-like no-UT reconstruction scenario aligned with hlt2_pp_thor_without_UT -from RecoConf.global_tools import ( - stateProvider_with_simplified_geom, - trackMasterExtrapolator_with_simplified_geom, -) -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import ( - reconstruction as hlt2_reconstruction, - make_light_reco_pr_kf_without_UT, -) -from RecoConf.hlt2_tracking import ( - make_TrackBestTrackCreator_tracks, - make_PrKalmanFilter_noUT_tracks, - make_PrKalmanFilter_Velo_tracks, - make_PrKalmanFilter_Seed_tracks, -) -from RecoConf.decoders import default_VeloCluster_source -from RecoConf.event_filters import require_gec -from RecoConf.protoparticles import make_charged_protoparticles -from Hlt2Conf.settings.defaults import get_default_hlt1_filter_code_for_hlt2 -import sys -from Moore.streams import DETECTORS, Stream, Streams -from Hlt2Conf.lines.charm.dst_to_dee import all_lines - -if UseDD4Hep: - raise RuntimeError("Sorry, you'll need a detdesc stack to run over this MC. Please see https://lhcbdoc.web.cern.ch/lhcbdoc/moore/master/tutorials/running_over_mc.html#switching-to-a-detdesc-compatible-platform") - -def make_streams(): - streams = [ - Stream( - "dst_to_dee", - lines=[builder() for builder in all_lines.values()], # whole module - routing_bit=85, # some dummy value != 94 or 95 - # lines=[line_to_run()] # single line - detectors=[]) # Turbo and Full case - no detector raw banks - # detectors=DETECTORS) # if persisting detector raw banks i.e. special cases or TurCal lines - ] - return Streams(streams=streams) - -public_tools = [ - trackMasterExtrapolator_with_simplified_geom(), - stateProvider_with_simplified_geom(), -] -def alg_config(options: Options): - with reconstruction.bind(from_file=False), config_pp_2024_without_UT(): - config = run_moore(options, make_streams, public_tools) - return config diff --git a/dst_to_dee/hlt2-Incl-UT.py b/dst_to_dee/hlt2-Incl-UT.py deleted file mode 100644 index 4e05fe9ddd99119239a2d3bc95259ce76f18f703..0000000000000000000000000000000000000000 --- a/dst_to_dee/hlt2-Incl-UT.py +++ /dev/null @@ -1,70 +0,0 @@ - -############################################################################### -# (c) Copyright 2024 CERN for the benefit of the LHCb Collaboration # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -"""Options for running a set of HLT2 lines -> mdf to calculate BW. - -Run like any other options file: - - ./Moore/run gaudirun.py hlt2_bandwidth_example.py - file_size = ls -lh --si hlt2_bandwidth_example.mdf - b/w (GB/s) = input rate (1140 kHz for this min bias) x file_size (MB) / options.evt_max -""" - -from Moore import Options, run_moore -from Hlt2Conf.settings.hlt2_binds import config_pp_2024 -from DDDB.CheckDD4Hep import UseDD4Hep -# Imports for 2024-like no-UT reconstruction scenario aligned with hlt2_pp_thor_without_UT -from RecoConf.global_tools import ( - stateProvider_with_simplified_geom, - trackMasterExtrapolator_with_simplified_geom, -) -from RecoConf.reconstruction_objects import reconstruction -from RecoConf.hlt2_global_reco import ( - reconstruction as hlt2_reconstruction, - make_light_reco_pr_kf, -) -from RecoConf.hlt2_tracking import ( - make_TrackBestTrackCreator_tracks, - make_PrKalmanFilter_noUT_tracks, - make_PrKalmanFilter_Velo_tracks, - make_PrKalmanFilter_Seed_tracks, -) -from RecoConf.decoders import default_VeloCluster_source -from RecoConf.event_filters import require_gec -from RecoConf.protoparticles import make_charged_protoparticles -from Hlt2Conf.settings.defaults import get_default_hlt1_filter_code_for_hlt2 -import sys -from Moore.streams import DETECTORS, Stream, Streams -from Hlt2Conf.lines.charm.dst_to_dee import all_lines - -if UseDD4Hep: - raise RuntimeError("Sorry, you'll need a detdesc stack to run over this MC. Please see https://lhcbdoc.web.cern.ch/lhcbdoc/moore/master/tutorials/running_over_mc.html#switching-to-a-detdesc-compatible-platform") - -def make_streams(): - streams = [ - Stream( - "dst_to_dee", - lines=[builder() for builder in all_lines.values()], # whole module - routing_bit=85, # some dummy value != 94 or 95 - # lines=[line_to_run()] # single line - detectors=[]) # Turbo and Full case - no detector raw banks - # detectors=DETECTORS) # if persisting detector raw banks i.e. special cases or TurCal lines - ] - return Streams(streams=streams) - -public_tools = [ - trackMasterExtrapolator_with_simplified_geom(), - stateProvider_with_simplified_geom(), -] -def alg_config(options: Options): - with reconstruction.bind(from_file=False), config_pp_2024(): - config = run_moore(options, make_streams, public_tools) - return config diff --git a/dst_to_dee/info.yaml b/dst_to_dee/info.yaml deleted file mode 100644 index df3728683e7ba912f9fa8edbfb72a3cb1e26e5a0..0000000000000000000000000000000000000000 --- a/dst_to_dee/info.yaml +++ /dev/null @@ -1,178 +0,0 @@ -defaults: - inform: - - carlos.eduardo.cocha.toapaxi@cern.ch - wg: Charm - -{%- set UT_conditions = [ - ('-Excl-UT'), - ('-Incl-UT') -]%} - -{%- set evttype_subsample_nutext_nu_dir1_dir2_dddb_geometry = [ - -( '27184011', 'dst_to_dee', '1p6', '1.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '1p6', '1.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '1p6', '1.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '4p3', '4.3', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '4p3', '4.3', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '4p3', '4.3', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '5p7', '5.7', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '5p7', '5.7', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '5p7', '5.7', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '7p6', '7.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '7p6', '7.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '7p6', '7.6', 'Dev','-expected' , '.Q1.2', '10c', 'dddb-20240311', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '30000000', 'dst_to_dee', '7p6', '7.6', 'Dev', '-expected', '', '10c', 'dddb-20231017', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '30000000', 'dst_to_dee', '7p6', '7.6', 'Dev', '-expected', '', '10c', 'dddb-20231017', 'sim-20231017-vc', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27184011', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27186011', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27185021', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagDown', 'md', '','',''), -( '27184011', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27186011', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27185021', 'dst_to_dee', '4p3', '4.3', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27184011', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27186011', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27185021', 'dst_to_dee', '5p7', '5.7', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27184011', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27186011', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '27185021', 'dst_to_dee', '7p6', '7.6', '2024', '', '.Q1.2', '10d', 'dddb-20240427', 'sim10-2024.Q1.2-v1.0', 'run3/2024.Q1.2-v00.00', 'mc','MagUp', 'mu', '','',''), -( '' , 'dst_to_dee', '' , '' , '', '', '', '', '', '', 'run3/2024.Q1.2-v00.00', 'data','MagUp', 'mu', '24c2',301325 ,302403), -( '' , 'dst_to_dee', '' , '' , '', '', '', '', '', '', 'run3/2024.Q1.2-v00.00', 'data','MagUp', 'mu', '24c2',302429 ,303010), -( '' , 'dst_to_dee', '' , '' , '', '', '', '', '', '', 'run3/2024.Q1.2-v00.00', 'data','MagUp', 'mu', '24c2',303092 ,304604), -( '' , 'dst_to_dee', '' , '' , '', '', '', '', '', '', 'run3/2024.Q1.2-v00.00', 'data','MagUp', 'mu', '24c2',304648 ,306631), -( '' , 'dst_to_dee', '' , '' , '', '', '', '', '', '', 'run3/2024.Q1.2-v00.00', 'data','MagUp', 'mu', '24c3','',''), - - -]%} - - -{%- for evttype, id, nutext, nu, dir1, expc, dir2, simc, dddb, conddb, geometry, mc_or_data, polarity, magpol, sprucen,runin,runfin in evttype_subsample_nutext_nu_dir1_dir2_dddb_geometry %} -{% if mc_or_data == 'mc' %} -{%- for utcond in UT_conditions %} -{{evttype}}_2024_{{ polarity }}_{{simc}}_Nu{{nutext}}_HLT1{{utcond}}: - application: "Moore/v55r12@x86_64_v2-el9-clang16+detdesc-opt" - input: - bk_query: "/MC/{{dir1}}/Beam6800GeV{{expc}}-2024{{dir2}}-{{polarity}}-Nu{{nu}}-25ns-Pythia8/Sim{{simc}}/{{evttype}}/DIGI" - n_test_lfns: 1 - dq_flags: - - OK - - output: HLT1.DST - options: - entrypoint: dst_to_dee.hlt1:alg_config - extra_options: - input_raw_format: 0.5 - conddb_tag: {{conddb}}-{{magpol}}100 - dddb_tag: '{{dddb}}' - input_type: ROOT - output_type: ROOT - simulation: True - data_type: "Upgrade" - scheduler_legacy_mode: False - geometry_version: "{{geometry}}" - compression: - algorithm: ZSTD - level: 1 - max_buffer_size: 1048576 - - -{{evttype}}_2024_{{ polarity }}_{{simc}}_Nu{{nutext}}_HLT2{{utcond}}: - application: "Moore/v55r12@x86_64_v2-el9-clang16+detdesc-opt" - input: - job_name: {{evttype}}_2024_{{ polarity }}_{{simc}}_Nu{{nutext}}_HLT1{{utcond}} - output: HLT2_{{id}}.DST - options: - entrypoint: dst_to_dee.hlt2{{utcond}}:alg_config - extra_options: - conddb_tag: {{conddb}}-{{magpol}}100 - dddb_tag: '{{dddb}}' - input_raw_format: 0.5 - input_type: "ROOT" - output_type: "ROOT" - simulation: True - data_type: "Upgrade" - output_manifest_file: "HLT2.tck.json" - scheduler_legacy_mode: False - geometry_version: "{{geometry}}" - compression: - algorithm: ZSTD - level: 1 - max_buffer_size: 1048576 - -MC_{{evttype}}_2024_{{ polarity }}_{{simc}}_Nu{{nutext}}{{utcond}}: - application: "DaVinci/v64r9@x86_64_v2-el9-clang16+detdesc-opt" - input: - job_name: {{evttype}}_2024_{{ polarity }}_{{simc}}_Nu{{nutext}}_HLT2{{utcond}} - output: DVTUPLE.ROOT - options: - entrypoint: dst_to_dee.DV:main - extra_options: - conddb_tag: {{conddb}}-{{magpol}}100 - dddb_tag: '{{dddb}}' - input_raw_format: 0.5 - input_type: ROOT - simulation: True - input_manifest_file: "HLT2.tck.json" - data_type: "Upgrade" - event_store: HiveWhiteBoard - geometry_version: "{{geometry}}" - conditions_version: master - input_process: "Hlt2" - -{%- endfor %} -{% else %} -{% if sprucen == '24c2' %} -DATA_2024_{{ polarity }}_{{sprucen}}_{{runin}}_{{runfin}}: - application: "DaVinci/v64r9@x86_64_v2-el9-clang16-opt" - input: - bk_query: "/LHCb/Collision24/Beam6800GeV-VeloClosed-{{polarity}}/Real Data/Sprucing{{sprucen}}/94000000/CHARM.DST" - dq_flags: - - UNCHECKED - - OK - runs: - - {{runin}}:{{runfin}} - input_plugin: by-run - output: DVTUPLE.ROOT - options: - entrypoint: dst_to_dee.DV:main - extra_options: - input_raw_format: 0.5 - input_type: ROOT - simulation: False - data_type: "Upgrade" - event_store: HiveWhiteBoard - geometry_version: "{{geometry}}" - conditions_version: master - input_process: "TurboPass" - input_stream: "charm" -{% else %} -DATA_2024_{{ polarity }}_{{sprucen}}: - application: "DaVinci/v64r9@x86_64_v2-el9-clang16-opt" - input: - bk_query: "/LHCb/Collision24/Beam6800GeV-VeloClosed-{{polarity}}/Real Data/Sprucing{{sprucen}}/94000000/CHARM.DST" - dq_flags: - - UNCHECKED - - OK - keep_running: True - output: DVTUPLE.ROOT - options: - entrypoint: dst_to_dee.DV:main - extra_options: - input_raw_format: 0.5 - input_type: ROOT - simulation: False - data_type: "Upgrade" - event_store: HiveWhiteBoard - geometry_version: "{{geometry}}" - conditions_version: master - input_process: "TurboPass" - input_stream: "charm" -{% endif %} -{% endif %} -{%- endfor %} diff --git a/dst_to_dee/tupling.py b/dst_to_dee/tupling.py deleted file mode 100644 index 6e221dae2863b3c1493383ece48693abf53f7702..0000000000000000000000000000000000000000 --- a/dst_to_dee/tupling.py +++ /dev/null @@ -1,1011 +0,0 @@ -############################################################################## -# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -"""Common configuration functions - -""" - -import Functors as F -from Functors.math import log - -from FunTuple import FunctorCollection -from FunTuple.functorcollections import ( - MCHierarchy, - MCPromptDecay, - Kinematics, - SelectionInfo, - HltTisTos, - MCVertexInfo, - MCKinematics, - ParticleID, #wrong variables PID_PI = 0, PROBNN_D = nan - EventInfo, - LHCInfo, - ParticleIsolation, - MCPrimaries, - MCReconstructed, - MCReconstructible, -) - -from DaVinciMCTools import MCTruthAndBkgCat, MCReconstructed, MCReconstructible -from PyConf.Algorithms import ParticleToSubcombinationsAlg -from DecayTreeFitter import DecayTreeFitter -from PyConf.Algorithms import WeightedRelTableAlg, ThOrParticleSelection -FILTER_TREE = lambda id: F.FILTER(F.IS_ABS_ID(id)) @ F.GET_ALL_DESCENDANTS() -Hlt1_global_lines = [ - "Hlt1GECPassthroughDecision", - "Hlt1BeamGasDecision", - "Hlt1PassthroughDecision", - "Hlt1NoBeamDecision", - "Hlt1BeamOneDecision", - "Hlt1BeamTwoDecision", - "Hlt1BothBeamsDecision", - "Hlt1ODINLumiDecision", - "Hlt1ODINVeloOpenDecision", - "Hlt1ODINNoBiasDecision", - "Hlt1VeloMicroBiasDecision", - "Hlt1RICH1AlignmentDecision", - "Hlt1RICH2AlignmentDecision", - "Hlt1BeamGasDecision", - "Hlt1L02PPiDecision", - "Hlt1LowMassNoipDielectron_massSlice1_promptDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice1_promptDecision", - "Hlt1LowMassNoipDielectron_massSlice2_promptDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice2_promptDecision", - "Hlt1LowMassNoipDielectron_massSlice3_promptDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice3_promptDecision", - "Hlt1LowMassNoipDielectron_massSlice4_promptDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice4_promptDecision", - "Hlt1LowMassNoipDielectron_massSlice1_displacedDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice1_displacedDecision", - "Hlt1LowMassNoipDielectron_massSlice2_displacedDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice2_displacedDecision", - "Hlt1LowMassNoipDielectron_massSlice3_displacedDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice3_displacedDecision", - "Hlt1LowMassNoipDielectron_massSlice4_displacedDecision", - "Hlt1LowMassNoipDielectron_SS_massSlice4_displacedDecision", -] -Hlt1_1track_lines = [ - "Hlt1TrackMVADecision", - "Hlt1LowPtMuonDecision", - "Hlt1SingleHighPtMuonDecision", - "Hlt1SingleHighPtMuonNoMuIDDecision", - "Hlt1TrackMuonMVADecision", - "Hlt1OneMuonTrackLineDecision", - "Hlt1TrackElectronMVADecision", - "Hlt1SingleHighPtElectronDecision", - "Hlt1SingleHighEtDecision", -] -Hlt1_lines = Hlt1_1track_lines+[ - "Hlt1TwoTrackMVACharmXSecDecision", - "Hlt1TwoTrackMVADecision", - "Hlt1TwoTrackKsDecision", - "Hlt1D2KPiDecision", - "Hlt1D2KKDecision", - "Hlt1D2PiPiDecision", - "Hlt1KsToPiPiDecision", - "Hlt1LowPtDiMuonDecision",#removed - "Hlt1DiMuonNoIPDecision", - "Hlt1DiMuonNoIP_ssDecision", - "Hlt1DiMuonHighMassDecision", - "Hlt1DiMuonLowMassDecision",#replaced by Hlt1DiMuonDisplacedDecision - "Hlt1DiMuonSoftDecision", - "Hlt1DiMuonDisplacedDecision", - "Hlt1TwoKsDecision", - "Hlt1D2KPiAlignmentDecision", - "Hlt1DiMuonHighMassAlignmentDecision", - "Hlt1DisplacedDiMuonAlignmentDecision", - "Hlt1DisplacedDielectronDecision", - "Hlt1DisplacedLeptonsDecision",#removed -] - - -Hlt2_lines = [ - "Hlt2Charm_DstpToD0Pip_D0ToKmPip_XSec", - "Hlt2Charm_D0ToKmPip_XSec", - "Hlt2Charm_D0ToKmKp", - "Hlt2Charm_D0ToKmPip", - "Hlt2Charm_D0ToPimPip", - "Hlt2Charm_DpDspToKsKp_DD", - "Hlt2Charm_DpDspToKsKp_LD", - "Hlt2Charm_DpDspToKsKp_LL", - "Hlt2Charm_DpDspToKsPip_DD", - "Hlt2Charm_DpDspToKsPip_LD", - "Hlt2Charm_DpDspToKsPip_LL", - "Hlt2Charm_DpToKmPipPip", - "Hlt2Charm_DspToKmKpPip", - "Hlt2Charm_DpToKmPipPip_NoCuts", - "Hlt2Charm_DspToKmKpPip_NoCuts", - "Hlt2Charm_DpToKmPipPip_XSec", - "Hlt2Charm_DspToKmKpPip_XSec", - "Hlt2Charm_DstpToD0Pip_D0ToKmKp", - "Hlt2Charm_DstpToD0Pip_D0ToKmPip", - "Hlt2Charm_DstpToD0Pip_D0ToKpPim", - "Hlt2Charm_DstpToD0Pip_D0ToPimPip", - "Hlt2Charm_DstpToD0Pip_D0ToKmPip_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKpPim_LowBias", - "Hlt2Charm_D0ToKmPip_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKmKp_LowBias", - "Hlt2Charm_D0ToKmKp_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToPimPip_LowBias", - "Hlt2Charm_D0ToPimPip_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULDD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULDD_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD_Tight", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDLD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDLD_Tight", - "Hlt2Charm_D0ToKsPimPip_LL", - "Hlt2Charm_D0ToKsPimPip_DD", - "Hlt2Charm_D0ToKsPimPip_LL_LowBias", - "Hlt2Charm_D0ToKsPimPip_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsPimPip_LL", - "Hlt2Charm_DstpToD0Pip_D0ToKsPimPip_DD", - "Hlt2Charm_DstpToD0Pip_D0ToKsPimPip_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsPimPip_DD_LowBias", - "Hlt2Charm_D0ToKsKmPip_LL", - "Hlt2Charm_D0ToKsKmPip_DD", - "Hlt2Charm_D0ToKsKmPip_LL_LowBias", - "Hlt2Charm_D0ToKsKmPip_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmPip_LL", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmPip_DD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmPip_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmPip_DD_LowBias", - "Hlt2Charm_D0ToKsKpPim_LL", - "Hlt2Charm_D0ToKsKpPim_DD", - "Hlt2Charm_D0ToKsKpPim_LL_LowBias", - "Hlt2Charm_D0ToKsKpPim_DD_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKpPim_LL", - "Hlt2Charm_DstpToD0Pip_D0ToKsKpPim_DD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKpPim_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKpPim_DD_LowBias", - "Hlt2Charm_D0ToKsKmKp_LL", - "Hlt2Charm_D0ToKsKmKp_DD", - "Hlt2Charm_D0ToKsKmKp_LL_LowBias", - "Hlt2Charm_D0ToKsKmKp_DD_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmKp_LL", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmKp_DD", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmKp_LL_LowBias", - "Hlt2Charm_DstpToD0Pip_D0ToKsKmKp_DD_LowBias", - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_OS_MVA', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPip_SS_MVA', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_OS_MVA', - 'Hlt2Charm_Dst0ToD0EmEp_D0ToKmPimPipPip_SS_MVA', - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS', - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS', - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_OS_MVA', - 'Hlt2Charm_DstpToDpDspEmEp_DpDspToKmKpPip_SS_MVA', -] - -def make_composite_variables(options, pvs, data, add_truth=True, add_Hlt1TisTos=True): - if not options.simulation: - add_truth = False - variables = ( - FunctorCollection( - { - "MAXPT": F.MAX(F.PT), - "MINPT": F.MIN(F.PT), - "SUMPT": F.SUM(F.PT), - "MAXP": F.MAX(F.P), - "MINP": F.MIN(F.P), - "BPVDIRA": F.BPVDIRA(pvs), - "BPVDLS": F.BPVDLS(pvs), - "VCHI2DOF": F.CHI2DOF, - #"VNDOF": F.NDOF, - "BPVFDCHI2": F.BPVFDCHI2(pvs), - "BPVFD": F.BPVFD(pvs), - "BPVVDRHO": F.BPVVDRHO(pvs), - "BPVVDZ": F.BPVVDZ(pvs), - "BPVIPCHI2": F.BPVIPCHI2(pvs), - "BPVIP": F.BPVIP(pvs), - "LOGBPVIPCHI2": log(F.BPVIPCHI2(pvs)), - "BPVLTIME": F.BPVLTIME(pvs), - "MAXBPVIPCHI2": F.MAX(F.BPVIPCHI2(pvs)), - "MINBPVIPCHI2": F.MIN(F.BPVIPCHI2(pvs)), - "MAXBPVIP": F.MAX(F.BPVIP(pvs)), - "MINBPVIP": F.MIN(F.BPVIP(pvs)), - "MAXDOCACHI2": F.MAXDOCACHI2, - "MAXDOCA": F.MAXDOCA, - "MAXSDOCACHI2": F.MAXSDOCACHI2, - "MAXSDOCA": F.MAXSDOCA, - "COS12": F.ALV(1, 2), - "ETA": F.ETA, - "PHI": F.PHI, - "END_VX": F.END_VX, - "END_VY": F.END_VY, - "END_VZ": F.END_VZ, - "END_VX_ERR":F.SQRT @ F.CALL(0,0) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "END_VY_ERR":F.SQRT @ F.CALL(1,1) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "END_VZ_ERR":F.SQRT @ F.CALL(2,2) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "BPVX": F.BPVX(pvs), - "BPVY": F.BPVY(pvs), - "BPVZ": F.BPVZ(pvs), - "BPVX_ERR": F.SQRT @ F.CALL(0,0) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "BPVY_ERR": F.SQRT @ F.CALL(1,1) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "BPVZ_ERR": F.SQRT @ F.CALL(2,2) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "ALLPVFD" : F.ALLPV_FD(pvs), - "ALLPVIP" : F.ALLPV_IP(pvs), - "OBJECT_KEY": F.OBJECT_KEY, - } - ) - + Kinematics() - #+ ParticleID(extra_info=True) #only for daughters - ) - - if add_Hlt1TisTos: - variables += HltTisTos( - selection_type="Hlt1", trigger_lines=Hlt1_lines, data=data - ) - - if add_truth: - variables = add_truth_matching_functors( - options, - variables, - data, - hierarchy=True, - kinematics=True, - vertex_info=True, - bkgcat=True, - ) - - return variables - -def make_tistoscombinations(options, pvs, data): - algo_output = ParticleToSubcombinationsAlg( Input=data ) - relations = algo_output.OutputRelations - - tistos_variables_extra = HltTisTos( - selection_type="Hlt1", trigger_lines=["Hlt1TwoTrackMVADecision"], data=algo_output.OutputParticles - ) - tistos_combinations = {} - for k,v in tistos_variables_extra.get_thor_functors().items(): - tistos_combinations[k + "_SUBCOMB" ] = F.MAP_INPUT_ARRAY( v, relations ) - tistos_combinations = FunctorCollection( tistos_combinations ) - - return tistos_combinations - -def make_composite_variables_3body(options, pvs, data, add_truth=True): - - variables = ( - FunctorCollection( - { - #12 - "M12": F.SUBCOMB(Functor=F.MASS, Indices=(1, 2)), - "SDOCA12" : F.SDOCA(Child1=1,Child2=2), - "SDOCACHI212" : F.SDOCACHI2(Child1=1,Child2=2), - "DOCA12" : F.DOCA(Child1=1,Child2=2), - "DOCACHI212" : F.DOCACHI2(Child1=1,Child2=2), - "COS12": F.ALV(1, 2), - #"ETA12": F.SUBCOMB(Functor=F.ETA, Indices=(1, 2)), - #"PT12": F.SUBCOMB(Functor=F.PT, Indices=(1, 2)), - #"VCHI212": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(1, 2)), - #"END_VZ12": F.SUBCOMB(Functor=F.END_VZ, Indices=(1, 2)), - #"BPVZ12": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(1, 2)), - #"BPVCORRM12": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(1, 2)), - #13 - "M13": F.SUBCOMB(Functor=F.MASS, Indices=(1, 3)), - "SDOCA13" : F.SDOCA(Child1=1,Child2=3), - "SDOCACHI213" : F.SDOCACHI2(Child1=1,Child2=3), - "DOCA13" : F.DOCA(Child1=1,Child2=3), - "DOCACHI213" : F.DOCACHI2(Child1=1,Child2=3), - "COS13": F.ALV(1, 3), - #"ETA13": F.SUBCOMB(Functor=F.ETA, Indices=(1, 3)), - #"PT13": F.SUBCOMB(Functor=F.PT, Indices=(1, 3)), - #"VCHI213": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(1, 3)), - #"END_VZ13": F.SUBCOMB(Functor=F.END_VZ, Indices=(1, 3)), - #"BPVZ13": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(1, 3)), - #"BPVCORRM13": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(1, 3)), - #23 - "M23": F.SUBCOMB(Functor=F.MASS, Indices=(2, 3)), - "SDOCA23" : F.SDOCA(Child1=2,Child2=3), - "SDOCACHI223" : F.SDOCACHI2(Child1=2,Child2=3), - "DOCA23" : F.DOCA(Child1=2,Child2=3), - "DOCACHI223" : F.DOCACHI2(Child1=2,Child2=3), - "COS23": F.ALV(2, 3), - #"ETA23": F.SUBCOMB(Functor=F.ETA, Indices=(2, 3)), - #"PT23": F.SUBCOMB(Functor=F.PT, Indices=(2, 3)), - #"VCHI223": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(2, 3)), - #"END_VZ23": F.SUBCOMB(Functor=F.END_VZ, Indices=(2, 3)), - #"BPVZ23": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(2, 3)), - #"BPVCORRM23": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(2, 3)), - } - ) - ) - return make_composite_variables(options, pvs, data, add_truth)+make_tistoscombinations(options, pvs, data)+variables - -def make_composite_variables_4body(options, pvs, data, add_truth=True): - - variables = ( - FunctorCollection( - { - #14 - "M14": F.SUBCOMB(Functor=F.MASS, Indices=(1, 4)), - "SDOCA14" : F.SDOCA(Child1=1,Child2=4), - "SDOCACHI214" : F.SDOCACHI2(Child1=1,Child2=4), - "DOCA14" : F.DOCA(Child1=1,Child2=4), - "DOCACHI214" : F.DOCACHI2(Child1=1,Child2=4), - "COS14": F.ALV(1, 4), - #"ETA14": F.SUBCOMB(Functor=F.ETA, Indices=(1, 4)), - #"PT14": F.SUBCOMB(Functor=F.PT, Indices=(1, 4)), - #"VCHI214": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(1, 4)), - #"END_VZ14": F.SUBCOMB(Functor=F.END_VZ, Indices=(1, 4)), - #"BPVZ14": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(1, 4)), - #"BPVCORRM14": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(1, 4)), - #24 - "M24": F.SUBCOMB(Functor=F.MASS, Indices=(2, 4)), - "SDOCA24" : F.SDOCA(Child1=2,Child2=4), - "SDOCACHI224" : F.SDOCACHI2(Child1=2,Child2=4), - "DOCA24" : F.DOCA(Child1=2,Child2=4), - "DOCACHI224" : F.DOCACHI2(Child1=2,Child2=4), - "COS24": F.ALV(2, 4), - #"ETA24": F.SUBCOMB(Functor=F.ETA, Indices=(2, 4)), - #"PT24": F.SUBCOMB(Functor=F.PT, Indices=(2, 4)), - #"VCHI224": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(2, 4)), - #"END_VZ24": F.SUBCOMB(Functor=F.END_VZ, Indices=(2, 4)), - #"BPVZ24": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(2, 4)), - #"BPVCORRM24": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(2, 4)), - #34 - "M34": F.SUBCOMB(Functor=F.MASS, Indices=(3, 4)), - "SDOCA34" : F.SDOCA(Child1=3,Child2=4), - "SDOCACHI234" : F.SDOCACHI2(Child1=3,Child2=4), - "DOCA34" : F.DOCA(Child1=3,Child2=4), - "DOCACHI234" : F.DOCACHI2(Child1=3,Child2=4), - "COS34": F.ALV(3, 4), - #"ETA34": F.SUBCOMB(Functor=F.ETA, Indices=(3, 4)), - #"PT34": F.SUBCOMB(Functor=F.PT, Indices=(3, 4)), - #"VCHI234": F.SUBCOMB(Functor=F.CHI2DOF, Indices=(3, 4)), - #"END_VZ34": F.SUBCOMB(Functor=F.END_VZ, Indices=(3, 4)), - #"BPVZ34": F.SUBCOMB(Functor=F.BPVZ(pvs), Indices=(3, 4)), - #"BPVCORRM34": F.SUBCOMB(Functor=F.BPVCORRM(pvs), Indices=(3, 4)), - } - ) - ) - return make_composite_variables_3body(options, pvs, data, add_truth)+variables #make_tistoscombinations already included - -def make_DeltaM_variable(options): - return FunctorCollection({"DM": F.MASS - F.CHILD(1, F.MASS)}) - -def make_basic_variables(options, pvs, data, add_truth=True): - if not options.simulation: - add_truth = False - variables = ( - FunctorCollection( - { - "TRCHI2DOF": F.CHI2DOF @ F.TRACK, - "ETA": F.ETA, - "PHI": F.PHI, - "TRGHOSTPROB": F.GHOSTPROB, - "BPVIPCHI2": F.BPVIPCHI2(pvs), - "BPVIP": F.BPVIP(pvs), - "BPVX": F.BPVX(pvs), - "BPVY": F.BPVY(pvs), - "BPVZ": F.BPVZ(pvs), - "TX" : F.TX, - "TY" : F.TY, - "MINIPCHI2" : F.MINIPCHI2(pvs), - "MINIP" : F.MINIP(pvs), - "KEY" : F.VALUE_OR(-1) @ F.OBJECT_KEY @ F.TRACK, - "CTB" : F.POSITION @ F.CLOSESTTOBEAM @ F.TRACK, - "ISMUON" : F.ISMUON, - "TRACK_P": F.VALUE_OR(-1) @ F.P @ F.TRACK, - "TRACKPT": F.VALUE_OR(-1) @ F.TRACK_PT, - #"TRACK_PT_WITH_BREM": F.VALUE_OR(-1) @ F.PT_WITH_BREM @ F.TRACK, - #"TRACK_P_WITH_BREM": F.VALUE_OR(-1) @ F.P_WITH_BREM @ F.TRACK, - "TRACKHISTORY": F.VALUE_OR(-1) @ F.TRACKHISTORY @ F.TRACK, - "QOVERP": F.QOVERP @ F.TRACK, - "NDOF": F.VALUE_OR(-1) @ F.NDOF @ F.TRACK, - "NFTHITS": F.VALUE_OR(-1) @ F.NFTHITS @ F.TRACK, - "NHITS": F.VALUE_OR(-1) @ F.NHITS @ F.TRACK, - "NUTHITS": F.VALUE_OR(-1) @ F.NUTHITS @ F.TRACK, - "NVPHITS": F.VALUE_OR(-1) @ F.NVPHITS @ F.TRACK, - #"NMUONHITS": F.VALUE_OR(-1) @ F.NHITSMUONS @ F.TRACK, #https://gitlab.cern.ch/lhcb/Rec/-/merge_requests/3756 - "TRACKHASVELO": F.VALUE_OR(-1) @ F.TRACKHASVELO @ F.TRACK, - "TRACKHASUT": F.VALUE_OR(-1) @ F.TRACKHASUT @ F.TRACK, - "TRACKHISTORY": F.VALUE_OR(-1) @ F.TRACKHISTORY @ F.TRACK, - "TRACKISCLONE": F.VALUE_OR(-1) @ F.TRACKISCLONE @ F.TRACK, - "TRACKISDOWNSTREAM": F.VALUE_OR(-1) @ F.TRACKISDOWNSTREAM @ F.TRACK, - "TRACKISINVALID": F.VALUE_OR(-1) @ F.TRACKISINVALID @ F.TRACK, - "TRACKISLONG": F.VALUE_OR(-1) @ F.TRACKISLONG @ F.TRACK, - "TRACKISSELECTED": F.VALUE_OR(-1) @ F.TRACKISSELECTED @ F.TRACK, - "TRACKISTTRACK": F.VALUE_OR(-1) @ F.TRACKISTTRACK @ F.TRACK, - "TRACKISUPSTREAM": F.VALUE_OR(-1) @ F.TRACKISUPSTREAM @ F.TRACK, - "TRACKISVELO": F.VALUE_OR(-1) @ F.TRACKISVELO @ F.TRACK, - "TRACKISVELOBACKWARD": F.VALUE_OR(-1) @ F.TRACKISVELOBACKWARD @ F.TRACK, - "OBJECT_KEY": F.OBJECT_KEY, - "HASBREM": F.HASBREM, - "BREMENERGY": F.BREMENERGY, - "BREMBENDCORR": F.BREMBENDCORR, - "PID_P":F.VALUE_OR(F.NaN)@F.PID_P, - "PID_PI": F.VALUE_OR(F.NaN)@F.PID_PI, - "PID_K":F.VALUE_OR(F.NaN)@F.PID_K, - "PID_E":F.VALUE_OR(F.NaN)@F.PID_E, - "RICH_DLL_E": F.VALUE_OR(F.NaN)@F.RICH_DLL_E, - "PROBNN_E":F.VALUE_OR(F.NaN)@F.PROBNN_E, - "GHOSTPROB":F.GHOSTPROB, - "CHARGE":F.CHARGE, - } - ) - + Kinematics() - + ParticleID(extra_info=True) - ) - - variables += HltTisTos( - selection_type="Hlt1", trigger_lines=Hlt1_1track_lines, data=data - ) - - if add_truth: - variables = add_truth_matching_functors( - options, - variables, - data, - hierarchy=True, - kinematics=True, - vertex_info=True, - bkgcat=False, - ) - - return variables - -def make_hlt2_event_variables(options, pvs, rec_summary): - # define event level variables - evt_variables = EventInfo() - if not options.simulation: - evt_variables += LHCInfo() #FillNumber - evt_variables += SelectionInfo(selection_type="Hlt2", trigger_lines=Hlt2_lines) - evt_variables += SelectionInfo(selection_type="Hlt1", trigger_lines=Hlt1_lines) - evt_variables += FunctorCollection( - { - "ALLPVX": F.ALLPVX(pvs), - "ALLPVY": F.ALLPVY(pvs), - "ALLPVZ": F.ALLPVZ(pvs), - "ALLPVNDOF": F.MAP(F.VALUE_OR(F.NaN) @ F.NDOF) @ F.TES(pvs), - "ALLPVCHI2": F.MAP(F.VALUE_OR(F.NaN) @ F.CHI2) @ F.TES(pvs), - "nPVs": F.SIZE(pvs), - "nTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nTracks"), - "nLongTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nLongTracks"), - "nMuonTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nMuonTracks"), - "nFTClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nFTClusters"), - "nVPClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nVPClusters"), - "nUTClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nUTClusters"), - "nSPDhits": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nSPDhits"), - "nEcalClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nEcalClusters"), - "nEcalClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nEcalClusters"), - "eCalTot": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "eCalTot"), - "hCalTot": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "hCalTot"), - "nRich1Hits": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nRich1Hits"), - "nRich2Hits": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nRich2Hits"), - } - ) - return evt_variables - -def add_truth_matching_functors( - options, - variables, - data, - hierarchy=True, - kinematics=True, - vertex_info=True, - bkgcat=False, - prompt_info=True, -): - """Add MC truth matching functors to an existing FunctorCollection. - - Args: - options (DaVinci.Options): DaVinci options object. - variables (FunctorCollection): FunctorCollection to modify - data: data handle - hierarchy (bool): Add MCHierarchy info (default True) - kinematics (bool): Add MCKinematics info (default True) - vertex_info (bool): Add MCVertexInfo (default True) - bkgcat (bool): Add TRUEKEY and BKGCAT functors - intended for composite particles (default False) - prompt_info (bool): Add MCPromptDecay info (default True) - - Returns: - FunctorCollection: modified FunctorCollection with truth matched variables. - """ - assert ( - options.simulation - ), "options.simulation is set to False - it doesn't make sense to add truth matching." - - MCTRUTH = MCTruthAndBkgCat(data) - - if bkgcat: - variables += FunctorCollection( - { - # Important note: specify an invalid value for integer functors if there exists no truth info. - # The invalid value for floating point functors is set to nan. - "TRUEKEY": F.VALUE_OR(-1) @ MCTRUTH(F.OBJECT_KEY), - "BKGCAT": MCTRUTH.BkgCat, - } - ) - if hierarchy: - variables += MCHierarchy(mctruth_alg=MCTRUTH) # likely to change again!! - if vertex_info: - variables += MCVertexInfo(mctruth_alg=MCTRUTH) # likely to change again!! - if kinematics: - variables += MCKinematics(mctruth_alg=MCTRUTH) # likely to change again!! - if prompt_info: - variables += MCPromptDecay(mctruth_alg=MCTRUTH) - - return variables - -### DTF variables ### - -def make_basic_dtf_variables(options, pvs, data, DTF=None, pv_constraint=False, mass_constraint=False, particle_name=""): - variables = ( - FunctorCollection( - { - "TRCHI2DOF": F.CHI2DOF @ F.TRACK, - "ETA": F.ETA, - "PHI": F.PHI, - "TRGHOSTPROB": F.GHOSTPROB, - "BPVIPCHI2": F.BPVIPCHI2(pvs), - "BPVIP": F.BPVIP(pvs), - "BPVX": F.BPVX(pvs), - "BPVY": F.BPVY(pvs), - "BPVZ": F.BPVZ(pvs), - "TX" : F.TX, - "TY" : F.TY, - "MINIPCHI2" : F.MINIPCHI2(pvs), - "MINIP" : F.MINIP(pvs), - "KEY" : F.VALUE_OR(-1) @ F.OBJECT_KEY @ F.TRACK, - "CTB" : F.POSITION @ F.CLOSESTTOBEAM @ F.TRACK, - "TRACKPT": F.TRACK_PT, - "TRACKHISTORY": F.VALUE_OR(-1) @ F.TRACKHISTORY @ F.TRACK, - "QOVERP": F.QOVERP @ F.TRACK, - "NDOF": F.VALUE_OR(-1) @ F.NDOF @ F.TRACK, - } - ) - + Kinematics() - ) - - if(mass_constraint): - if(pv_constraint): # MASS + PV - dtf_variables_mass_pv = FunctorCollection({ - 'DTF_PV_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_mass_pv - else: # MASS - dtf_variables_mass = FunctorCollection( - {'DTF_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables_mass - - elif(pv_constraint): # PV - dtf_variables_pv = FunctorCollection({ - 'DTF_PV_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_pv - - else: # NO MASS/PV - dtf_variables = FunctorCollection( - {'DTF_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables - -def make_composite_dtf_variables(options, pvs, data, DTF=None, pv_constraint=False, mass_constraint=False, particle_name=""): - variables = ( - FunctorCollection( - { - "MAXPT": F.MAX(F.PT), - "MINPT": F.MIN(F.PT), - "SUMPT": F.SUM(F.PT), - "MAXP": F.MAX(F.P), - "MINP": F.MIN(F.P), - "BPVDIRA": F.BPVDIRA(pvs), - "VCHI2DOF": F.CHI2DOF, #CHI2VXNDOF - "BPVFDCHI2": F.BPVFDCHI2(pvs), - "BPVFD": F.BPVFD(pvs), - "BPVVDRHO": F.BPVVDRHO(pvs), - "BPVVDZ": F.BPVVDZ(pvs), - "BPVIPCHI2": F.BPVIPCHI2(pvs), - "BPVIP": F.BPVIP(pvs), - "LOGBPVIPCHI2": log(F.BPVIPCHI2(pvs)), - "BPVLTIME": F.BPVLTIME(pvs), - "MAXBPVIPCHI2": F.MAX(F.BPVIPCHI2(pvs)), #MAX_ - "MINBPVIPCHI2": F.MIN(F.BPVIPCHI2(pvs)), - "MAXBPVIP": F.MAX(F.BPVIP(pvs)), - "MINBPVIP": F.MIN(F.BPVIP(pvs)), - "ETA": F.ETA, - "PHI": F.PHI, - "END_VX": F.END_VX, - "END_VY": F.END_VY, - "END_VZ": F.END_VZ, - "END_VX_ERR":F.SQRT @ F.CALL(0,0) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "END_VY_ERR":F.SQRT @ F.CALL(1,1) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "END_VZ_ERR":F.SQRT @ F.CALL(2,2) @ F.POS_COV_MATRIX @ F.ENDVERTEX, - "BPVX": F.BPVX(pvs), - "BPVY": F.BPVY(pvs), - "BPVZ": F.BPVZ(pvs), - "BPVX_ERR": F.SQRT @ F.CALL(0,0) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "BPVY_ERR": F.SQRT @ F.CALL(1,1) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "BPVZ_ERR": F.SQRT @ F.CALL(2,2) @ F.POS_COV_MATRIX @ F.BPV(pvs), - "ALLPVFD" : F.ALLPV_FD(pvs), - "ALLPVIP" : F.ALLPV_IP(pvs), - - } - ) - + Kinematics() - ) - - addstring = "DTF" - if(pv_constraint): - addstring += '_PV' - if(mass_constraint): - addstring += '_M' - addstring += particle_name - - DTF_chi2ndof = FunctorCollection( - { - addstring+"_DTFCHI2": DTF.CHI2, - addstring+"_DTFNDOF": DTF.NDOF, - addstring+"_CTAU": DTF.CTAU, - addstring+"_CTAUERR": DTF.CTAUERR, - addstring+"_MERR": DTF.MASSERR, - } - ) - - if(mass_constraint): - if(pv_constraint): # MASS + PV - dtf_variables_mass_pv = FunctorCollection({ - 'DTF_PV_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_mass_pv+DTF_chi2ndof - else: # MASS - dtf_variables_mass = FunctorCollection( - {'DTF_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables_mass+DTF_chi2ndof - - elif(pv_constraint): # PV - dtf_variables_pv = FunctorCollection({ - 'DTF_PV_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_pv+DTF_chi2ndof - - else: # NO MASS/PV - dtf_variables = FunctorCollection( - {'DTF_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables+DTF_chi2ndof - -def make_composite_dtf_variables_3body(options, pvs, data, DTF=None, pv_constraint=False, mass_constraint=False, particle_name=""): - variables = ( - FunctorCollection( - { - "M13": F.SUBCOMB(Functor=F.MASS, Indices=(1, 3)), - "M23": F.SUBCOMB(Functor=F.MASS, Indices=(2, 3)), - } - ) - ) - - if(mass_constraint): - if(pv_constraint): # MASS + PV - dtf_variables_mass_pv = FunctorCollection({ - 'DTF_PV_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_mass_pv+make_composite_dtf_variables(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - else: # MASS - dtf_variables_mass = FunctorCollection( - {'DTF_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables_mass+make_composite_dtf_variables(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - - elif(pv_constraint): # PV - dtf_variables_pv = FunctorCollection({ - 'DTF_PV_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_pv+make_composite_dtf_variables(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - - else: # NO MASS/PV - dtf_variables = FunctorCollection( - {'DTF_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - - return dtf_variables+make_composite_dtf_variables(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - -def make_composite_dtf_variables_4body(options, pvs, data, DTF=None, pv_constraint=False, mass_constraint=False, particle_name=""): - variables = ( - FunctorCollection( - { - "M14": F.SUBCOMB(Functor=F.MASS, Indices=(1, 4)), - "M24": F.SUBCOMB(Functor=F.MASS, Indices=(2, 4)), - "M34": F.SUBCOMB(Functor=F.MASS, Indices=(3, 4)), - } - ) - ) - - if(mass_constraint): - if(pv_constraint): # MASS + PV - dtf_variables_mass_pv = FunctorCollection({ - 'DTF_PV_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_mass_pv+make_composite_dtf_variables_3body(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - else: # MASS - dtf_variables_mass = FunctorCollection( - {'DTF_M'+ particle_name + '_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - return dtf_variables_mass+make_composite_dtf_variables_3body(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - - elif(pv_constraint): # PV - dtf_variables_pv = FunctorCollection({ - 'DTF_PV_' + k: DTF(v) - for k, v in variables.get_thor_functors().items() - }) - return dtf_variables_pv+make_composite_dtf_variables_3body(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - - else: # NO MASS/PV - dtf_variables = FunctorCollection( - {'DTF_' + k: DTF(v) - for k, v in variables.get_thor_functors().items()}) - - return dtf_variables+make_composite_dtf_variables_3body(options,pvs,data,DTF,pv_constraint,mass_constraint, particle_name) - - -def make_MC_basic_variables(): - MC_MOTHER_ID = lambda gen: F.VALUE_OR(0) @ F.MC_MOTHER(gen, F.PARTICLE_ID) - MC_MOTHER_KEY = lambda gen: F.VALUE_OR(-1) @ F.MC_MOTHER(gen, F.OBJECT_KEY) - - variables = ( - FunctorCollection( - { - "OBJECT_KEY": F.OBJECT_KEY, - "ETA": F.ETA, - "PHI": F.PHI, - "ORIGIN_VX": F.ORIGIN_VX, - "ORIGIN_VY": F.ORIGIN_VY, - "ORIGIN_VZ": F.ORIGIN_VZ, - "FOURMOMENTUM": F.FOURMOMENTUM, - "TRUEID": F.PARTICLE_ID, - "MC_MOTHER_ID": MC_MOTHER_ID(1), - "MC_MOTHER_KEY": MC_MOTHER_KEY(1), - "MC_GD_MOTHER_ID": MC_MOTHER_ID(2), - "MC_GD_MOTHER_KEY": MC_MOTHER_KEY(2), - "MC_GD_GD_MOTHER_ID": MC_MOTHER_ID(3), - "MC_GD_GD_MOTHER_KEY": MC_MOTHER_KEY(3), - } - ) - + Kinematics() - ) - - - from PyConf.reading import get_mc_particles, get_pp2mcp_relations, get_mc_track_info - MC_data = get_mc_particles("/Event/HLT2/MC/Particles") - relations_charged = get_pp2mcp_relations("/Event/HLT2/Relations/ChargedPP2MCP") - relations_neutral = get_pp2mcp_relations("/Event/HLT2/Relations/NeutralPP2MCP") - mcreconstructed_all = MCReconstructed( - input_mcparticles=MC_data, - use_best_mcmatch=True, - relations_charged=relations_charged, - relations_neutral=relations_neutral, - ) - mcreconstructible_all = MCReconstructible( - input_mctrackinfo=get_mc_track_info() - ) - import FunTuple.functorcollections as FC - vars_reconstructed = FC.MCReconstructed(mcreconstructed_alg=mcreconstructed_all, extra_info=True) - vars_reconstructible = FC.MCReconstructible(mcreconstructible_alg=mcreconstructible_all, extra_info=True) - - - return variables+vars_reconstructed+vars_reconstructible - -def make_MC_composite_variables(): - MC_MOTHER_ID = lambda gen: F.VALUE_OR(0) @ F.MC_MOTHER(gen, F.PARTICLE_ID) - MC_MOTHER_KEY = lambda gen: F.VALUE_OR(-1) @ F.MC_MOTHER(gen, F.OBJECT_KEY) - - variables = ( - FunctorCollection( - { - "END_VX": F.END_VX, - "END_VY": F.END_VY, - "END_VZ": F.END_VZ, - "LTIME": F.MC_LIFETIME, - "OBJECT_KEY": F.OBJECT_KEY, - "ETA": F.ETA, - "PHI": F.PHI, - "ORIGIN_VX": F.ORIGIN_VX, - "ORIGIN_VY": F.ORIGIN_VY, - "ORIGIN_VZ": F.ORIGIN_VZ, - "FOURMOMENTUM": F.FOURMOMENTUM, - "TRUEID": F.PARTICLE_ID, - "MC_MOTHER_ID": MC_MOTHER_ID(1), - "MC_MOTHER_KEY": MC_MOTHER_KEY(1), - "MC_GD_MOTHER_ID": MC_MOTHER_ID(2), - "MC_GD_MOTHER_KEY": MC_MOTHER_KEY(2), - "MC_GD_GD_MOTHER_ID": MC_MOTHER_ID(3), - "MC_GD_GD_MOTHER_KEY": MC_MOTHER_KEY(3), - } - ) - + Kinematics() - + MCPromptDecay() - ) - - return variables - -def make_MC_event_variables(mc_header): - # define event level variables - evt_variables = EventInfo() - evt_variables += MCPrimaries(mc_header=mc_header) - - return evt_variables - -def make_top_isolation_variables(hlt2_line, input_data, locations = ["LongTrackIso","NeutralIso"]): - from PyConf.reading import get_particles - from IsolationTools import VertexAndConeIsolation - - possible_charm_locations = ["LongTrackIso", "TTrackIso", "DownstreamTrackIso", "UpstreamTrackIso", "NeutralIso", "PizIso"] - coneangles = [0.25,0.5,1.,1.5,2.] - - count = 0 - for location in locations: - extra_particles = get_particles(f"/Event/HLT2/{hlt2_line}/{location}/Particles") - - for coneangle in coneangles: - top_RTAlg = VertexAndConeIsolation( - name=location+"_"+str(coneangle), - reference_particles=input_data, - related_particles=extra_particles, - cut=F.DR2<coneangle) - - if count == 0: - top_iso_variables = ParticleIsolation(isolation_alg=top_RTAlg,array_indx_name='indx') - else: - top_iso_variables += ParticleIsolation(isolation_alg=top_RTAlg,array_indx_name='indx') - count += 1 - - - return top_iso_variables - -def make_basic_isolation_variables(hlt2_line, input_data, locations = ["LongTrackIso","NeutralIso"]): - from PyConf.reading import get_particles - from IsolationTools import VertexAndConeIsolation - from PyConf.Algorithms import ThOrParticleSelection - - basic_code = (F.FILTER(F.ALL) @ F.GET_ALL_BASICS()) - basic_particles = ThOrParticleSelection(InputParticles=input_data, Functor=basic_code).OutputSelection - - possible_charm_locations = ["LongTrackIso", "TTrackIso", "DownstreamTrackIso", "UpstreamTrackIso", "NeutralIso", "PizIso"] - coneangles = [0.25,0.5,1.,1.5,2.] - - count = 0 - for location in locations: - extra_particles = get_particles(f"/Event/HLT2/{hlt2_line}/{location}/Particles") - - for coneangle in coneangles: - basic_RTAlg = VertexAndConeIsolation( - name=location+"_"+str(coneangle), - reference_particles=basic_particles, - related_particles=extra_particles, - cut=F.DR2<coneangle) - - if count == 0: - basic_iso_variables = ParticleIsolation(isolation_alg=basic_RTAlg,array_indx_name='indx') - else: - basic_iso_variables += ParticleIsolation(isolation_alg=basic_RTAlg,array_indx_name='indx') - count += 1 - - - return basic_iso_variables - - -def make_intermediate_isolation_variables(hlt2_line, input_data, locations = ["LongTrackIso","NeutralIso"], composite_ID = "J/psi(1S)"): - from PyConf.reading import get_particles - from IsolationTools import VertexAndConeIsolation - from PyConf.Algorithms import ThOrParticleSelection - - intermediate_code = F.FILTER(F.IS_ABS_ID(composite_ID)) @ F.GET_ALL_DESCENDANTS() - intermediate_particles = ThOrParticleSelection(InputParticles=input_data, Functor=intermediate_code).OutputSelection - - possible_charm_locations = ["LongTrackIso", "TTrackIso", "DownstreamTrackIso", "UpstreamTrackIso", "NeutralIso", "PizIso"] - coneangles = [0.25,0.5,1.,1.5,2.] - - count = 0 - for location in locations: - extra_particles = get_particles(f"/Event/HLT2/{hlt2_line}/{location}/Particles") - - for coneangle in coneangles: - intermediate_RTAlg = VertexAndConeIsolation( - name=location+"_"+str(coneangle), - reference_particles=intermediate_particles, - related_particles=extra_particles, - cut=F.DR2<coneangle) - - if count == 0: - intermediate_iso_variables = ParticleIsolation(isolation_alg=intermediate_RTAlg,array_indx_name='indx') - else: - intermediate_iso_variables += ParticleIsolation(isolation_alg=intermediate_RTAlg,array_indx_name='indx') - count += 1 - - - return intermediate_iso_variables - -def photon_isolation_variables(input_data, extra_photons): - - gamma_data = ThOrParticleSelection( - InputParticles=input_data, Functor=FILTER_TREE("gamma") - ).OutputSelection - - ###### test isolation - gamma_pt_nc_isoAlg = WeightedRelTableAlg( - ReferenceParticles=gamma_data, - InputCandidates=extra_photons, - Cut=F.ALL,) #in_range(0. * MeV, F.COMB_MASS(), 700. * MeV)) - - gamma_pt_nc_isoAlg_Rels = gamma_pt_nc_isoAlg.OutputRelations - - prefix = "HEAD_NC_gammaIsoAll" - extra_variables= FunctorCollection( - { - f"{prefix}_P": F.MAP_INPUT_ARRAY(Functor=F.P, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_PT": F.MAP_INPUT_ARRAY(Functor=F.PT, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_PX": F.MAP_INPUT_ARRAY(Functor=F.PX, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_PY": F.MAP_INPUT_ARRAY(Functor=F.PY, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_PZ": F.MAP_INPUT_ARRAY(Functor=F.PZ, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_IS_PHOTON": F.MAP_INPUT_ARRAY(Functor=F.VALUE_OR(F.NaN) @ F.VALUE_OR(F.NaN)@ F.IS_PHOTON, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_IS_NOT_H": F.MAP_INPUT_ARRAY(Functor=F.VALUE_OR(F.NaN) @ F.IS_NOT_H, Relations=gamma_pt_nc_isoAlg_Rels), - f"{prefix}_CALO_NEUTRAL_SHOWER_SHAPE": F.MAP_INPUT_ARRAY(Functor=F.VALUE_OR(F.NaN) @ F.CALO_NEUTRAL_SHOWER_SHAPE, Relations=gamma_pt_nc_isoAlg_Rels), - }) - - coneangles = [0.05, 0.1, 0.15, 0.20, 0.25, 0.30, 0.4, 0.5, 0.75, 1., 2. ] - coneangles_name = ["5", "10", "15", "20", '25', "30", "40", '50', "75", '100', '200' ] - - for i, coneangle in enumerate(coneangles): - gamma_pt_nc_angle_isoAlg = WeightedRelTableAlg( - ReferenceParticles=gamma_data, - InputCandidates=extra_photons, - Cut=F.DR2<coneangle) - gamma_pt_nc_angle_isoAlg_Rels = gamma_pt_nc_angle_isoAlg.OutputRelations - prefix = f"HEAD_NC_gammaIso{coneangles_name[i]}" - extra_variables += FunctorCollection( - { - f"{prefix}_MAXP": F.VALUE_OR(0) @ F.P @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAXPX": F.VALUE_OR(0) @ F.PX @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAXPY": F.VALUE_OR(0) @ F.PY @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAXPZ": F.VALUE_OR(0) @ F.PZ @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MINP": F.VALUE_OR(0) @ F.P @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MINPX": F.VALUE_OR(0) @ F.PX @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MINPY": F.VALUE_OR(0) @ F.PY @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MINPZ": F.VALUE_OR(0) @ F.PZ @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAX_IS_PHOTON": F.VALUE_OR(F.NaN) @ F.IS_PHOTON @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAX_IS_NOT_H": F.VALUE_OR(F.NaN) @ F.IS_NOT_H @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MAX_CALO_NEUTRAL_SHOWER_SHAPE": F.VALUE_OR(F.NaN) @ F.CALO_NEUTRAL_SHOWER_SHAPE @ F.TO @ F.ENTRY_WITH_MAX_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MIN_IS_PHOTON": F.VALUE_OR(F.NaN) @ F.IS_PHOTON @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MIN_IS_NOT_H": F.VALUE_OR(F.NaN) @ F.IS_NOT_H @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_MIN_CALO_NEUTRAL_SHOWER_SHAPE": F.VALUE_OR(F.NaN) @ F.CALO_NEUTRAL_SHOWER_SHAPE @ F.TO @ F.ENTRY_WITH_MIN_REL_VALUE_OF(F.P@F.TO@F.FORWARDARG0).bind( F.RELATIONS.bind(F.TES(gamma_pt_nc_angle_isoAlg_Rels), F.FORWARDARGS), F.FORWARDARGS), - f"{prefix}_P": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.P, Relations=gamma_pt_nc_angle_isoAlg_Rels), - f"{prefix}_PT": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.PT, Relations=gamma_pt_nc_angle_isoAlg_Rels), - f"{prefix}_PX": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.PX, Relations=gamma_pt_nc_angle_isoAlg_Rels), - f"{prefix}_PY": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.PY, Relations=gamma_pt_nc_angle_isoAlg_Rels), - f"{prefix}_PZ": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.PZ, Relations=gamma_pt_nc_angle_isoAlg_Rels), - #f"{prefix}_DR2": F.VALUE_OR(0) @ F.MAP_INPUT_ARRAY(Functor=F.DR2, Relations=gamma_pt_nc_isoAlg_Rels), - #f"{prefix}_IS_PHOTON": F.MAP_INPUT_ARRAY(Functor=F.IS_PHOTON, Relations=gamma_pt_nc_isoAlg_Rels), - #f"{prefix}_IS_NOT_H": F.VALUE_OR(0)@ F.MAP_INPUT_ARRAY(Functor=F.IS_NOT_H, Relations=gamma_pt_nc_isoAlg_Rels), - #f"{prefix}_CALO_NEUTRAL_SHOWER_SHAPE": F.VALUE_OR(0)@ F.MAP_INPUT_ARRAY(Functor=F.CALO_NEUTRAL_SHOWER_SHAPE, Relations=gamma_pt_nc_isoAlg_Rels), - } - ) - return extra_variables \ No newline at end of file