File indexing completed on 2026-04-07 08:16:13
0001 #ifndef BBC_BBCMONDRAW_H
0002 #define BBC_BBCMONDRAW_H
0003
0004 #include "BbcMonDefs.h"
0005
0006 #include <onlmon/OnlMonDraw.h>
0007 #include <onlmon/triggerEnum.h>
0008
0009 #include <string>
0010 #include <fstream>
0011
0012
0013 class OnlMonDB;
0014 class TCanvas;
0015 class TGraphErrors;
0016 class TPad;
0017 class TStyle;
0018 class TPaveText;
0019 class TText;
0020 class TArc;
0021 class TLine;
0022 class TBox;
0023 class TH1;
0024 class TH2;
0025 class TGraph;
0026 class TArrow;
0027 class TF1;
0028 class TLatex;
0029 class TSpectrum;
0030
0031 class BbcMonDraw : public OnlMonDraw
0032 {
0033 public:
0034 explicit BbcMonDraw(const std::string &name);
0035
0036 ~BbcMonDraw() override;
0037
0038 int Init() override;
0039 int Draw(const std::string &what = "ALL") override;
0040 int MakeHtml(const std::string &what = "ALL") override;
0041 int SavePlot(const std::string &what = "ALL", const std::string &type = "png") override;
0042
0043 protected:
0044 TStyle *bbcStyle = nullptr;
0045
0046 int MakeCanvas(const std::string &name);
0047 int DrawFirst(const std::string &what = "ALL");
0048 int DrawSecond(const std::string &what = "ALL");
0049 int DrawHistory(const std::string &what = "ALL");
0050 int TimeOffsetTicks = -1;
0051
0052 int Warning(TPad *pad, const float x, const float y, const int r, const std::string &msg);
0053 int ClearWarning(void);
0054
0055 void GetMinBiasTrigName();
0056
0057 OnlMonDB *dbvars = nullptr;
0058
0059
0060
0061 int sendflag{0};
0062 std::string sendflagfname;
0063 int GetSendFlag();
0064 int UpdateSendFlag(const int flag);
0065
0066
0067 int zresetflag{0};
0068 std::string zresetflagfname;
0069 int GetZResetFlag();
0070 int UpdateZResetFlag(const int flag);
0071
0072
0073 int gl1badflag{0};
0074 std::string gl1badflagfname;
0075 int GetGL1BadFlag();
0076 int UpdateGL1BadFlag(const int flag);
0077
0078 TCanvas *TC[nCANVAS] = {nullptr};
0079 TPad *transparent[nCANVAS] = {nullptr};
0080
0081 TPad *Pad[6] = {nullptr};
0082
0083
0084 TPad *PadTop[nCANVAS] = {};
0085 TPaveText *PaveTop = nullptr;
0086 TText *TextTop = nullptr;
0087 TPad *PadAutoUpdate[nCANVAS] = {nullptr};
0088
0089 TPaveText *PaveWarning[BbcMonDefs::MAX_WARNING] = {};
0090 TArc *ArcWarning[BbcMonDefs::MAX_WARNING] = {};
0091 TPad *PadWarning[BbcMonDefs::MAX_WARNING] = {};
0092 int nPadWarning[BbcMonDefs::MAX_WARNING] = {};
0093 int nWarning = 0;
0094 const int nPacketStatus{6};
0095
0096 TH1 *Trigs{nullptr};
0097 TH1 *bbc_nevent_counter{nullptr};
0098
0099
0100 TPad *PadZVertex = nullptr;
0101 TPad *PadRunZVertex = nullptr;
0102 TPad *PadZVertexSummary = nullptr;
0103 TH2 *SouthHitMap = nullptr;
0104 TPad *PadSouthHitMap = nullptr;
0105 TH2 *NorthHitMap = nullptr;
0106 TPad *PadNorthHitMap = nullptr;
0107
0108
0109 TH1 *HitTime[nSIDE] = {};
0110 TPad *PadHitTime[nSIDE] = {};
0111 TLine *LineHitTime[nSIDE][2] = {};
0112 TArrow *ArrowHitTime[nSIDE] = {};
0113 TText *TextHitTime[nSIDE] = {};
0114 TF1 *FitHitTime[nSIDE] = {};
0115
0116 TH1 *AvrHitTime = nullptr;
0117 TPad *PadAvrHitTime = nullptr;
0118 TLine *LineAvrHitTime[2] = {};
0119 TArrow *ArrowAvrHitTime = nullptr;
0120 TText *TextAvrHitTime = nullptr;
0121 TF1 *FitAvrHitTime = nullptr;
0122
0123 TH1 *SouthHitTime = nullptr;
0124 TPad *PadSouthHitTime = nullptr;
0125 TLine *LineSouthHitTime[2] = {};
0126 TArrow *ArrowSouthHitTime = nullptr;
0127 TText *TextSouthHitTime = nullptr;
0128 TF1 *FitSouthHitTime = nullptr;
0129
0130 TH1 *NorthHitTime = nullptr;
0131 TPad *PadNorthHitTime = nullptr;
0132 TLine *LineNorthHitTime[2] = {};
0133 TArrow *ArrowNorthHitTime = nullptr;
0134 TText *TextNorthHitTime = nullptr;
0135 TF1 *FitNorthHitTime = nullptr;
0136
0137 TH2 *TimeWave = nullptr;
0138 TPad *PadTimeWave = nullptr;
0139
0140 TH2 *ChargeWave = nullptr;
0141 TPad *PadChargeWave = nullptr;
0142
0143 TLine *LineTzeroZvtx[4] = {};
0144 TText *TextTzeroZvtx = nullptr;
0145
0146 TPad *PadBbcSummary = nullptr;
0147
0148 TText *TextBbcSummaryHitTime[2] = {};
0149 TText *TextBbcSummaryGlobalOffset[2] = {};
0150 TText *TextBbcSummaryZvertex = nullptr;
0151
0152 TLatex *TextBbcSummaryTrigRate = nullptr;
0153
0154 TH1 *Zvtx{nullptr};
0155 TH1 *Zvtx_alltrigger{nullptr};
0156 TH1 *Zvtx_ns{nullptr};
0157 TH1 *Zvtx_10{nullptr};
0158 TH1 *Zvtx_30{nullptr};
0159 TH1 *Zvtx_60{nullptr};
0160 TH1 *Zvtx_ns_chk{nullptr};
0161 TH1 *Zvtx_10_chk{nullptr};
0162 TH1 *Zvtx_30_chk{nullptr};
0163 TH1 *Zvtx_60_chk{nullptr};
0164 TH1 *Zvtx_zdcns{nullptr};
0165 TH1 *Zvtx_emcal{nullptr};
0166 TH1 *Zvtx_hcal{nullptr};
0167 TH1 *Zvtx_emcalmbd{nullptr};
0168 TH1 *Zvtx_hcalmbd{nullptr};
0169 TH1 *RunVtx{nullptr};
0170 TH1 *RunVtxErr{nullptr};
0171 TH1 *RunVtxTime{nullptr};
0172 TH1 *EmptyHist{nullptr};
0173 TGraphErrors *gRunVtx{nullptr};
0174 TGraph *gRunAvgVtx{nullptr};
0175 TF1 *FitZvtx{nullptr};
0176 TF1 *FitZDCvtx{nullptr};
0177 TLine *LineZvtx[2] = {};
0178 TArrow *ArrowZvtx = nullptr;
0179 TText *TextZvtx = nullptr;
0180 TText *TextZvtxNorth = nullptr;
0181 TText *TextZvtxSouth = nullptr;
0182
0183 TH2 *ArmHit = nullptr;
0184 TPad *PadArmHit = nullptr;
0185 TText *TextArmHit = nullptr;
0186 TArc *ArcArmHit = nullptr;
0187
0188
0189
0190 TH1 *South_Nhit{ nullptr };
0191 TH1 *North_Nhit{ nullptr };
0192 TH1 *Nhit_emcal[2]{ nullptr, nullptr };
0193 TH1 *Nhit_hcal[2]{ nullptr, nullptr };
0194 TH1 *Nhit_emcalmbd[2]{ nullptr, nullptr };
0195 TH1 *Nhit_hcalmbd[2]{ nullptr, nullptr };
0196 TPad *PadNhits{ nullptr };
0197 TPad *PadNhitsHCAL{ nullptr };
0198 TPad *PadNhitsEMCAL{ nullptr };
0199 TPad *PadZvtx{ nullptr };
0200 TPad *PadZvtxHCAL{ nullptr };
0201 TPad *PadZvtxEMCAL{ nullptr };
0202 TPad *packetWarning{nullptr};
0203
0204 TH1 *SouthChargeSum = nullptr;
0205 TH1 *NorthChargeSum = nullptr;
0206 TPad *PadChargeSum = nullptr;
0207 TText *TextSouthChargeSum = nullptr;
0208 TText *TextNorthChargeSum = nullptr;
0209
0210 TPad *PadButton = nullptr;
0211 TPad *PadMultiView = nullptr;
0212 TH1 *MultiView1F = nullptr;
0213 TH2 *MultiView2F = nullptr;
0214 TPad *PadWarnings = nullptr;
0215 TPaveText *PaveWarnings = nullptr;
0216
0217 TPad *PadAdc = nullptr;
0218 TH2 *Adc = nullptr;
0219
0220
0221
0222 TPad *PadTzeroZVertex = nullptr;
0223 TText *TextZVertexExpress = nullptr;
0224 TText *TextZVertexNotice = nullptr;
0225 TGraphErrors *TdcOver[nSIDE] = {};
0226 TPad *PadTdcOver[nSIDE] = {};
0227 TLine *LineTdcOver[nSIDE][2] = {};
0228 TBox *BoxTdcOver[nSIDE] = {};
0229 TH1 *FrameTdcOver[nSIDE] = {};
0230
0231 TGraph *nHit[nTRIGGER][nSIDE] = {};
0232 TPad *PadnHit[nSIDE] = {};
0233 TLine *LinenHit[nTRIGGER][nSIDE][2] = {};
0234 TBox *BoxnHit[nTRIGGER][nSIDE] = {};
0235 TPad *PadnHitStatus = nullptr;
0236 TText *TextnHitStatus = nullptr;
0237 TH1 *FramenHit[nSIDE] = {};
0238
0239 TH1 * ZvrtxAuto[TriggerEnum::NUM_MBD_TRIGGERS] {nullptr};
0240
0241 TGraphErrors *RunningZ{nullptr};
0242
0243
0244
0245
0246
0247
0248 TText *TextZVertex[5] = {};
0249 TText *TextZVertex_scale[5] = {};
0250 TText *TextZVertex_mean[5] = {};
0251
0252 TLatex *TextZvtxStatus[5] = {};
0253
0254 TH2 *TzeroZvtx = nullptr;
0255
0256
0257 TH1 *Prescale_hist = nullptr;
0258 TSpectrum *tspec = nullptr;
0259
0260 std::string TrigName;
0261
0262 private:
0263 int DrawDeadServer(TPad *transparent_pad) override;
0264 };
0265
0266 #endif