MpdTrackFinderIts5spd.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef MPD_TRACKFINDERITS5SPD_H
  2. #define MPD_TRACKFINDERITS5SPD_H
  3. #include "MpdItsHit5spd.h"
  4. #include "MpdItsKalmanTrack.h"
  5. #include "FairTask.h"
  6. //#include "TLorentzVector.h"
  7. #include "TH1.h"
  8. #include <map>
  9. //class MpdKalmanStripHit;
  10. class MpdKalmanHit;
  11. class MpdKalmanTrack;
  12. class MpdTpcKalmanFilter;
  13. class TClonesArray;
  14. //class TVector2;
  15. class MpdTrackFinderIts5spd :public FairTask
  16. {
  17. public:
  18. /** Constructor **/
  19. MpdTrackFinderIts5spd(Bool_t useVector = kFALSE, const char *name="MpdTrackFinderIts5spd", Int_t iVerbose = 1 );
  20. /** Destructor **/
  21. virtual ~MpdTrackFinderIts5spd();
  22. /// * FairTask methods
  23. /** Intialisation at begin of run. To be implemented in the derived class.
  24. *@value Success If not kSUCCESS, task will be set inactive.
  25. **/
  26. InitStatus Init();
  27. /** Reinitialisation.
  28. *@value Success If not kSUCCESS, task will be set inactive.
  29. **/
  30. InitStatus ReInit();
  31. /** Intialise parameter containers.
  32. **/
  33. void SetParContainers();
  34. void Exec(Option_t * option);
  35. /** Action after each event. **/
  36. void Finish();
  37. void Reset();
  38. void FillGeoScheme(); // fill Kalman filter geometry manager
  39. Bool_t Refit(MpdItsKalmanTrack *track, Double_t mass, Int_t charge); // refit track
  40. private:
  41. // Some constants
  42. static const Int_t fgkNlays = 5, fgkNlays2 = 10;
  43. Int_t GetNofHitsInLayer(Int_t lay) { return (Int_t)fhLays->GetBinContent(lay+1,0); }
  44. Int_t GetHitsInLayer(Int_t lay) { return fLayPointers[lay]; } ///< first index of hits in layer
  45. void GetTrackSeeds(Int_t iPass); // build track seeds
  46. void DoTracking(Int_t iPass); // run tracking
  47. void MakeKalmanHits(); // create Kalman hits
  48. Int_t RunKalmanFilterMod(MpdItsKalmanTrack *track, Int_t layBeg); ///< run Kalman filter - modular
  49. //Bool_t NavigateToLayer(Int_t lay, MpdItsKalmanTrack *curTr, MpdItsKalmanTrack *trackBr,
  50. // std::map<Int_t,Int_t>& trackBrM); ///< navigate track to layer
  51. Bool_t NavigateToLayer(Int_t lay, MpdItsKalmanTrack *curTr, std::map<Int_t,MpdItsKalmanTrack> &trackBr,
  52. std::multimap<Int_t,Int_t> &hitsInWin);
  53. Int_t TrackID(MpdKalmanHit *hit); ///< return track ID of the hit
  54. void AddHits(); // add hit objects to tracks
  55. void StoreTracks(); // transfer tracks from fTrackCand to fTracks
  56. void ExcludeHits() { }; // exclude used hits
  57. void Write();
  58. void Writedir2current( TObject *obj );
  59. //TVector2 GetDistance(TpcLheKalmanTrack *track, MpdKalmanStripHit *hit); ///< hit-track distance
  60. TVector2 GetDistance(MpdKalmanTrack *track, MpdKalmanHit *hit); ///< hit-track distance
  61. Int_t fExact;
  62. Int_t fNPass;
  63. TDirectory *fHistoDir;
  64. TH1F *fhNBranches;
  65. TClonesArray *fItsPoints; //! ITS MC points
  66. TClonesArray *fItsHits; //! ITS Hits
  67. TClonesArray *fKHits; //!< array of Kalman hits
  68. TClonesArray *fTpcTracks; //!< array of TPC tracks
  69. TClonesArray *fMCTracks; //!< array of MC tracks
  70. //TClonesArray *fSTSTrackMatch;
  71. TClonesArray *fTracks; //! ITS tracks
  72. Int_t *fLayPointers; //!< locations of hits from different layers
  73. TH1F *fhLays; //!< histo with layer hit multiplicities
  74. Double_t fStereoA[2]; //!< stereo angles
  75. Double_t fDz[fgkNlays]; //!< layer half-lengths in Z
  76. Double_t fZmod[fgkNlays]; //!< module lengths in Z
  77. Double_t fRad[fgkNlays]; //!< layer radii (detector layers * 2 sides)
  78. Double_t fPipeR; //!< beam pipe outer radius
  79. Int_t fNladders[fgkNlays2]; //!< numbers of ladders in layers
  80. Int_t fNsectors[fgkNlays2]; //!< numbers of sectors in layers
  81. Int_t fGeo; //!< geometry version
  82. Bool_t fUseVector; //!< use Vector Finder Kalman Hits
  83. std::map<Double_t,Double_t> fCables[fgkNlays]; //!< cable length (z1, z2) for layers 1-6
  84. MpdItsHit5spd fHitSts; //!< STS hit - helper for detector numeration
  85. std::map<Int_t,Int_t> fId2Id[fgkNlays2]; //!< STS hit ID to Kalman hit ID for layers 1-6
  86. std::multimap<Double_t,Int_t> fHitMapRphi[fgkNlays], fHitMapZ[fgkNlays];
  87. MpdTpcKalmanFilter *fTpcKF; //!< TPC kalman filter
  88. //FairVertex *fPrimVtx;
  89. //FairStsKFTrackFitter fStsFitter;
  90. private:
  91. // Some constants
  92. static const Double_t fgkChi2Cut; ///< max accepted Chi2 of hit for track
  93. ClassDef(MpdTrackFinderIts5spd,0);
  94. };
  95. #endif