00001 #ifndef PARTICLE_CLASS_RELATION_H 00002 #define PARTICLE_CLASS_RELATION_H 00003 00004 #include <string> 00005 #include <vector> 00006 00007 class Particle; 00008 00010 class Relation { 00011 00012 public: 00014 Relation(); 00015 00017 Relation(const Relation &); 00018 00020 Relation(const Relation &, Particle *); 00021 00023 virtual ~Relation(); 00024 00026 virtual std::string className(void){ return std::string("Relation"); } 00027 00029 virtual void dump(const std::string & keyword = std::string(""), 00030 const std::string & prefix = std::string("")) const; 00031 00033 virtual const Particle * mother(void) const; 00034 00036 virtual Particle * mother(void); 00037 00039 virtual const Particle * mother(Particle &); 00040 00042 virtual unsigned int nChildren(void) const; 00043 00045 virtual const Particle * child(unsigned int) const; 00046 00048 virtual Particle * child(unsigned int); 00049 00051 virtual const std::vector<Particle *> & children(void) const; 00052 00054 virtual void append(Particle &); 00055 00057 virtual void append(Particle *); 00058 00060 virtual void remove(Particle &); 00061 00063 virtual void remove(Particle *); 00064 00066 virtual void removeAll(void); 00067 00069 virtual unsigned int nFinalStateParticles(void) const; 00070 00072 virtual const Particle * finalStateParticle(unsigned int) const; 00073 00075 virtual const std::vector<Particle *> & finalStateParticles(void) const; 00076 00078 virtual const Particle * gen(void) const; 00079 00081 virtual Particle * gen(void); 00082 00084 virtual const Particle * gen(Particle &); 00085 00087 virtual void resetGenParticle(void); 00088 00092 virtual const Particle * rec(void) const; 00093 00095 virtual Particle * rec(void); 00096 00098 virtual const Particle * rec(Particle &); 00099 00101 virtual void resetRecParticle(void); 00102 00104 virtual bool isIdenticalWith(const Relation &) const; 00105 00107 virtual Relation & operator = (const Relation &); 00108 00109 protected: 00110 // calculates m_finalStateParticles. 00111 virtual void fillFinalStateParticles(void) const; 00112 00113 Particle * m_self; 00114 Particle * m_mother; 00115 Particle * m_gen; 00116 Particle * m_rec; 00117 std::vector<Particle *> m_children; 00118 mutable std::vector<Particle *> m_finalStateParticles; 00119 }; 00120 #endif // PARTICLE_CLASS_RELATION_H