6#include "BmnRawDataDecoder.h"
7#include "BmnTrigWaveDigit.h"
9using namespace std::chrono;
11using namespace prometheus;
48 fName = title +
"_cl";
115 exposer = make_unique<Exposer>(
"127.0.0.1:9092");
128 auto& gf = BuildGauge().Name(
"Spill_events").Help(
"Number of digits in each detectors").Register(*
registry);
131 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"sum_nbc1"}});
135 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"gem2nbc1"}});
139 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"fsd2gem"}});
143 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"tof4002gem"}});
147 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"tof7002gem"}});
151 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"csc2gem"}});
155 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"fhcal2gem"}});
159 Gauge& worker_gauge =
gauge_family->Add({{
"Stage",
"Digi"}, {
"Level",
"Spill"}, {
"Var",
"time_point"}});
196 fServer->SetItemField(path,
"_monitoring",
"2000");
197 fServer->SetItemField(path,
"_layout",
"grid3x3");
199 TString cmdTitle = path +
"Reset";
201 fServer->Restrict(cmdTitle.
Data(),
"visible=shift");
204 cmd =
"/" +
fName +
"/->SetRefRun(%arg1%)";
205 cmdTitle = path +
"SetRefRun";
262 const uint32_t timewin_begin = 312;
263 const uint32_t timewin_end = 362;
269 printf(
"Spill start n ev %lu\n",
nevents);
298 if (tof700Digits ==
nullptr)
299 tof700Digits = fDigiArrays->
tof700;
303 vector<TClonesArray*>* trigDigits = fDigiArrays->
trigAr;
372 if (gemDigits && siliconDigits)
374 if (gemDigits && tof400Digits)
376 if (gemDigits && tof700Digits)
378 if (gemDigits && cscDigits)
380 if (gemDigits && fhcalDigits)
382 if (cscDigits && fhcalDigits)
488 TString FileName =
Form(
"bmn_run%04d_hist.root",
id);
489 printf(
"SetRefRun: %s\n", FileName.
Data());
514 printf(
"ResetStat\n");
549 histGemStat->GetXaxis()->SetTitle(
"Count in event");
550 histGemStat->GetYaxis()->SetTitle(
"Activations count");
551 name =
fTitle +
"_SILICON";
555 name =
fTitle +
"_ToF400";
559 name =
fTitle +
"_ToF700";
565 histCscStat->GetXaxis()->SetTitle(
"Count in event");
566 histCscStat->GetYaxis()->SetTitle(
"Activations count");
577 for (
Int_t iPad = 0; iPad < 6; iPad++) {
598 name =
fTitle +
"_FD_GEM";
601 histFDGemStat->GetYaxis()->SetTitle(
"Number of digits in event");
603 name =
fTitle +
"_FD_Silicon";
608 name =
fTitle +
"_FD_Tof400";
613 name =
fTitle +
"_FD_Tof700";
618 name =
fTitle +
"_FD_CSC";
621 histFDCscStat->GetYaxis()->SetTitle(
"Number of digits in event");
623 name =
fTitle +
"_FD_FHCAL";
628 name =
fTitle +
"FD_DetCanvas";
633 for (
Int_t iPad = 0; iPad < 6; iPad++) {
655 name =
fTitle +
"_BD_GEM";
657 histBDGemStat->GetXaxis()->SetTitle(
"Number of digits in BD");
658 histBDGemStat->GetYaxis()->SetTitle(
"Number of digits in event GEM");
660 name =
fTitle +
"_BD_Silicon";
665 name =
fTitle +
"_BD_Tof400";
670 name =
fTitle +
"_BD_Tof700";
675 name =
fTitle +
"_BD_CSC";
677 histBDCscStat->GetXaxis()->SetTitle(
"Number of digits in BD");
678 histBDCscStat->GetYaxis()->SetTitle(
"Number of digits in event CSC");
680 name =
fTitle +
"_BD_FHCAL";
683 histBDFHCalStat->GetYaxis()->SetTitle(
"Number of digits in event FHCAL");
685 name =
fTitle +
"BD_DetCanvas";
690 for (
Int_t iPad = 0; iPad < 6; iPad++) {
711 name =
fTitle +
"_GEM_Silicon";
713 histGemSilicon->GetXaxis()->SetTitle(
"Number of digits in event GEM");
714 histGemSilicon->GetYaxis()->SetTitle(
"Number of digits in event Silicon");
716 name =
fTitle +
"_GEM_Tof400";
718 histGemTof400->GetXaxis()->SetTitle(
"Number of digits in event GEM");
719 histGemTof400->GetYaxis()->SetTitle(
"Number of digits in event Tof400");
721 name =
fTitle +
"_GEM_Tof700";
723 histGemTof700->GetXaxis()->SetTitle(
"Number of digits in event GEM");
724 histGemTof700->GetYaxis()->SetTitle(
"Number of digits in event Tof700");
726 name =
fTitle +
"_GEM_CSC";
728 histGemCsc->GetXaxis()->SetTitle(
"Number of digits in event GEM");
729 histGemCsc->GetYaxis()->SetTitle(
"Number of digits in event CSC");
731 name =
fTitle +
"_GEM_FHCAL";
733 histGemFHCal->GetXaxis()->SetTitle(
"Number of digits in event GEM");
734 histGemFHCal->GetYaxis()->SetTitle(
"Number of digits in event FHCAL");
736 name =
fTitle +
"_CSC_FHCAL";
738 histCscFHCal->GetXaxis()->SetTitle(
"Number of digits in event CSC");
739 histCscFHCal->GetYaxis()->SetTitle(
"Number of digits in event FHCAL");
741 name =
fTitle +
"CorrCanvas";
746 for (
Int_t iPad = 0; iPad < 6; iPad++) {
766 for (
size_t iTrig = 0; iTrig < trigDigits->size(); ++iTrig) {
768 TString nameArray = array->GetName();
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
char * Form(const char *fmt,...)
BmnStatus
Define status code.
@ kBMNPAYLOAD
spill event.
@ kBMNPEDESTAL
pedestal event.
std::chrono::time_point< SysClock > SysPoint
const int32_t Max_FHC_Cnt
vector< TString > NamesStatFD
BmnStatus SetRefRun(Int_t id)
prometheus::Counter * counter_family
void FillFromDigi(DigiArrays *fDigiArrays)
SysPoint last_ev_time_show
vector< PadInfo * > canStatCorrPads
vector< PadInfo * > canStatFDPads
const double Min_NBC1
Spill stat for DB.
void SetDir(TFile *outFile=NULL, TTree *recoTree=NULL)
const int32_t Max_CSC_Cnt
unordered_map< string, prometheus::Gauge * > gauges_by_name
vector< PadInfo * > canStatDetPads
Int_t getPositionInArray(vector< TClonesArray * > *trigDigits, TString name)
unique_ptr< prometheus::Exposer > exposer
const int32_t Max_ToF_Cnt
BmnStatus UpdateMetrics()
void ResetTimelineCounters()
vector< TString > NamesStatBD
vector< PadInfo * > canStatBDPads
prometheus::Family< prometheus::Gauge > * gauge_family
vector< TString > NamesStatCorr
BmnHistStat(TString title, TString path="")
const int32_t Max_GEM_Cnt
void Register(THttpServer *serv)
shared_ptr< prometheus::Registry > registry
const int32_t Max_FSD_Cnt
BmnEventType ev_type_prev
vector< TString > NamesStatDet
static void DrawRef(unique_ptr< TCanvas > &canGemStrip, vector< PadInfo * > *canGemStripPads)
static void SetHistStyleTH1(TH1 *h)
static BmnStatus LoadRefRun(Int_t refID, TString FullName, TString fTitle, vector< PadInfo * > canPads, vector< TString > Names)
BmnHist(Int_t periodID=7, BmnSetup setup=kBMNSETUP)
class for TQDC data including waveform can be initialized both from an std::vector and raw pointer to...
int32_t GetIntegral(size_t start=0, size_t stop=SIZE_MAX) const
int16_t GetPeak(size_t start=0, size_t stop=SIZE_MAX) const
std::vector< TClonesArray * > * trigAr
Storage for pad content and it's options.
TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE) override
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
friend friend class TClonesArray
const char * Data() const
Bool_t EqualTo(const char *cs, ECaseCompare cmp=kExact) const