13#ifndef PARTICLEEVENT_PARTICLESIGSTATEIMPL_H
14#define PARTICLEEVENT_PARTICLESIGSTATEIMPL_H 1
25#include "AthLinks/ElementLink.h"
38template<
class INavigable_t,
113 const std::any& weight )
const;
142 virtual double px()
const;
146 virtual double py()
const;
150 virtual double pz()
const;
154 virtual double m()
const;
158 virtual double m2()
const;
162 virtual double p()
const;
166 virtual double p2()
const;
174 virtual double eta()
const;
178 virtual double phi()
const;
182 virtual double e()
const;
186 virtual double et()
const;
190 virtual double pt()
const;
194 virtual double iPt()
const;
222 virtual CLHEP::HepLorentzVector
hlv()
const;
232 virtual std::ostream&
dump( std::ostream& out )
const;
365template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
391template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
408template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
414 if (
this != &rhs ) {
415 IAthenaBarCode::operator=(rhs);
416 INavigable::operator=(rhs);
417 I4Momentum::operator=(rhs);
418 INavigable4Momentum::operator=(rhs);
419 IParticle::operator=( rhs );
429template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
436template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
444template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
450 return m_mom[int(s)];
455template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
466template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
474template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
479 m_nav.fillToken( thisToken );
482template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
486 const std::any& weight )
const
488 m_nav.fillToken( thisToken, weight );
491template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
499template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
507template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
515template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
523template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
531template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
539template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
547template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
555template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
563template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
571template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
579template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
587template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
595template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
603template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
611template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
619template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
627template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
635template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
643template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
652template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
660template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
668template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
676template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
684template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
692template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
700template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
708template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
716template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
724template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
732template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
740template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
748template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
756template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
764template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
772template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
780template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
788template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
796template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
804template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
812template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
820template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
829template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
837template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
845template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
853template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
856 IParticle_t>
::dump( std::ostream& out )
const
864template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
872template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
880template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
885 return m_part.originLink();
888template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
893 return m_part.hasCharge();
896template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
904template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
912template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
925template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
930 return particleBase().getAthenaBarCodeImpl().getAthenaBarCode();
933template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
938 particleBase().getAthenaBarCodeImpl().setAthenaBarCode(
id);
942template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
947 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCode(bc);
950template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
955 return particleBase().getAthenaBarCodeImpl().hasSameAthenaBarCodeExceptVersion(bc);
958template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
963 return particleBase().getAthenaBarCodeImpl().getVersion();
966template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
974template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
979 particleBase().getAthenaBarCodeImpl().setVersion(newversion);
990template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
998template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1004 return m_mom[int(s)];
1009template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1020template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1031template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1039template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1048template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1056template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1064template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1073template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1081template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1089template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1097template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1105template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1114template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1120 m_part.set_origin(theContainer, vertex);
1123template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1131template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1137template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1143 return p4.dump( out );
1146template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1154template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1168template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1180template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
1188template<
class INavigable_t,
class I4Momentum_t,
class IParticle_t>
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 ParticleSigStateImpl< INavigable_t, I4Momentum_t, IParticle_t > &p4)
Define macros for attributes used to control the static checker.
I4Momentum is an abstract base class providing 4-momentum behavior.
ISignalState is an abstract base class providing support for various Signal States to be associated w...
hub for various interface implementations
virtual double m2(state_t s) const
ParticleSigStateImpl & operator=(const ParticleSigStateImpl &rhs)
Assignment operator.
virtual void fillToken(INavigationToken &thisToken, const std::any &weight) const
std::vector< I4Momentum_t > m_mom
virtual double m2() const
mass squared
virtual double cotTh() const
cottan theta
virtual I4Momentum::Kind kind() const
add Kind which tells what kind (P4XYZ) the underlying implementation has
momentum_type & momentumBase()
virtual double eta() const
pseudo rapidity
AthenaBarCode_t getAthenaBarCode() const
virtual bool setSignalState(state_t s)
set the current signal state
virtual void set4Mom(const CLHEP::HepLorentzVector &hlv)
set 4Momentum (will throw exception if cannot be implemented)
virtual double rapidity(state_t s) const
virtual double rapidity() const
rapidity
virtual double sinTh() const
sinus theta
virtual const I4MomentumError * errors(state_t s) const
IParticle_t particle_type
publish the type of the base class (ie: 'traits-itize' it)
particle_type & particleBase()
access to underlying base type (IParticle-like)
bool hasSameAthenaBarCodeExceptVersion(const IAthenaBarCode &) const
virtual double sinPhi() const
sinus phi
I4Momentum_t momentum_type
publish the type of the base class (ie: 'traits-itize' it)
virtual void set_origin(const VxContainer *theContainer, const Trk::VxCandidate *vertex)
virtual double phi() const
phi in [-pi,pi[
INavigable_t navigable_type
publish the type of the base class (ie: 'traits-itize' it)
std::vector< I4Momentum_t > & momentumVector()
access the vector of momentum
virtual bool isAtSignalState(state_t s) const
check if we are at the passed state
virtual double cotTh(state_t s) const
ParticleSigStateImpl(const ParticleSigStateImpl &rhs)
Copy constructor.
const momentum_type & momentumBase() const
virtual double py(state_t s) const
virtual double phi(state_t s) const
virtual double p() const
mass momentum magnitude
virtual double sinTh(state_t s) const
virtual bool hasPdgId() const
method to check if particle id information is available
virtual double px(state_t s) const
virtual double p2(state_t s) const
virtual double cosTh() const
cosinus theta
void setAthenaBarCode(AthenaBarCode_t)
virtual double m() const
mass
virtual bool hasSignalState(state_t s) const
check if signal state exists for current implementation
const particle_type & particleBase() const
access to underlying base type (IParticle-like)
virtual CLHEP::HepLorentzVector hlv(state_t s) const
obtain the CLHEP HepLorentzVector
virtual ParticleDataType::DataType dataType() const
Return enum indicating real data, fast, or full simulation Return Type has a DataType enum with the f...
virtual const Trk::RecVertex * origin() const
Return a RecVertex corresponding to particle Origin.
virtual state_t signalState() const
Retrieve current signal state.
virtual double pz() const
z component of momentum
navigable_type & navigableBase()
access to underlying base type (INavigable-like)
virtual void set4Mom(const I4Momentum *const p4, state_t s)
virtual ChargeType charge() const
returns charge as a typedef ChargeType currently Charge Type is a double for jets this may be changed...
virtual bool hasCharge() const
method to check if charge information is available
virtual double e() const
energy
virtual double py() const
y component of momentum
virtual double iPt(state_t s) const
virtual double pz(state_t s) const
virtual CLHEP::HepLorentzVector hlv() const
CLHEP HepLorentzVector.
ParticleSigStateImpl(int nStates=1, state_t defaultState=state_t(0))
Default constructor.
virtual void set_origin(const VxContainer *theContainer, int index)
virtual double et() const
transverse energy defined to be e*sin(theta)
virtual ~ParticleSigStateImpl()
Default destructor:
virtual double pt(state_t s) const
virtual double iPt() const
inverse of transverse momentum
ParticleSigStateImpl< INavigable_t, I4Momentum_t, IParticle_t > self_type
publish the type of the base class (ie: 'traits-itize' it)
virtual double pt() const
transverse momentum
virtual void set4Mom(const I4Momentum &p4, state_t s)
virtual void fillToken(INavigationToken &thisToken) const
const navigable_type & navigableBase() const
access to underlying base type (INavigable-like)
virtual double et(state_t s) const
bool hasSameAthenaBarCode(const IAthenaBarCode &) const
virtual double sinPhi(state_t s) const
virtual void set4Mom(const I4Momentum &p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual double tanTh(state_t s) const
virtual double m(state_t s) const
virtual void set4Mom(const I4Momentum *const p4)
set 4Momentum (will throw exception if cannot be implemented)
virtual const ElementLink< VxContainer > & originLink() const
Return an ElementLink corresponding to particle's Origin.
virtual void set4Mom(const CLHEP::HepLorentzVector &hlv, state_t s)
const momentum_type & momentumBase(state_t s) const
access to underlying base type (I4Momentum-like)
virtual void set_pdgId(int x)
virtual double cosPhi(state_t s) const
virtual double cosTh(state_t s) const
virtual double eta(state_t s) const
momentum_type & momentumBase(state_t s)
access to underlying base type (I4Momentum-like)
P4SignalState::State state_t
virtual void set_origin(const ElementLink< VxContainer > &origin)
virtual const I4MomentumError * errors() const
Access to errors, if available; returns 0 if no errors.
virtual double cosPhi() const
cosinus phi
void setVersion(AthenaBarCodeVersion_t newversion)
virtual int pdgId() const
Return particle id.
virtual void set_dataType(ParticleDataType::DataType x)
virtual double p(state_t s) const
virtual void set_charge(ChargeType x)
virtual double p2() const
square of momentum magnitude
AthenaBarCodeVersion_t getVersion() const
virtual std::ostream & dump(std::ostream &out) const
Print I4Momentum content.
virtual double tanTh() const
tan theta
virtual void resetSignalState()
reset the signal state
virtual double e(state_t s) const
virtual double px() const
We re-define here extra class routines that will allow direct access to signal state kinematics witho...
Trk::RecVertex inherits from Trk::Vertex.