CMS 3D CMS Logo

BeamSpotPayloadInspectorHelper.h
Go to the documentation of this file.
1 #ifndef CONDCORE_BEAMSPOTPLUGINS_BEAMSPOTPAYLOADINSPECTORHELPER_H
2 #define CONDCORE_BEAMSPOTPLUGINS_BEAMSPOTPAYLOADINSPECTORHELPER_H
3 
4 // User includes
10 
11 // system includes
12 #include <fmt/printf.h>
13 #include <memory>
14 #include <sstream>
15 
16 // ROOT includes
17 #include "TCanvas.h"
18 #include "TStyle.h"
19 #include "TH2F.h"
20 #include "TLatex.h"
21 
22 //#define MMDEBUG /* to make it verbose */
23 
24 namespace BeamSpotPI {
25 
26  inline std::pair<unsigned int, unsigned int> unpack(cond::Time_t since) {
27  auto kLowMask = 0XFFFFFFFF;
28  auto run = (since >> 32);
29  auto lumi = (since & kLowMask);
30  return std::make_pair(run, lumi);
31  }
32 
33  enum parameters {
34  X = 0, // 0 regular BS methods
35  Y = 1, // 1
36  Z = 2, // 2
37  sigmaX = 3, // 3
38  sigmaY = 4, // 4
39  sigmaZ = 5, // 5
40  dxdz = 6, // 6
41  dydz = 7, // 7
42  lastLumi = 8, // 8 additional int's
43  lastRun = 9, // 9
44  lastFill = 10, // 10
45  nTracks = 11, // 11
46  nPVs = 12, // 12
47  nUsedEvents = 13, // 13
48  maxPVs = 14, // 14
49  meanPV = 15, // 15 additional float's
50  meanErrorPV = 16, // 16
51  rmsPV = 17, // 17
52  rmsErrorPV = 18, // 18
53  creationTime = 19, // 19 additional cond::Time_t
54  startTimeStamp = 20, // 20
55  endTimeStamp = 21, // 21
56  startTime = 22, // 22 additional std::string
57  endTime = 23, // 23
58  lumiRange = 24, // 24
60  };
61 
62  /************************************************/
64  const bool addUnits = false /*not used by default*/) {
65  switch (parameter) {
66  case X:
67  return (addUnits ? "X [cm]" : "X");
68  case Y:
69  return (addUnits ? "Y [cm]" : "Y");
70  case Z:
71  return (addUnits ? "Z [cm]" : "Z");
72  case sigmaX:
73  return (addUnits ? "#sigma_{X} [cm]" : "sigmaX");
74  case sigmaY:
75  return (addUnits ? "#sigma_{Y} [cm]" : "sigmaY");
76  case sigmaZ:
77  return (addUnits ? "#sigma_{Z} [cm]" : "sigmaZ");
78  case dxdz:
79  return (addUnits ? "#frac{dX}{dZ} [rad]" : "dx/dz");
80  case dydz:
81  return (addUnits ? "#frac{dY}{dZ} [rad]" : "dy/dz");
82  default:
83  return "should never be here";
84  }
85  }
86 
92  template <class PayloadType>
94  typedef std::array<double, 8> bshelpdata;
95 
96  public:
97  BSParamsHelper(const std::shared_ptr<PayloadType>& bs) {
98  // fill in the central values
99  m_values[0] = bs->x(), m_values[1] = bs->y(), m_values[2] = bs->z();
100  m_values[3] = bs->beamWidthX(), m_values[4] = bs->beamWidthY(), m_values[5] = bs->sigmaZ();
101  m_values[6] = bs->dxdz(), m_values[7] = bs->dydz();
102 
103  // fill in the errors
104  m_errors[0] = bs->xError(), m_errors[1] = bs->yError(), m_errors[2] = bs->zError();
105  m_errors[3] = bs->beamWidthXError(), m_errors[4] = bs->beamWidthYError(), m_errors[5] = bs->sigmaZError();
106  m_errors[6] = bs->dxdzError(), m_errors[7] = bs->dydzError();
107  }
108 
109  void printDebug(std::stringstream& ss) {
110  ss << "Dumping BeamSpot parameters Data:" << std::endl;
111  for (uint i = parameters::X; i <= parameters::dydz; i++) {
112  parameters par = static_cast<parameters>(i);
113  ss << getStringFromParamEnum(par) << " : " << m_values[i] << std::endl;
114  ss << getStringFromParamEnum(par) << " error: " << m_errors[i] << std::endl;
115  ss << std::endl;
116  }
117  }
118 
119  inline const bshelpdata centralValues() const { return m_values; }
120  inline const bshelpdata errors() const { return m_errors; }
121 
122  // get the difference in values
123  const bshelpdata diffCentralValues(const BSParamsHelper& bs2, const bool isPull = false) const {
124  bshelpdata ret;
125  for (uint i = parameters::X; i <= parameters::dydz; i++) {
126  ret[i] = this->centralValues()[i] - bs2.centralValues()[i];
127  if (isPull)
128  (this->centralValues()[i] != 0.) ? ret[i] /= this->centralValues()[i] : 0.;
129  }
130  return ret;
131  }
132 
133  // get the difference in errors
134  const bshelpdata diffErrors(const BSParamsHelper& bs2, const bool isPull = false) const {
135  bshelpdata ret;
136  for (uint i = parameters::X; i <= parameters::dydz; i++) {
137  ret[i] = this->errors()[i] - bs2.errors()[i];
138  if (isPull)
139  (this->errors()[i] != 0.) ? ret[i] /= this->errors()[i] : 0.;
140  }
141  return ret;
142  }
143 
144  private:
145  bshelpdata m_values; /* central values */
146  bshelpdata m_errors; /* errors */
147  };
148 
149  /************************************************
150  template classes (history)
151  *************************************************/
152 
153  template <parameters my_param, class PayloadType>
154  class BeamSpot_history : public cond::payloadInspector::HistoryPlot<PayloadType, std::pair<double, double> > {
155  public:
157  : cond::payloadInspector::HistoryPlot<PayloadType, std::pair<double, double> >(
158  getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {}
159 
160  std::pair<double, double> getFromPayload(PayloadType& payload) override {
161  auto ret = std::make_pair<double, double>(-9999., -9999.);
162 
163  switch (my_param) {
164  case X:
165  return std::make_pair<double, double>(payload.x(), payload.xError());
166  case Y:
167  return std::make_pair<double, double>(payload.y(), payload.yError());
168  case Z:
169  return std::make_pair<double, double>(payload.z(), payload.zError());
170  case sigmaX:
171  return std::make_pair<double, double>(payload.beamWidthX(), payload.beamWidthXError());
172  case sigmaY:
173  return std::make_pair<double, double>(payload.beamWidthY(), payload.beamWidthYError());
174  case sigmaZ:
175  return std::make_pair<double, double>(payload.sigmaZ(), payload.sigmaZError());
176  case dxdz:
177  return std::make_pair<double, double>(payload.dxdz(), payload.dxdzError());
178  case dydz:
179  return std::make_pair<double, double>(payload.dydz(), payload.dydzError());
180  case END_OF_TYPES:
181  return ret;
182  default:
183  return ret;
184  }
185  }
186  };
187 
188  /************************************************
189  template classes (run history)
190  *************************************************/
191 
192  template <parameters my_param, class PayloadType>
193  class BeamSpot_runhistory : public cond::payloadInspector::RunHistoryPlot<PayloadType, std::pair<double, double> > {
194  public:
196  : cond::payloadInspector::RunHistoryPlot<PayloadType, std::pair<double, double> >(
197  getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {}
198 
199  std::pair<double, double> getFromPayload(PayloadType& payload) override {
200  auto ret = std::make_pair<double, double>(-9999., -9999.);
201 
202  switch (my_param) {
203  case X:
204  return std::make_pair<double, double>(payload.x(), payload.xError());
205  case Y:
206  return std::make_pair<double, double>(payload.y(), payload.yError());
207  case Z:
208  return std::make_pair<double, double>(payload.z(), payload.zError());
209  case sigmaX:
210  return std::make_pair<double, double>(payload.beamWidthX(), payload.beamWidthXError());
211  case sigmaY:
212  return std::make_pair<double, double>(payload.beamWidthY(), payload.beamWidthYError());
213  case sigmaZ:
214  return std::make_pair<double, double>(payload.sigmaZ(), payload.sigmaZError());
215  case dxdz:
216  return std::make_pair<double, double>(payload.dxdz(), payload.dxdzError());
217  case dydz:
218  return std::make_pair<double, double>(payload.dydz(), payload.dydzError());
219  case END_OF_TYPES:
220  return ret;
221  default:
222  return ret;
223  }
224  }
225  };
226 
227  /************************************************
228  template classes (time history)
229  *************************************************/
230 
231  template <parameters my_param, class PayloadType>
232  class BeamSpot_timehistory : public cond::payloadInspector::TimeHistoryPlot<PayloadType, std::pair<double, double> > {
233  public:
235  : cond::payloadInspector::TimeHistoryPlot<PayloadType, std::pair<double, double> >(
236  getStringFromParamEnum(my_param) + " vs time", getStringFromParamEnum(my_param)) {}
237 
238  std::pair<double, double> getFromPayload(PayloadType& payload) override {
239  auto ret = std::make_pair<double, double>(-9999., -9999.);
240 
241  switch (my_param) {
242  case X:
243  return std::make_pair<double, double>(payload.x(), payload.xError());
244  case Y:
245  return std::make_pair<double, double>(payload.y(), payload.yError());
246  case Z:
247  return std::make_pair<double, double>(payload.z(), payload.zError());
248  case sigmaX:
249  return std::make_pair<double, double>(payload.beamWidthX(), payload.beamWidthXError());
250  case sigmaY:
251  return std::make_pair<double, double>(payload.beamWidthY(), payload.beamWidthYError());
252  case sigmaZ:
253  return std::make_pair<double, double>(payload.sigmaZ(), payload.sigmaZError());
254  case dxdz:
255  return std::make_pair<double, double>(payload.dxdz(), payload.dxdzError());
256  case dydz:
257  return std::make_pair<double, double>(payload.dydz(), payload.dydzError());
258  case END_OF_TYPES:
259  return ret;
260  default:
261  return ret;
262  }
263  }
264  };
265 
266  /************************************************
267  X-Y correlation plot
268  *************************************************/
269  template <class PayloadType>
270  class xyCorrelation : public cond::payloadInspector::ScatterPlot<PayloadType, double, double> {
271  public:
272  xyCorrelation() : cond::payloadInspector::ScatterPlot<PayloadType, double, double>("BeamSpot x vs y", "x", "y") {}
273 
274  std::tuple<double, double> getFromPayload(PayloadType& payload) override {
275  return std::make_tuple(payload.x(), payload.y());
276  }
277  };
278 
279  /************************************************
280  Display of Beam Spot parameters
281  *************************************************/
282  template <class PayloadType>
283  class DisplayParameters : public cond::payloadInspector::PlotImage<PayloadType, cond::payloadInspector::SINGLE_IOV> {
284  public:
286  : cond::payloadInspector::PlotImage<PayloadType, cond::payloadInspector::SINGLE_IOV>(
287  "Display of BeamSpot parameters") {
288  if constexpr (std::is_same_v<PayloadType, BeamSpotOnlineObjects>) {
289  isOnline_ = true;
290  } else {
291  isOnline_ = false;
292  }
293  }
294 
295  bool fill() override {
296  auto tag = cond::payloadInspector::PlotBase::getTag<0>();
297  auto tagname = tag.name;
298  auto iov = tag.iovs.front();
299 
300  gStyle->SetHistMinimumZero(kTRUE);
301 
302  m_payload = this->fetchPayload(std::get<1>(iov));
303 
304  TCanvas canvas("Beam Spot Parameters Summary", "BeamSpot Parameters summary", isOnline_ ? 1500 : 1000, 1000);
305  if (isOnline_) {
306  canvas.Divide(2, 1);
307  }
308  canvas.cd(1);
309 
310  canvas.cd(1)->SetTopMargin(0.05);
311  canvas.cd(1)->SetBottomMargin(0.06);
312  canvas.cd(1)->SetLeftMargin(0.15);
313  canvas.cd(1)->SetRightMargin(0.01);
314  canvas.cd(1)->Modified();
315  canvas.cd(1)->SetGrid();
316 
317  auto h2_BSParameters = std::make_unique<TH2F>("Parameters", "", 2, 0.0, 2.0, 8, 0, 8.);
318  h2_BSParameters->SetStats(false);
319 
320  std::function<double(parameters, bool)> cutFunctor = [this](parameters my_param, bool isError) {
321  double ret(-999.);
322  if (!isError) {
323  switch (my_param) {
324  case X:
325  return m_payload->x();
326  case Y:
327  return m_payload->y();
328  case Z:
329  return m_payload->z();
330  case sigmaX:
331  return m_payload->beamWidthX();
332  case sigmaY:
333  return m_payload->beamWidthY();
334  case sigmaZ:
335  return m_payload->sigmaZ();
336  case dxdz:
337  return m_payload->dxdz();
338  case dydz:
339  return m_payload->dydz();
340  case END_OF_TYPES:
341  return ret;
342  default:
343  return ret;
344  }
345  } else {
346  switch (my_param) {
347  case X:
348  return m_payload->xError();
349  case Y:
350  return m_payload->yError();
351  case Z:
352  return m_payload->zError();
353  case sigmaX:
354  return m_payload->beamWidthXError();
355  case sigmaY:
356  return m_payload->beamWidthYError();
357  case sigmaZ:
358  return m_payload->sigmaZError();
359  case dxdz:
360  return m_payload->dxdzError();
361  case dydz:
362  return m_payload->dydzError();
363  case END_OF_TYPES:
364  return ret;
365  default:
366  return ret;
367  }
368  }
369  };
370 
371  h2_BSParameters->GetXaxis()->SetBinLabel(1, "Value");
372  h2_BSParameters->GetXaxis()->SetBinLabel(2, "Error");
373 
374  unsigned int yBin = 8;
375  for (int foo = parameters::X; foo <= parameters::dydz; foo++) {
376  parameters param = static_cast<parameters>(foo);
377  std::string theLabel = getStringFromTypeEnum(param);
378  h2_BSParameters->GetYaxis()->SetBinLabel(yBin, theLabel.c_str());
379  h2_BSParameters->SetBinContent(1, yBin, cutFunctor(param, false));
380  h2_BSParameters->SetBinContent(2, yBin, cutFunctor(param, true));
381  yBin--;
382  }
383 
384  h2_BSParameters->GetXaxis()->LabelsOption("h");
385  h2_BSParameters->GetYaxis()->SetLabelSize(0.05);
386  h2_BSParameters->GetXaxis()->SetLabelSize(0.05);
387  h2_BSParameters->SetMarkerSize(1.5);
388  h2_BSParameters->Draw("TEXT");
389 
390  auto ltx = TLatex();
391  ltx.SetTextFont(62);
392  if (isOnline_) {
393  ltx.SetTextSize(0.030);
394  } else {
395  ltx.SetTextSize(0.025);
396  }
397  ltx.SetTextAlign(11);
398 
399  auto runLS = BeamSpotPI::unpack(std::get<0>(iov));
400 
401  ltx.DrawLatexNDC(
402  gPad->GetLeftMargin(),
403  1 - gPad->GetTopMargin() + 0.01,
404  (tagname + " IOV: #color[4]{" + std::to_string(runLS.first) + "," + std::to_string(runLS.second) + "}")
405  .c_str());
406 
407  if (isOnline_) {
408  canvas.cd(2);
409  canvas.cd(2)->SetTopMargin(0.05);
410  canvas.cd(2)->SetBottomMargin(0.06);
411  canvas.cd(2)->SetLeftMargin(0.25);
412  canvas.cd(2)->SetRightMargin(0.01);
413  canvas.cd(2)->Modified();
414  canvas.cd(2)->SetGrid();
415 
416  auto extras = fillTheExtraHistogram();
417  if (extras) {
418  for (int bin = 1; bin <= extras->GetNbinsY(); bin++) {
419  edm::LogVerbatim("BeamSpotPayloadInspectorHelper")
420  << extras->GetYaxis()->GetBinLabel(bin) << ": " << extras->GetBinContent(1, bin) << "\n";
421  }
422  }
423  extras->Draw("TEXT");
424 
425  ltx.DrawLatexNDC(
426  gPad->GetLeftMargin(),
427  1 - gPad->GetTopMargin() + 0.01,
428  (tagname + " IOV: #color[4]{" + std::to_string(runLS.first) + "," + std::to_string(runLS.second) + "}")
429  .c_str());
430 
432  canvas.SaveAs(fileName.c_str());
433 
434  return true;
435  } else {
437  canvas.SaveAs(fileName.c_str());
438 
439  return true;
440  }
441  }
442 
443  public:
444  virtual std::shared_ptr<TH2F> fillTheExtraHistogram() const { return nullptr; }
445 
446  protected:
447  bool isOnline_;
448  std::shared_ptr<PayloadType> m_payload;
449 
455  switch (parameter) {
456  case X:
457  return "X [cm]";
458  case Y:
459  return "Y [cm]";
460  case Z:
461  return "Z [cm]";
462  case sigmaX:
463  return "#sigma_{X} [cm]";
464  case sigmaY:
465  return "#sigma_{Y} [cm]";
466  case sigmaZ:
467  return "#sigma_{Z} [cm]";
468  case dxdz:
469  return "#frac{dX}{dZ} [rad]";
470  case dydz:
471  return "#frac{dY}{dZ} [rad]";
472  default:
473  return "should never be here";
474  }
475  }
476  };
477 
478  /************************************************
479  Display of Beam Spot parameters difference
480  *************************************************/
481  template <class PayloadType, cond::payloadInspector::IOVMultiplicity nIOVs, int ntags>
482  class DisplayParametersDiff : public cond::payloadInspector::PlotImage<PayloadType, nIOVs, ntags> {
483  public:
485  : cond::payloadInspector::PlotImage<PayloadType, nIOVs, ntags>("Display of BeamSpot parameters differences") {
486  if constexpr (std::is_same_v<PayloadType, BeamSpotOnlineObjects>) {
487  isOnline_ = true;
488  } else {
489  isOnline_ = false;
490  }
491  }
492 
493  bool fill() override {
494  // trick to deal with the multi-ioved tag and two tag case at the same time
495  auto theIOVs = cond::payloadInspector::PlotBase::getTag<0>().iovs;
496  auto f_tagname = cond::payloadInspector::PlotBase::getTag<0>().name;
497  std::string l_tagname = "";
498  auto firstiov = theIOVs.front();
499  std::tuple<cond::Time_t, cond::Hash> lastiov;
500 
501  // we don't support (yet) comparison with more than 2 tags
502  assert(this->m_plotAnnotations.ntags < 3);
503 
504  if (this->m_plotAnnotations.ntags == 2) {
505  auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs;
506  l_tagname = cond::payloadInspector::PlotBase::getTag<1>().name;
507  lastiov = tag2iovs.front();
508  } else {
509  lastiov = theIOVs.back();
510  }
511 
512  l_payload = this->fetchPayload(std::get<1>(lastiov));
513  f_payload = this->fetchPayload(std::get<1>(firstiov));
514 
515  std::string lastIOVsince = std::to_string(std::get<0>(lastiov));
516  std::string firstIOVsince = std::to_string(std::get<0>(firstiov));
517 
518  TCanvas canvas("Beam Spot Parameters Difference Summary", "Beam Spot Parameters Difference summary", 1000, 1000);
519  canvas.cd(1);
520 
521  canvas.cd(1)->SetTopMargin(0.08);
522  canvas.cd(1)->SetBottomMargin(0.06);
523  canvas.cd(1)->SetLeftMargin(0.14);
524  canvas.cd(1)->SetRightMargin(0.16);
525  canvas.cd(1)->Modified();
526  canvas.cd(1)->SetGrid();
527 
528  // for the "text"-filled histogram
529  auto h2_BSParameters = std::make_unique<TH2F>("Parameters", "", 2, 0.0, 2.0, 8, 0, 8.);
530  h2_BSParameters->SetStats(false);
531  h2_BSParameters->GetXaxis()->SetBinLabel(1, "Value");
532  h2_BSParameters->GetXaxis()->SetBinLabel(2, "Error");
533  h2_BSParameters->GetXaxis()->LabelsOption("h");
534  h2_BSParameters->GetYaxis()->SetLabelSize(0.05);
535  h2_BSParameters->GetXaxis()->SetLabelSize(0.05);
536  h2_BSParameters->SetMarkerSize(1.5);
537 
538  // prepare the arrays to fill the histogram
541 
542 #ifdef MM_DEBUG
543  std::stringstream ss1, ss2;
544  edm::LogPrint("") << "**** first payload";
545  fBS.printDebug(ss1);
546  edm::LogPrint("") << ss1.str();
547  edm::LogPrint("") << "**** last payload";
548  lBS.printDebug(ss2);
549  edm::LogPrint("") << ss2.str();
550 #endif
551 
552  const auto diffPars = fBS.diffCentralValues(lBS);
553  const auto diffErrors = fBS.diffErrors(lBS);
554  //const auto pullPars = fBS.diffCentralValues(lBS,true /*normalize*/);
555  //const auto pullErrors = fBS.diffErrors(lBS,true /*normalize*/);
556 
557  unsigned int yBin = 8;
558  for (int foo = parameters::X; foo <= parameters::dydz; foo++) {
559  parameters param = static_cast<parameters>(foo);
560  std::string theLabel = BeamSpotPI::getStringFromParamEnum(param, true /*use units*/);
561  h2_BSParameters->GetYaxis()->SetBinLabel(yBin, theLabel.c_str());
562  h2_BSParameters->SetBinContent(1, yBin, diffPars[foo]); /* profiting of the parameters enum indexing */
563  h2_BSParameters->SetBinContent(2, yBin, diffErrors[foo]);
564  yBin--;
565  }
566 
567  // for the "colz"-filled histogram (clonde from the text-based one)
568  auto h2_BSShadow = (TH2F*)(h2_BSParameters->Clone("shadow"));
569  h2_BSShadow->GetZaxis()->SetTitle("#Delta Parameter(payload A - payload B)");
570  h2_BSShadow->GetZaxis()->CenterTitle();
571  h2_BSShadow->GetZaxis()->SetTitleOffset(1.5);
572 
573  // this is the fine gradient palette (blue to red)
574  double max = h2_BSShadow->GetMaximum();
575  double min = h2_BSShadow->GetMinimum();
576  double val_white = 0.;
577  double per_white = (max != min) ? ((val_white - min) / (max - min)) : 0.5;
578 
579  const int Number = 3;
580  double Red[Number] = {0., 1., 1.};
581  double Green[Number] = {0., 1., 0.};
582  double Blue[Number] = {1., 1., 0.};
583  double Stops[Number] = {0., per_white, 1.};
584  int nb = 256;
585  h2_BSShadow->SetContour(nb);
586  TColor::CreateGradientColorTable(Number, Stops, Red, Green, Blue, nb);
587 
588  h2_BSShadow->Draw("colz");
589  h2_BSParameters->Draw("TEXTsame");
590 
591  auto ltx = TLatex();
592  ltx.SetTextFont(62);
593  ltx.SetTextSize(0.025);
594  ltx.SetTextAlign(11);
595 
596  // compute the (run,LS) pairs
597  auto l_runLS = BeamSpotPI::unpack(std::get<0>(lastiov));
598  std::string l_runLSs = "(" + std::to_string(l_runLS.first) + "," + std::to_string(l_runLS.second) + ")";
599  auto f_runLS = BeamSpotPI::unpack(std::get<0>(firstiov));
600  std::string f_runLSs = "(" + std::to_string(f_runLS.first) + "," + std::to_string(f_runLS.second) + ")";
601 
602  if (this->m_plotAnnotations.ntags == 2) {
603  ltx.DrawLatexNDC(
604  gPad->GetLeftMargin() - 0.1,
605  1 - gPad->GetTopMargin() + 0.015,
606  (fmt::sprintf(
607  "#splitline{A = #color[4]{%s}: %s}{B = #color[4]{%s}: %s}", f_tagname, f_runLSs, l_tagname, l_runLSs))
608  .c_str());
609  } else {
610  ltx.DrawLatexNDC(
611  gPad->GetLeftMargin() - 0.1,
612  1 - gPad->GetTopMargin() + 0.015,
613  (fmt::sprintf("#splitline{#color[4]{%s}}{A = %s | B = %s}", f_tagname, l_runLSs, f_runLSs)).c_str());
614  }
615 
617  canvas.SaveAs(fileName.c_str());
618 
619  return true;
620  }
621 
622  public:
626  virtual std::shared_ptr<TH2F> fillTheExtraHistogram() const { return nullptr; }
627 
628  protected:
629  bool isOnline_;
630  std::shared_ptr<PayloadType> f_payload;
631  std::shared_ptr<PayloadType> l_payload;
632  };
633 } // namespace BeamSpotPI
634 
635 #endif
Log< level::Info, true > LogVerbatim
float dydz
std::pair< unsigned int, unsigned int > unpack(cond::Time_t since)
ret
prodAgent to be discontinued
#define X(str)
Definition: MuonsGrabber.cc:38
const Time_t kLowMask(0xFFFFFFFF)
std::string to_string(const V &value)
Definition: OMSAccess.h:77
virtual std::shared_ptr< TH2F > fillTheExtraHistogram() const
virtual std::shared_ptr< TH2F > fillTheExtraHistogram() const
std::tuple< double, double > getFromPayload(PayloadType &payload) override
assert(be >=bs)
ScatterPlot(const std::string &title, const std::string &xLabel, const std::string &yLabel)
unsigned long long Time_t
Definition: Time.h:14
const bshelpdata diffCentralValues(const BSParamsHelper &bs2, const bool isPull=false) const
std::pair< double, double > getFromPayload(PayloadType &payload) override
virtual std::string getStringFromTypeEnum(const parameters &parameter) const
Log< level::Warning, true > LogPrint
BSParamsHelper(const std::shared_ptr< PayloadType > &bs)
void printDebug(std::stringstream &ss)
HistoryPlot(const std::string &title, const std::string &yLabel)
std::string getStringFromParamEnum(const parameters &parameter, const bool addUnits=false)
Definition: plugin.cc:23
const bshelpdata diffErrors(const BSParamsHelper &bs2, const bool isPull=false) const
std::pair< double, double > getFromPayload(PayloadType &payload) override
def canvas(sub, attr)
Definition: svgfig.py:482
std::pair< double, double > getFromPayload(PayloadType &payload) override
std::shared_ptr< PayloadType > m_payload
std::shared_ptr< PayloadType > fetchPayload(const cond::Hash &payloadHash)