// ------------------------------------------------------------------------- // ----- CbmSttGeomHelix header file ----- // ----- Created 30/03/06 by R. Castelijns ----- // ------------------------------------------------------------------------- #ifndef CBMSTTGEOMHELIX_H #define CBMSTTGEOMHELIX_H 1 #include "TObject.h" #include "TVector3.h" #include "CbmSttTrack.h" #include "CbmMCTrack.h" #include "CbmSttGeomCircle.h" #include "CbmSttGeomLine.h" #include "CbmSttGeomPoint.h" #ifndef __CINT__ #include "CLHEP/Matrix/Vector.h" using CLHEP::HepVector; #endif #ifdef __CINT__ class HepVector; #endif class CbmSttGeomHelix : public TObject { public: /** Default constructor **/ CbmSttGeomHelix(); /** Standard constructor **/ CbmSttGeomHelix(Double_t distance, Double_t phi, Double_t radius, Double_t zdistance, Double_t alpha, Double_t charge); CbmSttGeomHelix(CbmSttTrack *track); CbmSttGeomHelix(CbmMCTrack *track); CbmSttGeomHelix(Double_t px, Double_t py, Double_t pz, Double_t vx, Double_t vy, Double_t vz, Double_t charge); CbmSttGeomHelix(CbmSttGeomHelix const &other); CbmSttGeomHelix(HepVector const babarVector); /** Destructor **/ ~CbmSttGeomHelix(); /** Operators */ void operator=(CbmSttGeomHelix const &other); /** Geometry functions */ Double_t DistanceTo(CbmSttGeomPoint myPoint); Double_t DistanceTo(CbmSttGeomLine myLine); Double_t DistanceTo(CbmSttGeomHelix myHelix); CbmSttGeomPoint ClosestPointTo(CbmSttGeomPoint myPoint); CbmSttGeomPoint ClosestPointTo(CbmSttGeomLine myLine); /** Getters */ Double_t GetAxisX() const; Double_t GetAxisY() const; Double_t GetRadius() const {return fRadius;} Double_t GetAlpha() const {return fAlpha;} Double_t GetDistance() const {return fDistance;} Double_t GetDistanceZ() const {return fDistanceZ;} Double_t GetPhi() const {return fPhi;} Double_t GetPt() const; Double_t GetP() const; Double_t GetTheta() const; Double_t GetPhiAt(CbmSttGeomPoint myPoint); TVector3 GetMomentumAt(CbmSttGeomPoint thePoint); Double_t GetTolerance() const {return fTolerance;} Int_t GetMaxIterations() const {return fMaxIterations;} Double_t GetChargeSign() const; CbmSttGeomPoint At(Double_t phi) const; /** Setters */ void SetTolerance(Double_t newTolerance) {fTolerance = newTolerance;} void SetMaxIterations(Int_t newMaxIterations) {fMaxIterations = newMaxIterations;} void Transform(Double_t shiftX, Double_t shiftY, Double_t shiftZ); /** Graphics functions */ void Draw(Double_t size = 0.5, Int_t color = 1) const; void DrawFromVertex(CbmSttGeomPoint vertex, Double_t size, Int_t color) const; private: void Copy(CbmSttGeomHelix const &other); void Destroy(); void ConstructHelixFromMomenta(Double_t px, Double_t py, Double_t pz, Double_t vx, Double_t vy, Double_t vz); void ConstructHelixFromBabarVector(HepVector const babarVector); Double_t GetPhiEstimate(CbmSttGeomLine myLine); Double_t GetPhiEstimate(CbmSttGeomPoint myPoint); Double_t GetPhiEstimate(CbmSttGeomHelix myHelix); void SetupMinimization(CbmSttGeomLine myLine); void SetupMinimization(CbmSttGeomPoint myPoint); Bool_t Minimize(Double_t &phi); // function and derivative for minimization Double_t f(Double_t phi); Double_t fder(Double_t phi); // temporary variables for minimization Double_t m_a0; Double_t m_a1; Double_t m_a2; Double_t m_a3; Double_t m_a4; Double_t m_a5; Double_t m_a6; Double_t m_a7; // helix representation Double_t fAlpha; Double_t fRadius; Double_t fDistanceZ; Double_t fDistance; Double_t fPhi; Double_t fCharge; // accuracy Double_t fTolerance; Int_t fMaxIterations; ClassDef(CbmSttGeomHelix,1); }; #endif