8#ifndef COLUMNAR_CORE_MOMENTUM_ACCESSORS_H
9#define COLUMNAR_CORE_MOMENTUM_ACCESSORS_H
14#include <Math/Vector4D.h>
91 template<ContainerIdConcept CIVal,
typename CMVal = ColumnarModeDefault>
99 return object.getXAODObject().pt();}
101 return object.getXAODObject().eta();}
103 return object.getXAODObject().phi();}
105 return object.getXAODObject().m();}
107 return object.getXAODObject().e();}
109 return object.getXAODObject().rapidity();}
123 template<
typename CoreAccessors>
127 using CI = CoreAccessors::CI;
128 using CM =
typename CoreAccessors::CM;
130 using CoreAccessors::CoreAccessors;
134 const double myPt = this->pt (
object);
135 const double myEta = this->
eta (
object);
136 const double myM = this->m (
object);
139 const ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiM4D<double>> myP4 {myPt, myEta, 0, myM};
140 return myP4.energy();
145 const double myEta = this->
eta(
object);
146 const double myM = this->m(
object);
149 const double myPt = this->pt(
object);
152 const ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiM4D<double>> myP4 {myPt, myEta, 0, myM};
153 return myP4.Rapidity();
160 template<ContainerIdConcept CIVal,
typename CMVal>
171 :
pt (columnarTool,
"pt"),
eta (columnarTool,
"eta"),
phi (columnarTool,
"phi")
176 :
pt (columnarTool, prefix +
"pt"),
eta (columnarTool, prefix +
"eta"),
phi (columnarTool, prefix +
"phi")
197 template<ContainerIdConcept CI,
typename CM>
219 template<ContainerIdConcept CI,
typename CM = ColumnarModeDefault>
235 template<
typename CoreAccessors>
239 using CI = CoreAccessors::CI;
240 using CM =
typename CoreAccessors::CM;
242 template<
typename...
Args>
288 template<ContainerIdConcept CI,
typename CM = ColumnarModeDefault>
298 template<
typename MyMomentumAccessors,
typename...
Args>
301 reset (std::in_place_type<MyMomentumAccessors>, std::forward<Args> (args)...);
304 template<
typename MyMomentumAccessors,
typename...
Args>
305 void reset (std::in_place_type_t<MyMomentumAccessors>,
Args&&... args)
307 m_accessors = std::make_shared<Detail::MomentumAccessorsImp<MyMomentumAccessors>> (std::forward<Args> (args)...);
328 std::shared_ptr<const Detail::IMomentumAccessors<CI,CM>>
m_accessors;
339 template<ContainerIdConcept CI,
typename CM>
342 template<ContainerIdConcept CI,
typename CM>
345 template<ContainerIdConcept CI,
typename CM>
348 template<ContainerIdConcept CI,
typename CM>
351 template<ContainerIdConcept CI,
typename CM>
354 template<ContainerIdConcept CI,
typename CM>
357 template<ContainerIdConcept CI,
typename CM>
360 template<ContainerIdConcept CI,
typename CM>
363 template<ContainerIdConcept CI,
typename CM>
366 template<ContainerIdConcept CI,
typename CM>
370 template<ContainerIdConcept CI,
typename CM>
391 throw std::runtime_error (
"Unknown object type for momentum accessors: " + std::to_string(
static_cast<unsigned>(
type)));
Scalar eta() const
pseudorapidity method
A number of constexpr particle constants to avoid hardcoding them directly in various places.
generic columnar momentum accessors that use a pt, eta, phi, m representation underneath
typename CoreAccessors::CM CM
double e(ObjectId< CI, CM > object) const
double rapidity(ObjectId< CI, CM > object) const
a virtual interface for columnar momentum accessors
virtual double rapidity(ObjectId< CI, CM > object) const =0
virtual double eta(ObjectId< CI, CM > object) const =0
virtual double m(ObjectId< CI, CM > object) const =0
virtual double e(ObjectId< CI, CM > object) const =0
virtual ~IMomentumAccessors()=default
virtual double phi(ObjectId< CI, CM > object) const =0
virtual double pt(ObjectId< CI, CM > object) const =0
columnar momentum accessors that redirect to the xAOD::IParticle interface internally
double eta(ObjectId< CI, CM > object) const
double m(ObjectId< CI, CM > object) const
double phi(ObjectId< CI, CM > object) const
double pt(ObjectId< CI, CM > object) const
double rapidity(ObjectId< CI, CM > object) const
double e(ObjectId< CI, CM > object) const
virtual double rapidity(ObjectId< CI, CM > object) const override
virtual double eta(ObjectId< CI, CM > object) const override
virtual double m(ObjectId< CI, CM > object) const override
virtual double phi(ObjectId< CI, CM > object) const override
virtual double e(ObjectId< CI, CM > object) const override
virtual double pt(ObjectId< CI, CM > object) const override
typename CoreAccessors::CM CM
CoreAccessors m_coreAccessors
MomentumAccessorsImp(Args &&... args)
a handle to hold a IMomentumAccessors object
double rapidity(ObjectId< CI, CM > object) const
MomentumAccessors() noexcept
double e(ObjectId< CI, CM > object) const
void reset(std::in_place_type_t< MyMomentumAccessors >, Args &&... args)
double phi(ObjectId< CI, CM > object) const
double m(ObjectId< CI, CM > object) const
double eta(ObjectId< CI, CM > object) const
double pt(ObjectId< CI, CM > object) const
the various momentum accessors
MomentumAccessors(std::in_place_type_t< MyMomentumAccessors >, Args &&... args)
std::shared_ptr< const Detail::IMomentumAccessors< CI, CM > > m_accessors
the underlying accessors, which default to the xAOD::IParticle accessors in case they are not overrid...
a class representing a single object (electron, muons, etc.)
constexpr double muonMassInMeV
the mass of the muon (in MeV)
constexpr double electronMassInMeV
the mass of the electron (in MeV)
constexpr double photonMassInMeV
various mass-less particles
void resetEgamma(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
AccessorTemplate< CI, CT, ColumnAccessMode::input, CM > ColumnAccessor
void resetObjectType(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool, xAODType::ObjectType type)
void resetPtEtaPhiFixedM(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool, double mValue)
void resetElectron(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
void resetIParticle(MomentumAccessors< CI, CM > &accessors)
reset the dynamic momentum accessors to various default implementations
void resetPhoton(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
void resetJetConstituentScale(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool, const std::string &prefix="JetConstitScaleMomentum_")
void resetMuon(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
void resetTau(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
void resetPtEtaPhiReadM(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
void resetJet(MomentumAccessors< CI, CM > &accessors, ColumnarTool< CM > &columnarTool)
ObjectType
Type of objects that have a representation in the xAOD EDM.
@ Jet
The object is a jet.
@ Photon
The object is a photon.
@ Muon
The object is a muon.
@ Electron
The object is an electron.
@ Tau
The object is a tau (jet)
a core momentum accessor that reads pt, eta, phi from the file, but uses a fixed value for m
CoreMomentumAccessorsPtEtaPhiFixedM(ColumnarTool< CM > &columnarTool, double val_mValue)
double m(ObjectId< CI, CM >) const noexcept
a core momentum accessor that reads pt, eta, phi, and m from the file
CoreMomentumAccessorsPtEtaPhiReadM(ColumnarTool< CM > &columnarTool, const std::string &prefix)
ColumnAccessor< CI, RetypeColumn< double, float >, CM > m
CoreMomentumAccessorsPtEtaPhiReadM(ColumnarTool< CM > &columnarTool)
CoreMomentumAccessorsPtEtaPhi(ColumnarTool< CM > &columnarTool, const std::string &prefix)
a constructor that uses a prefix for the variables (used for jets)
ColumnAccessor< CI, RetypeColumn< double, float >, CM > eta
CoreMomentumAccessorsPtEtaPhi(ColumnarTool< CM > &columnarTool)
ColumnAccessor< CI, RetypeColumn< double, float >, CM > phi
ColumnAccessor< CI, RetypeColumn< double, float >, CM > pt