MpdTofMatchingQA.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //------------------------------------------------------------------------------------------------------------------------
  2. #ifndef __MPD_TOF_MATCHING_QA_H
  3. #define __MPD_TOF_MATCHING_QA_H 1
  4. #include <TList.h>
  5. #include <TString.h>
  6. #include <TVector3.h>
  7. #include <TEfficiency.h>
  8. #include <TH1D.h>
  9. #include <TH2D.h>
  10. #include <TMath.h>
  11. #include <iostream>
  12. #include <set>
  13. #include <vector>
  14. #include "MpdTofMatching.h"
  15. #include "MpdTofMatchingData.h"
  16. //------------------------------------------------------------------------------------------------------------------------
  17. class Lsets
  18. {
  19. typedef std::set<size_t> Ts;
  20. std::vector<Ts> fData; //!
  21. public:
  22. Lsets(size_t n) { fData.resize(n);}
  23. void Insert(size_t index, size_t value);
  24. void Reset();
  25. void Print(const char* comment = nullptr, std::ostream& os = std::cout) const;
  26. };
  27. //------------------------------------------------------------------------------------------------------------------------
  28. class TClonesArray;
  29. class MpdTofMatchingQA
  30. {
  31. // QA test histos
  32. TList fList;
  33. TH2D *htKFTrack, *htKFTrackPoint, *htTrueMatch, *htMisMatch, *hNMcKfTracks;
  34. TH2D *hDeltaHitTrue, *hDeltaHitMis, *hDeltaPoint, *hDeltaPoint_Dev, *hDeltaPoint_dR, *hDeltaPoint_dZ, *hDeltaPoint_dPhi;
  35. TH2D *hPvsPt, *hPvsNp, *hPtvsNp, *hPvsP, *hPtvsPt;
  36. TH1D *hWeightF, *hWeightT, *hNormWeightF, *hNormWeightT;
  37. TH2D *hPointInsideDetector, *hSmeared_dPhi, *hSmeared_dZ, *hSmeared_dZPhi, *h1, *h2, *h3;
  38. TEfficiency *pEff1P, *pEff1Eta, *pEff1EtaP; // Efficiency = N true matchings / N tpc kf tracks having TOF hit (algorithm efficiency)
  39. TEfficiency *pCont1P, *pCont1Eta, *pCont1EtaP; // Contamination = N wrong matchings / ( N true matchings + n wrong matchings)(algorithm contamination)
  40. TEfficiency *pEff2P, *pEff2Eta, *pEff2EtaP; // Efficiency = N true / N tpc kf tracks (ALICE TDR TOF 2000)
  41. TEfficiency *pCont2P, *pCont2Eta, *pCont2EtaP; // Contamination = N wrong / N single matching to fired strip (ALICE TDR TOF 2000)
  42. TEfficiency *pEffEtaPIdeal, *pContEtaPIdeal; // ideal matching by MC data
  43. TEfficiency *pEffKalman, *pEffMatch, *pEffKalmanP, *pEffMatchP, *pEffKalmanPi, *pEffMatchPi, *pEffKalmanK, *pEffMatchK;
  44. TString fFlnm;
  45. bool fIsEndcap;
  46. const char* mangling(const char* name){ static TString nm; nm = fIsEndcap ? "LsETOF_" : "LsTOF_"; nm += name; return nm.Data();}
  47. void Add(TH1 *hist){ hist->SetDirectory(nullptr); fList.Add(hist);}
  48. void Add(TEfficiency *hist){ hist->SetDirectory(nullptr); fList.Add(hist);}
  49. public :
  50. MpdTofMatchingQA(const char *flnm, bool isEndcap);
  51. void Finish();
  52. // Fill deviation of estimated point and hit position.
  53. void FillHitDeviation(const MpdTofMatchingData&);
  54. // Fill deviation of estimated point and mc point position.
  55. void FillMcPointDeviation(const TVector3& mcPosition, const TVector3& estPointOnPlate, const TVector3& MCmom, const TVector3& Momentum, int NofTrHits);
  56. void FillMatchingEfficiency(const TmPt& tids, const TClonesArray* aTofMatching, const TClonesArray* aTofHits, const TClonesArray* aMCTracks);
  57. void FillWeightTest(double weight, size_t mult, const TVector3&, const TVector3&, const TVector3&, double angle, const TVector3&);
  58. void FillParameter(bool istrue, double weight, double normWeight);
  59. void FillIdealMatching(const TmPt& mPt, const TmmT2H& mmT2H, const TClonesArray* aMCTracks);
  60. void FillSmearedPoints(const TVector3& estPosition, const TVector3 *smearedPosition, const TVector3 *smearedMomentum);
  61. void FillNtracks(const TClonesArray *aTracks, size_t NkfTracks);
  62. void FillTrackEfficiency(bool kalman, bool matched, int pdgcode, const TVector3& momentum);
  63. inline void FillKfTracks(bool hadPoint, Double_t eta, Double_t Momentum){ htKFTrack->Fill(eta, Momentum); if(hadPoint)htKFTrackPoint->Fill(eta, Momentum);}
  64. inline void FillPointInsideDetector(const TVector3& position){ hPointInsideDetector->Fill(position.Z(), position.Phi() * TMath::RadToDeg());}
  65. // Lsets tidsTofTouch = 4;
  66. };
  67. //------------------------------------------------------------------------------------------------------------------------
  68. #endif