From e96a5f4174888ce772b8b70fc276b931c2379fda Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Mon, 17 Mar 2025 15:19:49 +0000 Subject: [PATCH 1/8] picking Trigger part --- .../TrigDitauHypo/ATLAS_CHECK_THREAD_SAFETY | 1 + .../TrigDitauHypo/CMakeLists.txt | 16 ++ .../TrigDitauHypo/python/TrigDiTauHypoTool.py | 36 ++++ .../TrigDitauHypo/src/ITrigDiTauHypoTool.h | 34 ++++ .../TrigDitauHypo/src/TrigDiTauHypoAlg.cxx | 103 ++++++++++ .../TrigDitauHypo/src/TrigDiTauHypoAlg.h | 28 +++ .../TrigDitauHypo/src/TrigDiTauHypoTool.cxx | 70 +++++++ .../TrigDitauHypo/src/TrigDiTauHypoTool.h | 29 +++ .../src/components/TrigDiTauHypo_entries.cxx | 6 + .../TriggerEDMAuxAccessors.h | 42 ++++- .../TrigOutputHandling/src/HLTEDMCreator.cxx | 3 + .../TrigOutputHandling/src/HLTEDMCreator.h | 2 + .../python/BuildSignatureFlags.py | 20 ++ .../test_trig_mc_v1Dev_slice_ditau_build.py | 31 +++ .../test_trig_mc_v1Dev_slice_ditau_grid.py | 44 +++++ .../TrigEDMConfig/python/TriggerEDMRun3.py | 20 ++ .../python/HLT/Config/GenerateMenuMT.py | 5 +- .../HLT/Config/Utility/DictFromChainName.py | 33 +++- .../HLT/Ditau/DitauChainConfiguration.py | 35 ++++ .../python/HLT/Ditau/DitauConfigFlagsHLT.py | 25 +++ .../python/HLT/Ditau/DitauMenuSequences.py | 178 ++++++++++++++++++ .../HLT/Ditau/GenerateDitauChainDefs.py | 35 ++++ .../python/HLT/Ditau/__init__.py | 0 .../python/HLT/Menu/Dev_pp_run3_v1.py | 32 ++++ .../python/HLT/Menu/Physics_pp_run3_v1.py | 1 + .../python/HLT/Menu/SignatureDicts.py | 20 +- 26 files changed, 839 insertions(+), 10 deletions(-) create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/ATLAS_CHECK_THREAD_SAFETY create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/ITrigDiTauHypoTool.h create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.h create mode 100644 Trigger/TrigHypothesis/TrigDitauHypo/src/components/TrigDiTauHypo_entries.cxx create mode 100755 Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_build.py create mode 100755 Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_grid.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py create mode 100644 Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/__init__.py diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/ATLAS_CHECK_THREAD_SAFETY b/Trigger/TrigHypothesis/TrigDitauHypo/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 000000000000..77271e1ef846 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Trigger/TrigHypothesis/TrigDitauHypo diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt new file mode 100644 index 000000000000..11fd8c37b893 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt @@ -0,0 +1,16 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + +# Declare the package name: +atlas_subdir( TrigDitauHypo ) + +# External dependencies: +find_package( ROOT COMPONENTS Core MathCore ) + +# Component(s) in the package: +atlas_add_component( TrigDitauHypo + src/*.cxx src/components/*.cxx + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} AthViews AthenaBaseComps AthenaMonitoringKernelLib CxxUtils DecisionHandlingLib GaudiKernel TrigCompositeUtilsLib TrigSteeringEvent TrkTrack TrkTrackSummary xAODBase xAODCaloEvent xAODTau xAODTracking xAODTrigger ) + +# Install files from the package: +atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} --extend-extensions=ATL900,ATL901 ) diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py b/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py new file mode 100644 index 000000000000..12ca371d3c4a --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py @@ -0,0 +1,36 @@ +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +import re +from AthenaCommon.SystemOfUnits import GeV + +from AthenaCommon.Logging import logging +log = logging.getLogger('TrigHLTDiTauHypoTool') + + +def TrigDiTauHypoToolFromDict(flags, chainDict): + name = chainDict['chainName'] + chainPart = chainDict['chainParts'][0] + cut_pt = float(chainPart['threshold']) * GeV + ditau_tag_str = chainPart['ditauTag'] + pattern = r"ditauOmni([0-9])Trk([0-9]{2})" + match = re.match(pattern, ditau_tag_str) + if match is None: + log.error(f"Invalid ditau tag: {ditau_tag_str}") + raise ValueError(f"Invalid ditau tag: {ditau_tag_str}") + id_cut = float(match.group(1))/10 + n_trk_lead = int(match.group(2)[0]) + n_trk_subl = int(match.group(2)[1]) + if n_trk_lead < 3 or n_trk_subl < 3: + log.error(f"Invalid ditau tag: {ditau_tag_str}") + log.error("it doesn't make sense to require less than 3 tracks in a ditau subjet") + raise ValueError(f"Invalid ditau tag: {ditau_tag_str}") + + from AthenaConfiguration.ComponentFactory import CompFactory + currentHypo = CompFactory.TrigDiTauHypoTool( + name, + ditau_pt_threshold=cut_pt, + ditau_id_score=id_cut, + ditau_lead_max_trk=n_trk_lead, + ditau_subl_max_trk=n_trk_subl, + ) + + return currentHypo \ No newline at end of file diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/ITrigDiTauHypoTool.h b/Trigger/TrigHypothesis/TrigDitauHypo/src/ITrigDiTauHypoTool.h new file mode 100644 index 000000000000..a4801be8e2c9 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/ITrigDiTauHypoTool.h @@ -0,0 +1,34 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ +#pragma once + +#include "AsgTools/IAsgTool.h" +#include "xAODTau/DiTauJetContainer.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "TrigCompositeUtils/HLTIdentifier.h" + + +class ITrigDiTauHypoTool : virtual public::IAlgTool { + +public: + DeclareInterfaceID(ITrigDiTauHypoTool, 1, 0); + + + virtual ~ITrigDiTauHypoTool(){}; + struct ToolInfo { + TrigCompositeUtils::Decision* decision; + const TrigRoiDescriptor* roi; + const xAOD::DiTauJetContainer* diTauContainer; + const TrigCompositeUtils::DecisionIDContainer previousDecisionIDs; + ToolInfo(TrigCompositeUtils::Decision* d, const TrigRoiDescriptor* r, const xAOD::DiTauJetContainer *c, const TrigCompositeUtils::Decision* previousDecision) + : previousDecisionIDs(TrigCompositeUtils::decisionIDs(previousDecision).begin(), TrigCompositeUtils::decisionIDs(previousDecision).end()) + { + decision = d; + roi = r; + diTauContainer = c; + } +}; + virtual StatusCode decide(std::vector<ToolInfo>& input) const = 0; + virtual bool decide(const ToolInfo& i) const = 0; +}; diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx new file mode 100644 index 000000000000..d836946ab471 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx @@ -0,0 +1,103 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" +#include "AthViews/ViewHelper.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" + +#include "TrigDiTauHypoAlg.h" + + +using namespace TrigCompositeUtils; + +TrigDiTauHypoAlg::TrigDiTauHypoAlg(const std::string& name, ISvcLocator* pSvcLocator) + : ::HypoBase(name, pSvcLocator) +{} + + +StatusCode TrigDiTauHypoAlg::initialize() { + ATH_CHECK(m_hypoTools.retrieve()); + ATH_CHECK(m_DiTauJets_key.initialize()); + + // TauJet are made in views, so they are not in the EvtStore: hide them + renounce(m_DiTauJets_key); + + return StatusCode::SUCCESS; +} + + +StatusCode TrigDiTauHypoAlg::execute(const EventContext& context) const +{ + ATH_MSG_DEBUG("Executing " << name()); + + // Retrieve previous decisions from the previous step + SG::ReadHandle<DecisionContainer> previousDecisionsHandle = SG::makeHandle(decisionInput(), context); + if(!previousDecisionsHandle.isValid()) { + ATH_MSG_DEBUG("No implicit RH for previous decisions " << decisionInput().key() << ": is this expected?"); + return StatusCode::SUCCESS; + } + + ATH_MSG_DEBUG("Running with " << previousDecisionsHandle->size() << " previous decisions"); + + + // Create output decision handle + SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context); + + + // Prepare inputs for the decision tools + std::vector<ITrigDiTauHypoTool::ToolInfo> toolInput; + int counter = -1; + for(const xAOD::TrigComposite* previousDecision : *previousDecisionsHandle) { + counter++; + + // Get View + const ElementLink<ViewContainer> viewEL = previousDecision->objectLink<ViewContainer>(viewString()); + ATH_CHECK(viewEL.isValid()); + + // Get RoI + LinkInfo<TrigRoiDescriptorCollection> roiEL = findLink<TrigRoiDescriptorCollection>(previousDecision, roiString()); + ATH_CHECK(roiEL.isValid()); + const TrigRoiDescriptor* roi = *roiEL.link; + + // Get TauJet + SG::ReadHandle<xAOD::DiTauJetContainer> diTauHandle = ViewHelper::makeHandle(*viewEL, m_DiTauJets_key, context); + if(!diTauHandle.isValid()) { + ATH_MSG_WARNING("Something is wrong, missing TauJet container! Continuing anyways skipping view"); + continue; + } + ATH_MSG_DEBUG("Tau handle size: " << diTauHandle->size()); + if(diTauHandle->size() != 1) { + ATH_MSG_DEBUG("Something is wrong, an unexpected number of taus was found (expected 1), continuing anyways skipping view"); + continue; + } + + + // Create new decision + Decision* newDecision = newDecisionIn(outputHandle.ptr(), hypoAlgNodeName()); + TrigCompositeUtils::linkToPrevious(newDecision, decisionInput().key(), counter); + newDecision->setObjectLink(roiString(), roiEL.link); + + ElementLink<xAOD::DiTauJetContainer> newDiTauEL = ViewHelper::makeLink(*viewEL, diTauHandle, 0); + ATH_CHECK(newDiTauEL.isValid()); + newDecision->setObjectLink(featureString(), newDiTauEL); + + // Create tool input + toolInput.emplace_back(newDecision, roi, diTauHandle.cptr(), previousDecision); + + ATH_MSG_DEBUG("Added view, roi, tau, previous decision to new decision (" << counter << ") for view " << (*viewEL)->name()); + } + + ATH_MSG_DEBUG("Found " << toolInput.size() << " inputs to tools"); + + + // Execute decisions from all tools + for(auto& tool : m_hypoTools) { + ATH_CHECK(tool->decide(toolInput)); + } + + + ATH_CHECK(hypoBaseOutputProcessing(outputHandle)); + + return StatusCode::SUCCESS; +} diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h new file mode 100644 index 000000000000..8af29a173d5a --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#pragma once + +#include "DecisionHandling/HypoBase.h" +#include "xAODTau/DiTauJetContainer.h" + +#include "ITrigDiTauHypoTool.h" + + +/** + * @class TrigDiTauHypoAlg + * @brief HLT Precision step TauJet selection hypothesis algorithm + **/ +class TrigDiTauHypoAlg : public ::HypoBase +{ +public: + TrigDiTauHypoAlg(const std::string& name, ISvcLocator* pSvcLocator); + + virtual StatusCode initialize() override; + virtual StatusCode execute(const EventContext& context) const override; + +private: + ToolHandleArray<ITrigDiTauHypoTool> m_hypoTools {this, "HypoTools", {}, "Hypo tools"}; + SG::ReadHandleKey<xAOD::DiTauJetContainer> m_DiTauJets_key {this, "DiTauJets_key", "", "DiTauJets in view" }; +}; diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx new file mode 100644 index 000000000000..93e24ef42a26 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx @@ -0,0 +1,70 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthenaMonitoringKernel/Monitored.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "xAODTau/TauJetContainer.h" +#include "GaudiKernel/SystemOfUnits.h" + +#include "TrigDiTauHypoTool.h" + + +using namespace TrigCompositeUtils; + +TrigDiTauHypoTool::TrigDiTauHypoTool(const std::string& type, const std::string& name, const IInterface* parent) + : base_class(type, name, parent), + m_decisionId(HLT::Identifier::fromToolName(name)) +{} + + +TrigDiTauHypoTool::~TrigDiTauHypoTool() +{} + + +StatusCode TrigDiTauHypoTool::initialize() +{ + ATH_MSG_DEBUG(name() << ": in initialize()"); + + ATH_MSG_DEBUG("TrigDiTauHypoTool will cut on:"); + ATH_MSG_DEBUG(" - PtMin : " << m_ditau_pt_threshold.value()); + ATH_MSG_DEBUG(" - ID Score : " << m_ditau_omni_score.value()); + ATH_MSG_DEBUG(" - Max Lead Trk: " << m_ditau_lead_max_trk.value()); + ATH_MSG_DEBUG(" - Max Subl Trk: " << m_ditau_subl_max_trk.value()); + return StatusCode::SUCCESS; +} + + +bool TrigDiTauHypoTool::decide(const ITrigDiTauHypoTool::ToolInfo& input) const +{ + static const SG::ConstAccessor< int > n_tracks_leadAcc("n_tracks_lead"); + static const SG::ConstAccessor< int > n_tracks_sublAcc("n_tracks_subl"); + static const SG::ConstAccessor< float > ditau_ptAcc ("ditau_pt"); + static const SG::ConstAccessor< float > omni_scoreAcc ("omni_score"); + ATH_MSG_DEBUG(name() << ": in execute()"); + // Tau pass flag + bool pass = false; + for(const xAOD::DiTauJet* diTau : *(input.diTauContainer)) { + if(ditau_ptAcc(*diTau) < m_ditau_pt_threshold.value()) continue; + if(omni_scoreAcc(*diTau) < m_ditau_omni_score.value()) continue; + if(n_tracks_leadAcc(*diTau) > m_ditau_lead_max_trk.value() || n_tracks_leadAcc(*diTau) < 0) continue; + if(n_tracks_sublAcc(*diTau) > m_ditau_subl_max_trk.value() || n_tracks_sublAcc(*diTau) < 0) continue; + pass = true; + } + ATH_MSG_DEBUG(" Pass hypo tool: " << pass); + return pass; +} + + +StatusCode TrigDiTauHypoTool::decide(std::vector<ITrigDiTauHypoTool::ToolInfo>& input) const { + for(auto& i : input) { + if(passed(m_decisionId.numeric(), i.previousDecisionIDs)) { + if(decide(i)) { + addDecisionID(m_decisionId, i.decision); + } + } + } + + return StatusCode::SUCCESS; +} + diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.h b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.h new file mode 100644 index 000000000000..2591bc486ed4 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.h @@ -0,0 +1,29 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ + +#pragma once + +#include "TrigCompositeUtils/HLTIdentifier.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "TrigCompositeUtils/TrigCompositeUtils.h" +#include "AthenaMonitoringKernel/GenericMonitoringTool.h" + +#include "xAODTau/DiTauJetContainer.h" +#include "ITrigDiTauHypoTool.h" + +class TrigDiTauHypoTool: public extends<AthAlgTool, ITrigDiTauHypoTool> { + public: + TrigDiTauHypoTool(const std::string& type, const std::string& name, const IInterface* parent); + virtual ~TrigDiTauHypoTool(); + virtual StatusCode initialize() override; + virtual StatusCode decide(std::vector<ITrigDiTauHypoTool::ToolInfo>& input) const override; + virtual bool decide(const ITrigDiTauHypoTool::ToolInfo& i) const override; + private: + HLT::Identifier m_decisionId; + Gaudi::Property<float> m_ditau_pt_threshold {this, "ditau_pt_threshold", 200, "ditau pT threshold [GeV]" }; + Gaudi::Property<float> m_ditau_omni_score {this, "ditau_id_score", 0.0, "ditau omni id score" }; + Gaudi::Property<int> m_ditau_lead_max_trk {this, "ditau_lead_max_trk", 3, "ditau lead track multiplicity" }; + Gaudi::Property<int> m_ditau_subl_max_trk {this, "ditau_subl_max_trk", 3, "ditau sublead track multiplicity" }; +}; + diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/components/TrigDiTauHypo_entries.cxx b/Trigger/TrigHypothesis/TrigDitauHypo/src/components/TrigDiTauHypo_entries.cxx new file mode 100644 index 000000000000..006da9d72774 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/components/TrigDiTauHypo_entries.cxx @@ -0,0 +1,6 @@ +#include "../TrigDiTauHypoAlg.h" +#include "../TrigDiTauHypoTool.h" + +DECLARE_COMPONENT( TrigDiTauHypoAlg ) +DECLARE_COMPONENT( TrigDiTauHypoTool ) + diff --git a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h index 2743222d96c9..c6892b070a11 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h +++ b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h @@ -52,7 +52,12 @@ auto intAccessors = initAccessors<int>( "dEdxTrk_id","dEdxTrk_dedx_n_usedhits", "dEdxTrk_n_hits_innermost","dEdxTrk_n_hits_inner","dEdxTrk_n_hits_pix","dEdxTrk_n_hits_sct", "dEdxHit_trkid","dEdxHit_iblovfl","dEdxHit_loc","dEdxHit_layer","NumPV", "nRoIs", - "l1a_type", "other_type", "beforeafterflag","pass"); + "l1a_type", "other_type", "beforeafterflag","pass", + "n_isotrack", + "n_track", + "n_tracks_lead", + "n_tracks_subl" + ); auto int16Accessors = initAccessors<int16_t>("view", "HPtdEdxTrk_n_hdedx_hits_1p45","HPtdEdxTrk_n_hdedx_hits_1p50","HPtdEdxTrk_n_hdedx_hits_1p55","HPtdEdxTrk_n_hdedx_hits_1p60", @@ -187,7 +192,40 @@ auto floatAccessors = initAccessors<float>( "ClusterEta", "ClusterPhi", "d0TJVA", "d0SigTJVA", "z0sinthetaTJVA", "z0sinthetaSigTJVA", "GNTau_Score", "GNTau_ScoreSigTrans", - "pixQ2mod" + "pixQ2mod", + "E_frac_subl", + "E_frac_subsubl", + "R_core_lead", + "R_core_subl", + "R_isotrack", + "R_max_lead", + "R_max_subl", + "R_subjets_subl", + "R_subjets_subsubl", + "R_track", + "R_track_all", + "R_track_core", + "R_tracks_lead", + "R_tracks_subl", + "d0_leadtrack_lead", + "d0_leadtrack_subl", + "ditau_pt", + "f_core_lead", + "f_core_subl", + "f_isotracks", + "f_subjet_lead", + "f_subjet_subl", + "f_subjets", + "f_track_lead", + "f_track_subl", + "m_core_lead", + "m_core_subl", + "m_track", + "m_track_all", + "m_track_core", + "m_tracks_lead", + "m_tracks_subl", + "omni_score" ); auto doubleAccessors = initAccessors<double>("ptcone02", "ptcone03", "JetDensityEMPFlow", diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx index 8c10a3990c70..bb6c8847b89c 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx +++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx @@ -28,6 +28,7 @@ #include "xAODTrigMuon/L2IsoMuonAuxContainer.h" #include "xAODMuon/MuonAuxContainer.h" #include "xAODTau/TauJetAuxContainer.h" +#include "xAODTau/DiTauJetAuxContainer.h" #include "xAODTau/TauTrackAuxContainer.h" #include "xAODJet/JetAuxContainer.h" #include "xAODTracking/VertexAuxContainer.h" @@ -154,6 +155,7 @@ StatusCode HLTEDMCreator::initialize() INIT_XAOD( L2IsoMuonContainer, L2IsoMuonAuxContainer ); INIT_XAOD( MuonContainer, MuonAuxContainer ); INIT_XAOD( TauJetContainer, TauJetAuxContainer ); + INIT_XAOD( DiTauJetContainer, DiTauJetAuxContainer ); INIT_XAOD( TauTrackContainer, TauTrackAuxContainer ); INIT_XAOD( JetContainer, JetAuxContainer ); INIT_XAOD( VertexContainer, VertexAuxContainer ); @@ -496,6 +498,7 @@ StatusCode HLTEDMCreator::createOutput(const EventContext& context) const { CREATE_XAOD( L2IsoMuonContainer, L2IsoMuonAuxContainer ); CREATE_XAOD( MuonContainer, MuonAuxContainer ); CREATE_XAOD( TauJetContainer, TauJetAuxContainer ); + CREATE_XAOD( DiTauJetContainer, DiTauJetAuxContainer ); CREATE_XAOD( TauTrackContainer, TauTrackAuxContainer ); CREATE_XAOD( CaloClusterContainer, CaloClusterTrigAuxContainer ); // NOTE: Difference in interface and aux CREATE_XAOD( JetContainer, JetAuxContainer ); diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h index 3d4b6740b3ac..5be32de2a4d0 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h +++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h @@ -35,6 +35,7 @@ #include "xAODTrigMuon/L2IsoMuonContainer.h" #include "xAODMuon/MuonContainer.h" #include "xAODTau/TauJetContainer.h" +#include "xAODTau/DiTauJetContainer.h" #include "xAODTau/TauTrackContainer.h" #include "xAODJet/JetContainer.h" #include "xAODTracking/VertexContainer.h" @@ -136,6 +137,7 @@ class HLTEDMCreator: public extends<AthAlgTool, IHLTOutputTool> { DEF_XAOD_KEY( L2IsoMuonContainer ); DEF_XAOD_KEY( MuonContainer ); DEF_XAOD_KEY( TauJetContainer ); + DEF_XAOD_KEY( DiTauJetContainer ); DEF_XAOD_KEY( TauTrackContainer ); DEF_XAOD_KEY( CaloClusterContainer ); DEF_XAOD_KEY( JetContainer ); diff --git a/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py b/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py index 69683e2213e4..3c7e51c0232e 100644 --- a/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py +++ b/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py @@ -170,6 +170,8 @@ def signatureTrigTrackingFlags(mode : str) -> AthConfigFlags: "tauCore" : tauCore, "tauIso" : tauIso, + "ditau" : ditau, + "bjet" : bjet, "fullScan" : fullScan, @@ -331,6 +333,24 @@ def tauIso(flags: AthConfigFlags, instanceName: str, recoMode: str) -> AthConfig flags.minPT = tsetter(flags.minPT, flags.pTmin) return flags +@signatureActions +def ditau(flags: AthConfigFlags, instanceName: str, recoMode: str) -> AthConfigFlags: + + flags.input_name = instanceName + flags.name = "ditau" + flags.suffix = "ditau" + flags.roi = "HLT_Roi_ditau" + flags.etaHalfWidth = 1.0 + flags.phiHalfWidth = 1.0 + flags.zedHalfWidth = 7.0 + flags.adaptiveVertex = True + flags.addSingleTrackVertices = True + flags.vertex = "HLT_IDVertex_ditau" + flags.electronPID = False + flags.pTmin = 0.8*Units.GeV + flags.minPT = tsetter(flags.minPT, flags.pTmin) + return flags + @signatureActions def bjet(flags: AthConfigFlags, instanceName: str, recoMode: str) -> AthConfigFlags: diff --git a/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_build.py b/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_build.py new file mode 100755 index 000000000000..75e69871320a --- /dev/null +++ b/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_build.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration + +# art-description: Trigger RDO->RDO_TRIG athena test of the tau slice in Dev_pp_run3_v1 menu +# art-type: build +# art-include: main/Athena +# art-include: 24.0/Athena +# Skipping art-output which has no effect for build tests. +# If you create a grid version, check art-output in existing grid tests. + +from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps + +from AthenaConfiguration.TestDefaults import defaultConditionsTags +conditions = defaultConditionsTags.RUN3_MC + +ex = ExecStep.ExecStep() +ex.type = 'athena' +ex.job_options = 'TriggerJobOpts/runHLT.py' +ex.input = 'ttbar' +ex.threads = 1 +ex.flags = ['Trigger.triggerMenuSetup="Dev_pp_run3_v1"', + 'IOVDb.GlobalTag="' + conditions + '"', + 'Trigger.enabledSignatures=[\\\"Ditau\\\"]'] + +test = Test.Test() +test.art_type = 'build' +test.exec_steps = [ex] +test.check_steps = CheckSteps.default_check_steps(test) + +import sys +sys.exit(test.run()) diff --git a/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_grid.py b/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_grid.py new file mode 100755 index 000000000000..0627b5f925c0 --- /dev/null +++ b/Trigger/TrigValidation/TriggerTest/test/test_trig_mc_v1Dev_slice_ditau_grid.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration + +# art-description: Trigger RDO->RDO_TRIG athena test of the egamma slice in Dev_pp_run3_v1 menu +# art-type: grid +# art-include: main/Athena +# art-include: 24.0/Athena +# art-athena-mt: 8 +# art-output: *.txt +# art-output: *.log +# art-output: log.* +# art-output: *.out +# art-output: *.err +# art-output: *.log.tar.gz +# art-output: *.new +# art-output: *.json +# art-output: *.root +# art-output: *.pmon.gz +# art-output: *perfmon* +# art-output: prmon* +# art-output: *.check* + +from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps + +from AthenaConfiguration.TestDefaults import defaultConditionsTags +conditions = defaultConditionsTags.RUN3_MC + +ex = ExecStep.ExecStep() +ex.type = 'athena' +ex.job_options = 'TriggerJobOpts/runHLT.py' +ex.input = 'ttbar' +ex.threads = 8 +ex.concurrent_events = 8 +ex.flags = ['Trigger.triggerMenuSetup="Dev_pp_run3_v1"', + 'IOVDb.GlobalTag="' + conditions + '"', + 'Trigger.enabledSignatures=[\\\"Ditau\\\"]'] + +test = Test.Test() +test.art_type = 'grid' +test.exec_steps = [ex] +test.check_steps = CheckSteps.default_check_steps(test) + +import sys +sys.exit(test.run()) diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py index ecb92f4ddc69..4c3c01c303b1 100644 --- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py +++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py @@ -228,6 +228,12 @@ TauJet_vars_str = '.'.join(TauJet_vars) TauTrack_vars = ['pt', 'eta', 'phi', 'flagSet', 'trackLinks', 'd0TJVA', 'd0SigTJVA', 'z0sinthetaTJVA', 'z0sinthetaSigTJVA'] TauTrack_vars_str = '.'.join(TauTrack_vars) +# =========== +# == ditau == +DiTauJet_vars = ['pt', 'eta', 'phi', 'm', 'TauJetVtxFraction', 'subjet_pt', 'subjet_phi', 'subjet_e', 'subjet_f_core', 'subjet_eta', 'isoTrackLinks', 'jetLink', 'vertexLink', 'trackLinks'] +DiTauJet_vars += ["ditau_pt", "f_core_lead", "f_core_subl", "f_subjet_lead", "f_subjet_subl", "f_subjets", "f_track_lead", "f_track_subl", "R_max_lead", "R_max_subl", "n_track", "n_tracks_lead", "n_tracks_subl", "n_isotrack", "R_track", "R_track_core", "R_track_all", "R_isotrack", "R_core_lead", "R_core_subl", "R_tracks_lead", "R_tracks_subl", "m_track", "m_track_core", "m_core_lead", "m_core_subl", "m_track_all", "m_tracks_lead", "m_tracks_subl", "E_frac_subl", "E_frac_subsubl", "R_subjets_subl", "R_subjets_subsubl", "d0_leadtrack_lead", "d0_leadtrack_subl", "f_isotracks", "omni_score"] +DiTauJet_vars_str = '.'.join(DiTauJet_vars) + # =========== # === LLP === MuRoiToKeep = ['ClusterEta','ClusterPhi','nRoIs'] @@ -288,6 +294,7 @@ TriggerHLTListRun3 = [ ('TrigRoiDescriptorCollection#HLT_METRoI', 'BS ESD AODFULL AODSLIM', 'Steer'), ('TrigRoiDescriptorCollection#HLT_JETRoI', 'BS ESD AODFULL AODSLIM', 'Steer'), ('TrigRoiDescriptorCollection#HLT_TAURoI', 'BS ESD AODFULL AODSLIM', 'Steer'), + ('TrigRoiDescriptorCollection#HLT_DitauRoI', 'BS ESD AODFULL AODSLIM', 'Steer'), # xAOD::TrigCompositeContainer#HLTNav_Summary is now transient-only ('xAOD::TrigCompositeContainer#HLTNav_Summary_OnlineSlimmed', 'BS ESD', 'Steer'), @@ -708,6 +715,12 @@ TriggerHLTListRun3 = [ ('xAOD::JetContainer#HLT_jet_seed', '', 'Tau', [InViews('tauCaloMVAViews')]), ('xAOD::JetAuxContainer#HLT_jet_seedAux.', '', 'Tau'), + #ditau + ('xAOD::TrackParticleContainer#HLT_IDTrack_ditau_FTF', 'BS ESD AODFULL AODSLIM', 'Ditau', [InViews('DitauViews')]), + ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_ditau_FTFAux.', 'BS ESD AODFULL AODSLIM', 'Ditau'), + ('xAOD::TrackParticleContainer#HLT_IDTrack_ditau_IDTrig', 'BS ESD AODFULL AODSLIM', 'Ditau', [InViews('DitauViews')]), + ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_ditau_IDTrigAux.', 'BS ESD AODFULL AODSLIM', 'Ditau'), + # Jet ('xAOD::JetContainer#HLT_AntiKt4EMTopoJets_subjesIS', 'BS ESD AODFULL AODSLIM', 'Jet', [Alias('JetContainerShallowCopy')]), ('xAOD::ShallowAuxContainer#HLT_AntiKt4EMTopoJets_subjesISAux.'+JetCopyVars, 'BS ESD AODFULL AODSLIM', 'Jet'), @@ -814,6 +827,9 @@ TriggerHLTListRun3 = [ ('xAOD::JetContainer#HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftf', '', 'Jet'), ('xAOD::JetAuxContainer#HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftfAux.'+JetVars, '', 'Jet'), + ('xAOD::JetContainer#HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftf_Ditau_jets', 'BS ESD AODFULL', 'Jet'), + ('xAOD::JetAuxContainer#HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftf_Ditau_jetsAux.'+JetVars, 'BS ESD AODFULL', 'Jet'), + ## event info ('xAOD::TrigCompositeContainer#HLT_TCEventInfo_jet', 'BS ESD AODFULL', 'Jet' ), ('xAOD::TrigCompositeAuxContainer#HLT_TCEventInfo_jetAux.JetDensityEMPFlow.AvgMu.NumPV', 'BS ESD AODFULL', 'Jet' ), @@ -996,6 +1012,10 @@ TriggerHLTListRun3 = [ ('xAOD::TauTrackContainer#HLT_tautrack_LRT', 'BS ESD AODFULL AODSLIM', 'Tau', [InViews('precLRTTauViews'), InViews('tauPrecisionReco_LRTViews')]), ('xAOD::TauTrackAuxContainer#HLT_tautrack_LRTAux.'+TauTrack_vars_str, 'BS ESD AODFULL AODSLIM', 'Tau'), + # ditau + ('xAOD::DiTauJetContainer#HLT_DiTauJets', 'BS ESD AODFULL AODSLIM', 'Ditau', [InViews('DitauViews')]), + ('xAOD::DiTauJetAuxContainer#HLT_DiTauJetsAux.'+DiTauJet_vars_str, 'BS ESD AODFULL AODSLIM', 'Ditau'), + # bjet RoI Descriptor used for EventView creation ('TrigRoiDescriptorCollection#HLT_Roi_Bjet', 'BS ESD AODFULL', 'Bjet'), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py index a6e397fe9d2e..ad4f62734940 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py @@ -15,7 +15,7 @@ def calibCosmicMonSignatures(): return ['Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias'] def combinedSignatures(): - return ['MinBias','Electron','Photon','Muon','Tau','Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] + return ['MinBias','Electron','Photon','Muon','Tau', 'Ditau','Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] def jointSignatures(): return ['Bjet', 'Egamma', 'Combined'] @@ -93,6 +93,7 @@ class GenerateMenuMT(metaclass=Singleton): signatureDeps.update({ # Bjet always requires jet 'Bjet': ['Bjet','Jet'], + 'Ditau' : ['Ditau','Jet'], # Egamma contains two signatures 'Egamma': ['Electron','Photon'], 'Combined': combinedSignatures(), @@ -403,7 +404,7 @@ class GenerateMenuMT(metaclass=Singleton): if currentSig in self.availableSignatures: try: log.debug("[__generateChainConfigs] Trying to get chain config for %s", currentSig) - if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics'] : + if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics', 'Ditau'] : chainPartConfig, perSig_lengthOfChainConfigs = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict, perSig_lengthOfChainConfigs) else: chainPartConfig = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py index a75ccfc87d01..af4da6dc823b 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py @@ -175,7 +175,7 @@ def unifyJetRecoParts(chainParts): jetDefaults, _ = getSignatureInformation('Jet') # Extract the jet chainParts, and get the reco specs from the last one _jetRecoKeys = JetRecoKeys - jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet']] + jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet', 'Ditau']] jetRecoDict = {k:jetChainParts[-1][k] for k in _jetRecoKeys} # Check consistency of the preceding jet parts @@ -191,7 +191,7 @@ def unifyJetRecoParts(chainParts): newChainParts = [] for cPart in chainParts: newCPart = deepcopy(cPart) - if newCPart['signature'] in ['Jet','Bjet']: + if newCPart['signature'] in ['Jet','Bjet', 'Ditau']: for k in _jetRecoKeys: newCPart[k] = jetRecoDict[k] newChainParts.append(newCPart) @@ -519,6 +519,23 @@ def analyseChainName(chainName, L1thresholds, L1item): if propSet is False: log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(bJetDefaultValues[prop])) chainProperties[prop] = bJetDefaultValues[prop] + + + if chainProperties['ditauTag'] != '': + log.debug('Setting Ditau chain defaults') + # b-jet chain, so we now use the bJet defaults if they have not already been overriden + ditauJetDefaultValues, allowedDitauJetPropertiesAndValues = getSignatureInformation('Ditau') + for prop, value in ditauJetDefaultValues.items(): + propSet=False + for value in allowedDitauJetPropertiesAndValues[prop]: + if value in matchedparts: + propSet=True + break + + # if the property was not set already, then set if according to the ditau-jet defaults + if propSet is False: + log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(ditauJetDefaultValues[prop])) + chainProperties[prop] = ditauJetDefaultValues[prop] if chainProperties['signature'] == 'Jet' and chainProperties['beamspotChain'] != '': @@ -600,13 +617,19 @@ def analyseChainName(chainName, L1thresholds, L1item): cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['tnpInfo']) else: cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['extra']) + if cPart['signature'] == 'Jet' and cPart['ditauTag'] != '': + cPart['signature'] = 'Ditau' + if 'tnpInfo' in cPart.keys() and cPart['tnpInfo'] != "": + cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['tnpInfo']) + else: + cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['extra']) genchainDict['signatures'] += [cPart['signature']] genchainDict['alignmentGroups'] += [cPart['alignmentGroup']] # Postprocess chains with multiple jet chainParts # to set them consistently from only one specification if len(genchainDict['chainParts'])>1: - if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures']: + if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures'] or 'Ditau' in genchainDict['signatures']: genchainDict['chainParts'] = unifyJetRecoParts(genchainDict['chainParts']) #genchainDict['signature'] = allChainProperties[0]['signature'] @@ -682,7 +705,7 @@ def dictFromChainName(flags, chainInfo): chainDict['sigDicts'][sf].extend(chainPart['subSigs']) else: chainDict['sigDicts'].update({sf:chainPart['subSigs']}) - if sf == 'Bjet': + if sf in ['Bjet', 'Ditau']: chainDict['sigDicts'].update({'Jet':['Jet']}) @@ -711,7 +734,7 @@ def dictFromChainName(flags, chainInfo): log.error("Standard tau chains should be seeded from L1_TAU. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True - if thisSignature in ['Jet','Bjet','MET','UnconventionalTracking']: + if thisSignature in ['Jet','Bjet', 'Ditau','MET','UnconventionalTracking']: if 'FSNOSEED' not in thisL1: log.error("Jet, b-jet, MET chains should be seeded from FSNOSEED. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py new file mode 100644 index 000000000000..215be632907f --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py @@ -0,0 +1,35 @@ +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + +from AthenaCommon.Logging import logging +logging.getLogger().info("Importing %s",__name__) +log = logging.getLogger(__name__) + +from ..Config.ChainConfigurationBase import ChainConfigurationBase +from .DitauMenuSequences import ditauSequenceGenCfg + + +#---------------------------------------------------------------- +# Class to configure chain +#---------------------------------------------------------------- +class DitauChainConfiguration(ChainConfigurationBase): + + def __init__(self, chainDict, jet_name): + self.jetName = jet_name + ChainConfigurationBase.__init__(self, chainDict) + + # ---------------------- + # Assemble the chain depending on information from chainName + # ---------------------- + def assembleChainImpl(self, flags): + log.debug("Assembling chain for %s", self.chainName) + chainStep = self.getStep( + flags, + 'ditau_step', + [ditauSequenceGenCfg], + seq_name = 'ditau', + jet_name = self.jetName + ) + + myChain = self.buildChain([chainStep]) + return myChain + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py new file mode 100644 index 000000000000..41db944e8557 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py @@ -0,0 +1,25 @@ +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + +import unittest +from AthenaConfiguration.AthConfigFlags import AthConfigFlags + +def createDiTauConfigFlags(): + ditau_cfg = AthConfigFlags() + ditau_cfg.addFlag("DiTau.DiTauContainer", ["HLT_DiTauJets"]) + ditau_cfg.addFlag("DiTau.JetSeedPt", 50000) + ditau_cfg.addFlag("DiTau.doRunDiTauDiscriminant", False) + ditau_cfg.addFlag("DiTau.MaxEta", 2.5) + ditau_cfg.addFlag("DiTau.Rjet", 1.0) + ditau_cfg.addFlag("DiTau.Rsubjet", 0.2) + ditau_cfg.addFlag("DiTau.Rcore", 0.1) + return ditau_cfg + +class DiTestTauRecConfigFlags(unittest.TestCase): + def runTest(self): + createDiTauConfigFlags() + + +if __name__ == "__main__": + unittest.main() + + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py new file mode 100644 index 000000000000..de2be5687141 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py @@ -0,0 +1,178 @@ +# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory +from TriggerMenuMT.HLT.Config.MenuComponents import MenuSequence, SelectionCA, InViewRecoCA +from DiTauRec.DiTauToolsConfig import ( + SeedJetBuilderCfg, SubjetBuilderCfg, + VertexFinderCfg, + DiTauTrackFinderCfg, + DiTauConstituentFinderCfg, + IDVarCalculatorCfg, + TVAToolCfg, + DiTauIDVarDecoratorCfg, + DiTauOnnxScoreCalculatorCfg, +) + + +from TrigEDMConfig.TriggerEDM import recordable + +from AthenaCommon.Logging import logging +log = logging.getLogger(__name__) + + +def ditauTrackingCfg(flags, inputRoI: str, inputVertex: str, inputJets: str) -> ComponentAccumulator: + #safety measure to ensure we get the right instance of flags + from TrigInDetConfig.utils import getFlagsForActiveConfig + trkflags = getFlagsForActiveConfig(flags, "ditau", log) + + from TrigInDetConfig.InnerTrackingTrigSequence import InnerTrackingTrigSequence + seq = InnerTrackingTrigSequence.create(trkflags, + trkflags.Tracking.ActiveConfig.input_name, + rois = inputRoI, + inView = "VDVInDetFTF") + acc = seq.sequence("FastTrackFinder") + acc.merge(seq.sequenceAfterPattern()) + + verifier = CompFactory.AthViews.ViewDataVerifier(name = 'VDVsecondStageDitauTracking', + DataObjects = {('xAOD::VertexContainer', f'StoreGateSvc+{inputVertex}'), + ('xAOD::JetContainer', f'StoreGateSvc+{inputJets}')} ) + acc.addEventAlgo(verifier) + + return acc + +def JetTVAAlgCfg(flags, inputTracks, inputVertex, name="HLT_DiTauRec_JetAlgorithm"): # Name changed wrt legacy config DiTauRec_TVATool + """Configure the JetAlgorithm""" + acc = ComponentAccumulator() + + tools = [acc.popToolsAndMerge( + TVAToolCfg( + flags, + TrackParticleContainer = inputTracks, + VertexContainer = inputVertex, + TrackVertexAssociation = "HLT_JetTrackVtxAssoc_forDiTaus" + ) + )] + tools = tools + + acc.addEventAlgo(CompFactory.JetAlgorithm(name, Tools = tools)) + return acc + +def ditauRecoCfg(flags, inputJets: str, inputVertex: str, inputFSTracks: str, inputTracks: str, inputCells: str, inputClusters: str) -> ComponentAccumulator: + from .DitauConfigFlagsHLT import createDiTauConfigFlags + flags_ditau = createDiTauConfigFlags() + + acc = ComponentAccumulator() + acc.merge(JetTVAAlgCfg( + flags, + inputTracks=inputFSTracks, + inputVertex=inputVertex, + )) + tools = [ + acc.popToolsAndMerge(SeedJetBuilderCfg(flags, JetCollection=inputJets)), + acc.popToolsAndMerge(SubjetBuilderCfg(flags)), + acc.popToolsAndMerge(VertexFinderCfg( + flags, + TrackVertexAssociation = "HLT_JetTrackVtxAssoc_forDiTaus", + PrimVtxContainerName = inputVertex, + AssociatedTracks = "GhostTrack_ftf" + )), + acc.popToolsAndMerge(DiTauTrackFinderCfg( + flags, + TrackParticleContainer=inputTracks + )), + acc.popToolsAndMerge(DiTauConstituentFinderCfg( + flags, + )), + # acc.popToolsAndMerge(CellFinderCfg( + # flags, + # ClusterContainer = inputClusters, + # CellContainer = inputCells + # )), + acc.popToolsAndMerge(IDVarCalculatorCfg(flags, useCells=False)), + acc.popToolsAndMerge(DiTauIDVarDecoratorCfg(flags)), + acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg(flags)), + ] + + acc.addEventAlgo(CompFactory.DiTauBuilder( + "HLT_DiTauBuilder", + DiTauContainer = recordable("HLT_DiTauJets"), + Tools = tools, + SeedJetName = inputJets, + minPt = flags_ditau.DiTau.JetSeedPt, + maxEta = flags_ditau.DiTau.MaxEta, + Rjet = flags_ditau.DiTau.Rjet, + Rsubjet = flags_ditau.DiTau.Rsubjet, + Rcore = flags_ditau.DiTau.Rcore, + )) + return acc + +def ditauSequenceGenCfg(flags, seq_name, jet_name): + # input maker and ROI tool + prmVtxKey = flags.Trigger.InDetTracking.fullScan.vertex + roiTool = CompFactory.ViewCreatorCentredOnJetWithPVConstraintROITool( + RoisWriteHandleKey = recordable( 'HLT_DitauRoI' ), + VertexReadHandleKey = prmVtxKey, + PrmVtxLink = prmVtxKey.replace( "HLT_","" ), + RoIEtaWidth = 1.0, + RoIPhiWidth = 1.0, + RoIZWidth = 7.0, + ) + ditauAcc = InViewRecoCA("Ditau", RoITool = roiTool, + InViewRoIs = "InViewRoIs", + mergeUsingFeature = True, + RequireParentView = False, + ViewFallThrough = True, + InViewJets = recordable( f'{jet_name}_Ditau_jets' ), + PlaceJetInView = True) + InputMakerAlg = ditauAcc.inputMaker() + # Tracking + trackingAcc = ditauTrackingCfg( + flags, + inputRoI=InputMakerAlg.InViewRoIs, + inputVertex=prmVtxKey, + inputJets=InputMakerAlg.InViewJets + ) + ditauAcc.mergeReco(trackingAcc) + + # ditau reconstruction + inputJets = InputMakerAlg.InViewJets + inputVertex = prmVtxKey + inputFSTracks = flags.Trigger.InDetTracking.fullScan.tracks_FTF + inputIDTracks = flags.Trigger.InDetTracking.ditau.tracks_IDTrig + inputCells = "CaloCellsFS" + inputClusters = "HLT_TopoCaloClustersFS" + + recoAcc = ditauRecoCfg( + flags, + inputJets=inputJets, + inputVertex=inputVertex, + inputFSTracks=inputFSTracks, + inputTracks=inputIDTracks, + inputCells=inputCells, + inputClusters=inputClusters + ) + + ditauAcc.mergeReco(recoAcc) + + ditauAcc.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier( + name=f'{ditauAcc.name}RecoVDV', + DataObjects={ + ('CaloCellContainer', f'StoreGateSvc+{inputCells}'), + ('xAOD::CaloClusterContainer', f'StoreGateSvc+{inputClusters}'), + ('CaloClusterCellLinkContainer', f'StoreGateSvc+{inputClusters}_links'), + ('xAOD::TrackParticleContainer' , f'StoreGateSvc+{inputFSTracks}'), + } + )) + + selAcc = SelectionCA(f'Trig_DitauReco_{seq_name}', isProbe=False) + selAcc.mergeReco(ditauAcc) + selAcc.addHypoAlgo(CompFactory.TrigDiTauHypoAlg( + f'DiTauHypoAlg_{seq_name}', + DiTauJets_key='HLT_DiTauJets', + )) + + from TrigDitauHypo.TrigDiTauHypoTool import TrigDiTauHypoToolFromDict + menuSeq = MenuSequence(flags, selAcc, HypoToolGen=TrigDiTauHypoToolFromDict) + + return menuSeq \ No newline at end of file diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py new file mode 100644 index 000000000000..5c26362abf16 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py @@ -0,0 +1,35 @@ +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + +from TriggerMenuMT.HLT.Config.Utility.ChainDictTools import splitChainDict +from .DitauChainConfiguration import DitauChainConfiguration +from ..Jet.JetChainConfiguration import JetChainConfiguration + +import pprint +from AthenaCommon.Logging import logging +log = logging.getLogger(__name__) +log.debug("Importing %s",__name__) + + +def generateJetChainConfigs(flags, subChainDict): + jet_cfg = JetChainConfiguration(subChainDict) + jet_cfg.prepareDataDependencies(flags) + jet = jet_cfg.assembleChain(flags) + jet_name = jet_cfg.jetName + return jet, jet_name + + +def generateChainConfigs(flags, chainDict, perSig_lengthOfChainConfigs): + + log.debug('full dictionary is: %s\n', pprint.pformat(chainDict)) + listOfChainDicts = splitChainDict(chainDict) + + for subChainDict in listOfChainDicts: + log.debug('Assembling subChainsDict for chain %s', subChainDict['chainName'] ) + Jet, jet_name = generateJetChainConfigs(flags, subChainDict) + Ditau = DitauChainConfiguration(subChainDict, jet_name).assembleChain(flags) + Jet.append_step_to_jet(Ditau.steps) + theChainDef = Jet + + log.debug("theChainDef: %s" , theChainDef) + return theChainDef, perSig_lengthOfChainConfigs + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/__init__.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py index 2a9e5a2eb1d9..791ec7d4080b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py @@ -20,6 +20,7 @@ from .Physics_pp_run3_v1 import (PhysicsStream, SingleBjetGroup, MultiBjetGroup, SingleTauGroup, + DiTauGroup, MultiTauGroup, MultiPhotonGroup, TauPhotonGroup, @@ -712,6 +713,37 @@ def getDevSignatures(): ChainProp(name="HLT_tau160_mediumRNN_trackLRT_L1eTAU140", groups=DevGroup, monGroups=['tauMon:t0']), ] + + chains['Ditau'] = [ + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + #alt L1 seed + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ] + chains['Bphysics'] = [ #ATR-21003; default dimuon and Bmumux chains from Run2; l2io validation; should not be moved to Physics ChainProp(name='HLT_2mu4_noL2Comb_bJpsimumu_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+DevGroup), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py index 79ec991d717c..e83a9bb16b21 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py @@ -24,6 +24,7 @@ EgammaBjetGroup = ['RATE:EgammaBjet', 'BW:BJet'] MuonBjetGroup = ['RATE:MuonBjet', 'BW:BJet'] BjetMETGroup = ['RATE:BjetMET', 'BW:BJet'] SingleTauGroup = ['RATE:SingleTau', 'BW:Tau'] +DiTauGroup = ['RATE:Ditau', 'BW:Tau'] MultiTauGroup = ['RATE:MultiTau', 'BW:Tau'] BphysicsGroup = ['RATE:Bphysics', 'BW:Bphysics'] BphysElectronGroup = ['RATE:BphysicsElectron', 'BW:BphysicsElectron'] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py index 14bafc2cd2ce..b874ef6a9703 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py @@ -23,6 +23,7 @@ SignatureDict = OrderedDict({ 'Tau' : ('tau','AllTag'), 'Jet' : ('j', 'JetMET'), 'Bjet' : ('', 'JetMET'), + 'Ditau' : ('', 'JetMET'), 'MET' : ('xe', 'JetMET'), 'XS' : ('xs', 'JetMET'), 'TE' : ('te', 'JetMET'), @@ -71,7 +72,7 @@ def getListOfSignatures(): class ChainStore(dict): """Class to hold list of chains for each signature (dictionary with fixed set of keys)""" - _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', + _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', 'Ditau', 'HeavyIon', 'Beamspot', 'Cosmic', 'EnhancedBias', 'Monitor', 'Calib', 'Streaming', 'Combined', 'MinBias', 'UnconventionalTracking', 'Test'] @@ -86,6 +87,15 @@ class ChainStore(dict): else: dict.__setitem__(self, key, value) +# Helper functions +def getAllDitauTags(): + # Create a list of all possible ditau tags + ditau_tags = [] + for id_cut in [0,5,6,7,8,9]: + for n_trk_lead in range(3, 10): + for n_trk_subl in range(3, 10): + ditau_tags.append(f'ditauOmni{id_cut}Trk{n_trk_lead}{n_trk_subl}') + return ditau_tags #========================================================== # ---- Generic Template for all chains ---- @@ -477,6 +487,7 @@ JetChainParts = { 'bgn260', 'bgn265', 'bgn270', 'bgn272', 'bgn275', 'bgn277', 'bgn280', 'bgn282', 'bgn285', ], + 'ditauTag' : getAllDitauTags(), 'bTracking' : [], 'bConfig' : ['split',], 'bMatching' : ['antimatchdr05mu'], @@ -527,6 +538,7 @@ JetChainParts_Default = { 'smc' : 'nosmc', # 'bTag' : '', + 'ditauTag' : '', 'bTracking' : '', 'bConfig' : [], 'bMatching' : [], @@ -544,6 +556,10 @@ bJetChainParts_Default = { 'subSigs' : ['Bjet'], } +ditauJetChainParts_Default = { + 'sigFolder' : ['Ditau'], + 'subSigs' : ['Ditau'], +} # ---- Beamspot Dictionary for chains confiugred through jets BeamspotJetChainParts_Default = { 'signature' : 'Beamspot', @@ -1421,6 +1437,8 @@ def getSignatureInformation(signature): return [BeamspotJetChainParts_Default, JetChainParts] if signature == "Tau": return [TauChainParts_Default, TauChainParts] + if signature == "Ditau": + return [ditauJetChainParts_Default, JetChainParts] if (signature == "Muon"): return [MuonChainParts_Default, MuonChainParts] if (signature == "Bphysics"): -- GitLab From 98ef7e382ae79946d421ba9b6f1d224a22977051 Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Tue, 25 Mar 2025 17:42:58 +0000 Subject: [PATCH 2/8] merge ditau and bjet trigger part --- .../python/HLT/Bjet/GenerateBjetChainDefs.py | 7 +++ .../python/HLT/Config/GenerateMenuMT.py | 5 +- .../HLT/Config/Utility/DictFromChainName.py | 37 +++-------- .../python/HLT/Menu/Dev_pp_run3_v1.py | 61 +++++++++---------- .../python/HLT/Menu/Physics_pp_run3_v1.py | 1 - .../python/HLT/Menu/SignatureDicts.py | 11 +--- 6 files changed, 47 insertions(+), 75 deletions(-) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py index 136aa43f6515..f29dfe19019f 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py @@ -2,6 +2,7 @@ from TriggerMenuMT.HLT.Config.Utility.ChainDictTools import splitChainDict from .BjetChainConfiguration import BjetChainConfiguration +from ..Ditau.DitauChainConfiguration import DitauChainConfiguration from ..Jet.JetChainConfiguration import JetChainConfiguration from TriggerMenuMT.HLT.Config.Utility.ChainMerging import mergeChainDefs @@ -29,6 +30,12 @@ def generateChainConfigs(flags, chainDict ): # happens for bjet + normal jet chains if subChainDict['chainParts'][0]['signature'] != 'Bjet': listOfChainDefs += [jet] + # if this chain is a ditau chain, setup ditau tagging instead of btagging + elif subChainDict['chainParts'][0]['ditauTag'] != '': + log.debug('input jet collection name is: %s\n', jet_name) + Ditau = DitauChainConfiguration(subChainDict, jet_name).assembleChain(flags) + jet.append_step_to_jet(Ditau.steps) + listOfChainDefs += [ jet ] else: log.debug('input jet collection name is: %s\n', jet_name) Bjet = BjetChainConfiguration(subChainDict, jet_name).assembleChain(flags) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py index ad4f62734940..468ead6160ea 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py @@ -15,7 +15,7 @@ def calibCosmicMonSignatures(): return ['Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias'] def combinedSignatures(): - return ['MinBias','Electron','Photon','Muon','Tau', 'Ditau','Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] + return ['MinBias','Electron','Photon','Muon','Tau' ,'Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] def jointSignatures(): return ['Bjet', 'Egamma', 'Combined'] @@ -93,7 +93,6 @@ class GenerateMenuMT(metaclass=Singleton): signatureDeps.update({ # Bjet always requires jet 'Bjet': ['Bjet','Jet'], - 'Ditau' : ['Ditau','Jet'], # Egamma contains two signatures 'Egamma': ['Electron','Photon'], 'Combined': combinedSignatures(), @@ -404,7 +403,7 @@ class GenerateMenuMT(metaclass=Singleton): if currentSig in self.availableSignatures: try: log.debug("[__generateChainConfigs] Trying to get chain config for %s", currentSig) - if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics', 'Ditau'] : + if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics'] : chainPartConfig, perSig_lengthOfChainConfigs = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict, perSig_lengthOfChainConfigs) else: chainPartConfig = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py index af4da6dc823b..8fe0a3298681 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py @@ -175,7 +175,7 @@ def unifyJetRecoParts(chainParts): jetDefaults, _ = getSignatureInformation('Jet') # Extract the jet chainParts, and get the reco specs from the last one _jetRecoKeys = JetRecoKeys - jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet', 'Ditau']] + jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet']] jetRecoDict = {k:jetChainParts[-1][k] for k in _jetRecoKeys} # Check consistency of the preceding jet parts @@ -191,7 +191,7 @@ def unifyJetRecoParts(chainParts): newChainParts = [] for cPart in chainParts: newCPart = deepcopy(cPart) - if newCPart['signature'] in ['Jet','Bjet', 'Ditau']: + if newCPart['signature'] in ['Jet','Bjet']: for k in _jetRecoKeys: newCPart[k] = jetRecoDict[k] newChainParts.append(newCPart) @@ -504,7 +504,7 @@ def analyseChainName(chainName, L1thresholds, L1item): if chainProperties['signature']=='Jet': # ----- at this point we can figure out if the chain is a bJet chain and update defaults accordingly - if chainProperties['bTag'] != '': + if chainProperties['bTag'] != '' or chainProperties['ditauTag'] != '': log.debug('Setting b-jet chain defaults') # b-jet chain, so we now use the bJet defaults if they have not already been overriden bJetDefaultValues, allowedbJetPropertiesAndValues = getSignatureInformation('Bjet') @@ -519,23 +519,6 @@ def analyseChainName(chainName, L1thresholds, L1item): if propSet is False: log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(bJetDefaultValues[prop])) chainProperties[prop] = bJetDefaultValues[prop] - - - if chainProperties['ditauTag'] != '': - log.debug('Setting Ditau chain defaults') - # b-jet chain, so we now use the bJet defaults if they have not already been overriden - ditauJetDefaultValues, allowedDitauJetPropertiesAndValues = getSignatureInformation('Ditau') - for prop, value in ditauJetDefaultValues.items(): - propSet=False - for value in allowedDitauJetPropertiesAndValues[prop]: - if value in matchedparts: - propSet=True - break - - # if the property was not set already, then set if according to the ditau-jet defaults - if propSet is False: - log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(ditauJetDefaultValues[prop])) - chainProperties[prop] = ditauJetDefaultValues[prop] if chainProperties['signature'] == 'Jet' and chainProperties['beamspotChain'] != '': @@ -611,25 +594,19 @@ def analyseChainName(chainName, L1thresholds, L1item): # ---- finally also taking care of the signature key ---- genchainDict['chainParts'] = allChainProperties for cPart in allChainProperties: - if cPart['signature'] == 'Jet' and cPart['bTag'] != '': + if cPart['signature'] == 'Jet' and (cPart['bTag'] != '' or cPart['ditauTag'] != ''): cPart['signature'] = 'Bjet' if 'tnpInfo' in cPart.keys() and cPart['tnpInfo'] != "": cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['tnpInfo']) else: cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['extra']) - if cPart['signature'] == 'Jet' and cPart['ditauTag'] != '': - cPart['signature'] = 'Ditau' - if 'tnpInfo' in cPart.keys() and cPart['tnpInfo'] != "": - cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['tnpInfo']) - else: - cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['extra']) genchainDict['signatures'] += [cPart['signature']] genchainDict['alignmentGroups'] += [cPart['alignmentGroup']] # Postprocess chains with multiple jet chainParts # to set them consistently from only one specification if len(genchainDict['chainParts'])>1: - if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures'] or 'Ditau' in genchainDict['signatures']: + if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures']: genchainDict['chainParts'] = unifyJetRecoParts(genchainDict['chainParts']) #genchainDict['signature'] = allChainProperties[0]['signature'] @@ -705,7 +682,7 @@ def dictFromChainName(flags, chainInfo): chainDict['sigDicts'][sf].extend(chainPart['subSigs']) else: chainDict['sigDicts'].update({sf:chainPart['subSigs']}) - if sf in ['Bjet', 'Ditau']: + if sf == 'Bjet': chainDict['sigDicts'].update({'Jet':['Jet']}) @@ -734,7 +711,7 @@ def dictFromChainName(flags, chainInfo): log.error("Standard tau chains should be seeded from L1_TAU. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True - if thisSignature in ['Jet','Bjet', 'Ditau','MET','UnconventionalTracking']: + if thisSignature in ['Jet','Bjet','MET','UnconventionalTracking']: if 'FSNOSEED' not in thisL1: log.error("Jet, b-jet, MET chains should be seeded from FSNOSEED. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py index 791ec7d4080b..0c3b3ae69563 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py @@ -20,7 +20,6 @@ from .Physics_pp_run3_v1 import (PhysicsStream, SingleBjetGroup, MultiBjetGroup, SingleTauGroup, - DiTauGroup, MultiTauGroup, MultiPhotonGroup, TauPhotonGroup, @@ -549,6 +548,35 @@ def getDevSignatures(): ChainProp(name='HLT_2j20_2j20_0eta290_boffperf_pf_ftf_presel2j25XX2j25b85_PhysicsTLA_L14jJ40p0ETA25', l1SeedThresholds=['FSNOSEED']*2, stream=['TLA'], groups=MultiBjetGroup+DevGroup), ChainProp(name='HLT_2j20_2j20_0eta290_boffperf_pf_ftf_presel2c20XX2c20b85_PhysicsTLA_L1jJ85p0ETA21_3jJ40p0ETA25', l1SeedThresholds=['FSNOSEED']*2, stream=['TLA'], groups=MultiBjetGroup+DevGroup), + # ATR-30999 - ditau chains + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + #alt L1 seed + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), + ] chains['Tau'] = [ @@ -713,37 +741,6 @@ def getDevSignatures(): ChainProp(name="HLT_tau160_mediumRNN_trackLRT_L1eTAU140", groups=DevGroup, monGroups=['tauMon:t0']), ] - - chains['Ditau'] = [ - # no id chains - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - # id chain at 0.5 - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - # varias id chain with ntrk 5, 5 cuts - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - #alt L1 seed - # no id chains - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - # id chain at 0.5 - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - # varias id chain with ntrk 5, 5 cuts - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), - ] - chains['Bphysics'] = [ #ATR-21003; default dimuon and Bmumux chains from Run2; l2io validation; should not be moved to Physics ChainProp(name='HLT_2mu4_noL2Comb_bJpsimumu_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+DevGroup), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py index e83a9bb16b21..79ec991d717c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py @@ -24,7 +24,6 @@ EgammaBjetGroup = ['RATE:EgammaBjet', 'BW:BJet'] MuonBjetGroup = ['RATE:MuonBjet', 'BW:BJet'] BjetMETGroup = ['RATE:BjetMET', 'BW:BJet'] SingleTauGroup = ['RATE:SingleTau', 'BW:Tau'] -DiTauGroup = ['RATE:Ditau', 'BW:Tau'] MultiTauGroup = ['RATE:MultiTau', 'BW:Tau'] BphysicsGroup = ['RATE:Bphysics', 'BW:Bphysics'] BphysElectronGroup = ['RATE:BphysicsElectron', 'BW:BphysicsElectron'] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py index b874ef6a9703..a30f4ffb974d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py @@ -23,7 +23,6 @@ SignatureDict = OrderedDict({ 'Tau' : ('tau','AllTag'), 'Jet' : ('j', 'JetMET'), 'Bjet' : ('', 'JetMET'), - 'Ditau' : ('', 'JetMET'), 'MET' : ('xe', 'JetMET'), 'XS' : ('xs', 'JetMET'), 'TE' : ('te', 'JetMET'), @@ -72,7 +71,7 @@ def getListOfSignatures(): class ChainStore(dict): """Class to hold list of chains for each signature (dictionary with fixed set of keys)""" - _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', 'Ditau', + _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', 'HeavyIon', 'Beamspot', 'Cosmic', 'EnhancedBias', 'Monitor', 'Calib', 'Streaming', 'Combined', 'MinBias', 'UnconventionalTracking', 'Test'] @@ -91,7 +90,7 @@ class ChainStore(dict): def getAllDitauTags(): # Create a list of all possible ditau tags ditau_tags = [] - for id_cut in [0,5,6,7,8,9]: + for id_cut in [0,1,2,3,4,5,6,7,8,9]: for n_trk_lead in range(3, 10): for n_trk_subl in range(3, 10): ditau_tags.append(f'ditauOmni{id_cut}Trk{n_trk_lead}{n_trk_subl}') @@ -556,10 +555,6 @@ bJetChainParts_Default = { 'subSigs' : ['Bjet'], } -ditauJetChainParts_Default = { - 'sigFolder' : ['Ditau'], - 'subSigs' : ['Ditau'], -} # ---- Beamspot Dictionary for chains confiugred through jets BeamspotJetChainParts_Default = { 'signature' : 'Beamspot', @@ -1437,8 +1432,6 @@ def getSignatureInformation(signature): return [BeamspotJetChainParts_Default, JetChainParts] if signature == "Tau": return [TauChainParts_Default, TauChainParts] - if signature == "Ditau": - return [ditauJetChainParts_Default, JetChainParts] if (signature == "Muon"): return [MuonChainParts_Default, MuonChainParts] if (signature == "Bphysics"): -- GitLab From 3bb60a737913f637ddd71e6fd3e148ee5ba7ffd8 Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Thu, 27 Mar 2025 13:57:06 +0000 Subject: [PATCH 3/8] Revert "merge ditau and bjet trigger part" This reverts commit 98ef7e382ae79946d421ba9b6f1d224a22977051. --- .../python/HLT/Bjet/GenerateBjetChainDefs.py | 7 --- .../python/HLT/Config/GenerateMenuMT.py | 5 +- .../HLT/Config/Utility/DictFromChainName.py | 37 ++++++++--- .../python/HLT/Menu/Dev_pp_run3_v1.py | 61 ++++++++++--------- .../python/HLT/Menu/Physics_pp_run3_v1.py | 1 + .../python/HLT/Menu/SignatureDicts.py | 11 +++- 6 files changed, 75 insertions(+), 47 deletions(-) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py index f29dfe19019f..136aa43f6515 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/GenerateBjetChainDefs.py @@ -2,7 +2,6 @@ from TriggerMenuMT.HLT.Config.Utility.ChainDictTools import splitChainDict from .BjetChainConfiguration import BjetChainConfiguration -from ..Ditau.DitauChainConfiguration import DitauChainConfiguration from ..Jet.JetChainConfiguration import JetChainConfiguration from TriggerMenuMT.HLT.Config.Utility.ChainMerging import mergeChainDefs @@ -30,12 +29,6 @@ def generateChainConfigs(flags, chainDict ): # happens for bjet + normal jet chains if subChainDict['chainParts'][0]['signature'] != 'Bjet': listOfChainDefs += [jet] - # if this chain is a ditau chain, setup ditau tagging instead of btagging - elif subChainDict['chainParts'][0]['ditauTag'] != '': - log.debug('input jet collection name is: %s\n', jet_name) - Ditau = DitauChainConfiguration(subChainDict, jet_name).assembleChain(flags) - jet.append_step_to_jet(Ditau.steps) - listOfChainDefs += [ jet ] else: log.debug('input jet collection name is: %s\n', jet_name) Bjet = BjetChainConfiguration(subChainDict, jet_name).assembleChain(flags) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py index 468ead6160ea..ad4f62734940 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py @@ -15,7 +15,7 @@ def calibCosmicMonSignatures(): return ['Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias'] def combinedSignatures(): - return ['MinBias','Electron','Photon','Muon','Tau' ,'Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] + return ['MinBias','Electron','Photon','Muon','Tau', 'Ditau','Jet', 'Bjet','MET','UnconventionalTracking','HeavyIon'] def jointSignatures(): return ['Bjet', 'Egamma', 'Combined'] @@ -93,6 +93,7 @@ class GenerateMenuMT(metaclass=Singleton): signatureDeps.update({ # Bjet always requires jet 'Bjet': ['Bjet','Jet'], + 'Ditau' : ['Ditau','Jet'], # Egamma contains two signatures 'Egamma': ['Electron','Photon'], 'Combined': combinedSignatures(), @@ -403,7 +404,7 @@ class GenerateMenuMT(metaclass=Singleton): if currentSig in self.availableSignatures: try: log.debug("[__generateChainConfigs] Trying to get chain config for %s", currentSig) - if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics'] : + if currentSig in ['Electron', 'Photon', 'Muon', 'Tau', 'Bphysics', 'Ditau'] : chainPartConfig, perSig_lengthOfChainConfigs = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict, perSig_lengthOfChainConfigs) else: chainPartConfig = self.chainDefModule[currentSig].generateChainConfigs(flags, chainPartDict) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py index 8fe0a3298681..af4da6dc823b 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py @@ -175,7 +175,7 @@ def unifyJetRecoParts(chainParts): jetDefaults, _ = getSignatureInformation('Jet') # Extract the jet chainParts, and get the reco specs from the last one _jetRecoKeys = JetRecoKeys - jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet']] + jetChainParts = [cPart for cPart in chainParts if cPart['signature'] in ['Jet','Bjet', 'Ditau']] jetRecoDict = {k:jetChainParts[-1][k] for k in _jetRecoKeys} # Check consistency of the preceding jet parts @@ -191,7 +191,7 @@ def unifyJetRecoParts(chainParts): newChainParts = [] for cPart in chainParts: newCPart = deepcopy(cPart) - if newCPart['signature'] in ['Jet','Bjet']: + if newCPart['signature'] in ['Jet','Bjet', 'Ditau']: for k in _jetRecoKeys: newCPart[k] = jetRecoDict[k] newChainParts.append(newCPart) @@ -504,7 +504,7 @@ def analyseChainName(chainName, L1thresholds, L1item): if chainProperties['signature']=='Jet': # ----- at this point we can figure out if the chain is a bJet chain and update defaults accordingly - if chainProperties['bTag'] != '' or chainProperties['ditauTag'] != '': + if chainProperties['bTag'] != '': log.debug('Setting b-jet chain defaults') # b-jet chain, so we now use the bJet defaults if they have not already been overriden bJetDefaultValues, allowedbJetPropertiesAndValues = getSignatureInformation('Bjet') @@ -519,6 +519,23 @@ def analyseChainName(chainName, L1thresholds, L1item): if propSet is False: log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(bJetDefaultValues[prop])) chainProperties[prop] = bJetDefaultValues[prop] + + + if chainProperties['ditauTag'] != '': + log.debug('Setting Ditau chain defaults') + # b-jet chain, so we now use the bJet defaults if they have not already been overriden + ditauJetDefaultValues, allowedDitauJetPropertiesAndValues = getSignatureInformation('Ditau') + for prop, value in ditauJetDefaultValues.items(): + propSet=False + for value in allowedDitauJetPropertiesAndValues[prop]: + if value in matchedparts: + propSet=True + break + + # if the property was not set already, then set if according to the ditau-jet defaults + if propSet is False: + log.debug('Changing %s from %s to %s', prop, str(chainProperties[prop]), str(ditauJetDefaultValues[prop])) + chainProperties[prop] = ditauJetDefaultValues[prop] if chainProperties['signature'] == 'Jet' and chainProperties['beamspotChain'] != '': @@ -594,19 +611,25 @@ def analyseChainName(chainName, L1thresholds, L1item): # ---- finally also taking care of the signature key ---- genchainDict['chainParts'] = allChainProperties for cPart in allChainProperties: - if cPart['signature'] == 'Jet' and (cPart['bTag'] != '' or cPart['ditauTag'] != ''): + if cPart['signature'] == 'Jet' and cPart['bTag'] != '': cPart['signature'] = 'Bjet' if 'tnpInfo' in cPart.keys() and cPart['tnpInfo'] != "": cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['tnpInfo']) else: cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Bjet', cPart['extra']) + if cPart['signature'] == 'Jet' and cPart['ditauTag'] != '': + cPart['signature'] = 'Ditau' + if 'tnpInfo' in cPart.keys() and cPart['tnpInfo'] != "": + cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['tnpInfo']) + else: + cPart['alignmentGroup'] = getAlignmentGroupFromPattern('Ditau', cPart['extra']) genchainDict['signatures'] += [cPart['signature']] genchainDict['alignmentGroups'] += [cPart['alignmentGroup']] # Postprocess chains with multiple jet chainParts # to set them consistently from only one specification if len(genchainDict['chainParts'])>1: - if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures']: + if 'Jet' in genchainDict['signatures'] or 'Bjet' in genchainDict['signatures'] or 'Ditau' in genchainDict['signatures']: genchainDict['chainParts'] = unifyJetRecoParts(genchainDict['chainParts']) #genchainDict['signature'] = allChainProperties[0]['signature'] @@ -682,7 +705,7 @@ def dictFromChainName(flags, chainInfo): chainDict['sigDicts'][sf].extend(chainPart['subSigs']) else: chainDict['sigDicts'].update({sf:chainPart['subSigs']}) - if sf == 'Bjet': + if sf in ['Bjet', 'Ditau']: chainDict['sigDicts'].update({'Jet':['Jet']}) @@ -711,7 +734,7 @@ def dictFromChainName(flags, chainInfo): log.error("Standard tau chains should be seeded from L1_TAU. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True - if thisSignature in ['Jet','Bjet','MET','UnconventionalTracking']: + if thisSignature in ['Jet','Bjet', 'Ditau','MET','UnconventionalTracking']: if 'FSNOSEED' not in thisL1: log.error("Jet, b-jet, MET chains should be seeded from FSNOSEED. Check %s seeded from %s (defined L1: %s), signature %s",chainDict['chainName'],thisL1,l1Thresholds,thisSignature) #incorrectL1=True diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py index 0c3b3ae69563..791ec7d4080b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Dev_pp_run3_v1.py @@ -20,6 +20,7 @@ from .Physics_pp_run3_v1 import (PhysicsStream, SingleBjetGroup, MultiBjetGroup, SingleTauGroup, + DiTauGroup, MultiTauGroup, MultiPhotonGroup, TauPhotonGroup, @@ -548,35 +549,6 @@ def getDevSignatures(): ChainProp(name='HLT_2j20_2j20_0eta290_boffperf_pf_ftf_presel2j25XX2j25b85_PhysicsTLA_L14jJ40p0ETA25', l1SeedThresholds=['FSNOSEED']*2, stream=['TLA'], groups=MultiBjetGroup+DevGroup), ChainProp(name='HLT_2j20_2j20_0eta290_boffperf_pf_ftf_presel2c20XX2c20b85_PhysicsTLA_L1jJ85p0ETA21_3jJ40p0ETA25', l1SeedThresholds=['FSNOSEED']*2, stream=['TLA'], groups=MultiBjetGroup+DevGroup), - # ATR-30999 - ditau chains - # no id chains - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - # id chain at 0.5 - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - # varias id chain with ntrk 5, 5 cuts - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - #alt L1 seed - # no id chains - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - # id chain at 0.5 - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - # varias id chain with ntrk 5, 5 cuts - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=SingleBjetGroup+DevGroup), - ] chains['Tau'] = [ @@ -741,6 +713,37 @@ def getDevSignatures(): ChainProp(name="HLT_tau160_mediumRNN_trackLRT_L1eTAU140", groups=DevGroup, monGroups=['tauMon:t0']), ] + + chains['Ditau'] = [ + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1jJ160', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + #alt L1 seed + # no id chains + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk99_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni0Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # id chain at 0.5 + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk44_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni5Trk33_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + # varias id chain with ntrk 5, 5 cuts + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni6Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni7Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni8Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ChainProp(name='HLT_j250_a10sd_cssk_ditauOmni9Trk55_pf_jes_ftf_preselj200_L1gLJ140p0ETA25', l1SeedThresholds=['FSNOSEED'], groups=DiTauGroup+DevGroup), + ] + chains['Bphysics'] = [ #ATR-21003; default dimuon and Bmumux chains from Run2; l2io validation; should not be moved to Physics ChainProp(name='HLT_2mu4_noL2Comb_bJpsimumu_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+DevGroup), diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py index 79ec991d717c..e83a9bb16b21 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py @@ -24,6 +24,7 @@ EgammaBjetGroup = ['RATE:EgammaBjet', 'BW:BJet'] MuonBjetGroup = ['RATE:MuonBjet', 'BW:BJet'] BjetMETGroup = ['RATE:BjetMET', 'BW:BJet'] SingleTauGroup = ['RATE:SingleTau', 'BW:Tau'] +DiTauGroup = ['RATE:Ditau', 'BW:Tau'] MultiTauGroup = ['RATE:MultiTau', 'BW:Tau'] BphysicsGroup = ['RATE:Bphysics', 'BW:Bphysics'] BphysElectronGroup = ['RATE:BphysicsElectron', 'BW:BphysicsElectron'] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py index a30f4ffb974d..b874ef6a9703 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py @@ -23,6 +23,7 @@ SignatureDict = OrderedDict({ 'Tau' : ('tau','AllTag'), 'Jet' : ('j', 'JetMET'), 'Bjet' : ('', 'JetMET'), + 'Ditau' : ('', 'JetMET'), 'MET' : ('xe', 'JetMET'), 'XS' : ('xs', 'JetMET'), 'TE' : ('te', 'JetMET'), @@ -71,7 +72,7 @@ def getListOfSignatures(): class ChainStore(dict): """Class to hold list of chains for each signature (dictionary with fixed set of keys)""" - _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', + _allowedSignatures = ['Egamma', 'Muon', 'Jet', 'Bjet', 'Bphysics', 'MET', 'Tau', 'Ditau', 'HeavyIon', 'Beamspot', 'Cosmic', 'EnhancedBias', 'Monitor', 'Calib', 'Streaming', 'Combined', 'MinBias', 'UnconventionalTracking', 'Test'] @@ -90,7 +91,7 @@ class ChainStore(dict): def getAllDitauTags(): # Create a list of all possible ditau tags ditau_tags = [] - for id_cut in [0,1,2,3,4,5,6,7,8,9]: + for id_cut in [0,5,6,7,8,9]: for n_trk_lead in range(3, 10): for n_trk_subl in range(3, 10): ditau_tags.append(f'ditauOmni{id_cut}Trk{n_trk_lead}{n_trk_subl}') @@ -555,6 +556,10 @@ bJetChainParts_Default = { 'subSigs' : ['Bjet'], } +ditauJetChainParts_Default = { + 'sigFolder' : ['Ditau'], + 'subSigs' : ['Ditau'], +} # ---- Beamspot Dictionary for chains confiugred through jets BeamspotJetChainParts_Default = { 'signature' : 'Beamspot', @@ -1432,6 +1437,8 @@ def getSignatureInformation(signature): return [BeamspotJetChainParts_Default, JetChainParts] if signature == "Tau": return [TauChainParts_Default, TauChainParts] + if signature == "Ditau": + return [ditauJetChainParts_Default, JetChainParts] if (signature == "Muon"): return [MuonChainParts_Default, MuonChainParts] if (signature == "Bphysics"): -- GitLab From 0471d5692268e39acdbfec1163a1d59cd1d7001e Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Thu, 27 Mar 2025 13:59:09 +0000 Subject: [PATCH 4/8] add finer grain ditau omni cut --- .../TriggerMenuMT/python/HLT/Menu/SignatureDicts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py index b874ef6a9703..85d496566a6e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py @@ -91,7 +91,7 @@ class ChainStore(dict): def getAllDitauTags(): # Create a list of all possible ditau tags ditau_tags = [] - for id_cut in [0,5,6,7,8,9]: + for id_cut in range(0, 10): for n_trk_lead in range(3, 10): for n_trk_subl in range(3, 10): ditau_tags.append(f'ditauOmni{id_cut}Trk{n_trk_lead}{n_trk_subl}') -- GitLab From f1685a94af5bd99cb8e1d7a68877397e1662538d Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Thu, 27 Mar 2025 20:28:42 +0000 Subject: [PATCH 5/8] minor fixes and copyright --- .../TrigDitauHypo/CMakeLists.txt | 2 +- .../TrigDitauHypo/python/TrigDiTauHypoTool.py | 2 +- .../TrigDitauHypo/src/TrigDiTauHypoAlg.cxx | 2 +- .../TrigDitauHypo/src/TrigDiTauHypoAlg.h | 2 +- .../TrigDitauHypo/src/TrigDiTauHypoTool.cxx | 2 +- .../TriggerEDMAuxAccessors.h | 2 +- .../python/BuildSignatureFlags.py | 4 +-- .../test_trig_data_v1Dev_slice_ditau_build.py | 29 +++++++++++++++++++ .../python/HLT/Config/GenerateMenuMT.py | 2 +- .../HLT/Config/Utility/DictFromChainName.py | 2 +- .../HLT/Ditau/DitauChainConfiguration.py | 2 +- .../python/HLT/Ditau/DitauConfigFlagsHLT.py | 5 ++-- .../python/HLT/Ditau/DitauMenuSequences.py | 6 ++-- .../HLT/Ditau/GenerateDitauChainDefs.py | 2 +- .../python/HLT/Menu/Physics_pp_run3_v1.py | 2 +- .../python/HLT/Menu/SignatureDicts.py | 2 +- 16 files changed, 48 insertions(+), 20 deletions(-) create mode 100755 Trigger/TrigValidation/TriggerTest/test/test_trig_data_v1Dev_slice_ditau_build.py diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt index 11fd8c37b893..fd0414881ab1 100644 --- a/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt +++ b/Trigger/TrigHypothesis/TrigDitauHypo/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( TrigDitauHypo ) diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py b/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py index 12ca371d3c4a..0631c0d97405 100644 --- a/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py +++ b/Trigger/TrigHypothesis/TrigDitauHypo/python/TrigDiTauHypoTool.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration import re from AthenaCommon.SystemOfUnits import GeV diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx index d836946ab471..b19fbf023a1a 100644 --- a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h" diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h index 8af29a173d5a..edc618edafde 100644 --- a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoAlg.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #pragma once diff --git a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx index 93e24ef42a26..485f69d47620 100644 --- a/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx +++ b/Trigger/TrigHypothesis/TrigDitauHypo/src/TrigDiTauHypoTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #include "AthenaMonitoringKernel/Monitored.h" diff --git a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h index c6892b070a11..bae16cae3b94 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h +++ b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #include "xAODBase/IParticleContainer.h" diff --git a/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py b/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py index 3c7e51c0232e..7352347a3b8d 100644 --- a/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py +++ b/Trigger/TrigTools/TrigInDetConfig/python/BuildSignatureFlags.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.AthConfigFlags import AthConfigFlags from TrkConfig.TrackingPassFlags import createTrackingPassFlags,createITkTrackingPassFlags @@ -339,7 +339,7 @@ def ditau(flags: AthConfigFlags, instanceName: str, recoMode: str) -> AthConfigF flags.input_name = instanceName flags.name = "ditau" flags.suffix = "ditau" - flags.roi = "HLT_Roi_ditau" + flags.roi = "HLT_DitauRoI" flags.etaHalfWidth = 1.0 flags.phiHalfWidth = 1.0 flags.zedHalfWidth = 7.0 diff --git a/Trigger/TrigValidation/TriggerTest/test/test_trig_data_v1Dev_slice_ditau_build.py b/Trigger/TrigValidation/TriggerTest/test/test_trig_data_v1Dev_slice_ditau_build.py new file mode 100755 index 000000000000..b78b5c420b98 --- /dev/null +++ b/Trigger/TrigValidation/TriggerTest/test/test_trig_data_v1Dev_slice_ditau_build.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration + +# art-description: Trigger RDO->RDO_TRIG athena test of the b-jet slice in Dev_pp_run3_v1 menu, data input +# art-type: build +# art-include: main/Athena +# art-include: 24.0/Athena +# Skipping art-output which has no effect for build tests. +# If you create a grid version, check art-output in existing grid tests. + +from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps + +ex = ExecStep.ExecStep() +ex.type = 'athena' +ex.job_options = 'TriggerJobOpts/runHLT.py' +ex.input = 'data_Main' +ex.max_events = 150 +ex.threads = 1 +ex.flags = ['Trigger.triggerMenuSetup="Dev_pp_run3_v1"', + 'Trigger.enabledSignatures=[\\\"Ditau\\\"]', + 'Trigger.doLVL1=True'] + +test = Test.Test() +test.art_type = 'build' +test.exec_steps = [ex] +test.check_steps = CheckSteps.default_check_steps(test) + +import sys +sys.exit(test.run()) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py index ad4f62734940..fd40a2add1d1 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/GenerateMenuMT.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from typing import Optional import importlib, re, string diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py index af4da6dc823b..05eeb632b0ae 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Config/Utility/DictFromChainName.py @@ -1,5 +1,5 @@ #! /bin/env python -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration """ Class to obtain the chain configuration dictionary from the short or long name diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py index 215be632907f..ea934310fef6 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauChainConfiguration.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from AthenaCommon.Logging import logging logging.getLogger().info("Importing %s",__name__) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py index 41db944e8557..1246ac498660 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration import unittest from AthenaConfiguration.AthConfigFlags import AthConfigFlags @@ -6,8 +6,7 @@ from AthenaConfiguration.AthConfigFlags import AthConfigFlags def createDiTauConfigFlags(): ditau_cfg = AthConfigFlags() ditau_cfg.addFlag("DiTau.DiTauContainer", ["HLT_DiTauJets"]) - ditau_cfg.addFlag("DiTau.JetSeedPt", 50000) - ditau_cfg.addFlag("DiTau.doRunDiTauDiscriminant", False) + ditau_cfg.addFlag("DiTau.JetSeedPt", 200000) ditau_cfg.addFlag("DiTau.MaxEta", 2.5) ditau_cfg.addFlag("DiTau.Rjet", 1.0) ditau_cfg.addFlag("DiTau.Rsubjet", 0.2) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py index de2be5687141..1f15eef5c1a0 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -91,7 +91,7 @@ def ditauRecoCfg(flags, inputJets: str, inputVertex: str, inputFSTracks: str, i # )), acc.popToolsAndMerge(IDVarCalculatorCfg(flags, useCells=False)), acc.popToolsAndMerge(DiTauIDVarDecoratorCfg(flags)), - acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg(flags)), + acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg(flags, onnxModelPath='DiTauRec/omni.onnx')), ] acc.addEventAlgo(CompFactory.DiTauBuilder( @@ -165,7 +165,7 @@ def ditauSequenceGenCfg(flags, seq_name, jet_name): } )) - selAcc = SelectionCA(f'Trig_DitauReco_{seq_name}', isProbe=False) + selAcc = SelectionCA(f'Trig_DitauReco_{seq_name}') selAcc.mergeReco(ditauAcc) selAcc.addHypoAlgo(CompFactory.TrigDiTauHypoAlg( f'DiTauHypoAlg_{seq_name}', diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py index 5c26362abf16..f8d9210750d4 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/GenerateDitauChainDefs.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from TriggerMenuMT.HLT.Config.Utility.ChainDictTools import splitChainDict from .DitauChainConfiguration import DitauChainConfiguration diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py index 2bf3c19dac03..f670419b087f 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration #------------------------------------------------------------------------# # Physics_pp_run3_v1.py menu -- contains physics chains for MC and data diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py index 3c68643ab91b..cc3534ef0f11 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/SignatureDicts.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration from AthenaCommon.Logging import logging log = logging.getLogger( __name__ ) log.debug("Importing %s",__name__) -- GitLab From 17b53dee998fa9cc16109c4bb53a6ea11ff5d320 Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Fri, 28 Mar 2025 13:01:12 +0000 Subject: [PATCH 6/8] fix model path --- .../TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py | 1 + .../TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py index 1246ac498660..7d00584927cc 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py @@ -11,6 +11,7 @@ def createDiTauConfigFlags(): ditau_cfg.addFlag("DiTau.Rjet", 1.0) ditau_cfg.addFlag("DiTau.Rsubjet", 0.2) ditau_cfg.addFlag("DiTau.Rcore", 0.1) + ditau_cfg.addFlag("DiTau.DiTauIDModel", "TrigTauRec/00-11-02/dev/boosted_ditau_omni_model.onnx") return ditau_cfg class DiTestTauRecConfigFlags(unittest.TestCase): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py index 1f15eef5c1a0..46e29df0c4e8 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py @@ -91,7 +91,10 @@ def ditauRecoCfg(flags, inputJets: str, inputVertex: str, inputFSTracks: str, i # )), acc.popToolsAndMerge(IDVarCalculatorCfg(flags, useCells=False)), acc.popToolsAndMerge(DiTauIDVarDecoratorCfg(flags)), - acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg(flags, onnxModelPath='DiTauRec/omni.onnx')), + acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg( + flags, + onnxModelPath=flags_ditau.DiTau.DiTauIDModel, + )), ] acc.addEventAlgo(CompFactory.DiTauBuilder( -- GitLab From 2ba1296cbec20960abf75c74daccd70990ffd7ab Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Fri, 28 Mar 2025 17:07:56 +0000 Subject: [PATCH 7/8] Fix pathResolver --- Reconstruction/DiTauRec/DiTauRec/DiTauOnnxDiscriminantTool.h | 2 +- Reconstruction/DiTauRec/src/DiTauOnnxDiscriminantTool.cxx | 2 +- .../TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py | 3 ++- .../TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Reconstruction/DiTauRec/DiTauRec/DiTauOnnxDiscriminantTool.h b/Reconstruction/DiTauRec/DiTauRec/DiTauOnnxDiscriminantTool.h index 204e62f1297c..87fb2181e310 100644 --- a/Reconstruction/DiTauRec/DiTauRec/DiTauOnnxDiscriminantTool.h +++ b/Reconstruction/DiTauRec/DiTauRec/DiTauOnnxDiscriminantTool.h @@ -11,7 +11,7 @@ #include "xAODTau/DiTauJet.h" #include "DiTauToolBase.h" #include "GaudiKernel/ToolHandle.h" -#include "GaudiKernel/PathResolver.h" +#include "PathResolver/PathResolver.h" #include "AthContainers/Accessor.h" #include "AthContainers/ConstAccessor.h" diff --git a/Reconstruction/DiTauRec/src/DiTauOnnxDiscriminantTool.cxx b/Reconstruction/DiTauRec/src/DiTauOnnxDiscriminantTool.cxx index 0a32e9e89ca1..eeb8551aa110 100644 --- a/Reconstruction/DiTauRec/src/DiTauOnnxDiscriminantTool.cxx +++ b/Reconstruction/DiTauRec/src/DiTauOnnxDiscriminantTool.cxx @@ -35,7 +35,7 @@ StatusCode DiTauOnnxDiscriminantTool::initialize() { ATH_MSG_INFO( "Initializing DiTauOnnxDiscriminantTool" ); ATH_MSG_INFO( "onnxModelPath: " << m_onnxModelPath ); - auto model_path = System::PathResolver::find_file (m_onnxModelPath, "DATAPATH"); + auto model_path = PathResolverFindCalibFile (m_onnxModelPath); if (model_path.empty()) { ATH_MSG_ERROR("Could not find model file: " << m_onnxModelPath); return StatusCode::FAILURE; diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py index 7d00584927cc..3f5c35aae103 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauConfigFlagsHLT.py @@ -11,7 +11,8 @@ def createDiTauConfigFlags(): ditau_cfg.addFlag("DiTau.Rjet", 1.0) ditau_cfg.addFlag("DiTau.Rsubjet", 0.2) ditau_cfg.addFlag("DiTau.Rcore", 0.1) - ditau_cfg.addFlag("DiTau.DiTauIDModel", "TrigTauRec/00-11-02/dev/boosted_ditau_omni_model.onnx") + ditau_cfg.addFlag("DiTau.CalibFolder", 'TrigTauRec/00-11-02/') + ditau_cfg.addFlag("DiTau.DiTauIDModel", "dev/boosted_ditau_omni_model.onnx") return ditau_cfg class DiTestTauRecConfigFlags(unittest.TestCase): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py index 46e29df0c4e8..8c2546f6f680 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Ditau/DitauMenuSequences.py @@ -93,7 +93,7 @@ def ditauRecoCfg(flags, inputJets: str, inputVertex: str, inputFSTracks: str, i acc.popToolsAndMerge(DiTauIDVarDecoratorCfg(flags)), acc.popToolsAndMerge(DiTauOnnxScoreCalculatorCfg( flags, - onnxModelPath=flags_ditau.DiTau.DiTauIDModel, + onnxModelPath=f"{flags_ditau.DiTau.CalibFolder}{flags_ditau.DiTau.DiTauIDModel}", )), ] -- GitLab From 799691a007cc693136269fb23710532bf9dd0ffb Mon Sep 17 00:00:00 2001 From: Qichen Dong <qichen.dong@cern.ch> Date: Fri, 28 Mar 2025 17:08:19 +0000 Subject: [PATCH 8/8] forgot to stage cmakefile --- Reconstruction/DiTauRec/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reconstruction/DiTauRec/CMakeLists.txt b/Reconstruction/DiTauRec/CMakeLists.txt index 25d37f5a2233..c57862387806 100644 --- a/Reconstruction/DiTauRec/CMakeLists.txt +++ b/Reconstruction/DiTauRec/CMakeLists.txt @@ -11,7 +11,7 @@ atlas_add_component( DiTauRec src/*.cxx src/components/*.cxx INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} - LINK_LIBRARIES ${FASTJET_LIBRARIES} AthenaBaseComps xAODEgamma xAODJet xAODMuon xAODTau GaudiKernel JetEDM TrkToolInterfaces CaloEvent xAODTracking RecoToolInterfaces StoreGateLib tauRecToolsLib TrkParametersIdentificationHelpers ) + LINK_LIBRARIES ${FASTJET_LIBRARIES} AthenaBaseComps xAODEgamma xAODJet xAODMuon xAODTau GaudiKernel JetEDM TrkToolInterfaces CaloEvent xAODTracking RecoToolInterfaces StoreGateLib tauRecToolsLib TrkParametersIdentificationHelpers PathResolver) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) -- GitLab