From 944e9686ce8adf6930afa95692447e15f40d1bf6 Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Tue, 10 Sep 2024 21:05:56 +0200
Subject: [PATCH] Ca: more qa plots for clone tracks

---
 reco/L1/qa/CbmCaTrackTypeQa.cxx | 52 ++++++++++++++++++++++++++++++++-
 reco/L1/qa/CbmCaTrackTypeQa.h   | 17 ++++++++++-
 2 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx
index 5bb106d8ba..8d152adb88 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.cxx
+++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx
@@ -148,6 +148,20 @@ void TrackTypeQa::Init()
     fph_eff_txMC    = MakeQaObject<TProfile>("eff_txMC", "", kBinsTX, kLoTX, kUpTX, 0., 1.);
     fph_eff_tyMC    = MakeQaObject<TProfile>("eff_tyMC", "", kBinsTY, kLoTY, kUpTX, 0., 1.);
 
+    // clones
+
+    fph_clone_pMC     = MakeQaObject<TProfile>("clone_pMC", "", kBinsP, kLoP, kUpP, 0., 1.);
+    fph_clone_yMC     = MakeQaObject<TProfile>("clone_yMC", "", kBinsY, kLoY, kUpY, 0., 1.);
+    fph_clone_ptMC    = MakeQaObject<TProfile>("clone_ptMC", "", kBinsPT, kLoPT, kUpPT, 0., 1.);
+    fph_clone_thetaMC = MakeQaObject<TProfile>("clone_thetaMC", "", kBinsTHETA, kLoTHETA, kUpTHETA, 0., 1.);
+    fph_clone_etaMC   = MakeQaObject<TProfile>("clone_etaMC", "", kBinsTHETA, kLoTHETA, kUpTHETA, 0., 1.);
+    fph_clone_phiMC   = MakeQaObject<TProfile>("clone_phiMC", "", kBinsPHI, kLoPHI, kUpPHI, 0., 1.);
+    fph_clone_nhitsMC = MakeQaObject<TProfile>("clone_nhitsMC", "", kBinsNSTA, kLoNSTA, kUpNSTA, 0., 1.);
+    fph_clone_txMC    = MakeQaObject<TProfile>("clone_txMC", "", kBinsTX, kLoTX, kUpTX, 0., 1.);
+    fph_clone_tyMC    = MakeQaObject<TProfile>("clone_tyMC", "", kBinsTY, kLoTY, kUpTX, 0., 1.);
+
+    //
+
     fph_rate_reco   = MakeQaObject<TProfile>("rate_reco", "", 1, -0.5, 0.5, 0., 1.);
     fph_rate_killed = MakeQaObject<TProfile>("rate_killed", "", 1, -0.5, 0.5, 0., 1.);
     fph_rate_clones = MakeQaObject<TProfile>("rate_clones", "", 1, -0.5, 0.5, 0., 1.);
@@ -177,9 +191,31 @@ void TrackTypeQa::Init()
       MakeQaObject<TProfile2D>("eff_theta_phi", "", kBinsPHI, kLoPHI, kUpPHI, kBinsTHETA, kLoTHETA, kUpTHETA, 0., 1.);
 
     fph_eff_ptMC_yMC->SetTitle(
-      "Efficiency vs. MC transverse momentum and MC rapidity;y^{MC};#epsilon_{CA};p_{T}^{MC} [GeV/c]");
+      "Efficiency vs. MC transverse momentum and MC rapidity;y^{MC};p_{T}^{MC} [GeV/c];#epsilon_{CA}");
     fph_eff_thetaMC_phiMC->SetTitle(
       "Efficiency vs. MC polar and MC azimuthal angles;#phi^{MC} [rad];#theta^{MC} [rad];#epsilon_{CA}");
+
+    fph_clone_pMC->SetTitle("Clone rate vs. MC total momentum;p_{MC} [GeV/c];clone rate_{CA}");
+    fph_clone_yMC->SetTitle("Clone vs. MC rapidity;y_{MC};clone rate_{CA}");
+    fph_clone_ptMC->SetTitle("Clone vs. MC transverse momentum;p_{T}^{MC} [GeV/c];clone rate_{CA}");
+    fph_clone_thetaMC->SetTitle("Clone vs. MC polar angle;#theta^{MC};clone rate_{CA}");
+    fph_clone_etaMC->SetTitle("Clone vs. MC pseudorapidity;#eta^{MC};clone rate_{CA}");
+    fph_clone_phiMC->SetTitle("Clone vs. MC azimuthal angle;#phi^{MC};clone rate_{CA}");
+    fph_clone_nhitsMC->SetTitle("Clone vs. number of hits;N_{hit}^{MC};clone rate_{CA}");
+    fph_clone_txMC->SetTitle("Clone vs. MC slope along x-axis;t_{x}^{MC};clone rate_{CA}");
+    fph_clone_tyMC->SetTitle("Clone vs. MC slope along y-axis;t_{y}^{MC};clone rate_{CA}");
+
+    fph_clone_ptMC_yMC =
+      MakeQaObject<TProfile2D>("clone_ptMC_yMC", "", kBinsY, kLoY, kUpY, kBinsPT, kLoPT, kUpPT, 0., 1.);
+    fph_clone_thetaMC_phiMC =
+      MakeQaObject<TProfile2D>("clone_theta_phi", "", kBinsPHI, kLoPHI, kUpPHI, kBinsTHETA, kLoTHETA, kUpTHETA, 0., 1.);
+
+    fph_clone_ptMC_yMC->SetTitle(
+      "Clone vs. MC transverse momentum and MC rapidity;y^{MC};p_{T}^{MC} [GeV/c];clone rate_{CA}");
+    fph_clone_thetaMC_phiMC->SetTitle(
+      "Clone vs. MC polar and MC azimuthal angles;#phi^{MC} [rad];#theta^{MC} [rad];clone rate_{CA}");
+
+
     //
     // ** Track fit parameter properties (residuals and pulls) **
     //
