00001 //----------------------------------------------------------------------------- 00002 // $Id: T3DLine.h,v 1.11 2010/03/31 09:58:59 liucy Exp $ 00003 //----------------------------------------------------------------------------- 00004 // Filename : T3DLine.h 00005 // Section : Tracking 00006 // Owner : Kenji Inami 00007 // Email : inami@bmail.kek.jp 00008 //----------------------------------------------------------------------------- 00009 // Description : A class to represent a 3D line in tracking 00010 // See http://bsunsrv1.kek.jp/~yiwasaki/tracking/ 00011 //----------------------------------------------------------------------------- 00012 00013 #ifdef TRKRECO_DEBUG_DETAIL 00014 #ifndef TRKRECO_DEBUG 00015 #define TRKRECO_DEBUG 00016 #endif 00017 #endif 00018 #ifndef T3DLine_FLAG_ 00019 #define T3DLine_FLAG_ 00020 00021 #define Line3D 32 00022 // This must be writen in TTrackBase.h 00023 00024 #include <string> 00025 00026 #define HEP_SHORT_NAMES 00027 #ifndef CLHEP_POINT3D_H 00028 #include "CLHEP/Geometry/Point3D.h" 00029 #endif 00030 #ifndef ENABLE_BACKWARDS_COMPATIBILITY 00031 typedef HepGeom::Point3D<double> HepPoint3D; 00032 #endif 00033 #ifndef CLHEP_VECTOR3D_H 00034 #include "CLHEP/Geometry/Vector3D.h" 00035 #endif 00036 #ifndef ENABLE_BACKWARDS_COMPATIBILITY 00037 typedef HepGeom::Vector3D<double> HepVector3D; 00038 #endif 00039 00040 //#include "helix/Helix.h" 00041 #include "TrackUtil/Helix.h" 00042 //#include "TrkReco/Helix.h" 00043 #include "TrkReco/TTrackBase.h" 00044 00045 class T3DLineFitter; 00046 class TTrack; 00047 class TMLink; 00048 00050 class T3DLine : public TTrackBase { 00051 00052 public: 00054 T3DLine(); 00055 T3DLine(const TTrack&); 00056 T3DLine(const T3DLine&); 00057 00059 virtual ~T3DLine(); 00060 00061 public:// Extractors 00063 double dr(void) const; 00064 double phi0(void) const; 00065 double dz(void) const; 00066 double tanl(void) const; 00067 00068 double cosPhi0(void) const; 00069 double sinPhi0(void) const; 00070 00071 Vector a(void) const; //dr,phi0,dz,tanl 00072 00074 const SymMatrix& Ea(void) const; 00075 00077 const HepPoint3D & pivot(void) const; 00078 00080 Helix helix(void) const; 00081 00083 unsigned ndf(void) const; 00084 00086 double chi2(void) const; 00087 00089 double reducedchi2(void) const; 00090 00092 unsigned objectType(void) const; 00093 00094 public:// Executors 00095 00096 public:// Utilities 00098 HepPoint3D x(double) const; 00099 00101 HepPoint3D x0(void) const; 00102 //zsl Vector3 k(void) const; 00103 HepVector3D k(void) const; 00104 00106 int approach(TMLink &, bool sagCorrection = true) const; 00107 00109 int approach_line(const HepPoint3D&,const HepVector3D&, 00110 HepPoint3D& onLine,HepPoint3D& onTrack) const; 00111 00113 int approach_point(const HepPoint3D&,HepPoint3D& onTrack) const; 00114 00115 public:// Modifiers 00117 const HepPoint3D & pivot(const HepPoint3D&); 00118 00120 void set(const HepPoint3D&,double t_dr,double t_phi0,double t_dz,double t_tanl); 00121 00123 Vector a(const Vector&); 00124 00126 const SymMatrix& Ea(const SymMatrix&); 00127 00128 private: 00129 HepPoint3D _pivot; 00130 // Updated when fitted 00131 double _dr; 00132 double _phi0; 00133 double _dz; 00134 double _tanl; 00135 00136 SymMatrix _Ea; 00137 00138 double _chi2; 00139 unsigned _ndf; 00140 00141 //Cashe 00142 double _cos_phi0; 00143 double _sin_phi0; 00144 00145 static const T3DLineFitter _fitter; 00146 00147 friend class T3DLineFitter; 00148 }; 00149 00150 inline unsigned T3DLine::objectType(void) const{ 00151 return Line3D; 00152 } 00153 00154 #endif /* T3DLine_FLAG_ */