MpdCellAutomat.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef MPD_CELLAUTOMAT_H
  2. #define MPD_CELLAUTOMAT_H
  3. /// \ingroup rec
  4. /// \class MpdCellAutomat
  5. /// \brief Track finder in MPD Inner Tracking System (ITS) using cellular automaton (CA)
  6. ///
  7. /// \author Maxim Strelchenko, Alexander Zinchenko, LHEP JINR Dubna
  8. #include "MpdStsHit.h"
  9. #include "MpdCellTrack.h"
  10. #include "FairTask.h"
  11. #include "TH1.h"
  12. #include "TObject.h"
  13. #include "TClonesArray.h"
  14. #include "TVector2.h"
  15. #include <map>
  16. class MpdKalmanHit;
  17. class MpdKalmanTrack;
  18. class MpdItsKalmanTrack;
  19. class MpdCellAutomat :public FairTask
  20. {
  21. public:
  22. /** Constructor **/
  23. MpdCellAutomat(const char *name="MpdCellAutomat", Int_t iVerbose = 1 );
  24. /** Destructor **/
  25. virtual ~MpdCellAutomat();
  26. /// * FairTask methods
  27. /** Intialisation at begin of run. To be implemented in the derived class.
  28. *@value Success If not kSUCCESS, task will be set inactive.
  29. **/
  30. InitStatus Init();
  31. /** Reinitialisation.
  32. *@value Success If not kSUCCESS, task will be set inactive.
  33. **/
  34. InitStatus ReInit();
  35. /** Intialise parameter containers.
  36. **/
  37. void SetParContainers();
  38. void Exec(Option_t * option);
  39. /** Action after each event. **/
  40. void Finish();
  41. void Reset();
  42. void FillGeoScheme(); // fill Kalman filter geometry manager
  43. private:
  44. Int_t GetNofHitsInLayer(Int_t lay) { return (Int_t)fhLays->GetCellContent(lay+1,0); }
  45. Int_t GetHitsInLayer(Int_t lay) { return fLayPointers[lay]; } ///< first index of hits in layer
  46. void GetTrackSeeds(Int_t iPass); // build track seeds
  47. void DoTracking(Int_t iPass); // run tracking
  48. void MakeKalmanHits(); // create Kalman hits //ms
  49. // Double_t EvalPt(const MpdKalmanHit *hit1, const MpdKalmanHit *hit2); // evaluate Pt
  50. Double_t EvalPt(const MpdCellTrack *track1, const MpdCellTrack *track2);
  51. //void EvalCovar(const MpdCellTrack *hitOut, const MpdCellTrack *hitIn, Double_t *parOut, Double_t *parIn, MpdItsKalmanTrack *track, const MpdCellTrack *track1); ///< evaluate covar. matrix OLD Version
  52. //void EvalCovar(Double_t *parOut, Double_t *parIn, MpdItsKalmanTrack *track, const MpdCellTrack *track4); ///< evaluate covar. matrix new version track4-> 1 layer OLD
  53. void EvalCovar(Double_t *parOut, Double_t *parIn, MpdItsKalmanTrack *track, const MpdCellTrack *track1); ///< evaluate covar. matrix work version coment ot 25.12
  54. // void MakeKalmanHits2D();//create 2D hits //ms
  55. void Build2DHits(); // create 2D Hits // 06.05
  56. void MakeTrackCandidates(Int_t iPass);
  57. void ExtendCellTracks(Int_t iPass);//ms 03.03
  58. Int_t RunKalmanFilterCell(MpdItsKalmanTrack *track); ///< run Kalman filter (fitter) for cell track
  59. //Int_t TrackID(MpdKalmanHit *hit, Int_t indx = 0); ///< return track ID of the hit //ms
  60. Int_t TrackID(MpdKalmanHit *hit, Int_t indx = 0); ///< return track ID of the hit
  61. void AddHits(); // add hit objects to tracks
  62. void SetTrackID(MpdItsKalmanTrack* track); ///< set track ID as ID of majority of its hits
  63. Int_t GetHitID(MpdKalmanHit *hit); ///< get hit ID from MCPoint ID
  64. void StoreTracks(); // transfer tracks from fTrackCand to fTracks
  65. //void ExcludeHits() { }; // exclude used hits
  66. void ExcludeHits();
  67. void Write();
  68. void Writedir2current( TObject *obj );
  69. void RemoveDoubles(); // remove double tracks 10.02
  70. TVector2 GetDistance(MpdKalmanTrack *track, MpdKalmanHit *hit); ///< hit-track distance //ms
  71. // Double_t Interp(Double_t angt, Int_t choice = 0, Int_t lay = 4); ///< parabolic interpolation
  72. Double_t Interp(Double_t angt, Int_t choice = 0, Int_t lay = 0); ///< parabolic interpolation
  73. //Bool_t AreTracksDoubles(MpdCellTrack *tr1, MpdCellTrack *tr2);//12.02
  74. Bool_t AreTracksDoubles(MpdItsKalmanTrack *tr1, MpdItsKalmanTrack *tr2);
  75. void GetShortTracks();
  76. private:
  77. Int_t fNPass;
  78. Int_t fExact; //!< exact ID match if != 0
  79. TDirectory *fHistoDir;
  80. TH1F *fhNBranches;
  81. Int_t fNTracks; // number of found tracks 10.02
  82. TClonesArray *fItsPoints; //! ITS MC points
  83. TClonesArray *fItsHits; //! ITS Hits
  84. TClonesArray *fKHits1; //!< array of Kalman hits
  85. TClonesArray *fKHits[4]; //!< array of Cell Tracks
  86. TClonesArray *f2DHits[4]; //!< array of Cell Tracks (2D Hits)
  87. TClonesArray *fTpcTracks; //!< array of TPC tracks
  88. TClonesArray *fMCTracks; //!< array of MC tracks
  89. TClonesArray *fTrackCand; //!< array of track candidates
  90. //TClonesArray *fSTSTrackMatch;
  91. TClonesArray *fTracks; //! ITS tracks
  92. Int_t *fLayPointers; //!< locations of hits from different layers
  93. TH1F *fhLays; //!< histo with layer hit multiplicities
  94. Double_t fStereoA[2]; //!< stereo angles
  95. Double_t fDz[4]; //!< layer half-lengths in Z
  96. Double_t fZmod[4]; //!< module lengths in Z
  97. Double_t fRad[8]; //!< layer radii (detector layers * 2 sides)
  98. Double_t fPipeR; //!< beam pipe outer radius
  99. Int_t fNladders[8]; //!< numbers of ladders in layers
  100. Int_t fNsectors[8]; //!< numbers of sectors in layers
  101. Int_t fGeo; //!< geometry version
  102. std::map<Double_t,Double_t> fCables[4]; //!< cable length (z1, z2) for layers 1-4
  103. MpdStsHit fHitSts; //!< STS hit - helper for detector numeration
  104. std::map<Int_t,Int_t> fId2Id[8]; //!< STS hit ID to Kalman hit ID for layers 1-4
  105. Int_t fLayBeg[4]; //!< ITS hit indices for layers 1-4
  106. std::map<TString,Int_t> fCellMap;
  107. //FairVertex *fPrimVtx;
  108. private:
  109. // Some constants
  110. static const Double_t fgkChi2Cut; ///< max accepted Chi2 of hit for track
  111. ClassDef(MpdCellAutomat,1);
  112. };
  113. #endif