File indexing completed on 2024-04-06 12:01:36
0001 #include "CondCore/Utilities/interface/PayloadInspectorModule.h"
0002 #include "CondCore/Utilities/interface/PayloadInspector.h"
0003 #include "CondCore/CondDB/interface/Time.h"
0004 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0005 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0006 #include "CondCore/EcalPlugins/plugins/EcalDrawUtils.h"
0007
0008
0009 #include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h"
0010
0011 #include "TH2F.h" // a 2-D histogram with four bytes per cell (float)
0012 #include "TCanvas.h"
0013 #include "TLine.h"
0014 #include "TStyle.h"
0015 #include "TLatex.h" //write mathematical equations.
0016 #include "TPave.h"
0017 #include "TPaveStats.h"
0018 #include <string>
0019 #include <fstream>
0020
0021 namespace {
0022
0023
0024
0025
0026 class EcalTimeBiasCorrectionsPlot : public cond::payloadInspector::PlotImage<EcalTimeBiasCorrections> {
0027 public:
0028
0029
0030 EcalTimeBiasCorrectionsPlot()
0031 : cond::payloadInspector::PlotImage<EcalTimeBiasCorrections>("Ecal Time Bias Corrections - map ") {
0032 setSingleIov(true);
0033 }
0034
0035 bool fill(const std::vector<std::tuple<cond::Time_t, cond::Hash> >& iovs) override {
0036 auto iov = iovs.front();
0037 std::shared_ptr<EcalTimeBiasCorrections> payload = fetchPayload(std::get<1>(iov));
0038 unsigned int run = std::get<0>(iov);
0039 TH2F* align;
0040 int NbRows;
0041
0042 if (payload.get()) {
0043 EcalTimeBiasCorrections it = (*payload);
0044
0045
0046
0047
0048
0049
0050
0051
0052 NbRows = it.EBTimeCorrAmplitudeBins.size();
0053
0054
0055
0056
0057
0058
0059 if (NbRows == 0)
0060 return false;
0061
0062 align = new TH2F("Ecal Time Bias Corrections",
0063 "EBTimeCorrAmplitudeBins EBTimeCorrShiftBins EETimeCorrAmplitudeBins EETimeCorrShiftBins",
0064 4,
0065 0,
0066 4,
0067 NbRows,
0068 0,
0069 NbRows);
0070
0071 double row = NbRows - 0.5;
0072
0073 fillPlot_align(it.EBTimeCorrAmplitudeBins, align, 0.5, row);
0074 fillPlot_align(it.EBTimeCorrShiftBins, align, 1.5, row);
0075 fillPlot_align(it.EETimeCorrAmplitudeBins, align, 2.5, row);
0076 fillPlot_align(it.EETimeCorrShiftBins, align, 3.5, row);
0077
0078 } else
0079 return false;
0080
0081 gStyle->SetPalette(1);
0082 gStyle->SetOptStat(0);
0083 TCanvas canvas("CC map", "CC map", 1000, 1000);
0084 TLatex t1;
0085 t1.SetNDC();
0086 t1.SetTextAlign(26);
0087 t1.SetTextSize(0.05);
0088 t1.SetTextColor(2);
0089 t1.DrawLatex(0.5, 0.96, Form("Ecal Time Bias Corrections, IOV %i", run));
0090
0091 TPad* pad = new TPad("pad", "pad", 0.0, 0.0, 1.0, 0.94);
0092 pad->Draw();
0093 pad->cd();
0094 align->Draw("TEXT");
0095
0096 drawTable(NbRows, 4);
0097
0098 align->GetXaxis()->SetTickLength(0.);
0099 align->GetXaxis()->SetLabelSize(0.);
0100 align->GetYaxis()->SetTickLength(0.);
0101 align->GetYaxis()->SetLabelSize(0.);
0102
0103 std::string ImageName(m_imageFileName);
0104 canvas.SaveAs(ImageName.c_str());
0105
0106 return true;
0107 }
0108
0109 void fillPlot_align(std::vector<float>& vect, TH2F* align, float column, double& row) {
0110 for (std::vector<float>::const_iterator i = vect.begin(); i != vect.end(); i++) {
0111 align->Fill(column, row, *i);
0112 row = row - 1;
0113 }
0114 }
0115 };
0116
0117
0118
0119
0120 template <cond::payloadInspector::IOVMultiplicity nIOVs, int ntags>
0121 class EcalTimeBiasCorrectionsDiffBase
0122 : public cond::payloadInspector::PlotImage<EcalTimeBiasCorrections, nIOVs, ntags> {
0123 public:
0124 EcalTimeBiasCorrectionsDiffBase()
0125 : cond::payloadInspector::PlotImage<EcalTimeBiasCorrections, nIOVs, ntags>(
0126 "Ecal Time Bias Corrections difference") {}
0127 bool fill() override {
0128 unsigned int run[2], NbRows = 0;
0129 float val[4][36];
0130 TH2F* align = new TH2F("", "", 1, 0., 1., 1, 0., 1.);
0131 std::string l_tagname[2];
0132 auto iovs = cond::payloadInspector::PlotBase::getTag<0>().iovs;
0133 l_tagname[0] = cond::payloadInspector::PlotBase::getTag<0>().name;
0134 auto firstiov = iovs.front();
0135 run[0] = std::get<0>(firstiov);
0136 std::tuple<cond::Time_t, cond::Hash> lastiov;
0137 if (ntags == 2) {
0138 auto tag2iovs = cond::payloadInspector::PlotBase::getTag<1>().iovs;
0139 l_tagname[1] = cond::payloadInspector::PlotBase::getTag<1>().name;
0140 lastiov = tag2iovs.front();
0141 } else {
0142 lastiov = iovs.back();
0143 l_tagname[1] = l_tagname[0];
0144 }
0145 run[1] = std::get<0>(lastiov);
0146 for (int irun = 0; irun < nIOVs; irun++) {
0147 std::shared_ptr<EcalTimeBiasCorrections> payload;
0148 if (irun == 0) {
0149 payload = this->fetchPayload(std::get<1>(firstiov));
0150 } else {
0151 payload = this->fetchPayload(std::get<1>(lastiov));
0152 }
0153 if (payload.get()) {
0154 EcalTimeBiasCorrections it = (*payload);
0155
0156 NbRows = it.EBTimeCorrAmplitudeBins.size();
0157 if (irun == 1) {
0158 align =
0159 new TH2F("Ecal Time Bias Corrections",
0160 "EBTimeCorrAmplitudeBins EBTimeCorrShiftBins EETimeCorrAmplitudeBins EETimeCorrShiftBins",
0161 4,
0162 0,
0163 4,
0164 NbRows,
0165 0,
0166 NbRows);
0167 }
0168
0169 double row = NbRows - 0.5;
0170
0171 fillDiff_align(it.EBTimeCorrAmplitudeBins, align, val[0], 0.5, row, irun);
0172 fillDiff_align(it.EBTimeCorrShiftBins, align, val[1], 1.5, row, irun);
0173 fillDiff_align(it.EETimeCorrAmplitudeBins, align, val[2], 2.5, row, irun);
0174 fillDiff_align(it.EETimeCorrShiftBins, align, val[3], 3.5, row, irun);
0175 ;
0176
0177 }
0178 else
0179 return false;
0180 }
0181
0182 gStyle->SetPalette(1);
0183 gStyle->SetOptStat(0);
0184 TCanvas canvas("CC map", "CC map", 1000, 1000);
0185 TLatex t1;
0186 t1.SetNDC();
0187 t1.SetTextAlign(26);
0188 t1.SetTextSize(0.05);
0189 t1.SetTextColor(2);
0190 t1.DrawLatex(0.5, 0.96, Form("Ecal Time Bias Corrections, IOV %i - %i", run[1], run[0]));
0191
0192 TPad* pad = new TPad("pad", "pad", 0.0, 0.0, 1.0, 0.94);
0193 pad->Draw();
0194 pad->cd();
0195 align->Draw("TEXT");
0196
0197 drawTable(NbRows, 4);
0198
0199 align->GetXaxis()->SetTickLength(0.);
0200 align->GetXaxis()->SetLabelSize(0.);
0201 align->GetYaxis()->SetTickLength(0.);
0202 align->GetYaxis()->SetLabelSize(0.);
0203
0204 std::string ImageName(this->m_imageFileName);
0205 canvas.SaveAs(ImageName.c_str());
0206
0207 return true;
0208 }
0209
0210 void fillDiff_align(
0211 const std::vector<float>& vect, TH2F* align, float val[], const float column, double row, unsigned irun) {
0212 int irow = 0;
0213
0214 for (std::vector<float>::const_iterator i = vect.begin(); i != vect.end(); ++i) {
0215 if (irun == 0) {
0216 val[irow] = (*i);
0217 } else {
0218 align->Fill(column, row, (*i) - val[irow]);
0219 row--;
0220 }
0221 irow++;
0222 }
0223 }
0224 };
0225 using EcalTimeBiasCorrectionsDiffOneTag = EcalTimeBiasCorrectionsDiffBase<cond::payloadInspector::SINGLE_IOV, 1>;
0226 using EcalTimeBiasCorrectionsDiffTwoTags = EcalTimeBiasCorrectionsDiffBase<cond::payloadInspector::SINGLE_IOV, 2>;
0227
0228 }
0229
0230
0231 PAYLOAD_INSPECTOR_MODULE(EcalTimeBiasCorrections) {
0232 PAYLOAD_INSPECTOR_CLASS(EcalTimeBiasCorrectionsPlot);
0233 PAYLOAD_INSPECTOR_CLASS(EcalTimeBiasCorrectionsDiffOneTag);
0234 PAYLOAD_INSPECTOR_CLASS(EcalTimeBiasCorrectionsDiffTwoTags);
0235 }