From f1d209ec4468007f8450e42db0fe4be2447c9377 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Wed, 12 Jun 2024 04:15:52 +0200
Subject: [PATCH] Online STS Digi QA: profile digi with missed event flag vs.
 number of channels and address

---
 algo/qa/unpack/StsDigiQa.cxx | 29 ++++++++++++++++++++++-------
 algo/qa/unpack/StsDigiQa.h   |  4 +++-
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/algo/qa/unpack/StsDigiQa.cxx b/algo/qa/unpack/StsDigiQa.cxx
index cb07284244..3f9a181c84 100644
--- a/algo/qa/unpack/StsDigiQa.cxx
+++ b/algo/qa/unpack/StsDigiQa.cxx
@@ -25,6 +25,7 @@ void DigiQa::Init()
   using cbm::algo::qa::H1D;
   using cbm::algo::qa::H2D;
   using cbm::algo::qa::PadConfig;
+  using cbm::algo::qa::Prof1D;
 
   if (!fpSender.get()) {
     return;
@@ -53,6 +54,7 @@ void DigiQa::Init()
     fvphAddressChannelCharge.resize(nModules);
     if (fbAux) {
       fvphAddressChannelElink.resize(nModules);
+      fvppAddressChannelMissedEvt.resize(nModules);
     }
     for (int iM = 0; iM < nModules; ++iM) {
       int32_t address       = fpReadoutSetup->modules.at(iM).address;
@@ -61,7 +63,7 @@ void DigiQa::Init()
       auto aTitl            = GetAddressTitle(address);
       auto cName            = format("sts_digi/sts_digi_vs_channel_charge_{}", aName);
       auto cTitl            = format("STS digis per channel and charge for module {}", aTitl);
-      auto canv  = CanvasConfig(cName, cTitl, 3, 1);
+      auto canv             = CanvasConfig(cName, cTitl, 3, fbAux ? 2 : 1);
       {
         auto pad               = PadConfig();
         auto name              = format("sts_digi_{}_channel", aName);
@@ -87,12 +89,23 @@ void DigiQa::Init()
         canv.AddPadConfig(pad);
       }
       if (fbAux) {
-        auto pad                    = PadConfig();
-        auto name                   = format("sts_digi_{}_channel_elink", aName);
-        auto titl                   = format("STS digi charge for module {};E-link;channel", aTitl);
-        fvphAddressChannelElink[iM] = fQaData.MakeObj<H2D>(name, titl, 40, -0.5, 39.5, 2048, -0.5, 2047.5);
-        pad.RegisterHistogram(fvphAddressChannelElink[iM], "colz");
-        canv.AddPadConfig(pad);
+        {
+          auto pad                    = PadConfig();
+          auto name                   = format("sts_digi_{}_channel_elink", aName);
+          auto titl                   = format("STS digi charge for module {};E-link;channel", aTitl);
+          fvphAddressChannelElink[iM] = fQaData.MakeObj<H2D>(name, titl, 40, -0.5, 39.5, 2048, -0.5, 2047.5);
+          pad.RegisterHistogram(fvphAddressChannelElink[iM], "colz");
+          canv.AddPadConfig(pad);
+        }
+        {
+          auto pad  = PadConfig();
+          auto name = format("sts_digi_{}_channel_missed_evt", aName);
+          auto titl =
+            format("STS digi missed event ratio for module {};channel; N_{{w/ missed events}} / N_{{tot.}}", aTitl);
+          fvppAddressChannelMissedEvt[iM] = fQaData.MakeObj<Prof1D>(name, titl, 2048, -0.5, 2047.5, 0., 1.);
+          pad.RegisterHistogram(fvppAddressChannelMissedEvt[iM], "");
+          canv.AddPadConfig(pad);
+        }
       }
 
       fQaData.AddCanvasConfig(canv);
@@ -142,6 +155,8 @@ void DigiQa::Exec()
         }
         int iM = itHistID->second;
         fvphAddressChannelElink[iM]->Fill(static_cast<double>(auxDigi.elink), static_cast<double>(auxDigi.channel));
+        fvppAddressChannelMissedEvt[iM]->Fill(static_cast<double>(auxDigi.channel),
+                                              static_cast<double>(auxDigi.missedEvent));
       }
     }
   }
diff --git a/algo/qa/unpack/StsDigiQa.h b/algo/qa/unpack/StsDigiQa.h
index 0a89c649af..9b3787b6de 100644
--- a/algo/qa/unpack/StsDigiQa.h
+++ b/algo/qa/unpack/StsDigiQa.h
@@ -56,7 +56,9 @@ namespace cbm::algo::sts
     std::vector<qa::H1D*> fvphAddressChannel;        ///< hist: digi channel in different sensors
     std::vector<qa::H1D*> fvphAddressCharge;         ///< hist: digi charge in different sensors
     std::vector<qa::H2D*> fvphAddressChannelCharge;  ///< hist: digi channel vs. charge in different sensors
-    std::vector<qa::H2D*> fvphAddressChannelElink;   ///< hist: digi channel vs. eling (AUX)
+    std::vector<qa::H2D*> fvphAddressChannelElink;   ///< hist: digi channel (vs. eling (AUX)
+
+    std::vector<qa::Prof1D*> fvppAddressChannelMissedEvt;  ///< prof: missed event ratio vs. channel (AUX)
 
     qa::H2D* fvphFebAsic = nullptr;  ///< hist: digi FEB vs ASIC
   };
-- 
GitLab