12#ifndef PARTICLEEVENT_PARTICLEIMPL_H
13#define PARTICLEEVENT_PARTICLEIMPL_H 1
24#include "AthLinks/ElementLink.h"
35template<
class INavigable_t,
107 const std::any& weight )
const;
212 CLHEP::HepLorentzVector
hlv()
const;
221 std::ostream&
dump( std::ostream& out )
const;
321template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
336template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
351template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
358 if (
this != &rhs ) {
359 IAthenaBarCode::operator=(rhs);
360 INavigable::operator=(rhs);
361 I4Momentum::operator=(rhs);
362 INavigable4Momentum::operator=(rhs);
363 IParticle::operator=( rhs );
371template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
378template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
388template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
398template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
408template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
415 m_nav.fillToken( thisToken );
418template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
424 const std::any& weight )
const
426 m_nav.fillToken( thisToken, weight );
429template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
439template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
449template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
459template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
469template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
479template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
489template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
499template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
506 return m_mom.rapidity();
509template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
519template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
529template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
539template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
549template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
559template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
569template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
576 return m_mom.cosPhi();
579template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
586 return m_mom.sinPhi();
589template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
596 return m_mom.tanTh();
599template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
606 return m_mom.cosTh();
609template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
616 return m_mom.sinTh();
619template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
626 return m_mom.cotTh();
630template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
632CLHEP::HepLorentzVector
640template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
647 return m_mom.errors();
650template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
660template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
665 IParticle_t>
::dump( std::ostream& out )
const
673template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
683template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
693template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
700 return m_part.originLink();
703template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
710 return m_part.hasCharge();
713template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
723template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
733template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
748template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
755 return particleBase().getAthenaBarCodeImpl().getAthenaBarCode();
758template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
765 particleBase().getAthenaBarCodeImpl().setAthenaBarCode(
id);
769template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
776 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCode(bc);
779template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
786 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCodeExceptVersion(bc);
789template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
796 return particleBase().getAthenaBarCodeImpl().getVersion();
799template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
809template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
816 particleBase().getAthenaBarCodeImpl().setVersion(newversion);
837template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
847template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
857template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
870template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
877 return m_mom.set4Mom( p4 );
880template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
887 return m_mom.set4Mom( p4 );
891template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
901template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
911template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
921template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
931template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
942template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
950 m_part.set_origin(theContainer, vertex);
953template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
963template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
970template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
978 return p4.dump( out );
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
uint64_t AthenaBarCode_t
barcode for all INav4Mom classes
AthenaBarCode_t AthenaBarCodeVersion_t
double charge(const T &p)
double ChargeType
typedef ChargeType used to anticipate changes here
float et(const xAOD::jFexSRJetRoI *j)
std::ostream & operator<<(std::ostream &out, const ParticleImpl< INavigable_t, I4Momentum_t, IParticle_t > &p4)
I4Momentum is an abstract base class providing 4-momentum behavior.
hub for various interface implementations
virtual double cosPhi() const
cosinus phi
ParticleImpl()
Default constructor.
ParticleImpl< CompositeParticleNavigation, P4ImplPxPyPzE, ParticleEvent::Base > self_type
virtual void set_origin(const VxContainer *theContainer, int index)
const navigable_type & navigableBase() const
access to underlying base type (INavigable-like)
virtual double m() const
mass
virtual void fillToken(INavigationToken &thisToken, const std::any &weight) const
void set_origin(const ElementLink< VxContainer > &origin)
CompositeParticleNavigation m_nav
virtual double pz() const
z component of momentum
momentum_type & momentumBase()
access to underlying base type (I4Momentum-like)
virtual double cotTh() const
cottan theta
virtual int pdgId() const
Return enum indicating particle id the enum file is available in Event/EventKernel/PdtPdg....
const momentum_type & momentumBase() const
access to underlying base type (I4Momentum-like)
virtual double sinPhi() const
sinus phi
virtual bool hasPdgId() const
method to check if particle id information is available
virtual void set_origin(const VxContainer *theContainer, const Trk::VxCandidate *vertex)
ParticleEvent::Base m_part
virtual double m2() const
mass squared
CompositeParticleNavigation navigable_type
virtual double rapidity() const
rapidity
virtual double sinTh() const
sinus theta
virtual const ElementLink< VxContainer > & originLink() const
Return an ElementLink corresponding to particle's Origin.
particle_type & particleBase()
access to underlying base type (IParticle-like)
void setAthenaBarCode(AthenaBarCode_t)
virtual CLHEP::HepLorentzVector hlv() const
CLHEP HepLorentzVector.
virtual double iPt() const
inverse of transverse momentum
virtual void set4Mom(const I4Momentum &p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual const Trk::RecVertex * origin() const
Return a RecVertex corresponding to particle Origin.
virtual double cosTh() const
cosinus theta
virtual double p2() const
square of momentum magnitude
virtual void set_charge(ChargeType x)
virtual double tanTh() const
tan theta
virtual ~ParticleImpl()
Default constructor:
virtual ParticleDataType::DataType dataType() const
Return enum indicating real data, fast, or full simulation Return Type has a DataType enum with the f...
ParticleEvent::Base particle_type
virtual double e() const
energy
ParticleImpl & operator=(const ParticleImpl &rhs)
Assignment operator.
virtual void set_dataType(ParticleDataType::DataType x)
virtual void fillToken(INavigationToken &thisToken) const
void setVersion(AthenaBarCodeVersion_t newversion)
virtual void set4Mom(const CLHEP::HepLorentzVector &hlv)
set 4Momentum (will throw exception if cannot be implemented)
virtual double pt() const
transverse momentum
ParticleImpl(const ParticleImpl &rhs)
Copy constructor.
virtual I4Momentum::Kind kind() const
add Kind which tells what kind (P4XYZ) the underlying implementation has
virtual double p() const
mass momentum magnitude
bool hasSameAthenaBarCodeExceptVersion(const IAthenaBarCode &) const
virtual double phi() const
phi in [-pi,pi[
navigable_type & navigableBase()
access to underlying base type (INavigable-like)
virtual void set_pdgId(int x)
virtual double px() const
x component of momentum
const particle_type & particleBase() const
access to underlying base type (IParticle-like)
virtual bool hasCharge() const
method to check if charge information is available
virtual double eta() const
pseudo rapidity
virtual const I4MomentumError * errors() const
Access to errors, if available; returns 0 if no errors.
virtual void set4Mom(const I4Momentum *const p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual double et() const
transverse energy defined to be e*sin(theta)
AthenaBarCodeVersion_t getVersion() const
bool hasSameAthenaBarCode(const IAthenaBarCode &) const
virtual ChargeType charge() const
returns charge as a typedef ChargeType currently Charge Type is a double for jets this may be changed...
virtual std::ostream & dump(std::ostream &out) const
Print I4Momentum content.
virtual double py() const
y component of momentum
AthenaBarCode_t getAthenaBarCode() const
P4ImplPxPyPzE momentum_type
Trk::RecVertex inherits from Trk::Vertex.