ATLAS Offline Software
Loading...
Searching...
No Matches
BJetCalibrationAlg.cxx
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
8//
9// includes
10//
11
13
14//
15// method implementations
16//
17
18namespace CP
19{
20
21 StatusCode BJetCalibrationAlg ::
22 initialize ()
23 {
30
32
33 if(!m_muonSelectionTool.empty()){
34 ANA_CHECK (m_muonSelectionTool.retrieve());
35 if(!m_muonPreselection.empty()){
36 ATH_MSG_ERROR ("muonSelectionTool and muonPreselection should not be configured simultaneously");
37 return StatusCode::FAILURE;
38 }
39 }
40
41 ANA_CHECK (m_muonInJetTool.retrieve());
42 if(!m_bJetTool.empty()) ANA_CHECK (m_bJetTool.retrieve());
43
44 ANA_CHECK (m_systematicsList.initialize());
45 return StatusCode::SUCCESS;
46 }
47
48 StatusCode BJetCalibrationAlg ::
49 execute (const EventContext& ctx)
50 {
51
52
53 for (const auto& sys : m_systematicsList.systematicsVector())
54 {
55 xAOD::JetContainer *jets = nullptr;
56 ANA_CHECK (m_jetHandle.getCopy (jets, sys, ctx));
57
58 const xAOD::MuonContainer *muons = nullptr;
59 ANA_CHECK (m_muonHandle.retrieve (muons, sys, ctx));
60
61 std::vector<const xAOD::Muon*> muons_for_correction;
62 muons_for_correction.reserve(muons->size());
63 for(const xAOD::Muon* muon : *muons)
64 {
65 if (// For analysis frameworks
66 (m_muonSelectionTool.empty() && m_muonPreselection.getBool(*muon, sys)) ||
67 // For other frameworks
68 (!m_muonSelectionTool.empty() && m_muonSelectionTool->accept(*muon)))
69 {
70 muons_for_correction.emplace_back(muon);
71 }
72 }
73
74 for (xAOD::Jet* jet : *jets)
75 {
76 static const std::string noCalib{"NoBJetCalibMomentum"};
77 static const std::string muonCorr{"MuonCorrMomentum"};
78 static const std::string calib{"BJetCalibMomentum"};
79 jet->setJetP4(noCalib, jet->jetP4());
80
81 int nmuons = 0;
82 if (!m_jetPreselection.getBool(*jet, sys))
83 {
84 jet->setJetP4(muonCorr, jet->jetP4());
85 if (!m_bJetTool.empty())
86 {
87 jet->setJetP4(calib, jet->jetP4());
88 }
89 }
90 else
91 {
92 ANA_CHECK (m_muonInJetTool->applyMuonInJetCorrection(*jet, muons_for_correction, nmuons));
93 jet->setJetP4(muonCorr, jet->jetP4());
94 if (!m_bJetTool.empty())
95 {
96 ANA_CHECK (m_bJetTool->applyBJetCorrection(*jet, nmuons>0));
97 jet->setJetP4(calib, jet->jetP4());
98 }
99
100 if (m_onlyDecorate)
101 {
102 // Reset the jet 4-vector to the original one
103 jet->setJetP4(jet->jetP4(noCalib));
104 }
105 }
106
107 m_nmuons.set(*jet, nmuons, sys);
108 }
109 }
110
111 return StatusCode::SUCCESS;
112 }
113}
#define ATH_MSG_ERROR(x,...)
#define ANA_CHECK(EXP)
check whether the given expression was successful
ToolHandle< IBJetCorrectionTool > m_bJetTool
the b-jet pt correction tool
SysReadSelectionHandle m_jetPreselection
SysCopyHandle< xAOD::JetContainer > m_jetHandle
SysReadSelectionHandle m_muonPreselection
ToolHandle< CP::IMuonSelectionTool > m_muonSelectionTool
the muon-in-jet selection tool, unused if muonPreselection set
Gaudi::Property< bool > m_onlyDecorate
SysReadHandle< xAOD::MuonContainer > m_muonHandle
ToolHandle< IMuonInJetCorrectionTool > m_muonInJetTool
the muon-in-jet correction tool
SysWriteDecorHandle< int > m_nmuons
size_type size() const noexcept
Returns the number of elements in the collection.
Select isolated Photons, Electrons and Muons.
Jet_v1 Jet
Definition of the current "jet version".
Muon_v1 Muon
Reference the current persistent version:
JetContainer_v1 JetContainer
Definition of the current "jet container version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".