1 #ifndef CONDCORE_SIPIXELPLUGINS_SIPIXELGAINCALIBHELPER_H
2 #define CONDCORE_SIPIXELPLUGINS_SIPIXELGAINCALIBHELPER_H
17 #include <type_traits>
20 #include <fmt/printf.h>
31 #include "TPaveStats.h"
36 using AvgMap = std::map<uint32_t, float>;
38 namespace gainCalibPI {
44 template <
typename PayloadType>
45 static std::array<std::shared_ptr<TH1F>, 2>
fillDiffAndRatio(
const std::shared_ptr<PayloadType>& payload_A,
46 const std::shared_ptr<PayloadType>& payload_B,
48 std::array<std::shared_ptr<TH1F>, 2> arr;
50 std::vector<uint32_t> detids_A;
51 payload_A->getDetIds(detids_A);
52 std::vector<uint32_t> detids_B;
53 payload_B->getDetIds(detids_B);
55 std::vector<float> v_ratios;
56 std::vector<float> v_diffs;
58 if (detids_A != detids_B) {
59 edm::LogError(
"fillDiffAndRatio") <<
"the list of DetIds for the two payloads are not equal"
60 <<
" cannot make any comparison!" << std::endl;
63 assert(detids_A == detids_B);
64 for (
const auto&
d : detids_A) {
65 auto range = payload_A->getRange(
d);
66 int numberOfRowsToAverageOver = payload_A->getNumberOfRowsToAverageOver();
67 int ncols = payload_A->getNCols(
d);
68 int nRocsInRow = (
range.second -
range.first) /
ncols / numberOfRowsToAverageOver;
69 unsigned int nRowsForHLT = 1;
70 int nrows =
std::max((payload_A->getNumberOfRowsToAverageOver() * nRocsInRow),
73 auto rAndCol_A = payload_A->getRangeAndNCols(
d);
74 auto rAndCol_B = payload_B->getRangeAndNCols(
d);
75 bool isDeadCol, isNoisyCol;
79 for (
int row = 0; row < nrows; row++) {
82 auto gainA = payload_A->getGain(
col, row, rAndCol_A.first, rAndCol_A.second, isDeadCol, isNoisyCol);
83 auto gainB = payload_B->getGain(
col, row, rAndCol_B.first, rAndCol_B.second, isDeadCol, isNoisyCol);
84 ratio = gainB != 0 ? (gainA / gainB) : -1.;
89 auto pedA = payload_A->getPed(
col, row, rAndCol_A.first, rAndCol_A.second, isDeadCol, isNoisyCol);
90 auto pedB = payload_B->getPed(
col, row, rAndCol_B.first, rAndCol_B.second, isDeadCol, isNoisyCol);
91 ratio = pedB != 0 ? (pedA / pedB) : -1.;
96 edm::LogError(
"gainCalibPI::fillTheHisto") <<
"Unrecognized type " << theType << std::endl;
100 v_diffs.push_back(
diff);
101 v_ratios.push_back(
ratio);
106 std::sort(v_diffs.begin(), v_diffs.end());
107 std::sort(v_ratios.begin(), v_ratios.end());
109 double minDiff = v_diffs.front();
110 double maxDiff = v_diffs.back();
111 double minRatio = v_ratios.front();
112 double maxRatio = v_ratios.back();
114 arr[0] = std::make_shared<TH1F>(
"h_Ratio",
"", 50, minRatio - 1., maxRatio + 1.);
115 arr[1] = std::make_shared<TH1F>(
"h_Diff",
"", 50, minDiff - 1.,
maxDiff + 1.);
117 for (
const auto&
r : v_ratios) {
120 for (
const auto&
d : v_diffs) {
128 template <
typename PayloadType>
130 std::shared_ptr<TH1F> h1,
132 const std::vector<uint32_t>& wantedIds = {}) {
133 std::vector<uint32_t> detids;
134 if (wantedIds.empty()) {
137 detids.assign(wantedIds.begin(), wantedIds.end());
140 for (
const auto&
d : detids) {
146 int numberOfRowsToAverageOver =
payload->getNumberOfRowsToAverageOver();
148 int nRocsInRow = (
range.second -
range.first) /
ncols / numberOfRowsToAverageOver;
149 unsigned int nRowsForHLT = 1;
150 int nrows =
std::max((
payload->getNumberOfRowsToAverageOver() * nRocsInRow),
153 auto rangeAndCol =
payload->getRangeAndNCols(
d);
157 COUT <<
"NCOLS: " <<
payload->getNCols(
d) <<
" " << rangeAndCol.second <<
" NROWS:" << nrows
158 <<
", RANGES: " << rangeAndCol.first.second - rangeAndCol.first.first
159 <<
", Ratio: " <<
float(rangeAndCol.first.second - rangeAndCol.first.first) / rangeAndCol.second
165 for (
int row = 0; row < nrows; row++) {
168 quid =
payload->getGain(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
171 quid =
payload->getPed(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
174 edm::LogError(
"gainCalibPI::fillTheHisto") <<
"Unrecognized type " << theType << std::endl;
185 template <
typename PayloadType>
189 std::vector<uint32_t> detids;
192 for (
const auto&
d : detids) {
194 int numberOfRowsToAverageOver =
payload->getNumberOfRowsToAverageOver();
196 int nRocsInRow = (
range.second -
range.first) /
ncols / numberOfRowsToAverageOver;
197 unsigned int nRowsForHLT = 1;
198 int nrows =
std::max((
payload->getNumberOfRowsToAverageOver() * nRocsInRow),
201 auto rangeAndCol =
payload->getRangeAndNCols(
d);
208 for (
int row = 0; row < nrows; row++) {
213 payload->getGain(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
216 sumOfX +=
payload->getPed(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
219 edm::LogError(
"gainCalibPI::fillThePerModuleMap") <<
"Unrecognized type " << theType << std::endl;
225 map[
d] = sumOfX / nPixels;
231 template <
typename PayloadType>
233 std::shared_ptr<TH1> hBPix,
234 std::shared_ptr<TH1> hFPix,
236 std::vector<uint32_t> detids;
241 for (
const auto&
d : detids) {
244 int numberOfRowsToAverageOver =
payload->getNumberOfRowsToAverageOver();
246 int nRocsInRow = (
range.second -
range.first) /
ncols / numberOfRowsToAverageOver;
247 unsigned int nRowsForHLT = 1;
248 int nrows =
std::max((
payload->getNumberOfRowsToAverageOver() * nRocsInRow),
251 auto rangeAndCol =
payload->getRangeAndNCols(
d);
256 for (
int row = 0; row < nrows; row++) {
257 float gain =
payload->getGain(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
258 float ped =
payload->getPed(
col, row, rangeAndCol.first, rangeAndCol.second, isDeadColumn, isNoisyColumn);
262 if (isCorrelation_) {
263 hBPix->Fill(
gain, ped);
270 if (isCorrelation_) {
271 hFPix->Fill(
gain, ped);
278 edm::LogError(
"gainCalibPI::fillTheHistos") <<
d <<
" is not a Pixel DetId" << std::endl;
287 constexpr
char const*
TypeName[2] = {
"Gains",
"Pedestals"};
292 template <gainCalibPI::type myType,
class PayloadType>
298 Form(
"SiPixelGainCalibration %s Values",
TypeName[myType])) {
299 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
301 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
304 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
309 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
310 auto iov =
tag.iovs.front();
314 gStyle->SetOptStat(
"emr");
316 float minimum(9999.);
317 float maximum(-9999.);
321 maximum =
payload->getGainHigh();
322 minimum =
payload->getGainLow();
325 maximum =
payload->getPedHigh();
326 minimum =
payload->getPedLow();
333 TCanvas
canvas(
"Canv",
"Canv", 1200, 1000);
334 auto h1 = std::make_shared<TH1F>(Form(
"%s values",
TypeName[myType]),
335 Form(
"SiPixel Gain Calibration %s - %s;per %s %s;# %ss",
353 h1->GetYaxis()->SetRangeUser(0.1, h1->GetMaximum() * 10.);
354 h1->SetFillColor(kBlue);
355 h1->SetMarkerStyle(20);
356 h1->SetMarkerSize(1);
364 TLegend
legend = TLegend(0.40, 0.88, 0.94, 0.93);
365 legend.SetHeader((
"Payload hash: #bf{" + (std::get<1>(iov)) +
"}").c_str(),
369 legend.SetTextSize(0.025);
372 TPaveStats* st = (TPaveStats*)h1->FindObject(
"stats");
373 st->SetTextSize(0.03);
379 ltx.SetTextSize(0.05);
380 ltx.SetTextAlign(11);
381 ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.1,
382 1 - gPad->GetTopMargin() + 0.01,
383 (
"SiPixel Gain Calibration IOV:" + std::to_string(std::get<0>(iov))).c_str());
399 template <
bool isBarrel, gainCalibPI::type myType,
class PayloadType>
405 Form(
"SiPixelGainCalibration %s Values Per Region",
TypeName[myType])) {
408 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
410 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
413 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
417 bool fill()
override {
418 gStyle->SetOptStat(
"mr");
420 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
421 auto iov =
tag.iovs.front();
426 auto ip = paramValues.find(
"SetLog");
427 if (ip != paramValues.end()) {
428 auto answer = boost::lexical_cast<std::string>(ip->second);
432 <<
" is not a valid setting for this parameter, please use True,False,1,0,Yes,No \n\n";
438 std::vector<uint32_t> detids;
441 float minimum(9999.);
442 float maximum(-9999.);
446 maximum =
payload->getGainHigh();
447 minimum =
payload->getGainLow();
450 maximum =
payload->getPedHigh();
451 minimum =
payload->getPedLow();
477 Form(
"# %ss", (
isForHLT_ ?
"column" :
"pixel")),
491 myPlots.setLogScale();
493 myPlots.beautify(kBlue, -1);
496 TLegend
legend = TLegend(0.45, 0.88, 0.91, 0.92);
497 legend.SetHeader((
"hash: #bf{" + (std::get<1>(iov)) +
"}").c_str(),
501 legend.SetTextSize(0.025);
504 unsigned int maxPads =
isBarrel ? 4 : 12;
505 for (
unsigned int c = 1;
c <= maxPads;
c++) {
516 ltx.SetTextSize(0.05);
517 ltx.SetTextAlign(11);
519 for (
unsigned int c = 1;
c <= maxPads;
c++) {
522 auto leftX = setLog ? 0. : 0.1;
523 ltx.DrawLatexNDC(gPad->GetLeftMargin() + leftX,
524 1 - gPad->GetTopMargin() + 0.01,
552 Form(
"SiPixelGainCalibration %s Values Per Region %i tag(s)",
TypeName[myType],
ntags)) {
555 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
557 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
560 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
564 bool fill()
override {
565 gStyle->SetOptStat(
"mr");
570 auto theIOVs = cond::payloadInspector::PlotBase::getTag<0>().iovs;
571 auto f_tagname = cond::payloadInspector::PlotBase::getTag<0>().name;
573 auto firstiov = theIOVs.front();
574 std::tuple<cond::Time_t, cond::Hash> lastiov;
580 auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs;
581 l_tagname = cond::payloadInspector::PlotBase::getTag<1>().name;
582 lastiov = tag2iovs.front();
584 lastiov = theIOVs.back();
590 auto ip = paramValues.find(
"SetLog");
591 if (ip != paramValues.end()) {
592 auto answer = boost::lexical_cast<std::string>(ip->second);
596 <<
" is not a valid setting for this parameter, please use True,False,1,0,Yes,No \n\n";
600 std::shared_ptr<PayloadType> last_payload = this->
fetchPayload(std::get<1>(lastiov));
601 std::shared_ptr<PayloadType> first_payload = this->
fetchPayload(std::get<1>(firstiov));
603 std::string lastIOVsince = std::to_string(std::get<0>(lastiov));
604 std::string firstIOVsince = std::to_string(std::get<0>(firstiov));
606 std::vector<uint32_t> f_detids, l_detids;
607 last_payload->getDetIds(l_detids);
608 first_payload->getDetIds(f_detids);
610 float minimum(9999.);
611 float maximum(-9999.);
615 maximum =
std::max(last_payload->getGainHigh(), first_payload->getGainHigh());
616 minimum =
std::min(last_payload->getGainLow(), first_payload->getGainLow());
619 maximum =
std::max(last_payload->getPedHigh(), first_payload->getPedHigh());
620 minimum =
std::min(last_payload->getPedLow(), first_payload->getPedLow());
639 const char* path_toTopologyXML = l_phaseInfo.
pathToTopoXML();
646 Form(
"Last SiPixel Gain Calibration %s - %s", (
isForHLT_ ?
"ForHLT" :
"Offline"),
TypeName[myType]),
648 Form(
"# %ss", (
isForHLT_ ?
"column" :
"pixel")),
653 path_toTopologyXML = f_phaseInfo.pathToTopoXML();
660 Form(
"First SiPixel Gain Calibration %s - %s", (
isForHLT_ ?
"ForHLT" :
"Offline"),
TypeName[myType]),
662 Form(
"# %ss", (
isForHLT_ ?
"column" :
"pixel")),
676 f_myPlots.setLogScale();
677 l_myPlots.setLogScale();
680 l_myPlots.beautify(kRed, -1);
681 f_myPlots.beautify(kAzure, -1);
683 l_myPlots.draw(
canvas,
isBarrel,
"HIST", f_phaseInfo.isPhase1Comparison(l_phaseInfo));
684 f_myPlots.draw(
canvas,
isBarrel,
"HISTsames", f_phaseInfo.isPhase1Comparison(l_phaseInfo));
687 l_myPlots.rescaleMax(f_myPlots);
691 std::unique_ptr<TLegend>
legend;
693 legend = std::make_unique<TLegend>(0.36, 0.86, 0.94, 0.92);
694 legend->AddEntry(l_myPlots.getHistoFromMap(colorTag).get(), (
"#color[2]{" + l_tagname +
"}").c_str(),
"F");
695 legend->AddEntry(f_myPlots.getHistoFromMap(colorTag).get(), (
"#color[4]{" + f_tagname +
"}").c_str(),
"F");
696 legend->SetTextSize(0.024);
698 legend = std::make_unique<TLegend>(0.58, 0.80, 0.90, 0.92);
699 legend->AddEntry(l_myPlots.getHistoFromMap(colorTag).get(), (
"#color[2]{" + lastIOVsince +
"}").c_str(),
"F");
700 legend->AddEntry(f_myPlots.getHistoFromMap(colorTag).get(), (
"#color[4]{" + firstIOVsince +
"}").c_str(),
"F");
701 legend->SetTextSize(0.040);
705 unsigned int maxPads =
isBarrel ? 4 : 12;
706 for (
unsigned int c = 1;
c <= maxPads;
c++) {
718 ltx.SetTextSize(0.05);
719 ltx.SetTextAlign(11);
721 for (
unsigned int c = 1;
c <= maxPads;
c++) {
724 auto leftX = setLog ? 0. : 0.1;
725 ltx.DrawLatexNDC(gPad->GetLeftMargin() + leftX,
726 1 - gPad->GetTopMargin() + 0.01,
728 "} vs #color[2]{" + std::to_string(std::get<0>(lastiov)) +
"}")
747 template <
class PayloadType>
753 "SiPixelGainCalibration gain/pedestal correlations") {
754 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
756 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
759 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
763 bool fill()
override {
764 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
765 auto iov =
tag.iovs.front();
767 gStyle->SetOptStat(
"emr");
768 gStyle->SetPalette(1);
772 TCanvas
canvas(
"Canv",
"Canv", 1400, 800);
776 auto hBPix = std::make_shared<TH2F>(
"Correlation BPIX",
777 Form(
"SiPixel Gain Calibration %s BPIx;per %s gains;per %s pedestals",
788 auto hFPix = std::make_shared<TH2F>(
"Correlation FPIX",
789 Form(
"SiPixel Gain Calibration %s FPix;per %s gains;per %s pedestals",
800 for (
unsigned int i : {1, 2}) {
813 hBPix->GetYaxis()->SetTitleOffset(1.65);
820 hFPix->GetYaxis()->SetTitleOffset(1.65);
823 TLegend
legend = TLegend(0.3, 0.92, 0.70, 0.95);
824 legend.SetHeader((
"Payload hash: #bf{" + (std::get<1>(iov)) +
"}").c_str(),
827 legend.SetTextSize(0.025);
836 ltx.SetTextSize(0.045);
837 ltx.SetTextAlign(11);
839 ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.01,
840 1 - gPad->GetTopMargin() + 0.01,
841 (
"SiPixel Gain Calibration IOV:" + std::to_string(std::get<0>(iov))).c_str());
843 ltx.DrawLatexNDC(0.75, 0.15,
"BPIX");
846 ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.01,
847 1 - gPad->GetTopMargin() + 0.01,
848 (
"SiPixel Gain Calibration IOV:" + std::to_string(std::get<0>(iov))).c_str());
850 ltx.DrawLatexNDC(0.75, 0.15,
"FPIX");
855 canvas.SaveAs(
"out.root");
868 template <gainCalibPI::type myType,
class PayloadType>
874 Form(
"SiPixelGainCalibrationOffline %s Values By Partition",
TypeName[myType])) {
875 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
877 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
880 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
884 bool fill()
override {
885 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
886 auto iov =
tag.iovs.front();
888 gStyle->SetOptStat(
"emr");
892 TCanvas
canvas(
"Canv",
"Canv", 1400, 800);
896 float minimum(9999.);
897 float maximum(-9999.);
901 maximum =
payload->getGainHigh();
902 minimum =
payload->getGainLow();
905 maximum =
payload->getPedHigh();
906 minimum =
payload->getPedLow();
913 auto hBPix = std::make_shared<TH1F>(Form(
"%s BPIX",
TypeName[myType]),
914 Form(
"SiPixel Gain Calibration %s BPIx -%s;per %s %s (BPix);# %ss",
924 auto hFPix = std::make_shared<TH1F>(Form(
"%s FPIX",
TypeName[myType]),
925 Form(
"SiPixel Gain Calibration %s FPix -%s;per %s %s (FPix);# %ss",
935 for (
unsigned int i : {1, 2}) {
945 hBPix->GetYaxis()->SetRangeUser(0.1, hBPix->GetMaximum() * 10);
946 hBPix->SetFillColor(kBlue);
947 hBPix->SetMarkerStyle(20);
948 hBPix->SetMarkerSize(1);
952 hBPix->SetStats(
true);
956 hFPix->GetYaxis()->SetRangeUser(0.1, hFPix->GetMaximum() * 10);
957 hFPix->SetFillColor(kBlue);
958 hFPix->SetMarkerStyle(20);
959 hFPix->SetMarkerSize(1);
963 hFPix->SetStats(
true);
967 TLegend
legend = TLegend(0.32, 0.92, 0.97, 0.95);
968 legend.SetHeader((
"Payload hash: #bf{" + (std::get<1>(iov)) +
"}").c_str(),
972 legend.SetTextSize(0.025);
979 TPaveStats* st1 = (TPaveStats*)hBPix->FindObject(
"stats");
980 st1->SetTextSize(0.03);
984 TPaveStats* st2 = (TPaveStats*)hFPix->FindObject(
"stats");
985 st2->SetTextSize(0.03);
991 ltx.SetTextSize(0.045);
992 ltx.SetTextAlign(11);
994 ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.01,
995 1 - gPad->GetTopMargin() + 0.01,
996 (
"SiPixel Gain Calibration IOV:" + std::to_string(std::get<0>(iov))).c_str());
999 ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.01,
1000 1 - gPad->GetTopMargin() + 0.01,
1001 (
"SiPixel Gain Calibration IOV:" + std::to_string(std::get<0>(iov))).c_str());
1017 template <gainCalibPI::type myType,
class PayloadType>
1022 Form(
"SiPixelGainCalibration %s Values Comparison",
TypeName[myType])) {
1023 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
1029 bool fill(
const std::vector<std::tuple<cond::Time_t, cond::Hash>>& iovs)
override {
1030 gStyle->SetOptStat(
"emr");
1031 TGaxis::SetExponentOffset(-0.1, 0.01,
"y");
1032 TH1F::SetDefaultSumw2(
true);
1034 std::vector<std::tuple<cond::Time_t, cond::Hash>> sorted_iovs = iovs;
1036 std::sort(begin(sorted_iovs),
end(sorted_iovs), [](
auto const&
t1,
auto const&
t2) {
1037 return std::get<0>(
t1) < std::get<0>(
t2);
1039 auto firstiov = sorted_iovs.front();
1040 auto lastiov = sorted_iovs.back();
1042 std::shared_ptr<PayloadType> last_payload = this->
fetchPayload(std::get<1>(lastiov));
1043 std::shared_ptr<PayloadType> first_payload = this->
fetchPayload(std::get<1>(firstiov));
1045 std::string lastIOVsince = std::to_string(std::get<0>(lastiov));
1046 std::string firstIOVsince = std::to_string(std::get<0>(firstiov));
1048 float minimum(9999.);
1049 float maximum(-9999.);
1053 maximum =
std::max(last_payload->getGainHigh(), first_payload->getGainHigh());
1054 minimum =
std::min(last_payload->getGainLow(), first_payload->getGainLow());
1057 maximum =
std::max(last_payload->getPedHigh(), first_payload->getPedHigh());
1058 minimum =
std::min(last_payload->getPedLow(), first_payload->getPedLow());
1065 TCanvas
canvas(
"Canv",
"Canv", 1200, 1000);
1067 auto hfirst = std::make_shared<TH1F>(Form(
"First, IOV %s", firstIOVsince.c_str()),
1068 Form(
"SiPixel Gain Calibration %s - %s;per %s %s;# %ss",
1078 auto hlast = std::make_shared<TH1F>(Form(
"Last, IOV %s", lastIOVsince.c_str()),
1079 Form(
"SiPixel Gain Calibration %s - %s;per %s %s;# %ss",
1098 hfirst->GetYaxis()->SetRangeUser(1., extrema.second * 10);
1100 hfirst->SetTitle(
"");
1101 hfirst->SetLineColor(kRed);
1102 hfirst->SetBarWidth(0.95);
1103 hfirst->Draw(
"hist");
1105 hlast->SetTitle(
"");
1106 hlast->SetFillColorAlpha(kBlue, 0.20);
1107 hlast->SetBarWidth(0.95);
1108 hlast->Draw(
"histsames");
1111 hfirst->SetStats(
true);
1113 hlast->SetStats(
true);
1117 TLegend
legend = TLegend(0.45, 0.86, 0.74, 0.94);
1121 legend.AddEntry(hfirst.get(), (
"payload: #color[2]{" + std::get<1>(firstiov) +
"}").c_str(),
"F");
1122 legend.AddEntry(hlast.get(), (
"payload: #color[4]{" + std::get<1>(lastiov) +
"}").c_str(),
"F");
1123 legend.SetTextSize(0.022);
1127 TPaveStats* st1 = (TPaveStats*)hfirst->FindObject(
"stats");
1128 st1->SetTextSize(0.021);
1129 st1->SetLineColor(kRed);
1130 st1->SetTextColor(kRed);
1133 TPaveStats* st2 = (TPaveStats*)hlast->FindObject(
"stats");
1134 st2->SetTextSize(0.021);
1135 st2->SetLineColor(kBlue);
1136 st2->SetTextColor(kBlue);
1139 auto ltx = TLatex();
1140 ltx.SetTextFont(62);
1142 ltx.SetTextSize(0.047);
1143 ltx.SetTextAlign(11);
1144 ltx.DrawLatexNDC(gPad->GetLeftMargin(),
1145 1 - gPad->GetTopMargin() + 0.01,
1146 (
"SiPixel Gain Calibration IOV:#color[2]{" + std::to_string(std::get<0>(firstiov)) +
1147 "} vs IOV:#color[4]{" + std::to_string(std::get<0>(lastiov)) +
"}")
1153 canvas.SaveAs(
"out.root");
1164 template <gainCalibPI::type myType,
class PayloadType>
1174 template <gainCalibPI::type myType,
class PayloadType>
1186 template <gainCalibPI::type myType, cond::payloadInspector::IOVMultiplicity nIOVs,
int ntags,
class PayloadType>
1191 Form(
"SiPixelGainCalibration %s Diff and Ratio %i tag(s)",
TypeName[myType],
ntags)) {
1192 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
1199 bool fill()
override {
1200 gStyle->SetOptStat(
"emr");
1201 TGaxis::SetExponentOffset(-0.1, 0.01,
"y");
1202 TH1F::SetDefaultSumw2(
true);
1207 auto theIOVs = cond::payloadInspector::PlotBase::getTag<0>().iovs;
1208 auto f_tagname = cond::payloadInspector::PlotBase::getTag<0>().name;
1210 auto firstiov = theIOVs.front();
1211 std::tuple<cond::Time_t, cond::Hash> lastiov;
1217 auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs;
1218 l_tagname = cond::payloadInspector::PlotBase::getTag<1>().name;
1219 lastiov = tag2iovs.front();
1221 lastiov = theIOVs.back();
1224 std::shared_ptr<PayloadType> last_payload = this->
fetchPayload(std::get<1>(lastiov));
1225 std::shared_ptr<PayloadType> first_payload = this->
fetchPayload(std::get<1>(firstiov));
1227 std::string lastIOVsince = std::to_string(std::get<0>(lastiov));
1228 std::string firstIOVsince = std::to_string(std::get<0>(firstiov));
1230 TCanvas
canvas(
"Canv",
"Canv", 1300, 800);
1240 array[0]->SetTitle(Form(
"SiPixel Gain Calibration %s - %s;per %s %s ratio;# %ss",
1247 array[1]->SetTitle(Form(
"SiPixel Gain Calibration %s - %s;per %s %s difference;# %ss",
1255 array[0]->SetTitle(
"");
1256 array[0]->SetLineColor(kBlack);
1257 array[0]->SetFillColor(kRed);
1258 array[0]->SetBarWidth(0.90);
1259 array[0]->SetMaximum(
array[0]->GetMaximum() * 10);
1260 array[0]->Draw(
"bar");
1262 array[0]->SetStats(
true);
1265 array[1]->SetTitle(
"");
1266 array[1]->SetLineColor(kBlack);
1267 array[1]->SetFillColor(kBlue);
1268 array[1]->SetBarWidth(0.90);
1269 array[1]->SetMaximum(
array[1]->GetMaximum() * 10);
1270 array[1]->Draw(
"bar");
1272 array[1]->SetStats(
true);
1278 latex.SetTextSize(0.024);
1279 latex.SetTextAlign(13);
1283 fmt::sprintf(
"#scale[1.2]{SiPixelGainCalibration%s Ratio}", (
isForHLT_ ?
"ForHLT" :
"Offline")).c_str());
1286 .41, .91, (
"#splitline{#font[12]{" + f_tagname +
"}}{ / #font[12]{" + l_tagname +
"}}").c_str());
1288 latex.DrawLatexNDC(.41, .91, (firstIOVsince +
" / " + lastIOVsince).c_str());
1293 latex2.SetTextSize(0.024);
1294 latex2.SetTextAlign(13);
1295 latex2.DrawLatexNDC(
1298 fmt::sprintf(
"#scale[1.2]{SiPixelGainCalibration%s Diff}", (
isForHLT_ ?
"ForHLT" :
"Offline")).c_str());
1300 latex2.DrawLatexNDC(
1301 .41, .91, (
"#splitline{#font[12]{" + f_tagname +
"}}{ - #font[12]{" + l_tagname +
"}}").c_str());
1303 latex2.DrawLatexNDC(.41, .91, (firstIOVsince +
" - " + lastIOVsince).c_str());
1306 TPaveStats* st1 = (TPaveStats*)
array[0]->FindObject(
"stats");
1307 st1->SetTextSize(0.027);
1308 st1->SetLineColor(kRed);
1309 st1->SetTextColor(kRed);
1312 TPaveStats* st2 = (TPaveStats*)
array[1]->FindObject(
"stats");
1313 st2->SetTextSize(0.027);
1314 st2->SetLineColor(kBlue);
1315 st2->SetTextColor(kBlue);
1318 auto ltx = TLatex();
1319 ltx.SetTextFont(62);
1321 ltx.SetTextSize(0.040);
1322 ltx.SetTextAlign(11);
1325 gPad->GetLeftMargin(),
1326 1 - gPad->GetTopMargin() + 0.01,
1327 fmt::sprintf(
"SiPixel %s Ratio, IOV %s / %s",
TypeName[myType], firstIOVsince, lastIOVsince).c_str());
1331 gPad->GetLeftMargin(),
1332 1 - gPad->GetTopMargin() + 0.01,
1333 fmt::sprintf(
"SiPixel %s Diff, IOV %s - %s",
TypeName[myType], firstIOVsince, lastIOVsince).c_str());
1338 canvas.SaveAs(
"out.root");
1354 template <gainCalibPI::type myType,
class PayloadType>
1360 Form(
"SiPixelGainCalibration %s Barrel Pixel Map",
TypeName[myType])),
1363 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
1365 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
1368 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
1372 bool fill()
override {
1373 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
1374 auto iov =
tag.iovs.front();
1379 static constexpr
int n_layers = 4;
1381 std::map<uint32_t, float> GainCalibMap_;
1384 edm::LogError(
label_) <<
"SiPixelGainCalibration maps are not supported for non-Phase1 Pixel geometries !";
1385 TCanvas
canvas(
"Canv",
"Canv", 1200, 1000);
1393 std::array<double, n_layers> minima = {{999., 999., 999., 999.}};
1395 for (
const auto& element : GainCalibMap_) {
1400 if (element.second < minima.at(
layer - 1))
1401 minima.at(
layer - 1) = element.second;
1403 theBPixGainsMap.fillWholeModule(element.first, element.second);
1407 gStyle->SetOptStat(0);
1409 TCanvas
canvas(
"Summary",
"Summary", 1200, 1200);
1410 theBPixGainsMap.drawBarrelMaps(
canvas);
1412 for (
unsigned int lay = 1; lay <= n_layers; lay++) {
1415 auto h_bpix_Gains = theBPixGainsMap.getLayerMaps();
1417 COUT <<
" layer:" << lay <<
" max:" << h_bpix_Gains[lay - 1]->GetMaximum() <<
" min: " << minima.at(lay - 1)
1420 h_bpix_Gains[lay - 1]->GetZaxis()->SetRangeUser(minima.at(lay - 1) - 0.001,
1421 h_bpix_Gains[lay - 1]->GetMaximum() + 0.001);
1426 for (
unsigned int lay = 1; lay <= n_layers; lay++) {
1428 auto ltx = TLatex();
1429 ltx.SetTextFont(62);
1430 ltx.SetTextColor(kBlue);
1431 ltx.SetTextSize(0.055);
1432 ltx.SetTextAlign(11);
1433 ltx.DrawLatexNDC(gPad->GetLeftMargin(),
1434 1 - gPad->GetTopMargin() + 0.01,
1436 ? (
"IOV:" + std::to_string(unpacked.second)).c_str()
1437 : (std::to_string(unpacked.first) +
"," + std::to_string(unpacked.second)).c_str());
1458 template <gainCalibPI::type myType,
class PayloadType>
1464 Form(
"SiPixelGainCalibration %s Forward Pixel Map",
TypeName[myType])),
1467 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
1469 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
1472 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
1476 bool fill()
override {
1477 auto tag = cond::payloadInspector::PlotBase::getTag<0>();
1478 auto iov =
tag.iovs.front();
1482 static constexpr
int n_rings = 2;
1484 std::map<uint32_t, float> GainCalibMap_;
1487 edm::LogError(
label_) <<
"SiPixelGainCalibration maps are not supported for non-Phase1 Pixel geometries !";
1488 TCanvas
canvas(
"Canv",
"Canv", 1200, 1000);
1496 std::array<double, n_rings> minima = {{999., 999.}};
1498 for (
const auto& element : GainCalibMap_) {
1503 if (element.second < minima.at(
ring - 1))
1504 minima.at(
ring - 1) = element.second;
1506 theFPixGainsMap.fillWholeModule(element.first, element.second);
1510 gStyle->SetOptStat(0);
1512 TCanvas
canvas(
"Summary",
"Summary", 1200, 600);
1513 theFPixGainsMap.drawForwardMaps(
canvas);
1518 auto h_fpix_Gains = theFPixGainsMap.getRingMaps();
1520 COUT <<
" ring:" <<
ring <<
" max:" << h_fpix_Gains[
ring - 1]->GetMaximum() <<
" min: " << minima.at(
ring - 1)
1523 h_fpix_Gains[
ring - 1]->GetZaxis()->SetRangeUser(minima.at(
ring - 1) - 0.001,
1524 h_fpix_Gains[
ring - 1]->GetMaximum() + 0.001);
1531 auto ltx = TLatex();
1532 ltx.SetTextFont(62);
1533 ltx.SetTextColor(kBlue);
1534 ltx.SetTextSize(0.05);
1535 ltx.SetTextAlign(11);
1536 ltx.DrawLatexNDC(gPad->GetLeftMargin(),
1537 1 - gPad->GetTopMargin() + 0.01,
1539 ? (
"IOV:" + std::to_string(unpacked.second)).c_str()
1540 : (std::to_string(unpacked.first) +
"," + std::to_string(unpacked.second)).c_str());
1559 template <gainCalibPI::type myType,
class PayloadType, cond::payloadInspector::IOVMultiplicity nIOVs,
int ntags>
1565 Form(
"SiPixelGainCalibration %s Comparison by Region",
TypeName[myType])) {
1566 if constexpr (std::is_same_v<PayloadType, SiPixelGainCalibrationOffline>) {
1568 label_ =
"SiPixelGainCalibrationOffline_PayloadInspector";
1571 label_ =
"SiPixelGainCalibrationForHLT_PayloadInspector";
1575 bool fill()
override {
1576 gStyle->SetPaintTextFormat(
".3f");
1579 auto theIOVs = cond::payloadInspector::PlotBase::getTag<0>().iovs;
1580 auto f_tagname = cond::payloadInspector::PlotBase::getTag<0>().name;
1582 auto firstiov = theIOVs.front();
1583 std::tuple<cond::Time_t, cond::Hash> lastiov;
1589 auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs;
1590 l_tagname = cond::payloadInspector::PlotBase::getTag<1>().name;
1591 lastiov = tag2iovs.front();
1593 lastiov = theIOVs.back();
1596 std::shared_ptr<PayloadType> last_payload = this->
fetchPayload(std::get<1>(lastiov));
1597 std::shared_ptr<PayloadType> first_payload = this->
fetchPayload(std::get<1>(firstiov));
1599 std::map<uint32_t, float> f_GainsMap_;
1602 std::map<uint32_t, float> l_GainsMap_;
1605 std::string lastIOVsince = std::to_string(std::get<0>(lastiov));
1606 std::string firstIOVsince = std::to_string(std::get<0>(firstiov));
1608 TCanvas
canvas(
"Comparison",
"Comparison", 1600, 800);
1613 std::map<SiPixelPI::regions, std::shared_ptr<TH1F>> FirstGains_spectraByRegion;
1614 std::map<SiPixelPI::regions, std::shared_ptr<TH1F>> LastGains_spectraByRegion;
1615 std::shared_ptr<TH1F> summaryFirst;
1616 std::shared_ptr<TH1F> summaryLast;
1618 float minimum(9999.);
1619 float maximum(-9999.);
1623 maximum =
std::max(last_payload->getGainHigh(), first_payload->getGainHigh());
1624 minimum =
std::min(last_payload->getGainLow(), first_payload->getGainLow());
1627 maximum =
std::max(last_payload->getPedHigh(), first_payload->getPedHigh());
1628 minimum =
std::min(last_payload->getPedLow(), first_payload->getPedLow());
1640 FirstGains_spectraByRegion[
part] =
1641 std::make_shared<TH1F>(Form(
"hfirstGains_%s", s_part.c_str()),
1642 Form(
";%s #LT %s #GT;n. of modules", s_part.c_str(),
TypeName[myType]),
1647 LastGains_spectraByRegion[
part] =
1648 std::make_shared<TH1F>(Form(
"hlastGains_%s", s_part.c_str()),
1649 Form(
";%s #LT %s #GT;n. of modules", s_part.c_str(),
TypeName[myType]),
1655 summaryFirst = std::make_shared<TH1F>(
"first Summary",
1656 Form(
"Summary of #LT per %s %s #GT;;average %s",
1660 FirstGains_spectraByRegion.size(),
1662 FirstGains_spectraByRegion.size());
1664 summaryLast = std::make_shared<TH1F>(
"last Summary",
1665 Form(
"Summary of #LT per %s %s #GT;;average %s",
1669 LastGains_spectraByRegion.size(),
1671 LastGains_spectraByRegion.size());
1674 const char* path_toTopologyXML = f_phaseInfo.pathToTopoXML();
1682 for (
const auto& it : f_GainsMap_) {
1689 t_info_fromXML.
init();
1690 DetId detid(it.first);
1694 FirstGains_spectraByRegion[thePart]->Fill(it.second);
1698 path_toTopologyXML = l_phaseInfo.pathToTopoXML();
1706 for (
const auto& it : l_GainsMap_) {
1713 t_info_fromXML.
init();
1714 DetId detid(it.first);
1718 LastGains_spectraByRegion[thePart]->Fill(it.second);
1729 FirstGains_spectraByRegion[
part]->GetMean() > 10.e-6 ? FirstGains_spectraByRegion[
part]->GetMean() : 0.;
1730 summaryFirst->SetBinContent(
bin, f_mean);
1736 LastGains_spectraByRegion[
part]->GetMean() > 10.e-6 ? LastGains_spectraByRegion[
part]->GetMean() : 0.;
1737 summaryLast->SetBinContent(
bin, l_mean);
1743 summaryFirst->SetMarkerColor(kRed);
1744 summaryFirst->GetXaxis()->LabelsOption(
"v");
1745 summaryFirst->GetXaxis()->SetLabelSize(0.05);
1746 summaryFirst->GetYaxis()->SetTitleOffset(0.9);
1749 summaryLast->SetMarkerColor(kBlue);
1750 summaryLast->GetYaxis()->SetTitleOffset(0.9);
1751 summaryLast->GetXaxis()->LabelsOption(
"v");
1752 summaryLast->GetXaxis()->SetLabelSize(0.05);
1759 summaryFirst->SetFillColor(kRed);
1760 summaryLast->SetFillColor(kBlue);
1762 summaryFirst->SetBarWidth(0.45);
1763 summaryFirst->SetBarOffset(0.1);
1765 summaryLast->SetBarWidth(0.4);
1766 summaryLast->SetBarOffset(0.55);
1768 summaryLast->SetMarkerSize(1.2);
1769 summaryFirst->SetMarkerSize(1.2);
1771 float max = (summaryFirst->GetMaximum() > summaryLast->GetMaximum()) ? summaryFirst->GetMaximum()
1772 : summaryLast->GetMaximum();
1774 summaryFirst->GetYaxis()->SetRangeUser(0.,
std::max(0.,
max * 1.40));
1776 summaryFirst->Draw(
"b text0");
1777 summaryLast->Draw(
"b text0 same");
1779 TLegend
legend = TLegend(0.52, 0.80, 0.98, 0.9);
1780 legend.SetHeader(Form(
"#LT %s #GT value comparison",
TypeName[myType]),
1783 legend.SetHeader(
"#mu_{H} value comparison",
"C");
1786 l_tagOrHash = l_tagname;
1787 f_tagOrHash = f_tagname;
1789 l_tagOrHash = std::get<1>(lastiov);
1790 f_tagOrHash = std::get<1>(firstiov);
1795 (
"IOV: #scale[1.2]{" + std::to_string(std::get<0>(lastiov)) +
"} | #color[4]{" + l_tagOrHash +
"}").c_str(),
1799 (
"IOV: #scale[1.2]{" + std::to_string(std::get<0>(firstiov)) +
"} | #color[2]{" + f_tagOrHash +
"}").c_str(),