File indexing completed on 2025-08-03 08:20:58
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
0095 TH1 *Trigs{nullptr};
0096
0097
0098 TPad *PadZVertex = nullptr;
0099 TPad *PadRunZVertex = nullptr;
0100 TPad *PadZVertexSummary = nullptr;
0101 TH2 *SouthHitMap = nullptr;
0102 TPad *PadSouthHitMap = nullptr;
0103 TH2 *NorthHitMap = nullptr;
0104 TPad *PadNorthHitMap = nullptr;
0105
0106
0107 TH1 *HitTime[nSIDE] = {};
0108 TPad *PadHitTime[nSIDE] = {};
0109 TLine *LineHitTime[nSIDE][2] = {};
0110 TArrow *ArrowHitTime[nSIDE] = {};
0111 TText *TextHitTime[nSIDE] = {};
0112 TF1 *FitHitTime[nSIDE] = {};
0113
0114 TH1 *AvrHitTime = nullptr;
0115 TPad *PadAvrHitTime = nullptr;
0116 TLine *LineAvrHitTime[2] = {};
0117 TArrow *ArrowAvrHitTime = nullptr;
0118 TText *TextAvrHitTime = nullptr;
0119 TF1 *FitAvrHitTime = nullptr;
0120
0121 TH1 *SouthHitTime = nullptr;
0122 TPad *PadSouthHitTime = nullptr;
0123 TLine *LineSouthHitTime[2] = {};
0124 TArrow *ArrowSouthHitTime = nullptr;
0125 TText *TextSouthHitTime = nullptr;
0126 TF1 *FitSouthHitTime = nullptr;
0127
0128 TH1 *NorthHitTime = nullptr;
0129 TPad *PadNorthHitTime = nullptr;
0130 TLine *LineNorthHitTime[2] = {};
0131 TArrow *ArrowNorthHitTime = nullptr;
0132 TText *TextNorthHitTime = nullptr;
0133 TF1 *FitNorthHitTime = nullptr;
0134
0135 TH2 *TimeWave = nullptr;
0136 TPad *PadTimeWave = nullptr;
0137
0138 TH2 *ChargeWave = nullptr;
0139 TPad *PadChargeWave = nullptr;
0140
0141 TLine *LineTzeroZvtx[4] = {};
0142 TText *TextTzeroZvtx = nullptr;
0143
0144 TPad *PadBbcSummary = nullptr;
0145
0146 TText *TextBbcSummaryHitTime[2] = {};
0147 TText *TextBbcSummaryGlobalOffset[2] = {};
0148 TText *TextBbcSummaryZvertex = nullptr;
0149
0150 TLatex *TextBbcSummaryTrigRate = nullptr;
0151
0152 TH1 *Zvtx{nullptr};
0153 TH1 *Zvtx_alltrigger{nullptr};
0154 TH1 *Zvtx_ns{nullptr};
0155 TH1 *Zvtx_10{nullptr};
0156 TH1 *Zvtx_30{nullptr};
0157 TH1 *Zvtx_60{nullptr};
0158 TH1 *Zvtx_ns_chk{nullptr};
0159 TH1 *Zvtx_10_chk{nullptr};
0160 TH1 *Zvtx_30_chk{nullptr};
0161 TH1 *Zvtx_60_chk{nullptr};
0162 TH1 *Zvtx_zdcns{nullptr};
0163 TH1 *Zvtx_emcal{nullptr};
0164 TH1 *Zvtx_hcal{nullptr};
0165 TH1 *Zvtx_emcalmbd{nullptr};
0166 TH1 *Zvtx_hcalmbd{nullptr};
0167 TH1 *RunVtx{nullptr};
0168 TH1 *RunVtxErr{nullptr};
0169 TH1 *RunVtxTime{nullptr};
0170 TH1 *EmptyHist{nullptr};
0171 TGraphErrors *gRunVtx{nullptr};
0172 TGraph *gRunAvgVtx{nullptr};
0173 TF1 *FitZvtx{nullptr};
0174 TF1 *FitZDCvtx{nullptr};
0175 TLine *LineZvtx[2] = {};
0176 TArrow *ArrowZvtx = nullptr;
0177 TText *TextZvtx = nullptr;
0178 TText *TextZvtxNorth = nullptr;
0179 TText *TextZvtxSouth = nullptr;
0180
0181 TH2 *ArmHit = nullptr;
0182 TPad *PadArmHit = nullptr;
0183 TText *TextArmHit = nullptr;
0184 TArc *ArcArmHit = nullptr;
0185
0186
0187
0188 TH1 *South_Nhit{ nullptr };
0189 TH1 *North_Nhit{ nullptr };
0190 TH1 *Nhit_emcal[2]{ nullptr, nullptr };
0191 TH1 *Nhit_hcal[2]{ nullptr, nullptr };
0192 TH1 *Nhit_emcalmbd[2]{ nullptr, nullptr };
0193 TH1 *Nhit_hcalmbd[2]{ nullptr, nullptr };
0194 TPad *PadNhits{ nullptr };
0195 TPad *PadNhitsHCAL{ nullptr };
0196 TPad *PadNhitsEMCAL{ nullptr };
0197 TPad *PadZvtx{ nullptr };
0198 TPad *PadZvtxHCAL{ nullptr };
0199 TPad *PadZvtxEMCAL{ nullptr };
0200
0201 TH1 *SouthChargeSum = nullptr;
0202 TH1 *NorthChargeSum = nullptr;
0203 TPad *PadChargeSum = nullptr;
0204 TText *TextSouthChargeSum = nullptr;
0205 TText *TextNorthChargeSum = nullptr;
0206
0207 TPad *PadButton = nullptr;
0208 TPad *PadMultiView = nullptr;
0209 TH1 *MultiView1F = nullptr;
0210 TH2 *MultiView2F = nullptr;
0211 TPad *PadWarnings = nullptr;
0212 TPaveText *PaveWarnings = nullptr;
0213
0214 TPad *PadAdc = nullptr;
0215 TH2 *Adc = nullptr;
0216
0217
0218
0219 TPad *PadTzeroZVertex = nullptr;
0220 TText *TextZVertexExpress = nullptr;
0221 TText *TextZVertexNotice = nullptr;
0222 TGraphErrors *TdcOver[nSIDE] = {};
0223 TPad *PadTdcOver[nSIDE] = {};
0224 TLine *LineTdcOver[nSIDE][2] = {};
0225 TBox *BoxTdcOver[nSIDE] = {};
0226 TH1 *FrameTdcOver[nSIDE] = {};
0227
0228 TGraph *nHit[nTRIGGER][nSIDE] = {};
0229 TPad *PadnHit[nSIDE] = {};
0230 TLine *LinenHit[nTRIGGER][nSIDE][2] = {};
0231 TBox *BoxnHit[nTRIGGER][nSIDE] = {};
0232 TPad *PadnHitStatus = nullptr;
0233 TText *TextnHitStatus = nullptr;
0234 TH1 *FramenHit[nSIDE] = {};
0235
0236 TH1 * ZvrtxAuto[TriggerEnum::NUM_MBD_TRIGGERS] {nullptr};
0237
0238 TGraphErrors *RunningZ{nullptr};
0239
0240
0241
0242
0243
0244
0245 TText *TextZVertex[5] = {};
0246 TText *TextZVertex_scale[5] = {};
0247 TText *TextZVertex_mean[5] = {};
0248
0249 TLatex *TextZvtxStatus[5] = {};
0250
0251 TH2 *TzeroZvtx = nullptr;
0252
0253
0254 TH1 *Prescale_hist = nullptr;
0255 TSpectrum *tspec = nullptr;
0256
0257 std::string TrigName;
0258
0259 private:
0260 int DrawDeadServer(TPad *transparent_pad) override;
0261 };
0262
0263 #endif