00001 //----------------------------------------------------------------------------- 00002 // $Id: TPerfectFinder.h,v 1.5 2010/03/31 09:58:59 liucy Exp $ 00003 //----------------------------------------------------------------------------- 00004 // Filename : TPerfectFinder.h 00005 // Section : Tracking 00006 // Owner : Yoshi Iwasaki 00007 // Email : yoshihito.iwasaki@kek.jp 00008 //----------------------------------------------------------------------------- 00009 // Description : A class to find tracks using MC info. 00010 // See http://bsunsrv1.kek.jp/~yiwasaki/tracking/ 00011 //----------------------------------------------------------------------------- 00012 00013 #ifndef TPERFECTFINDER_FLAG_ 00014 #define TPERFECTFINDER_FLAG_ 00015 #ifdef TRKRECO_DEBUG_DETAIL 00016 #ifndef TRKRECO_DEBUG 00017 #define TRKRECO_DEBUG 00018 #endif 00019 #endif 00020 #define HEP_SHORT_NAMES 00021 #include "TrkReco/TFinderBase.h" 00022 #include "TrkReco/TMLink.h" 00023 #include "TrkReco/TBuilder.h" 00024 #include "TrkReco/THelixFitter.h" 00025 template <class T> class AList; 00026 00028 class TPerfectFinder : public TFinderBase { 00029 00030 public: 00032 TPerfectFinder(int perfectFitting, 00033 float maxSigma, 00034 float maxSigmaStereo, 00035 unsigned fittingFlag); 00036 00038 virtual ~TPerfectFinder(); 00039 00040 public:// Selectors 00042 std::string name(void) const; 00043 00045 std::string version(void) const; 00046 00048 void dump(const std::string & message = std::string(""), 00049 const std::string & prefix = std::string("")) const; 00050 00052 void clear(void); 00053 00055 bool perfectFitting(bool); 00056 00057 public:// Modifiers 00059 int doit(const AList<TMDCWireHit> & axialHits, 00060 const AList<TMDCWireHit> & stereoHits, 00061 AList<TTrack> & tracks, 00062 AList<TTrack> & tracks2D); 00063 00064 private: 00065 float charge(int pType) const; 00066 00067 private: 00068 bool _perfectFitting; 00069 AList<TMLink> _links; 00070 float _maxSigma; 00071 float _maxSigmaStereo; 00072 unsigned _fittingFlag; 00073 TBuilder _builder; 00074 THelixFitter _fitter; 00075 }; 00076 00077 //----------------------------------------------------------------------------- 00078 00079 #ifdef TPERFECTFINDER_NO_INLINE 00080 #define inline 00081 #else 00082 #undef inline 00083 #define TPERFECTFINDER_INLINE_DEFINE_HERE 00084 #endif 00085 00086 #ifdef TPERFECTFINDER_INLINE_DEFINE_HERE 00087 00088 inline 00089 std::string 00090 TPerfectFinder::name(void) const { 00091 return "Perfect Finder"; 00092 } 00093 00094 inline 00095 bool 00096 TPerfectFinder::perfectFitting(bool a) { 00097 return _perfectFitting = a; 00098 } 00099 00100 #endif 00101 00102 #undef inline 00103 00104 #endif /* TPERFECTFINDER_FLAG_ */