#ifndef HPARTICLE_H
#define HPARTICLE_H
#include "TLorentzVector.h"
#include "hphysicsconstants.h"
#include "hsymmat.h"
class HCategory;
class HKickTrack;
class HRichHit;
class HParticle: public TLorentzVector {
public:
  HParticle(Double_t px = 0., Double_t py = 0., Double_t pz = 0., Double_t m=0.);
  
  HParticle(Int_t, Double_t px = 0., Double_t py = 0., Double_t pz = 0.);
  
  HParticle(const Char_t *Pid, Double_t px = 0., Double_t py = 0., Double_t pz = 0.);
  
  HParticle(const TVector3 &, Double_t);
  
  HParticle(const HParticle &);
  
  HParticle(const HParticle *);
  
  virtual ~HParticle() {}
  
  inline Double_t Angle(const HParticle &p) const;
  inline Double_t AngleD(const HParticle &p) const;
  Double_t P() const {return Vect().Mag();}
  Int_t getPid() const {return pid;}
  void  setPid(Int_t sPid) {pid = sPid;}
  void  setPid(const Char_t *sPid) {setPid( HPhysicsConstants::pid(sPid) );}
  Int_t getCharge() const {return HPhysicsConstants::charge(pid);}
  HKickTrack* getKickTrack();
  HRichHit* getRichHit();
  Double_t getR() const {return r;}
  void     setR(Double_t sR) {r = sR;}
  Double_t getZ() const {return z;}
  void     setZ(Double_t sZ) {z = sZ;}
  Int_t getIndex() const {return index;}
  void  setIndex(Int_t sInd) {index = sInd;}
  Int_t getTrackId() const {return trackId;}
  void  setTrackId(Int_t sInd) {trackId = sInd;}
  Int_t getRingId() const {return ringId;}
  void  setRingId(Int_t sInd) {ringId = sInd;}
  Int_t getVertexId() const {return vertexId;}
  void  setVertexId(Int_t sInd) {vertexId = sInd;}
  TLorentzVector Vect4() const { return TLorentzVector(Vect(),E()); }
  void setVect4(const TLorentzVector &v) {SetPxPyPzE(v[0],v[1],v[2],v[3]);}
  HParticle & operator = ( const HParticle &);
private:
  HCategory *fKickTrackCat;  
  HCategory *fRichHitCat;  
protected:
  Double_t r;         
  Double_t z;         
  Int_t pid;          
  Int_t index;        
  Int_t trackId;      
  Int_t ringId;       
  Int_t vertexId;     
  HSymMat6 cov;       
  ClassDef(HParticle,1)  
};
inline Double_t HParticle::Angle(const HParticle &p) const {
  TVector3 v1(Px(),Py(),Pz());
  TVector3 v2(p.Px(),p.Py(),p.Pz());
  return v1.Angle(v2);
}
inline Double_t HParticle::AngleD(const HParticle &p) const {
  TVector3 v1(Px(),Py(),Pz());
  TVector3 v2(p.Px(),p.Py(),p.Pz());
  return (v1.Angle(v2))*57.29578;
}
#endif /* !HPARTICLE_H */
Last change: Sat May 22 13:06:35 2010
Last generated: 2010-05-22 13:06
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.