00001 #ifndef PARTICLE_CLASS_PARTICLE_H
00002 #define PARTICLE_CLASS_PARTICLE_H
00003
00004 #include <string>
00005
00006 #include "CLHEP/Vector/ThreeVector.h"
00007 #include "CLHEP/Vector/LorentzVector.h"
00008
00009 #include "particle/Ptype.h"
00010 #include "particle/Momentum.h"
00011 #include "particle/Relation.h"
00012 #include "particle/PID.h"
00013 #include "particle/constant.h"
00014
00015 class ParticleUserInfo;
00016
00018 class Particle {
00019
00020 public:
00022 Particle();
00023
00025 Particle(const Particle &);
00026
00028 Particle(const HepLorentzVector &, const Ptype &);
00029
00031 Particle(const Momentum &, const Ptype &);
00032
00034 Particle(const double &eta,
00035 const double &phi,
00036 const double &pt,
00037 const Ptype &);
00038
00040 virtual ~Particle();
00041
00043 virtual const std::string & name(void) const;
00044
00046 virtual const std::string & name(const std::string &);
00047
00049 virtual std::string className(void){ return std::string("Particle"); }
00050
00054 virtual void dump(const std::string & keyword = std::string("mass momentum"),
00055 const std::string & prefix = std::string("")) const;
00056
00058 virtual const Momentum & momentum(void) const;
00059
00061 virtual Momentum & momentum(void);
00062
00064 virtual const Momentum & momentum(const Momentum &);
00065
00067 virtual const HepLorentzVector & p(void) const;
00068
00070 virtual const HepPoint3D & x(void) const;
00071
00073 virtual double eta(void) const;
00074
00076 virtual double phi(void) const;
00077
00079 virtual double pt(void) const;
00080
00082 virtual double e(void) const;
00083
00085 virtual double mass(void) const;
00086
00088 virtual const PID & pId(void) const;
00089
00091 virtual PID & pId(void);
00092
00094 virtual const PID & pId(const PID &);
00095
00097 virtual const Ptype & pType(void) const;
00098
00100 virtual Ptype & pType(void);
00101
00103 virtual const Ptype & pType(const Ptype &);
00104
00106 virtual int pdgid(void) const;
00107
00109 virtual const Relation & relation(void) const;
00110
00112 virtual Relation & relation(void);
00113
00115 virtual const Relation & relation(const Relation &);
00116
00118 virtual const Particle * mother(void) const;
00119
00121 virtual unsigned nChildren(void) const;
00122
00124 virtual const Particle * child(unsigned i) const;
00125
00127 virtual Particle * child(unsigned i);
00128
00130 virtual const Particle * gen(void) const;
00131
00133 virtual Particle * gen(void);
00134
00136 virtual const ParticleUserInfo * userInfo(void) const;
00137
00139 virtual ParticleUserInfo * userInfo(void);
00140
00142 virtual const ParticleUserInfo * userInfo(const ParticleUserInfo &);
00143
00145 virtual Particle & operator = (const Particle &);
00146
00148 virtual operator bool() const { return m_usable; }
00149
00151 virtual bool operator ! () const { return !m_usable; }
00152
00154 virtual bool isUsable(void){ return m_usable; }
00155
00157 virtual bool setUsable(const bool &);
00158
00160 virtual Particle deepCopy(void);
00161
00163 virtual void deepDelete(void);
00164
00166 virtual void setObjectID(const int &v) { m_objectID = v; }
00167
00169 virtual int getObjectID(void) const { return m_objectID; }
00170
00171 protected:
00172 bool m_usable;
00173
00174 std::string m_name;
00175
00176 Momentum *m_momentum;
00177 Relation *m_relation;
00178 Ptype *m_pType;
00179 PID *m_pId;
00180 ParticleUserInfo *m_userInfo;
00181
00182 int m_objectID;
00183
00184
00185
00186
00187
00188 };
00189 #endif // PARTICLE_CLASS_PARTICLE_H