File indexing completed on 2024-04-06 12:01:33
0001 #include "CondCore/Utilities/interface/PayloadInspector.h"
0002 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0003 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0004 #include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h"
0005
0006 #include "TH2F.h"
0007 #include <string>
0008
0009 enum { kEBChannels = 61200, kEEChannels = 14648 };
0010 enum {
0011 MIN_IETA = 1,
0012 MIN_IPHI = 1,
0013 MAX_IETA = 85,
0014 MAX_IPHI = 360,
0015 EBhistEtaMax = 171
0016 };
0017 enum {
0018 IX_MIN = 1,
0019 IY_MIN = 1,
0020 IX_MAX = 100,
0021 IY_MAX = 100,
0022 EEhistXMax = 220
0023 };
0024
0025 template <class floatCondObj>
0026 void fillEBMap_SingleIOV(std::shared_ptr<floatCondObj> payload, TH2F*& barrel) {
0027 for (int cellid = EBDetId::MIN_HASH; cellid < EBDetId::kSizeForDenseIndexing; ++cellid) {
0028 uint32_t rawid = EBDetId::unhashIndex(cellid);
0029 EcalCondObjectContainer<float>::const_iterator value_ptr = payload->find(rawid);
0030 if (value_ptr == payload->end())
0031 continue;
0032
0033 float weight = (float)(*value_ptr);
0034 Double_t phi = (Double_t)(EBDetId(rawid)).iphi() - 0.5;
0035 Double_t eta = (Double_t)(EBDetId(rawid)).ieta();
0036
0037 if (eta > 0.)
0038 eta = eta - 0.5;
0039 else
0040 eta = eta + 0.5;
0041
0042 barrel->Fill(phi, eta, weight);
0043 }
0044 }
0045
0046 template <class floatCondObj>
0047 void fillEEMap_SingleIOV(std::shared_ptr<floatCondObj> payload, TH2F*& endc_m, TH2F*& endc_p) {
0048
0049 for (int iz = -1; iz < 2; iz = iz + 2)
0050 for (int iy = IY_MIN; iy < IY_MAX + IY_MIN; iy++)
0051 for (int ix = IX_MIN; ix < IX_MAX + IX_MIN; ix++)
0052 if (EEDetId::validDetId(ix, iy, iz)) {
0053 EEDetId myEEId = EEDetId(ix, iy, iz, EEDetId::XYMODE);
0054 uint32_t rawid = myEEId.rawId();
0055 EcalCondObjectContainer<float>::const_iterator value_ptr = payload->find(rawid);
0056 if (value_ptr == payload->end())
0057 continue;
0058
0059 float weight = (float)(*value_ptr);
0060 if (iz == 1)
0061 endc_p->Fill(ix, iy, weight);
0062 else
0063 endc_m->Fill(ix, iy, weight);
0064
0065 }
0066 }
0067
0068 template <class floatCondObj>
0069 void fillEBMap_TwoIOVs(std::shared_ptr<floatCondObj> payload,
0070 TH2F*& barrel,
0071 int irun,
0072 float pEB[],
0073 float& pEBmin,
0074 float& pEBmax,
0075 int method) {
0076 for (int cellid = EBDetId::MIN_HASH; cellid < EBDetId::kSizeForDenseIndexing; ++cellid) {
0077 uint32_t rawid = EBDetId::unhashIndex(cellid);
0078 EcalCondObjectContainer<float>::const_iterator value_ptr = payload->find(rawid);
0079 if (value_ptr == payload->end())
0080 continue;
0081
0082 float weight = (float)(*value_ptr);
0083 if (irun == 0)
0084 pEB[cellid] = weight;
0085 else {
0086 Double_t phi = (Double_t)(EBDetId(rawid)).iphi() - 0.5;
0087 Double_t eta = (Double_t)(EBDetId(rawid)).ieta();
0088
0089 if (eta > 0.)
0090 eta = eta - 0.5;
0091 else
0092 eta = eta + 0.5;
0093 double dr;
0094 if (method == 0) {
0095 dr = weight - pEB[cellid];
0096 }
0097 else {
0098 if (pEB[cellid] != 0.)
0099 dr = weight / pEB[cellid];
0100 else {
0101 if (weight == 0.)
0102 dr = 1.;
0103 else
0104 dr = 9999.;
0105 }
0106 }
0107 if (dr < pEBmin)
0108 pEBmin = dr;
0109 if (dr > pEBmax)
0110 pEBmax = dr;
0111 barrel->Fill(phi, eta, dr);
0112 }
0113 }
0114 }
0115
0116 template <class floatCondObj>
0117 void fillEEMap_TwoIOVs(std::shared_ptr<floatCondObj> payload,
0118 TH2F*& endc_m,
0119 TH2F*& endc_p,
0120 int irun,
0121 float pEE[],
0122 float& pEEmin,
0123 float& pEEmax,
0124 int method) {
0125
0126 for (int iz = -1; iz < 2; iz = iz + 2)
0127 for (int iy = IY_MIN; iy < IY_MAX + IY_MIN; iy++)
0128 for (int ix = IX_MIN; ix < IX_MAX + IX_MIN; ix++)
0129 if (EEDetId::validDetId(ix, iy, iz)) {
0130 EEDetId myEEId = EEDetId(ix, iy, iz, EEDetId::XYMODE);
0131 uint32_t cellid = myEEId.hashedIndex();
0132 uint32_t rawid = myEEId.rawId();
0133 EcalCondObjectContainer<float>::const_iterator value_ptr = payload->find(rawid);
0134
0135 if (value_ptr == payload->end())
0136 continue;
0137 float weight = (float)(*value_ptr);
0138
0139 if (irun == 0)
0140 pEE[cellid] = weight;
0141 else {
0142 double dr;
0143 if (method == 0) {
0144 dr = weight - pEE[cellid];
0145 }
0146 else {
0147 if (pEE[cellid] != 0.)
0148 dr = weight / pEE[cellid];
0149 else {
0150 if (weight == 0.)
0151 dr = 1.;
0152 else
0153 dr = 9999.;
0154 }
0155 }
0156 if (dr < pEEmin)
0157 pEEmin = dr;
0158 if (dr > pEEmax)
0159 pEEmax = dr;
0160 if (iz == 1)
0161 endc_p->Fill(ix, iy, dr);
0162 else
0163 endc_m->Fill(ix, iy, dr);
0164 }
0165
0166 }
0167 }
0168
0169 inline void fillTableWithSummary(TH2F*& align,
0170 std::string title,
0171 const float& mean_x_EB,
0172 const float& rms_EB,
0173 const int& num_x_EB,
0174 const float& mean_x_EE,
0175 const float& rms_EE,
0176 const int& num_x_EE) {
0177 int NbRows = 2;
0178 align = new TH2F(title.c_str(), "EB/EE mean_x rms num_x", 4, 0, 4, NbRows, 0, NbRows);
0179
0180 double row = NbRows - 0.5;
0181
0182 align->Fill(0.5, row, 1);
0183 align->Fill(1.5, row, mean_x_EB);
0184 align->Fill(2.5, row, rms_EB);
0185 align->Fill(3.5, row, num_x_EB);
0186
0187 row--;
0188
0189 align->Fill(0.5, row, 2);
0190 align->Fill(1.5, row, mean_x_EE);
0191 align->Fill(2.5, row, rms_EE);
0192 align->Fill(3.5, row, num_x_EE);
0193
0194 align->GetXaxis()->SetTickLength(0.);
0195 align->GetXaxis()->SetLabelSize(0.);
0196 align->GetYaxis()->SetTickLength(0.);
0197 align->GetYaxis()->SetLabelSize(0.);
0198 }