00001
00002
00003 #ifndef XAODBASE_IPARTICLE_H
00004 #define XAODBASE_IPARTICLE_H
00005
00006
00007 #include <TLorentzVector.h>
00008
00009
00010 #include "AthContainers/AuxElement.h"
00011
00012
00013 #include "ObjectType.h"
00014
00016 namespace xAOD {
00017
00035 class IParticle : public SG::AuxElement {
00036
00037 public:
00039 virtual ~IParticle() {}
00040
00041
00044
00046 virtual double pt() const = 0;
00048 virtual double eta() const = 0;
00050 virtual double phi() const = 0;
00052 virtual double m() const = 0;
00054 virtual double e() const = 0;
00056 virtual double rapidity() const = 0;
00057
00059 typedef TLorentzVector FourMom_t;
00060
00062 virtual const FourMom_t& p4() const = 0;
00063
00065
00066
00068 virtual Type::ObjectType type() const = 0;
00069
00070
00073
00086 template< class T >
00087 T& auxdata( const std::string& name,
00088 const std::string& clsname = "" ) {
00089
00090 return SG::AuxElement::auxdata< T >( name, clsname );
00091 }
00092
00105 template< class T >
00106 const T& auxdata( const std::string& name,
00107 const std::string& clsname = "" ) const {
00108
00109 return SG::AuxElement::auxdata< T >( name, clsname );
00110 }
00111
00121 template< class T >
00122 bool isAvailable( const std::string& name,
00123 const std::string& clsname = "" ) const {
00124
00125 return SG::AuxElement::isAvailable< T >( name, clsname );
00126 }
00127
00137 template< class T >
00138 bool isAvailableWritable( const std::string& name,
00139 const std::string& clsname = "" ) const {
00140
00141 return SG::AuxElement::isAvailableWritable< T >( name, clsname );
00142 }
00143
00145
00146
00147 protected:
00148
00149 using SG::AuxElement::getConstStore;
00150 using SG::AuxElement::getStore;
00151
00152
00153 using SG::AuxElement::Accessor;
00154
00155 };
00156
00157 }
00158
00159 #ifndef XAOD_STANDALONE
00160 #include "SGTools/BaseInfo.h"
00161 SG_BASE (xAOD::IParticle, SG::AuxElement);
00162 #endif // not XAOD_STANDALONE
00163
00164 #endif // XAODBASE_IPARTICLE_H