MpdVectorFinder.h 6.2 KB

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