1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#include "CondCore/Utilities/interface/PayloadInspectorModule.h"
#include "CondCore/Utilities/interface/PayloadInspector.h"
#include "CondCore/CondDB/interface/Time.h"
// the data format of the condition to be inspected
#include "CondFormats/EcalObjects/interface/EcalDCSTowerStatus.h"
#include "DataFormats/EcalDetId/interface/EBDetId.h"
#include "DataFormats/EcalDetId/interface/EEDetId.h"
#include "CondCore/EcalPlugins/plugins/EcalDrawUtils.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TLine.h"
#include "TLatex.h"
#include <memory>
#include <sstream>
namespace {
/*****************************************
2d plot of Ecal DCS Tower Status Errors Total of 1 IOV
******************************************/
class EcalDCSTowerStatusSummaryPlot : public cond::payloadInspector::PlotImage<EcalDCSTowerStatus> {
public:
EcalDCSTowerStatusSummaryPlot()
: cond::payloadInspector::PlotImage<EcalDCSTowerStatus>("Ecal DCS Tower Status Errors Total - map ") {
setSingleIov(true);
}
bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
auto iov = iovs.front(); //get reference to 1st element in the vector iovs
std::shared_ptr<EcalDCSTowerStatus> payload =
fetchPayload(std::get<1>(iov)); //std::get<1>(iov) refers to the Hash in the tuple iov
unsigned int run = std::get<0>(iov); //referes to Time_t in iov.
TH2F* align; //pointer to align which is a 2D histogram
int NbRows = 2;
int NbColumns = 8;
if (payload.get()) { //payload is an iov retrieved from payload using hash.
align = new TH2F("Ecal DCS Tower Status Errors Total",
"EB/EE LV LVNOMINAL HV HVNOMINAL HVEED HVEEDNOMINAL TotalItems",
NbColumns,
0,
NbColumns,
NbRows,
0,
NbRows);
float ebVals[] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
float eeVals[] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
long unsigned int ebTotal = (payload->barrelItems()).size();
long unsigned int eeTotal = (payload->endcapItems()).size();
getSummary(payload->barrelItems(), ebVals, ebTotal);
getSummary(payload->endcapItems(), eeVals, eeTotal);
double row = NbRows - 0.5;
//EB summary values
align->Fill(0.5, row, 1);
for (int i = 0; i < 6; i++) {
align->Fill(1.5 + i, row, ebVals[i]);
}
align->Fill(7.5, row, ebTotal);
row--;
align->Fill(0.5, row, 2);
for (int i = 0; i < 6; i++) {
align->Fill(1.5 + i, row, eeVals[i]);
}
align->Fill(7.5, row, eeTotal);
} // if payload.get()
else
return false;
gStyle->SetPalette(1);
gStyle->SetOptStat(0);
TCanvas canvas("CC map", "CC map", 1000, 1000);
TLatex t1;
t1.SetNDC();
t1.SetTextAlign(26);
t1.SetTextSize(0.04);
t1.SetTextColor(2);
t1.DrawLatex(0.5, 0.96, Form("Ecal DCSTower Status Errors Total, IOV %i", run));
TPad* pad = new TPad("pad", "pad", 0.0, 0.0, 1.0, 0.94);
pad->Draw();
pad->cd();
align->Draw("TEXT");
drawTable(NbRows, NbColumns);
align->GetXaxis()->SetTickLength(0.);
align->GetXaxis()->SetLabelSize(0.);
align->GetYaxis()->SetTickLength(0.);
align->GetYaxis()->SetLabelSize(0.);
std::string ImageName(m_imageFileName);
canvas.SaveAs(ImageName.c_str());
return true;
} // fill method
void getSummary(std::vector<EcalChannelStatusCode> vItems, float vals[], long unsigned int& total) {
unsigned int shift = 0, mask = 1;
unsigned int statusCode;
for (std::vector<EcalChannelStatusCode>::const_iterator iItems = vItems.begin(); iItems != vItems.end();
++iItems) {
statusCode = iItems->getStatusCode();
for (shift = 0; shift < 6; ++shift) {
mask = 1 << (shift);
if (statusCode & mask) {
vals[shift] += 1;
}
}
}
}
};
} // namespace
// Register the classes as boost python plugin
PAYLOAD_INSPECTOR_MODULE(EcalDCSTowerStatus) { PAYLOAD_INSPECTOR_CLASS(EcalDCSTowerStatusSummaryPlot); }
|