2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 #ifndef MUONTESTER_AUXELEMENTBRANCH_IXX
5 #define MUONTESTER_AUXELEMENTBRANCH_IXX
7 #include <MuonTesterTree/AuxElementBranch.h>
8 //########################################################################################
10 //########################################################################################
12 template <class T> void AuxElementBranch<T>::setAccessor(const std::string& name) {
13 if (!initialized()) m_acc = SG::AuxElement::ConstAccessor<T>(name);
15 template <class T> void AuxElementBranch<T>::push_back(const SG::AuxElement* p) {
16 if (p != nullptr) push_back(*p);
18 template <class T> void AuxElementBranch<T>::operator+=(const SG::AuxElement& p) { push_back(p); }
19 template <class T> void AuxElementBranch<T>::operator+=(const SG::AuxElement* p) { push_back(p); }
20 template <class T> void AuxElementBranch<T>::push_back(const SG::AuxElement& p) {
21 if (m_acc.isAvailable(p))
22 VectorBranch<T>::push_back(m_acc(p));
23 else if (hasDefault()) {
24 VectorBranch<T>::push_back(getDefault());
26 throw std::runtime_error("Decoration is not available to fill " + name());
30 AuxElementBranch<T>::AuxElementBranch(TTree* t, const std::string& var_name, const std::string& acc) :
31 VectorBranch<T>(t, var_name), m_acc(acc.empty() ? var_name : acc) {}
33 AuxElementBranch<T>::AuxElementBranch(MuonTesterTree& t, const std::string& var_name, const std::string& acc) :
34 VectorBranch<T>(t, var_name), m_acc(acc.empty() ? var_name : acc) {}
36 //########################################################################################
37 // ParticleVariableBranch
38 //########################################################################################
40 ParticleVariableBranch<T>::ParticleVariableBranch(TTree* t, const std::string& var_name, const std::string& acc) :
41 AuxElementBranch<T>(t, var_name, acc) {}
43 ParticleVariableBranch<T>::ParticleVariableBranch(MuonTesterTree& t, const std::string& var_name, const std::string& acc) :
44 AuxElementBranch<T>(t, var_name, acc) {}
45 template <class T> void ParticleVariableBranch<T>::push_back(const xAOD::IParticle* p) { AuxElementBranch<T>::push_back(p); }
46 template <class T> void ParticleVariableBranch<T>::push_back(const xAOD::IParticle& p) { AuxElementBranch<T>::push_back(p); }
47 template <class T> void ParticleVariableBranch<T>::operator+=(const xAOD::IParticle* p) { AuxElementBranch<T>::push_back(p); }
48 template <class T> void ParticleVariableBranch<T>::operator+=(const xAOD::IParticle& p) { AuxElementBranch<T>::push_back(p); }
50 //########################################################################################
51 // ParticleVariableBranchGeV
52 //########################################################################################
54 ParticleVariableBranchGeV<T>::ParticleVariableBranchGeV(TTree* t, const std::string& var_name, const std::string& acc) :
55 ParticleVariableBranch<T>(t, var_name, acc) {}
58 ParticleVariableBranchGeV<T>::ParticleVariableBranchGeV(MuonTesterTree& t, const std::string& var_name, const std::string& acc) :
59 ParticleVariableBranch<T>(t, var_name, acc) {}
61 template <class T> void ParticleVariableBranchGeV<T>::push_back(const xAOD::IParticle* p) {
64 template <class T> void ParticleVariableBranchGeV<T>::push_back(const xAOD::IParticle& p) {
66 ParticleVariableBranch<T>::push_back(p);
67 constexpr double MeVtoGeV = 1.e-3;