//-*- Mode: C++ -*- // ***************************************************************************** // * // @Autors: I.Kulakov; M.Zyzak; I.Kisel * // @e-mail: I.Kulakov@gsi.de; M.Zyzak@gsi.de; I.Kisel@compeng.uni-frankfurt.de * // * // ***************************************************************************** #ifndef PNDCAGBTRACKER_H #define PNDCAGBTRACKER_H #include "PndCATimer.h" #include "PndCADef.h" #include "PndCATrackParam.h" #include "PndCAParam.h" #include "PndCAGBHit.h" #include "PndCAGBTrack.h" #include "PndCAStationArray.h" #include "PndCATarget.h" #include "PndCANPlets.h" #include "PndCANPletsV.h" #include "PndCAStationSTT.h" class PndCATarget; class PndCAHit; class PndCATrack; class PndCAHits; class PndCATracks; class PndCAHitV; class PndCAHitsV; #include #include #include #include using std::string; using std::vector; class PndCAMerger; class PndCAGBTracker { public: PndCAGBTracker(); ~PndCAGBTracker(); void Init(); void StartEvent(); void SetNSlices( int N ); const PndCAGBHit *Hits() const { return &fHits[0]; } const PndCAGBHit &Hit( int index ) const { if( index<0 || index >= (int) fHits.size() ){ cout<<"error hit index ind "< &hits ); // need for StRoot int GetHitsSize() const {return fHits.size();} void FindTracks(); void CATrackFinder(); // fuctions used by TrackFinder void Create1Plets( const PndCATarget& target, const PndCAHits &hits, PndCAElementsOnStation& singlets, int iStation ); void PickUpHits( PndCAElementsOnStation& a, PndCAElementsOnStation& r, int iS ); void CreateNPlets( const PndCATarget& target, const PndCAHits& hits, PndCAElementsOnStation& triplets, int iStation, int cellLength ); void FindNeighbours( PndCANPlets& triplets ); void CreateTracks( const PndCANPlets& triplets, PndCATracks& tracks ); void InvertCholetsky(float a[15]) const; void MultiplySS(float const C[15], float const V[15], float K[5][5]) const; void MultiplyMS(float const C[5][5], float const V[15], float K[15]) const; void MultiplySR(float const C[15], float const r_in[5], float r_out[5]) const; void FilterTracks(float const r[5], float const C[15], float const m[5], float const V[15], float R[5], float W[15], float &chi2) const; void Merge( PndCATracks& tracks ); void FindBestCandidate(int ista, PndCATrack &best_tr, int currITrip, PndCATrack &curr_tr, unsigned char min_best_l, const PndCANPlets& triplets, unsigned int& nCalls); // private enum { kFastPrimIter, // primary fast tracks kAllPrimIter, // primary all tracks kAllPrimJumpIter, // primary tracks with jumped triplets kAllSecIter // secondary all tracks }; int fFindIter; // current iteration number PndCATarget fTarget; float fMaxInvMom; // max considered q/p for tracks float fPick_m, // coefficient for size of region on middle station for add middle hits in triplets: Dx = Pick*sigma_x Dy = Pick*sigma_y fPick_r, // same for right hits fPick; // pick for current procedure float fPickNeighbour; // (PickNeighbour < dp/dp_error) => triplets are neighbours float TRACK_PROB_CUT; // = 0.01; float TRACK_CHI2_CUT; // = 10.0; // cut for tracks candidates. per one DoF float_v TRIPLET_CHI2_CUT; // = 5.0; // cut for selecting triplets before collecting tracks.per one DoF float fMaxDX0; // Set correction in order to take into account overlaping /// Try to group close hits in row formed by one track. After sort hits. friend class PndCAPerformance; //dbg protected: vector fHits; //* hit array int fNHits; //* N hits in event int *fTrackHits; //* track->hits reference array PndCAGBTrack *fTracks; //* array of tracks int fNTracks; //* N tracks double fTime; //* total time static const int fNTimers = 25; double fStatTime[fNTimers]; //* timers int fStatNEvents; //* n events proceed double fSliceTrackerTime; // reco time of the slice tracker; double fSliceTrackerCpuTime; // reco time of the slice tracker; PndCATFIterTimerInfo fGTi; // global PndCATFTimerInfo fTi; // for iterations PndCATFIterTimerInfo fStatGTi; // global PndCATFTimerInfo fStatTi; // for iterations PndCAParam fParameters; PndCAStationSTT fStations[50]; private: PndCAGBTracker( const PndCAGBTracker& ); PndCAGBTracker &operator=( const PndCAGBTracker& ); }; #endif