ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonValidation
MuonTesterTree
Root
LinkerBranch.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
#include <
MuonTesterTree/LinkerBranch.h
>
5
#include <format>
6
namespace
MuonVal
{
7
LinkerBranch::LinkerBranch
(
IParticleFourMomBranch
&
parent
,
8
ParticleBranch_ptr
linkColl,
9
Linker_t
linker,
10
const
std::string& altName):
11
VectorBranch
<unsigned short>{
parent
.tree(),
12
std::format(
"{:}_{:}Link"
,
parent
.name(), altName.empty() ? linkColl->name() : altName)},
13
m_linkColl{linkColl.get()},
14
m_linkerFunc{std::move(linker)} {
15
parent
.getTree().addBranch(linkColl);
16
}
17
18
void
LinkerBranch::operator+=
(
const
xAOD::IParticle
* p) {
19
push_back
(p);
20
}
21
void
LinkerBranch::operator+=
(
const
xAOD::IParticle
& p) {
22
push_back
(p);
23
}
24
void
LinkerBranch::push_back
(
const
xAOD::IParticle
& p) {
25
push_back
(&p);
26
}
27
void
LinkerBranch::push_back
(
const
xAOD::IParticle
* p) {
28
const
xAOD::IParticle
* related =
m_linkerFunc
(p);
29
m_linkColl
->push_back(related);
30
VectorBranch<unsigned short>::push_back
(
m_linkColl
->find(related));
31
}
32
33
34
bool
BilateralLinkerBranch::connectCollections
(
ParticleBranch_ptr
primColl,
35
ParticleBranch_ptr
secondColl,
36
Linker_t
fromPrimToSec,
37
const
std::string& altPrimName,
38
const
std::string& altSecName) {
39
return
primColl->addVariable(std::make_unique<LinkerBranch>(*primColl, secondColl, fromPrimToSec, altPrimName)) &&
40
secondColl->addVariable(std::unique_ptr<IParticleDecorationBranch>{
new
BilateralLinkerBranch
(*secondColl, std::move(primColl), std::move(fromPrimToSec), altSecName)});
41
}
42
43
BilateralLinkerBranch::BilateralLinkerBranch
(
IParticleFourMomBranch
&
parent
,
44
ParticleBranch_ptr
primColl,
45
Linker_t
linker,
46
const
std::string& altName):
47
VectorBranch
<unsigned short>{
parent
.tree(),
48
std::format(
"{:}_{:}Link"
,
parent
.name(), altName.empty() ? primColl->name() : altName)},
49
m_parent{parent},
50
m_linkColl{primColl.get()},
51
m_linkerFunc{std::move(linker)} {
52
setDefault(-1);
53
parent
.getTree().addBranch(primColl);
54
}
55
56
void
BilateralLinkerBranch::push_back
(
const
xAOD::IParticle
*
/* p*/
) {
57
}
58
void
BilateralLinkerBranch::push_back
(
const
xAOD::IParticle
& p) {
59
push_back
(&p);
60
}
61
void
BilateralLinkerBranch::operator+=
(
const
xAOD::IParticle
* p){
62
push_back
(p);
63
}
64
void
BilateralLinkerBranch::operator+=
(
const
xAOD::IParticle
& p){
65
push_back
(p);
66
}
67
bool
BilateralLinkerBranch::fill
(
const
EventContext& ctx) {
68
if
(
m_parent
.size()) {
70
get
(
m_parent
.size() -1);
71
const
std::vector<const xAOD::IParticle*>& linkeMe =
m_linkColl
->getCached();
72
for
(std::size_t primToSec = 0 ; primToSec < linkeMe.size(); ++primToSec) {
73
const
size_t
linkIdx =
m_parent
.find(
m_linkerFunc
(linkeMe[primToSec]));
74
if
(linkIdx <
size
()) {
75
get
(linkIdx) = primToSec;
76
}
77
}
78
}
79
ATH_MSG_VERBOSE
(
"Fill "
<<
name
()<<
", size: "
<<
m_parent
.size()<<
"/"
<<
size
()<<
", "
<<
m_parent
.name());
80
return
VectorBranch<unsigned short>::fill
(ctx);
81
}
82
}
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
LinkerBranch.h
MuonVal::BilateralLinkerBranch::BilateralLinkerBranch
BilateralLinkerBranch(IParticleFourMomBranch &bilatColl, ParticleBranch_ptr primColl, Linker_t linker, const std::string &altName)
Definition
LinkerBranch.cxx:43
MuonVal::BilateralLinkerBranch::fill
bool fill(const EventContext &ctx) override
The fill method checks if enough information is provided such that the branch is cleared from the inf...
Definition
LinkerBranch.cxx:67
MuonVal::BilateralLinkerBranch::Linker_t
LinkerBranch::Linker_t Linker_t
Definition
LinkerBranch.h:54
MuonVal::BilateralLinkerBranch::ParticleBranch_ptr
LinkerBranch::ParticleBranch_ptr ParticleBranch_ptr
Definition
LinkerBranch.h:55
MuonVal::BilateralLinkerBranch::connectCollections
static bool connectCollections(ParticleBranch_ptr primColl, ParticleBranch_ptr secondColl, Linker_t fromPrimToSec, const std::string &altPrimName="", const std::string &altSecName="")
Definition
LinkerBranch.cxx:34
MuonVal::BilateralLinkerBranch::m_parent
const IParticleFourMomBranch & m_parent
Definition
LinkerBranch.h:76
MuonVal::BilateralLinkerBranch::m_linkerFunc
Linker_t m_linkerFunc
Definition
LinkerBranch.h:78
MuonVal::BilateralLinkerBranch::m_linkColl
IParticleFourMomBranch * m_linkColl
Definition
LinkerBranch.h:77
MuonVal::BilateralLinkerBranch::operator+=
void operator+=(const xAOD::IParticle *p) override
Definition
LinkerBranch.cxx:61
MuonVal::BilateralLinkerBranch::push_back
void push_back(const xAOD::IParticle *p) override
Interface methods to handle the particle.
Definition
LinkerBranch.cxx:56
MuonVal::IParticleFourMomBranch
Helper class to easily to add xAOD::IParticles and associated decorator variables to the MuonTesterTr...
Definition
IParticleFourMomBranch.h:32
MuonVal::LinkerBranch::m_linkerFunc
Linker_t m_linkerFunc
Definition
LinkerBranch.h:48
MuonVal::LinkerBranch::m_linkColl
IParticleFourMomBranch * m_linkColl
Definition
LinkerBranch.h:47
MuonVal::LinkerBranch::Linker_t
std::function< const xAOD::IParticle *(const xAOD::IParticle *)> Linker_t
Typedef of the linker function.
Definition
LinkerBranch.h:25
MuonVal::LinkerBranch::operator+=
void operator+=(const xAOD::IParticle *p) override
Definition
LinkerBranch.cxx:18
MuonVal::LinkerBranch::LinkerBranch
LinkerBranch(IParticleFourMomBranch &parent, ParticleBranch_ptr linkColl, Linker_t linker, const std::string &altName="")
Standard constructor fo the LinkerBranch.
Definition
LinkerBranch.cxx:7
MuonVal::LinkerBranch::ParticleBranch_ptr
std::shared_ptr< IParticleFourMomBranch > ParticleBranch_ptr
Abreviation of the pointer to the particle branch.
Definition
LinkerBranch.h:21
MuonVal::LinkerBranch::push_back
void push_back(const xAOD::IParticle *p) override
Interface methods to handle the particle.
Definition
LinkerBranch.cxx:27
MuonVal::VectorBranch< unsigned short >::parent
MuonTesterTree & parent()
Definition
MuonTesterBranch.cxx:38
MuonVal::VectorBranch< unsigned short >::name
std::string name() const override final
Definition
MuonTesterBranch.cxx:51
MuonVal::VectorBranch< unsigned short >::size
size_t size() const
MuonVal::VectorBranch::push_back
void push_back(const T &value)
Adds a new element at the end of the vector.
MuonVal::VectorBranch::fill
bool fill(const EventContext &ctx) override
Clears vector in cases that it has not been updated in this event Retursn falls if the vector has not...
MuonVal::VectorBranch< unsigned short >::VectorBranch
VectorBranch(TTree *tree, const std::string &name)
MuonVal::VectorBranch< unsigned short >::get
bool & get(size_t idx)
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
MuonVal
Class to store array like branches into the n-tuples.
Definition
HitValAlg.cxx:19
test_pyathena.parent
parent
Definition
test_pyathena.py:15
Generated on
for ATLAS Offline Software by
1.17.0