// ------------------------------------------------------------------------- // ----- CbmLitTrdTrackFinder header file ----- // ----- Created 06/07/06 by A. Lebedev ----- // ------------------------------------------------------------------------- /** CbmLitTrdTrackFinder.h *@author A.Lebedev ** ** **/ #ifndef CbmLitTrdTrackFinderHHH #define CbmLitTrdTrackFinderHHH #include "CbmTrdTrackFinder.h" #include "set.h" #include "map.h" #include "CbmLitKalman.h" class TClonesArray; class CbmTrdTrack; class CbmTrdHit; class CbmLitTrdTrackFinder : public CbmTrdTrackFinder { public: // Default constructor CbmLitTrdTrackFinder(); // Destructor virtual ~CbmLitTrdTrackFinder(); // Initialisation // must be implemented in derived classes virtual void Init() = 0; // Track finding algorithm // must be implemented in derived classes virtual Int_t DoFind(TClonesArray* hitArray, TClonesArray* trackArray) = 0; // TRD geometry // number of stations Int_t fNofTrdStations; // number of layers for each station vector fNofTrdLayersPerStation; // total number of layers Int_t fNofTrdLayers; // Standalone track finder or not Bool_t fIsStandalone; // Data TClonesArray* fArrayTrdHit; // Kalman filter CbmLitKalman *fKf; // Verbosity level Int_t fVerbose; // Event number Int_t fEvents; //Number of iterations Int_t fNofIter; // coefficient before sigma Double_t fSigmaCoef; // uses only with 3x3 geometry for Standalone track-finder Double_t fSigmaX_2[3]; // vector with found TRD tracks vector fFoundTracks; // vector with TRD tracks vector fTrdTracks; // vector with pointers to TrdHits vector > fHits; // Max measurement error for each layer vector fMaxSigmaX; vector fMaxSigmaY; // set with hits that were used set fUsedHitsSet; // Map from pointer to CbmHit to Hit index map fHitIdMap; // Read TRD geometry void ReadTrdGeometry(); // Arrange hits by planes void ArrangeHits(); // Main track following procedure void TrackFollowing(); // Follows track through the station void TrackFollowingStation(CbmTrdTrack *pTrack, Int_t Station); // Checks if the hit in the area near the track bool IsIn(CbmTrdTrack *pTrack, CbmTrdHit *pHit); // Kalman Filter update of the tracks void UpdateTracks(Int_t Station); // Checks found tracks for common hits void CheckCommonHits(); // Defines min and max index of hits // which can be used for futher following void MinMaxIndex(CbmTrdTrack* pTrack, Int_t &IndMin, Int_t &HitCnt, Int_t layer); // Adds track candidate void AddTrackCandidate(CbmTrdTrack* pTrack, CbmTrdHit* pHits[], Int_t Station); // Removes hits which belong to found tracks void RemoveHits(); // Copy tracks to output TClonesArray void CopyToOutput(TClonesArray* trackArray); // static bool CmpYUp(const CbmTrdHit *m1, const CbmTrdHit *m2){ return m1->GetY() < m2->GetY(); } // static bool CmpXUp(const CbmTrdHit *m1, const CbmTrdHit *m2){ return m1->GetX() < m2->GetX(); } public: // Public accessors inline const Int_t& GetVerbose() const {return fVerbose;}; inline const Int_t& GetNofIter() const {return fNofIter;}; // Public modifiers inline void SetVerbose(const Int_t& verbose) {fVerbose = verbose;}; inline void SetNofIter(const Int_t& iter) {fNofIter = iter;}; ClassDef(CbmLitTrdTrackFinder, 1); }; #endif