00001 00002 00003 #ifndef StiLocalTrackSeedFinder_HH 00004 #define StiLocalTrackSeedFinder_HH 00005 #include "Stiostream.h" 00006 using std::ostream; 00007 #include <vector> 00008 using std::vector; 00009 #include "Sti/Base/EditableParameters.h" 00010 //VP#include "Sti/StiHelixCalculator.h" 00011 //VP#include "Sti/StiHelixFitter.h" 00012 #include "Sti/StiTrackFinder.h" 00013 #include "Sti/StiSortedHitIterator.h" 00014 #include "Sti/StiMasterDetectorBuilder.h" 00015 #include "StDetectorDbMaker/StiLocalTrackSeedFinderParameters.h" 00016 #include "Sti/StiDefaultTrackFilter.h" 00017 #include "StDetectorDbMaker/StiLocalTrackSeedFinderParameters.h" 00018 00019 class StiDetector; 00020 00029 class StiLocalTrackSeedFinder : public StiTrackFinder 00030 { 00031 public: 00032 StiLocalTrackSeedFinder(const string& name, 00033 const string& description, 00034 Factory<StiKalmanTrack> * trackFactory, 00035 StiHitContainer * hitContainer, 00036 StiDetectorContainer * detectorContainer); 00037 virtual ~StiLocalTrackSeedFinder(); 00038 StiTrack* findTrack(double rMin=0); 00039 virtual void clear(){reset();}; 00040 virtual void initialize(){}; 00041 virtual void print() const; 00042 Filter<StiTrack> * getTrackFilter(); 00043 EditableParameters & getParameters(); 00044 virtual void reset(); 00045 virtual void unset(){;} 00046 bool isReset(); 00047 00048 void findTracks(){}; 00049 bool find(StiTrack *track, int direction,double rmin=0){return false;}; 00050 void extendTracksToVertex(StiHit* vertex){}; 00051 00052 friend ostream& operator<<(ostream& os, const StiLocalTrackSeedFinder & f); 00053 00054 protected: 00055 StiKalmanTrack*makeTrack(StiHit* hit); 00057 bool extendHit(StiHit & hit); 00059 bool extrapolate(); 00060 StiKalmanTrack* initializeTrack(StiKalmanTrack*); 00061 // void calculate(StiKalmanTrack*); 00062 // void calculateWithOrigin(StiKalmanTrack*); 00063 //Perform helix fit, Perform helix calculation (doesn't assume any vertex) 00064 bool fit(StiKalmanTrack*); 00065 00066 bool _reset; 00067 Factory<StiKalmanTrack> * _trackFactory; 00068 StiHitContainer * _hitContainer; 00069 StiDetectorContainer * _detectorContainer; 00070 00071 StiSortedHitIterator _hitIter; 00072 vector<StiHit*> _seedHits; 00073 //VP StiHelixCalculator _helixCalculator; 00074 //VP StiHelixFitter _helixFitter; 00075 StiDefaultTrackFilter _trackFilter; 00076 double fRxyMin; 00077 private: 00078 //The following are not implemented, as they are non-trivial 00079 //and the default compiler generated versions will be wrong. 00080 StiLocalTrackSeedFinder(); 00081 StiLocalTrackSeedFinder(const StiLocalTrackSeedFinder&); 00082 StiLocalTrackSeedFinder operator=(const StiLocalTrackSeedFinder&); 00083 //Count how many hits we've skipped in extrapolation 00084 int _skipped; 00085 }; 00086 00087 00088 inline void StiLocalTrackSeedFinder::reset() 00089 { 00090 cout <<"StiLocalTrackSeedFinder::reset() -I- Started"<<endl; 00091 _reset = true; 00092 cout <<"StiLocalTrackSeedFinder::reset() -I- Done"<<endl; 00093 } 00094 00095 inline bool StiLocalTrackSeedFinder::isReset() 00096 { 00097 bool state = _reset; 00098 if (_reset) _reset = false; 00099 return state; 00100 } 00101 00102 inline Filter<StiTrack> * StiLocalTrackSeedFinder::getTrackFilter() 00103 { 00104 return &_trackFilter; 00105 } 00106 00107 #endif
1.5.9