00001 //----------------------------------------------------------------------- 00002 // File from KalFit module 00003 // 00004 // Filename : KalFitElement.h 00005 //------------------------------------------------------------------------ 00006 // Description : 00007 // Element is a base class which represents an element of detector 00008 // 00009 //------------------------------------------------------------------------ 00010 // Modif : 00011 //------------------------------------------------------------------------ 00012 #ifndef _DEFINE_ELEMENT_H_ 00013 #define _DEFINE_ELEMENT_H_ 00014 00015 #include "KalFitAlg/lpav/Lpav.h" // Use for first circle fit.... 00016 00017 class KalFitMaterial; 00018 class KalFitTrack; 00019 00020 00024 class KalFitElement { 00025 protected: 00026 00028 const KalFitMaterial* material_; 00029 00031 static int muls_; 00032 static int loss_; 00033 00034 public: 00036 KalFitElement(const KalFitMaterial* material) 00037 : material_(material) 00038 {} 00039 00041 virtual ~KalFitElement(){} 00042 00044 virtual double intersect(const KalFitTrack& track, 00045 HepPoint3D& x) const = 0; 00046 00047 00048 virtual double intersect(const KalFitTrack& track, 00049 HepPoint3D& x, const HepPoint3D& point) const = 0; 00050 00052 const KalFitMaterial& material(void) const 00053 { 00054 return *material_; 00055 } 00056 00058 virtual double radius(void) const = 0; 00059 00061 virtual void updateTrack(KalFitTrack& track, int index); 00062 virtual void updateTrack_rphi(KalFitTrack& track, int index); 00063 00064 virtual void updateTrack_alreadyfound(KalFitTrack& track, 00065 int index); 00067 virtual void asso_rphi(Lpav& circ, KalFitTrack& track); 00068 virtual void asso_rphi(KalFitTrack& track); 00069 00071 bool operator < (const KalFitElement& a) const 00072 { 00073 return radius() < a.radius(); 00074 } 00075 00076 static int muls(void); 00077 static int loss(void); 00078 00079 static void muls(int i); 00080 static void loss(int i); 00081 }; 00082 00083 #endif