MpdKfParticleFinder.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. #ifndef MPDKFPARTICLEFINDER_h
  2. #define MPDKFPARTICLEFINDER_h
  3. #define HomogeneousField
  4. #define DO_TPCCATRACKER_EFF_PERFORMANCE
  5. // ROOT includes
  6. #include <TClonesArray.h>
  7. #include <TH1.h>
  8. #include <TH2.h>
  9. // FairRoot includes
  10. #include <FairTask.h>
  11. #include <FairRunAna.h>
  12. #include <FairMCEventHeader.h>
  13. #include <FairFileSource.h>
  14. // MPD includes
  15. #include <MpdTpcKalmanTrack.h>
  16. #include <MpdKalmanFilter.h>
  17. #include <MpdMCTrack.h>
  18. #include <MpdVertex.h>
  19. #include <MpdMiniDstFileSource.h>
  20. #include <MpdMiniTrack.h>
  21. #include <MpdMiniMcEvent.h>
  22. #include <MpdMiniTrackCovMatrix.h>
  23. // KFParticle includes
  24. #include <KFPTrackVector.h>
  25. #include <KFParticleTopoReconstructor.h>
  26. #include <KFTopoPerformance.h>
  27. // C++ includes
  28. #include <vector>
  29. #include <map>
  30. using namespace std;
  31. using namespace TMath;
  32. class ExtendedMpdTpcKalmanTrack : public MpdTpcKalmanTrack {
  33. public:
  34. ExtendedMpdTpcKalmanTrack() : fIdx(-1) {
  35. ;
  36. }
  37. virtual ~ExtendedMpdTpcKalmanTrack() {
  38. ;
  39. }
  40. Int_t fIdx;
  41. ClassDef(ExtendedMpdTpcKalmanTrack, 0)
  42. };
  43. class TrackCuts : public TNamed {
  44. public:
  45. // Setting cut values by default that correspond to the TPC kinem. acceptance ...
  46. TrackCuts() : fPtMin(.15), fPtMax(2.), fAbsEta(1.1) {
  47. ;
  48. }
  49. virtual ~TrackCuts() {
  50. ;
  51. }
  52. void SetPtMin(Double_t value) {
  53. fPtMin = value;
  54. }
  55. void SetPtMax(Double_t value) {
  56. fPtMax = value;
  57. }
  58. void SetAbsEta(Double_t value) {
  59. fAbsEta = value;
  60. }
  61. Double_t GetPtMin() {
  62. return fPtMin;
  63. }
  64. Double_t GetPtMax() {
  65. return fPtMax;
  66. }
  67. Double_t GetAbsEta() {
  68. return fAbsEta;
  69. }
  70. private:
  71. Double_t fPtMin;
  72. Double_t fPtMax;
  73. Double_t fAbsEta;
  74. ClassDef(TrackCuts, 0)
  75. };
  76. class MpdKfParticleFinder : public FairTask {
  77. public:
  78. MpdKfParticleFinder() {
  79. ;
  80. }
  81. MpdKfParticleFinder(TString);
  82. virtual ~MpdKfParticleFinder() {
  83. if (fTopoReconstructor)
  84. delete fTopoReconstructor;
  85. if (isUseCuts && fCuts)
  86. delete fCuts;
  87. }
  88. /// Init
  89. virtual InitStatus Init();
  90. /// Execute
  91. virtual void Exec(Option_t* option);
  92. /// Finish
  93. virtual void Finish();
  94. // User defined setters ...
  95. void SetPidHypo(Int_t pdg1, Int_t pdg2) {
  96. if (pdg1 < 0 || pdg2 > 0) {
  97. cout << "PDG1 is assumed to be positive, and PDG2 - negative!" << endl;
  98. throw;
  99. }
  100. fPidHypo.first = pdg1;
  101. fPidHypo.second = pdg2;
  102. }
  103. void SetUseCuts(Bool_t flag) {
  104. isUseCuts = flag;
  105. }
  106. void SetUseKFPerformance(Bool_t flag) {
  107. isPerformance = flag;
  108. }
  109. TrackCuts* GetTrackCuts() {
  110. if (!fCuts)
  111. return nullptr;
  112. else
  113. return fCuts;
  114. }
  115. private:
  116. FairRootManager* ioman;
  117. pair <Int_t, Int_t> fPidHypo;
  118. vector <Int_t> fDecPdgs; // pdg codes of decays we are interested in ...
  119. TString fInput;
  120. vector <TString> fInputs;
  121. map <TString, UInt_t> fIds;
  122. TFile* fOutFile;
  123. TClonesArray* fTpcTracks;
  124. TClonesArray* fMcTracks;
  125. TClonesArray* fPrimaryVertices;
  126. FairMCEventHeader* fMCHeader;
  127. FairEventHeader* fHeader;
  128. // MiniDst
  129. TClonesArray* fMiniTracks;
  130. TClonesArray* fMiniCovMatrices;
  131. TClonesArray* fMCEvent;
  132. KFParticleTopoReconstructor* fTopoReconstructor;
  133. KFTopoPerformance* fPerformance;
  134. TDatabasePDG *fPdgDB;
  135. // Output arrays ...
  136. TClonesArray* fSecondaries;
  137. TClonesArray* fKFVertices;
  138. UInt_t evCounter = 0;
  139. // Cut flags ...
  140. Bool_t isUseCuts;
  141. TrackCuts* fCuts;
  142. Bool_t isMini;
  143. Bool_t isPerformance;
  144. private:
  145. void ReadList(TString);
  146. Bool_t checkBranchStatus(TString dst) {
  147. // Checking branch status ...
  148. TChain* ch = new TChain(isMini ? "MiniDst" : "mpdsim");
  149. ch->Add(dst.Data());
  150. Bool_t status = ch->GetBranchStatus(isMini ? "Track" : "TpcKalmanTrack");
  151. delete ch;
  152. return status;
  153. }
  154. void Mini2Kalman(TClonesArray*);
  155. void ProcessDst();
  156. void FillKFPTrackVector(vector <ExtendedMpdTpcKalmanTrack>, KFPTrackVector*, vector <Int_t>);
  157. vector <KFMCTrack> FillKFMCTrack();
  158. Bool_t isInAcceptance(MpdMCTrack*);
  159. // Possible track params. to be used:
  160. void dcaToBeamline(MpdTpcKalmanTrack, MpdTpcKalmanTrack&); // orig. params written to output ...
  161. void tpcInnerShell(MpdTpcKalmanTrack, MpdTpcKalmanTrack&); // propagated track params. to TPC inner shell ...
  162. void lastHit(MpdTpcKalmanTrack, MpdTpcKalmanTrack&); // track params. calculated at the last hit ...
  163. vector <Double_t> DoErrorPropagationToXYZPxPyPz(TMatrixDSym* cov, TMatrixD* params, MpdTpcKalmanTrack*);
  164. ClassDef(MpdKfParticleFinder, 0)
  165. };
  166. #endif