CMS 3D CMS Logo

BasicP_PayloadInspector.cc
Go to the documentation of this file.
6 #include <memory>
7 #include <sstream>
8 
9 #include "TH2D.h"
10 #include "TCanvas.h"
11 #include "TLine.h"
12 #include "TLatex.h"
13 
14 namespace {
15 
16  class BasicPayload_data0 : public cond::payloadInspector::HistoryPlot<cond::BasicPayload, float> {
17  public:
18  BasicPayload_data0() : cond::payloadInspector::HistoryPlot<cond::BasicPayload, float>("Example Trend", "data0") {}
19  ~BasicPayload_data0() override = default;
20  float getFromPayload(cond::BasicPayload& payload) override { return payload.m_data0; }
21  };
22 
23  class BasicPayload_data1 : public cond::payloadInspector::RunHistoryPlot<cond::BasicPayload, float> {
24  public:
25  BasicPayload_data1()
26  : cond::payloadInspector::RunHistoryPlot<cond::BasicPayload, float>("Example Run-based Trend", "data0") {}
27  ~BasicPayload_data1() override = default;
28  float getFromPayload(cond::BasicPayload& payload) override { return payload.m_data0; }
29  };
30 
31  class BasicPayload_data2 : public cond::payloadInspector::TimeHistoryPlot<cond::BasicPayload, float> {
32  public:
33  BasicPayload_data2()
34  : cond::payloadInspector::TimeHistoryPlot<cond::BasicPayload, float>("Example Time-based Trend", "data0") {}
35  ~BasicPayload_data2() override = default;
36 
37  float getFromPayload(cond::BasicPayload& payload) override { return payload.m_data0; }
38  };
39 
40  class BasicPayload_data3 : public cond::payloadInspector::ScatterPlot<cond::BasicPayload, float, float> {
41  public:
42  BasicPayload_data3()
43  : cond::payloadInspector::ScatterPlot<cond::BasicPayload, float, float>("Example Scatter", "data0", "data1") {}
44  ~BasicPayload_data3() override = default;
45 
46  std::tuple<float, float> getFromPayload(cond::BasicPayload& payload) override {
47  return std::make_tuple(payload.m_data0, payload.m_data1);
48  }
49  };
50 
51  class BasicPayload_data4 : public cond::payloadInspector::Histogram1D<cond::BasicPayload> {
52  public:
53  BasicPayload_data4() : cond::payloadInspector::Histogram1D<cond::BasicPayload>("Example Histo1d", "x", 10, 0, 10) {
54  Base::setSingleIov(true);
55  }
56  ~BasicPayload_data4() override = default;
57 
58  bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
59  for (auto iov : iovs) {
60  std::shared_ptr<cond::BasicPayload> payload = Base::fetchPayload(std::get<1>(iov));
61  if (payload.get()) {
62  for (size_t j = 0; j < 100; j++) {
63  fillWithValue(j, payload->m_vec[j]);
64  }
65  }
66  }
67  return true;
68  }
69  };
70 
71  class BasicPayload_data5 : public cond::payloadInspector::Histogram2D<cond::BasicPayload> {
72  public:
73  BasicPayload_data5()
74  : cond::payloadInspector::Histogram2D<cond::BasicPayload>("Example Histo2d", "x", 10, 0, 10, "y", 10, 0, 10) {
75  Base::setSingleIov(true);
76  }
77  ~BasicPayload_data5() override = default;
78 
79  bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
80  for (auto iov : iovs) {
81  std::shared_ptr<cond::BasicPayload> payload = Base::fetchPayload(std::get<1>(iov));
82  if (payload.get()) {
83  for (size_t i = 0; i < 10; i++)
84  for (size_t j = 0; j < 10; j++) {
85  fillWithValue(j, i, payload->m_vec[i * 10 + j]);
86  }
87  }
88  }
89  return true;
90  }
91  };
92 
93  class BasicPayload_data6 : public cond::payloadInspector::PlotImage<cond::BasicPayload> {
94  public:
95  BasicPayload_data6() : cond::payloadInspector::PlotImage<cond::BasicPayload>("Example delivery picture") {
96  setSingleIov(true);
97  }
98 
99  bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
100  auto iov = iovs.front();
101  std::shared_ptr<cond::BasicPayload> payload = fetchPayload(std::get<1>(iov));
102 
103  double xmax(100.), ymax(100.);
104 
105  TH2D h2D("h2D", "Example", 100, 0., xmax, 100, 0., ymax);
106 
107  if (payload.get()) {
108  if (payload->m_vec.size() == 10000) {
109  for (size_t i = 0; i < 100; i++)
110  for (size_t j = 0; j < 100; j++) {
111  h2D.Fill(i, j, payload->m_vec[i * 100 + j]);
112  }
113  h2D.SetStats(false);
114  }
115  }
116 
117  TCanvas c("c", "", 10, 10, 900, 500);
118  c.cd();
119  c.SetLogz();
120  h2D.SetNdivisions(18, "X");
121  h2D.GetXaxis()->SetTickLength(0.00);
122  h2D.GetYaxis()->SetTickLength(0.00);
123  h2D.GetXaxis()->SetTitle("iphi");
124  h2D.GetYaxis()->SetTitle("ieta");
125  h2D.Draw("col");
126 
127  //======= drawing lines ========
129 
130  TLine l;
131  l.SetLineStyle(2);
132  l.DrawLine(0., ymax / 2., xmax, ymax / 2.);
133  for (int m = 0; m < int(xmax); m += 10) {
134  l.DrawLine(m, 0., m, 100.);
135  }
136 
137  c.RedrawAxis();
138 
139  //========== writing text in the canvas==============
141 
142  TLatex Tl;
143  TLatex Tll;
144  Tl.SetTextAlign(23);
145  Tl.SetTextSize(0.04);
146 
147  Tll.SetTextAlign(23);
148  Tll.SetTextSize(0.04);
149 
150  int j = 0;
151  for (int i = 1; i <= 10; i++) {
152  std::string s = "+" + std::to_string(i);
153  char const* pchar = s.c_str();
154  j += 10;
155  Tl.DrawLatex(j - 5, int(ymax) / 1.33, pchar);
156  }
157 
158  int z = 0;
159  for (int g = -10; g < 0; g++) {
160  std::string ss = std::to_string(g);
161  char const* pchar1 = ss.c_str();
162  z += 10;
163  Tll.DrawLatex(z - 5, int(ymax) / 4, pchar1);
164  }
165  //=========================
166 
167  std::string fileName(m_imageFileName);
168  c.SaveAs(fileName.c_str());
169 
170  return true;
171  }
172  };
173 
174  class BasicPayload_data7 : public cond::payloadInspector::PlotImage<cond::BasicPayload> {
175  public:
176  BasicPayload_data7() : cond::payloadInspector::PlotImage<cond::BasicPayload>("Example delivery picture") {
177  setTwoTags(true);
178  }
179 
180  bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
181  auto iov0 = iovs.front();
182  auto iov1 = iovs.back();
183  std::shared_ptr<cond::BasicPayload> payload0 = fetchPayload(std::get<1>(iov0));
184  std::shared_ptr<cond::BasicPayload> payload1 = fetchPayload(std::get<1>(iov1));
185 
186  double xmax(100.), ymax(100.);
187 
188  TH2D h2D("h2D", "Example", 100, 0., xmax, 100, 0., ymax);
189 
190  if (payload0.get() && payload1.get()) {
191  if (payload0->m_vec.size() == 10000 && payload1->m_vec.size() == 10000) {
192  for (size_t i = 0; i < 100; i++)
193  for (size_t j = 0; j < 100; j++) {
194  auto diff = abs(payload0->m_vec[i * 100 + j] - payload1->m_vec[i * 100 + j]);
195  h2D.Fill(i, j, diff);
196  }
197  h2D.SetStats(false);
198  }
199  }
200 
201  TCanvas c("c", "", 20, 20, 900, 500);
202  c.cd();
203  c.SetLogz();
204  h2D.SetNdivisions(18, "X");
205  h2D.GetXaxis()->SetTickLength(0.00);
206  h2D.GetYaxis()->SetTickLength(0.00);
207  h2D.GetXaxis()->SetTitle("iphi");
208  h2D.GetYaxis()->SetTitle("ieta");
209  h2D.Draw("col");
210 
211  //======= drawing lines ========
213 
214  TLine l;
215  l.SetLineStyle(2);
216  l.DrawLine(0., ymax / 2., xmax, ymax / 2.);
217  for (int m = 0; m < int(xmax); m += 10) {
218  l.DrawLine(m, 0., m, 100.);
219  }
220 
221  c.RedrawAxis();
222 
223  //========== writing text in the canvas==============
225 
226  TLatex Tl;
227  TLatex Tll;
228  Tl.SetTextAlign(23);
229  Tl.SetTextSize(0.04);
230 
231  Tll.SetTextAlign(23);
232  Tll.SetTextSize(0.04);
233 
234  int j = 0;
235  for (int i = 1; i <= 10; i++) {
236  std::string s = "+" + std::to_string(i);
237  char const* pchar = s.c_str();
238  j += 10;
239  Tl.DrawLatex(j - 5, int(ymax) / 1.33, pchar);
240  }
241 
242  int z = 0;
243  for (int g = -10; g < 0; g++) {
244  std::string ss = std::to_string(g);
245  char const* pchar1 = ss.c_str();
246  z += 10;
247  Tll.DrawLatex(z - 5, int(ymax) / 4, pchar1);
248  }
249  //=========================
250 
251  std::string fileName(m_imageFileName);
252  c.SaveAs(fileName.c_str());
253 
254  return true;
255  }
256  };
257 
258 } // namespace
259 
261  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data0);
262  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data1);
263  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data2);
264  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data3);
265  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data4);
266  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data5);
267  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data6);
268  PAYLOAD_INSPECTOR_CLASS(BasicPayload_data7);
269 }
#define PAYLOAD_INSPECTOR_CLASS(CLASS_NAME)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define PAYLOAD_INSPECTOR_MODULE(PAYLOAD_TYPENAME)
virtual Y getFromPayload(PayloadType &payload)=0
Definition: plugin.cc:23