KFParticlePerformanceBase.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. //----------------------------------------------------------------------------
  2. // Implementation of the KFParticle class
  3. // .
  4. // @author I.Kisel, I.Kulakov, M.Zyzak
  5. // @version 1.0
  6. // @since 20.08.13
  7. //
  8. //
  9. // -= Copyright &copy ALICE HLT and CBM L1 Groups =-
  10. //____________________________________________________________________________
  11. #ifdef DO_TPCCATRACKER_EFF_PERFORMANCE
  12. #ifndef KFParticlePERFORMANCEBASE_H
  13. #define KFParticlePERFORMANCEBASE_H
  14. #ifdef KFPWITHTRACKER
  15. #include "AliHLTTPCCounters.h"
  16. #include "AliHLTTPCPerformanceBase.h"
  17. #include "AliHLTTPCCADef.h"
  18. #include "AliHLTArray.h"
  19. #include "AliHLTTPCCAMCTrack.h"
  20. #include "AliHLTTPCCAMCPoint.h"
  21. #endif
  22. #include "KFPartEfficiencies.h"
  23. #include "KFPVEfficiencies.h"
  24. #include <map>
  25. #include <string>
  26. class TDirectory;
  27. class TH1F;
  28. class TH2F;
  29. class TH3F;
  30. class KFParticle;
  31. class TProfile;
  32. class TProfile2D;
  33. /** @class KFParticlePerformanceBase
  34. ** @brief The base class for KFTopoPerformance.
  35. ** @author M.Zyzak, I.Kisel
  36. ** @date 05.02.2019
  37. ** @version 1.0
  38. **
  39. ** The class contains a set of histograms, allocates memory for them, sets names and axis names.
  40. ** For each particle from the KF Particle Reconstruction scheme histograms with parameter distribution,
  41. ** efficiencies, fit QA, fit QA of daughters, histograms for the side bands method and histograms for
  42. ** multi-differential extraction of spectra are collected. Also, a set of histograms for quality of
  43. ** the reconstructed parameters of primary vertices is created: distribution of parameters; fit QA;
  44. ** fit QA of primary tracks; contamination of ghost, secondary (background) tracks and tracks from
  45. ** another primary vertex; efficiency.
  46. **/
  47. class KFParticlePerformanceBase
  48. #ifdef KFPWITHTRACKER
  49. : public AliHLTTPCPerformanceBase
  50. #endif
  51. {
  52. public:
  53. KFParticlePerformanceBase();
  54. virtual ~KFParticlePerformanceBase(){};
  55. /// Histograms
  56. virtual void CreateHistos(std::string histoDir = "", TDirectory* outFile = 0, std::map<int,bool> decays = std::map<int,bool>());
  57. TDirectory* GetHistosDirectory() { return fHistoDir; } ///< Returns pointer to the ROOT directory with created histograms.
  58. /** Switch off collection of histograms requiring Monte Carlo information. Not to allocate memory should be called
  59. ** before KFParticlePerformanceBase::CreateHistos(). **/
  60. void DoNotStoreMCHistograms() { fStoreMCHistograms = 0; }
  61. /** Switch off collection of histograms for primary and secondary candidates. Not to allocate memory should be called
  62. ** before KFParticlePerformanceBase::CreateHistos(). **/
  63. void DoNotStorePrimSecHistograms() { fStorePrimSecHistograms = 0; }
  64. /** Switch off collection of Z-R histograms. Not to allocate memory should be called
  65. ** before KFParticlePerformanceBase::CreateHistos(). **/
  66. void DoNotStoreZRHistograms() { fStoreZRHistograms = 0; }
  67. /** Returns residual histogram with "iParameter" parameter for decay with "iDecay" number. */
  68. const TH1F* GetDecayResidual(const int iDecay, const int iParameter) const { return hFitQA[iDecay][iParameter]; }
  69. /** Returns pull histogram with "iParameter" parameter for decay with "iDecay" number. */
  70. const TH1F* GetDecayPull(const int iDecay, const int iParameter) const { return hFitQA[iDecay][iParameter+nFitQA/2]; }
  71. // efficiencies
  72. KFPartEfficiencies fParteff; ///< Object with reconstruction efficiency of short-lived particles.
  73. KFPVEfficiencies fPVeff; ///< Object with reconstruction efficiency of primary vertices defined by the reconstructed tracks.
  74. KFPVEfficiencies fPVeffMCReconstructable; ///< Object with reconstruction efficiency of primary vertices defined by the Monte Carlo tracks.
  75. protected:
  76. TString outfileName; ///< Name of the output file, where histograms will be stored.
  77. TDirectory* histodir; ///< Pointer to the ROOT directory, where histograms are created.
  78. int fNEvents; ///< Number of processed events.
  79. bool fStoreMCHistograms; ///< Flag showing if histograms requiring Monte Carlo information should be created and collected. "True" by default.
  80. bool fStorePrimSecHistograms; ///< Flag showing if histograms for primary and secondary candidates should be created and collected. "True" by default.
  81. bool fStoreZRHistograms; ///< Flag showing if Z-R histograms should be created and collected. "True" by default.
  82. //histos
  83. static const int nFitQA = 16; ///< Number of fit QA histograms: residuals and pulls in X, Y, Z, Px, Py, Pz, E, M.
  84. TH1F *hFitDaughtersQA[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of daughter particles at production point.
  85. TH1F *hFitQA[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of the reconstructed particle: X, Y, Z at decay point, P, E, M - at production point
  86. TH1F *hFitQANoConstraint[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of the particle with no constraints set.
  87. TH1F *hFitQAMassConstraint[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of the particle with the mass constraint.
  88. TH1F *hFitQATopoConstraint[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of the particle with the production point constraint.
  89. TH1F *hFitQATopoMassConstraint[KFPartEfficiencies::nParticles][nFitQA]; ///< Residuals and pulls of the particle with the mass and production point constraints.
  90. static const int nDSToParticleQA = 7; ///< Number of histograms to evaluate GetDStoParticle function: residuals and pulls in X, Y, Z; distance between DCA points.
  91. TH1F *hDSToParticleQA[KFPartEfficiencies::nParticles][nDSToParticleQA]; ///< Histograms to evaluate KFParticleSIMD::GetDStoParticle() function
  92. /** \brief Number of histograms with parameter distributions: mass, p, pt, rapidity, decay length, c*tau,
  93. ** chi/ndf, prob, theta, phi, X, Y, Z, R, L, L/dL, Mt, multiplicity. **/
  94. static const int nHistoPartParam = 18;
  95. /** Number of sets of histograms with parameter distributions: 0 - all candidates, 1 - reconstructed signal, 2 - physics background from other decays, 3 - combinatorial
  96. ** background (ghost), 4 - reconstructed signal for side bands method, 5- reconstructed background for side bands method, 6 - MC signal. **/
  97. static const int nParametersSet = 7;
  98. TH1F *hPartParam[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of all candidates.
  99. TH1F *hPartParamPrimary[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of primary candidates.
  100. TH1F *hPartParamPrimaryMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of primary candidates with mass constraint.
  101. TH1F *hPartParamPrimaryTopo[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of primary candidates with vertex constraint.
  102. TH1F *hPartParamPrimaryTopoMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of primary candidates with mass and vertex constraint.
  103. TH1F *hPartParamSecondary[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of secondary candidates.
  104. TH1F *hPartParamSecondaryMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam]; ///< Parameters of secondary candidates with mass constraint.
  105. static const int nHistoPartParam2D = 4; ///< Number of 2D histograms: 0 - y-pt, 1 - z-r, 2 - armenteros, 3- y-mt.
  106. TH2F *hPartParam2D[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D histograms for all candidates.
  107. TH2F *hPartParam2DPrimary[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D for primary candidates.
  108. TH2F *hPartParam2DPrimaryMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D for primary candidates with mass constraint.
  109. TH2F *hPartParam2DPrimaryTopo[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D for primary candidates with vertex constraint.
  110. TH2F *hPartParam2DPrimaryTopoMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D with mass and vertex constraints.
  111. TH2F *hPartParam2DSecondary[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D for secondary candidates.
  112. TH2F *hPartParam2DSecondaryMass[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D]; ///< 2D for secondary candidates with mass constraint.
  113. static const int nHistoPartParam3D = 6; ///< Number of 3D histograms: y-pt-M, y-mt-M, b-pt-M, b-y-M, b-mt-M, ct-pt-M
  114. TH3F *hPartParam3D[1][KFPartEfficiencies::nParticles][nHistoPartParam3D]; ///< 3D histograms.
  115. static const int nPartEfficiency = 9; ///< Number of efficiency plots for each decay: vs p, pt, y, z, c*tau, decay length, l, r, Mt.
  116. TProfile* hPartEfficiency[KFPartEfficiencies::nParticles][3][nPartEfficiency]; ///< Efficiency plots.
  117. static const int nPartEfficiency2D = 2; ///< Number of 2D efficiency plots for each decay: y-pt, y-mt.
  118. TProfile2D* hPartEfficiency2D[KFPartEfficiencies::nParticles][3][nPartEfficiency2D]; ///< 2D efficiency plots.
  119. static const int nHistosPV = 7; ///< Number of QA histograms for primary vertices: residuals, pulls, number of lost tracks.
  120. TH1F *hPVFitQa[2][nHistosPV]; ///< Fit QA of primary vertices, 1D histograms.
  121. TH2F *hPVFitQa2D[2][2][nHistosPV-1]; ///< Fit QA of primary vertices, 2D histograms.
  122. /** Number of histograms with parameter distributions: x, y, z, r, Ntracks, Chi2, NDF, Chi2/NDF, prob, purity, part of ghost tracks,
  123. ** part of tracks from the current vertex, number of tracks from merged vertices, number of background tracks from decays, distance in Z between clones. **/
  124. static const int nHistosPVParam = 15; ///<
  125. TH1F *hPVParam[nHistosPVParam]; ///< Histograms for all vertex candidates.
  126. TH1F *hPVParamGhost[nHistosPVParam]; ///< Histograms for ghost (combinatorial background) vertex candidates.
  127. TH1F *hPVParamSignal[nHistosPVParam]; ///< Histograms for signal vertex candidates.
  128. TH1F *hPVParamPileup[nHistosPVParam]; ///< Histograms for pileup vertex candidates.
  129. TH1F *hPVParamBG[nHistosPVParam]; ///< Histograms for physics background (decays, secondary vertices) vertex candidates.
  130. static const int nHistosPVParam2D = 1; ///< Number of 2D histograms for primary vertex.
  131. TH2F *hPVParam2D[nHistosPVParam2D]; ///< x-y histogram.
  132. static const int nFitPVTracksQA = 12; ///< Number of fit QA histograms for primary tracks: residuals and pulls in X, Y, Z, Px, Py, Pz.
  133. TH1F *hFitPVTracksQA[nFitPVTracksQA]; ///< Residuals and pulls of primary tracks at the primary vertex position.
  134. static const int nHistosTP = KFPartEfficiencies::nParticles + 8; ///< Number of histograms with chi2 primary distributions for daughter tracks.
  135. /** Histograms with chi2 primary distributions for daughter tracks of each decays plus 4 distributions of chi2 and 4 prob for primary, secondary,
  136. ** ghost and all particles. **/
  137. TH1F *hTrackParameters[nHistosTP];
  138. static const int nPVefficiency = 6; ///< Number of Efficiency plots for primary vertices for each category.
  139. TProfile* hPVefficiency[4][nPVefficiency]; ///< Efficiency plots for primary vertices.
  140. TDirectory *fHistoDir; ///< ROOT directory with histograms.
  141. bool IsCollectZRHistogram(int iParticle) const;
  142. bool IsCollect3DHistogram(int iParticle) const;
  143. bool IsCollectArmenteros(int iParticle) const;
  144. private:
  145. const KFParticlePerformanceBase& operator = (const KFParticlePerformanceBase&); ///< Copying of objects of this class is forbidden.
  146. KFParticlePerformanceBase(const KFParticlePerformanceBase&); ///< Copying of objects of this class is forbidden.
  147. void CreateFitHistograms(TH1F* histo[nFitQA], int iPart);
  148. void CreateEfficiencyHistograms(TProfile* histo[3][nPartEfficiency], TProfile2D* histo2[3][nPartEfficiency2D]);
  149. void CreateParameterHistograms(TH1F* histoParameters[KFPartEfficiencies::nParticles][nHistoPartParam],
  150. TH2F *histoParameters2D[KFPartEfficiencies::nParticles][nHistoPartParam2D],
  151. TH3F *histoParameters3D[KFPartEfficiencies::nParticles][nHistoPartParam3D],
  152. int iPart, bool drawZR = 0);
  153. void CreateParameterSubfolder(TString folderName,
  154. TH1F* histoParameters[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam],
  155. TH2F* histoParameters2D[nParametersSet][KFPartEfficiencies::nParticles][nHistoPartParam2D],
  156. TH1F* histoFit[KFPartEfficiencies::nParticles][nFitQA], int iPart, bool withWrongPVHypothesis = 0);
  157. TString GetDirectoryPath();
  158. };
  159. #endif
  160. #endif //DO_TPCCATRACKER_EFF_PERFORMANCE