@@ -374,6 +410,20 @@ void TrackTypeQa::FillMCTrack(int iTrkMC, double weight)
 
   fph_eff_ptMC_yMC->Fill(mcTrack.GetRapidity(), mcTrack.GetPt(), bReco);
   fph_eff_thetaMC_phiMC->Fill(mcTrack.GetPhi(), mcTrack.GetTheta(), bReco);
+
+  if (bReco) {  // clone rate is normalised to the number of reconstructed tracks
+    fph_clone_pMC->Fill(mcTrack.GetP(), nClones);
+    fph_clone_etaMC->Fill(mcTrack.GetEta(), nClones);
+    fph_clone_yMC->Fill(mcTrack.GetRapidity(), nClones);
+    fph_clone_ptMC->Fill(mcTrack.GetPt(), nClones);
+    fph_clone_thetaMC->Fill(mcTrack.GetTheta(), nClones);
+    fph_clone_phiMC->Fill(mcTrack.GetPhi(), nClones);
+    fph_clone_nhitsMC->Fill(mcTrack.GetTotNofStationsWithHit(), nClones);
+    fph_clone_txMC->Fill(mcTrack.GetTx(), nClones);
+    fph_clone_tyMC->Fill(mcTrack.GetTy(), nClones);
+    fph_clone_ptMC_yMC->Fill(mcTrack.GetRapidity(), mcTrack.GetPt(), nClones);
+    fph_clone_thetaMC_phiMC->Fill(mcTrack.GetPhi(), mcTrack.GetTheta(), nClones);
+  }
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.h b/reco/L1/qa/CbmCaTrackTypeQa.h
index 393bbcae55..0c6945e3e5 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.h
+++ b/reco/L1/qa/CbmCaTrackTypeQa.h
@@ -253,11 +253,26 @@ namespace cbm::ca
     TProfile* fph_eff_txMC    = nullptr;  ///< Efficiency vs. MC slope along x-axis
     TProfile* fph_eff_tyMC    = nullptr;  ///< Efficiency vs. MC slope along y-axis
 
-
     TProfile2D* fph_eff_thetaMC_phiMC = nullptr;  ///< Efficiency vs. MC theta and MC phi
     TProfile2D* fph_eff_ptMC_yMC      = nullptr;  ///< Efficiency vs. MC transverse momentum and MC rapidity
     TProfile2D* fph_eff_tyMC_txMC     = nullptr;  ///< Efficiency vs. MC slopes
 
+    // ** Clone rate **
+
+    TProfile* fph_clone_pMC     = nullptr;  ///< Clone rate vs. MC momentum
+    TProfile* fph_clone_yMC     = nullptr;  ///< Efficiency vs. MC rapidity
+    TProfile* fph_clone_ptMC    = nullptr;  ///< Efficiency vs. MC transverse momentum
+    TProfile* fph_clone_thetaMC = nullptr;  ///< Efficiency vs. MC polar angle
+    TProfile* fph_clone_etaMC   = nullptr;  ///< Efficiency vs. MC pseudorapidity
+    TProfile* fph_clone_phiMC   = nullptr;  ///< Efficiency vs. MC azimuthal angle
+    TProfile* fph_clone_nhitsMC = nullptr;  ///< Efficiency vs. MC number of hits (total number of stations with a)
+    TProfile* fph_clone_txMC    = nullptr;  ///< Efficiency vs. MC slope along x-axis
+    TProfile* fph_clone_tyMC    = nullptr;  ///< Efficiency vs. MC slope along y-axis
+
+    TProfile2D* fph_clone_thetaMC_phiMC = nullptr;  ///< Efficiency vs. MC theta and MC phi
+    TProfile2D* fph_clone_ptMC_yMC      = nullptr;  ///< Efficiency vs. MC transverse momentum and MC rapidity
+    TProfile2D* fph_clone_tyMC_txMC     = nullptr;  ///< Efficiency vs. MC slopes
+
     // ** Fit QA **
     std::unique_ptr<TrackFitQa> fpFitQaFirstMCpoint = nullptr;
     std::unique_ptr<TrackFitQa> fpFitQaFirstHit     = nullptr;
-- 
GitLab