ATLAS Offline Software
DiTauExtraVariablesAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
11 
12 namespace CP {
13 
15 
16  if (m_omniScoreKey.contHandleKey().key() == m_omniScoreKey.key()) {
17  m_omniScoreKey = m_ditausKey.key() + "." + m_omniScoreKey.key();
18  }
19 
20  // leading subjet info
21  if (m_leadSubjetPtKey.contHandleKey().key() == m_leadSubjetPtKey.key()) {
22  m_leadSubjetPtKey = m_ditausKey.key() + "." + m_leadSubjetPtKey.key();
23  }
24 
25  if (m_leadSubjetEtaKey.contHandleKey().key() == m_leadSubjetEtaKey.key()) {
27  }
28 
29  if (m_leadSubjetPhiKey.contHandleKey().key() == m_leadSubjetPhiKey.key()) {
31  }
32 
33  if (m_leadSubjetEKey.contHandleKey().key() == m_leadSubjetEKey.key()) {
34  m_leadSubjetEKey = m_ditausKey.key() + "." + m_leadSubjetEKey.key();
35  }
36 
37  if (m_leadSubjetNTracksKey.contHandleKey().key() == m_leadSubjetNTracksKey.key()) {
39  }
40 
41  if (m_leadSubjetChargeKey.contHandleKey().key() == m_leadSubjetChargeKey.key()) {
43  }
44 
45  // subleading subjet info
46  if (m_subleadSubjetPtKey.contHandleKey().key() == m_subleadSubjetPtKey.key()) {
48  }
49 
50  if (m_subleadSubjetEtaKey.contHandleKey().key() == m_subleadSubjetEtaKey.key()) {
52  }
53 
54  if (m_subleadSubjetPhiKey.contHandleKey().key() == m_subleadSubjetPhiKey.key()) {
56  }
57 
58  if (m_subleadSubjetEKey.contHandleKey().key() == m_subleadSubjetEKey.key()) {
60  }
61 
62  if (m_subleadSubjetNTracksKey.contHandleKey().key() == m_subleadSubjetNTracksKey.key()) {
64  }
65 
66  if (m_subleadSubjetChargeKey.contHandleKey().key() == m_subleadSubjetChargeKey.key()) {
68  }
69 
70  ANA_CHECK(m_ditausKey.initialize());
71  ANA_CHECK(m_omniScoreKey.initialize());
72  ANA_CHECK(m_leadSubjetPtKey.initialize());
73  ANA_CHECK(m_leadSubjetEtaKey.initialize());
74  ANA_CHECK(m_leadSubjetPhiKey.initialize());
75  ANA_CHECK(m_leadSubjetEKey.initialize());
76  ANA_CHECK(m_leadSubjetNTracksKey.initialize());
77  ANA_CHECK(m_leadSubjetChargeKey.initialize());
78  ANA_CHECK(m_subleadSubjetPtKey.initialize());
79  ANA_CHECK(m_subleadSubjetEtaKey.initialize());
80  ANA_CHECK(m_subleadSubjetPhiKey.initialize());
81  ANA_CHECK(m_subleadSubjetEKey.initialize());
83  ANA_CHECK(m_subleadSubjetChargeKey.initialize());
84 
85  return StatusCode::SUCCESS;
86  }
87 
88  StatusCode DiTauExtraVariablesAlg::execute(const EventContext &ctx) const {
89 
91 
93 
100 
107 
108  // need to check if this decoration exist first because it's only available from ATLASDPD-2318 onward
109  static const SG::ConstAccessor<float> acc_OmniScore("omni_score");
110 
111  for (const xAOD::DiTauJet *ditau : *ditaus) {
112 
113  // always require at least 2 subjets to have a good ditau
114  if(ditau->nSubjets() < 2) continue;
115 
116  if ( acc_OmniScore.isAvailable(*ditau) ) {
117  omniScoreHandle(*ditau) = acc_OmniScore(*ditau);
118  }
119 
120  leadSubjetPtHandle(*ditau) = ditau->subjetPt(0);
121  leadSubjetEtaHandle(*ditau) = ditau->subjetEta(0);
122  leadSubjetPhiHandle(*ditau) = ditau->subjetPhi(0);
123  leadSubjetEHandle(*ditau) = ditau->subjetE(0);
124 
125  subleadSubjetPtHandle(*ditau) = ditau->subjetPt(1);
126  subleadSubjetEtaHandle(*ditau) = ditau->subjetEta(1);
127  subleadSubjetPhiHandle(*ditau) = ditau->subjetPhi(1);
128  subleadSubjetEHandle(*ditau) = ditau->subjetE(1);
129 
130  // leading and subleading subjet ntracks
131  int lead_ntracks = 0;
132  int lead_charge = 0;
133  int subl_ntracks = 0;
134  int subl_charge = 0;
135 
136  for (const auto& xTrack : ditau->trackLinks()) {
137  if (!xTrack.isValid())
138  continue;
139 
140  for (int i = 0; i < 2; ++i) { // loop over two leading subjets
141  TLorentzVector tlvSubjet = TLorentzVector();
142  tlvSubjet.SetPtEtaPhiE(ditau->subjetPt(i), ditau->subjetEta(i),ditau->subjetPhi(i), ditau->subjetE(i));
143  double dR = tlvSubjet.DeltaR((*xTrack)->p4());
144 
145  if (dR < 0.1) {
146  if (i == 0) {
147  lead_ntracks++;
148  lead_charge += (*xTrack)->charge();
149  } else if (i == 1) {
150  subl_ntracks++;
151  subl_charge += (*xTrack)->charge();
152  }
153  break; // prevents double counting of tracks
154  }
155  } // loop over subjets
156  }
157  leadSubjetNTracksHandle(*ditau) = lead_ntracks;
158  leadSubjetChargeHandle(*ditau) = lead_charge;
159  subleadSubjetNTracksHandle(*ditau) = subl_ntracks;
160  subleadSubjetChargeHandle(*ditau) = subl_charge;
161  }
162  return StatusCode::SUCCESS;
163  }
164 
165 } // namespace
CP::DiTauExtraVariablesAlg::m_leadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEKey
Definition: DiTauExtraVariablesAlg.h:32
CP::DiTauExtraVariablesAlg::m_subleadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetChargeKey
Definition: DiTauExtraVariablesAlg.h:41
CP::DiTauExtraVariablesAlg::m_ditausKey
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_ditausKey
Definition: DiTauExtraVariablesAlg.h:25
CP::DiTauExtraVariablesAlg::m_omniScoreKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_omniScoreKey
Definition: DiTauExtraVariablesAlg.h:27
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
CP::DiTauExtraVariablesAlg::m_subleadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetNTracksKey
Definition: DiTauExtraVariablesAlg.h:40
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
CP::DiTauExtraVariablesAlg::m_subleadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPtKey
Definition: DiTauExtraVariablesAlg.h:36
SG::ConstAccessor< float >
CP::DiTauExtraVariablesAlg::m_subleadSubjetEKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEKey
Definition: DiTauExtraVariablesAlg.h:39
CP::DiTauExtraVariablesAlg::m_leadSubjetNTracksKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetNTracksKey
Definition: DiTauExtraVariablesAlg.h:33
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:25
CP::DiTauExtraVariablesAlg::m_leadSubjetChargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetChargeKey
Definition: DiTauExtraVariablesAlg.h:34
DiTauExtraVariablesAlg.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
CP::DiTauExtraVariablesAlg::m_subleadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetPhiKey
Definition: DiTauExtraVariablesAlg.h:38
CP::DiTauExtraVariablesAlg::m_leadSubjetEtaKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetEtaKey
Definition: DiTauExtraVariablesAlg.h:30
WriteDecorHandle.h
Handle class for adding a decoration to an object.
CP::DiTauExtraVariablesAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: DiTauExtraVariablesAlg.cxx:88
CP::DiTauExtraVariablesAlg::initialize
virtual StatusCode initialize() override
Definition: DiTauExtraVariablesAlg.cxx:14
ReadHandle.h
Handle class for reading from StoreGate.
CP::DiTauExtraVariablesAlg::m_leadSubjetPtKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPtKey
Definition: DiTauExtraVariablesAlg.h:29
CP::DiTauExtraVariablesAlg::m_subleadSubjetEtaKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_subleadSubjetEtaKey
Definition: DiTauExtraVariablesAlg.h:37
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
CP::DiTauExtraVariablesAlg::m_leadSubjetPhiKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_leadSubjetPhiKey
Definition: DiTauExtraVariablesAlg.h:31