Skip to content
Snippets Groups Projects
Commit 9b2fea3b authored by Pierre-Alain Loizeau's avatar Pierre-Alain Loizeau Committed by Pierre-Alain Loizeau
Browse files

First version of BMON Q-Factors monitor

parent 591d99fa
No related branches found
No related tags found
1 merge request!2047BMon monitoring for mCBM 2025
......@@ -505,7 +505,7 @@ void CbmTofUnpackAlgo::ProcessHit(const critof001::Message& mess)
<< " at epoch " << fulEpochIndexInTs;
if (fMonitor && 0x90 == fuCurrentMsSysId && 0 == uChannel) { //
fMonitor->FillHitBmonMicroSpillHistos(dHitTime);
fMonitor->FillHitBmonMicroSpillHistos(fdCurrentMsTime, dHitTime);
}
/// Create output object and store it
......
This diff is collapsed.
......@@ -5,12 +5,14 @@
#ifndef CbmTofUnpackMonitor_H
#define CbmTofUnpackMonitor_H
#include "CbmBmonDigi.h"
#include "CbmMcbm2018TofPar.h"
#include "Rtypes.h"
#include "TH1.h"
#include "TH2.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include <Rtypes.h>
#include <TH1.h>
#include <TH2.h>
#include <TProfile.h>
#include <TProfile2D.h>
#include <array>
#include <cstdint>
......@@ -39,6 +41,10 @@ class CbmTofUnpackMonitor {
Bool_t ResetHistogramsMicroSpills(Bool_t bResetTime);
void DrawCanvasesMicroSpills();
Bool_t CreateHistogramsQFactors(Bool_t bBmon = kTRUE);
Bool_t ResetHistogramsQFactors(Bool_t bResetTime);
void DrawCanvasesQFactors(Bool_t bBmon = kTRUE);
Bool_t CreateMsComponentSizeHistos(UInt_t component);
Bool_t ResetMsComponentSizeHistos(UInt_t component);
......@@ -110,10 +116,15 @@ class CbmTofUnpackMonitor {
bool GetBmonMode() { return fBmonMode; }
/// Fill BMon Microspill histograms
void FillHitBmonMicroSpillHistos(const double_t& dTime);
void FillHitBmonMicroSpillHistos(const double_t& dMsTime, const double_t& dTime);
/// Finalize BMon Microspill histograms
void FinalizeTsBmonMicroSpillHistos();
/// Fill Microspill histograms
void FillHitBmonQfactorHistos(const double_t& dMsTime, const double_t& dTime);
/// Finalize Microspill histograms
void FinalizeTsBmonQfactorHistos(uint64_t uTsTimeNs, std::vector<CbmBmonDigi>* vDigis);
/** @brief Activate the BMon mode */
void SetBmonMicroSpillMode(bool value) { fBmonMicroSpillMode = value; }
......@@ -126,6 +137,25 @@ class CbmTofUnpackMonitor {
/** @brief Read the BMon mode */
bool GetBmonScvdMode() { return fBmonScvdMode; }
/** @brief Activate the Bmon QFactor mode */
void SetBmonQFactorMode(bool value)
{
fBmonQfactorsMode = value;
if (fBmonQfactorsMode) {
fBmonMicroSpillMode = false;
fBmonScvdMode = false;
}
}
/** @brief Read the Bmon QFactor mode */
bool GetBmonQFactorMode() { return fBmonQfactorsMode; }
/** @brief Activate the Tof QFactor mode */
void SetTofQFactorMode(bool value) { fTofQfactorsMode = value; }
/** @brief Read the Tof QFactor mode */
bool GetTofQFactorMode() { return fTofQfactorsMode; }
/** @brief Activate/de-activate the internal histo serve mode */
void SetInternalHttpMode(bool value) { fbInternalHttp = value; }
......@@ -163,6 +193,8 @@ class CbmTofUnpackMonitor {
bool fBmonMode = false;
bool fBmonScvdMode = false;
bool fBmonMicroSpillMode = false;
bool fBmonQfactorsMode = false;
bool fTofQfactorsMode = false;
bool fbInternalHttp = true;
/// ---> Constants
......@@ -292,6 +324,30 @@ class CbmTofUnpackMonitor {
TH2* fhBmonMicrospillsTsBinFractHits = nullptr;
TH2* fhBmonMicrospillsTsBinFractErrs = nullptr;
/// BMon Q-Factors monitoring histograms
/// Hint: keep fractions of TS size and under 100 us
double_t fdTsSizeNs = fdBmonMicrospillsTsLengthSec * 1e9;
uint32_t fuQFactorMaxNbTs = 400;
std::vector<double_t> fvdQfactorBinSizesNs = {20, 200, 1.28e3, 10.24e3, 25.6e3, 102.4e3, 204.8e3}; // 7 values
/// Hint: keep fractions of TS size + multiples of bin size and above 10 us
std::vector<double_t> fvdQfactorIntegrationNs = {2.56e6}; // 1 value
std::vector<uint32_t> fvuNbHistoCyclesPerTS = {};
std::vector<uint32_t> fvuQfactorIdxHistoCycleinTS = {};
/// Dimension: same as BinSizes vector!!
std::vector<double_t> fvdQfactorHistMax = {2000., 400., 40., 20., 20., 20., 20.};
uint16_t fuQfactorNbPlots = 0;
std::vector<std::vector<uint32_t>> fvuQfactorNbBinsHisto;
std::vector<uint32_t> fvuQfactorNbHistoCyclesPerTS;
std::vector<std::vector<TH1*>> fvhBmonQfactHisto;
std::vector<std::vector<TH1*>> fvhBmonQfactQval;
std::vector<std::vector<TH1*>> fvhBmonQfactMean;
std::vector<TH1*> fvhBmonQfactBinCountDistribution;
std::vector<TH2*> fvhBmonQfactBinCountDistributionEvo;
/// Q-Factor helper methods
double_t ExtractQFactor(TH1* pHistoIn);
double_t ExtractMean(TH1* pHistoIn);
/// Canvases
/// ---> Generic
TCanvas* fcSummaryGet4s = nullptr;
......@@ -308,6 +364,10 @@ class CbmTofUnpackMonitor {
TCanvas* fcBmonMicrospillsBinCnts = nullptr;
TCanvas* fcBmonMicrospillsRatios = nullptr;
TCanvas* fcBmonMicrospillsFraction = nullptr;
/// ---> BMon Q-Factors monitoring
TCanvas* fcBmonQFactorVal = nullptr;
TCanvas* fcBmonQFactorMean = nullptr;
TCanvas* fcBmonQFactorBinCntDist = nullptr;
/// Spill detection
Bool_t fbSpillOn = kTRUE;
......
......@@ -622,6 +622,7 @@ void CbmRecoUnpack::Unpack(unique_ptr<Timeslice> ts)
if (fBmonConfig && fBmonConfig->GetMonitor()) { //
fBmonConfig->GetMonitor()->FinalizeTsBmonMicroSpillHistos();
fBmonConfig->GetMonitor()->FinalizeTsBmonQfactorHistos(ts->start_time(), fBmonConfig->GetOutputVec());
}
if (fDoPerfProfPerTs) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment