ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
DerivationFramework
DerivationFrameworkTau
src
DiTauChargeDecorator.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
DerivationFrameworkTau/DiTauChargeDecorator.h
"
6
#include "
xAODTau/DiTauJetContainer.h
"
7
#include "
StoreGate/ReadHandle.h
"
8
#include "
StoreGate/WriteDecorHandle.h
"
9
10
namespace
DerivationFramework
{
11
12
StatusCode
DiTauChargeDecorator::initialize
()
13
{
14
// initialize read/write handle keys
15
ATH_CHECK
(
m_ditauContainerKey
.initialize() );
16
ATH_CHECK
(
m_chargeKey
.initialize() );
17
18
return
StatusCode::SUCCESS;
19
}
20
21
22
StatusCode
DiTauChargeDecorator::addBranches
(
const
EventContext& ctx)
const
23
{
24
25
26
// retrieve tau container
27
SG::ReadHandle<xAOD::DiTauJetContainer>
ditauJetsReadHandle(
m_ditauContainerKey
, ctx);
28
if
(!ditauJetsReadHandle.
isValid
()) {
29
ATH_MSG_ERROR
(
"Could not retrieve DiTauJetContainer with key "
<< ditauJetsReadHandle.
key
());
30
return
StatusCode::FAILURE;
31
}
32
const
xAOD::DiTauJetContainer
* ditauContainer = ditauJetsReadHandle.
cptr
();
33
34
SG::WriteDecorHandle<xAOD::DiTauJetContainer, float>
dec_charge (
m_chargeKey
, ctx);
35
36
for
(
const
auto
ditau : *ditauContainer) {
37
float
ditau_charge = 0;
38
for
(
const
auto
& xTrack : ditau->trackLinks()) {
39
if
(!xTrack.isValid())
40
continue
;
41
42
if
(ditau->nSubjets() >= 2){
43
for
(
int
i = 0; i < 2; ++i) {
// loop over two leading subjets
44
TLorentzVector tlvSubjet = TLorentzVector();
45
tlvSubjet.SetPtEtaPhiE(ditau->subjetPt(i), ditau->subjetEta(i),
46
ditau->subjetPhi(i), ditau->subjetE(i));
47
double
dR = tlvSubjet.DeltaR((*xTrack)->p4());
48
if
(dR < 0.1) {
49
ditau_charge += (*xTrack)->charge();
50
break
;
//prevents double counting of tracks
51
}
52
}
// loop over subjets
53
}
54
}
// loop over tracks
55
dec_charge(*ditau) = ditau_charge;
56
}
57
58
return
StatusCode::SUCCESS;
59
}
60
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
DiTauChargeDecorator.h
DiTauJetContainer.h
ReadHandle.h
Handle class for reading from StoreGate.
WriteDecorHandle.h
Handle class for adding a decoration to an object.
DerivationFramework::DiTauChargeDecorator::addBranches
virtual StatusCode addBranches(const EventContext &ctx) const override
Definition
DiTauChargeDecorator.cxx:22
DerivationFramework::DiTauChargeDecorator::m_ditauContainerKey
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_ditauContainerKey
Definition
DiTauChargeDecorator.h:29
DerivationFramework::DiTauChargeDecorator::m_chargeKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_chargeKey
Definition
DiTauChargeDecorator.h:30
DerivationFramework::DiTauChargeDecorator::initialize
virtual StatusCode initialize() override
Definition
DiTauChargeDecorator.cxx:12
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition
AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition
StoreGate/StoreGate/WriteDecorHandle.h:100
DerivationFramework
THE reconstruction tool.
Definition
CascadeTools.h:16
xAOD::DiTauJetContainer
DiTauJetContainer_v1 DiTauJetContainer
Definition of the current DiTauJet container version.
Definition
DiTauJetContainer.h:17
Generated on
for ATLAS Offline Software by
1.17.0