File indexing completed on 2024-04-06 12:07:15
0001 #include "DQM/EcalCommon/interface/MESetProjection.h"
0002
0003 #include "DQM/EcalCommon/interface/EcalDQMCommonUtils.h"
0004
0005 namespace ecaldqm {
0006 MESetProjection::MESetProjection(std::string const &_fullPath,
0007 binning::ObjectType _otype,
0008 binning::BinningType _btype,
0009 MonitorElement::Kind _kind,
0010 binning::AxisSpecs const *_yaxis )
0011 : MESetEcal(_fullPath, _otype, _btype, _kind, 1, nullptr, _yaxis) {
0012 switch (kind_) {
0013 case MonitorElement::Kind::TH1F:
0014 case MonitorElement::Kind::TPROFILE:
0015 break;
0016 default:
0017 throw_("Unsupported MonitorElement kind");
0018 }
0019
0020 switch (btype_) {
0021 case binning::kProjEta:
0022 case binning::kProjPhi:
0023 break;
0024 default:
0025 throw_("Unsupported binning");
0026 }
0027 }
0028
0029 MESetProjection::MESetProjection(MESetProjection const &_orig) : MESetEcal(_orig) {}
0030
0031 MESetProjection::~MESetProjection() {}
0032
0033 MESet *MESetProjection::clone(std::string const &_path ) const {
0034 std::string path(path_);
0035 if (!_path.empty())
0036 path_ = _path;
0037 MESet *copy(new MESetProjection(*this));
0038 path_ = path;
0039 return copy;
0040 }
0041
0042 void MESetProjection::fill(EcalDQMSetupObjects const edso, DetId const &_id, double _w , double, double) {
0043 if (!active_)
0044 return;
0045
0046 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0047 checkME_(iME);
0048
0049 int subdet(_id.subdetId());
0050
0051 if (subdet == EcalBarrel) {
0052 EBDetId ebid(_id);
0053 if (btype_ == binning::kProjEta)
0054 fill_(iME, eta(ebid, edso.geometry), _w, 0.);
0055 else if (btype_ == binning::kProjPhi)
0056 fill_(iME, phi(ebid), _w, 0.);
0057 } else if (subdet == EcalEndcap) {
0058 EEDetId eeid(_id);
0059 if (btype_ == binning::kProjEta)
0060 fill_(iME, eta(eeid, edso.geometry), _w, 0.);
0061 if (btype_ == binning::kProjPhi) {
0062 fill_(iME, phi(eeid), _w, 0.);
0063 }
0064 } else if (isEndcapTTId(_id)) {
0065 EcalTrigTowerDetId ttid(_id);
0066 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0067 unsigned nIds(ids.size());
0068 if (btype_ == binning::kProjEta) {
0069 for (unsigned iId(0); iId < nIds; iId++)
0070 fill_(iME, eta(EEDetId(ids[iId]), edso.geometry), _w / nIds, 0.);
0071 } else if (btype_ == binning::kProjPhi) {
0072 for (unsigned iId(0); iId < nIds; iId++)
0073 fill_(iME, phi(EEDetId(ids[iId])), _w / nIds, 0.);
0074 }
0075 } else if (subdet == EcalTriggerTower) {
0076 EcalTrigTowerDetId ttid(_id);
0077 if (btype_ == binning::kProjEta) {
0078 int ieta(ttid.ieta());
0079 if (ieta < 18 && ieta > 0)
0080 fill_(iME, (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta, _w, 0.);
0081 else if (ieta > -18 && ieta < 0)
0082 fill_(iME, (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta, _w, 0.);
0083 } else if (btype_ == binning::kProjPhi)
0084 fill_(iME, phi(ttid), _w, 0.);
0085 }
0086 }
0087
0088 void MESetProjection::fill(
0089 EcalDQMSetupObjects const edso, int _subdet, double _x , double _w , double) {
0090 if (!active_)
0091 return;
0092
0093 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _subdet, btype_));
0094 checkME_(iME);
0095
0096 if (btype_ == binning::kProjPhi)
0097 _x = phi(_x);
0098
0099 mes_[iME]->Fill(_x, _w);
0100 }
0101
0102 void MESetProjection::fill(EcalDQMSetupObjects const edso, double _x, double _w , double) {
0103 if (!active_)
0104 return;
0105 if (btype_ != binning::kProjEta)
0106 return;
0107
0108 unsigned iME;
0109 if (_x < -etaBound)
0110 iME = 0;
0111 else if (_x < etaBound)
0112 iME = 1;
0113 else
0114 iME = 2;
0115
0116 if (otype_ == binning::kEcal2P && iME == 2)
0117 iME = 0;
0118
0119 checkME_(iME);
0120
0121 mes_[iME]->Fill(_x, _w);
0122 }
0123
0124 void MESetProjection::setBinContent(EcalDQMSetupObjects const edso, DetId const &_id, double _content) {
0125 if (!active_)
0126 return;
0127
0128 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0129 checkME_(iME);
0130
0131 MonitorElement *me(mes_[iME]);
0132
0133 if (isEndcapTTId(_id)) {
0134 EcalTrigTowerDetId ttid(_id);
0135 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0136 unsigned nIds(ids.size());
0137 std::set<int> bins;
0138 if (btype_ == binning::kProjEta) {
0139 for (unsigned iId(0); iId < nIds; iId++) {
0140 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry)));
0141 if (bins.find(bin) != bins.end())
0142 continue;
0143 me->setBinContent(bin, _content);
0144 }
0145 } else if (btype_ == binning::kProjPhi) {
0146 for (unsigned iId(0); iId < nIds; iId++) {
0147 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[iId]))));
0148 if (bins.find(bin) != bins.end())
0149 continue;
0150 me->setBinContent(bin, _content);
0151 }
0152 }
0153 return;
0154 }
0155
0156 double x(0.);
0157 int subdet(_id.subdetId());
0158 if (subdet == EcalBarrel) {
0159 EBDetId ebid(_id);
0160 if (btype_ == binning::kProjEta)
0161 x = eta(ebid, edso.geometry);
0162 else if (btype_ == binning::kProjPhi)
0163 x = phi(ebid);
0164 } else if (subdet == EcalEndcap) {
0165 if (btype_ == binning::kProjEta)
0166 x = eta(EEDetId(_id), edso.geometry);
0167 else if (btype_ == binning::kProjPhi)
0168 x = phi(EEDetId(_id));
0169 } else if (subdet == EcalTriggerTower) {
0170 EcalTrigTowerDetId ttid(_id);
0171 if (btype_ == binning::kProjEta) {
0172 int ieta(ttid.ieta());
0173 if (ieta < 18 && ieta > 0)
0174 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0175 else if (ieta > -18 && ieta < 0)
0176 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0177 } else if (btype_ == binning::kProjPhi)
0178 x = phi(ttid);
0179 }
0180
0181 int bin(me->getTH1()->FindBin(x));
0182 me->setBinContent(bin, _content);
0183 }
0184
0185 void MESetProjection::setBinError(EcalDQMSetupObjects const edso, DetId const &_id, double _error) {
0186 if (!active_)
0187 return;
0188
0189 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0190 checkME_(iME);
0191
0192 MonitorElement *me(mes_[iME]);
0193
0194 if (isEndcapTTId(_id)) {
0195 EcalTrigTowerDetId ttid(_id);
0196 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0197 unsigned nIds(ids.size());
0198 std::set<int> bins;
0199 if (btype_ == binning::kProjEta) {
0200 for (unsigned iId(0); iId < nIds; iId++) {
0201 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry)));
0202 if (bins.find(bin) != bins.end())
0203 continue;
0204 me->setBinError(bin, _error);
0205 }
0206 } else if (btype_ == binning::kProjPhi) {
0207 for (unsigned iId(0); iId < nIds; iId++) {
0208 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[iId]))));
0209 if (bins.find(bin) != bins.end())
0210 continue;
0211 me->setBinError(bin, _error);
0212 }
0213 }
0214 return;
0215 }
0216
0217 double x(0.);
0218 int subdet(_id.subdetId());
0219 if (subdet == EcalBarrel) {
0220 EBDetId ebid(_id);
0221 if (btype_ == binning::kProjEta)
0222 x = eta(ebid, edso.geometry);
0223 else if (btype_ == binning::kProjPhi)
0224 x = phi(ebid);
0225 } else if (subdet == EcalEndcap) {
0226 if (btype_ == binning::kProjEta)
0227 x = eta(EEDetId(_id), edso.geometry);
0228 else if (btype_ == binning::kProjPhi)
0229 x = phi(EEDetId(_id));
0230 } else if (subdet == EcalTriggerTower) {
0231 EcalTrigTowerDetId ttid(_id);
0232 if (btype_ == binning::kProjEta) {
0233 int ieta(ttid.ieta());
0234 if (ieta < 18 && ieta > 0)
0235 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0236 else if (ieta > -18 && ieta < 0)
0237 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0238 } else if (btype_ == binning::kProjPhi)
0239 x = phi(ttid);
0240 }
0241
0242 int bin(me->getTH1()->FindBin(x));
0243 me->setBinError(bin, _error);
0244 }
0245
0246 void MESetProjection::setBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, double _entries) {
0247 if (!active_)
0248 return;
0249
0250 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0251 checkME_(iME);
0252
0253 MonitorElement *me(mes_[iME]);
0254
0255 if (isEndcapTTId(_id)) {
0256 EcalTrigTowerDetId ttid(_id);
0257 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0258 unsigned nIds(ids.size());
0259 std::set<int> bins;
0260 if (btype_ == binning::kProjEta) {
0261 for (unsigned iId(0); iId < nIds; iId++) {
0262 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[iId]), edso.geometry)));
0263 if (bins.find(bin) != bins.end())
0264 continue;
0265 me->setBinEntries(bin, _entries);
0266 }
0267 } else if (btype_ == binning::kProjPhi) {
0268 for (unsigned iId(0); iId < nIds; iId++) {
0269 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[iId]))));
0270 if (bins.find(bin) != bins.end())
0271 continue;
0272 me->setBinEntries(bin, _entries);
0273 }
0274 }
0275 return;
0276 }
0277
0278 double x(0.);
0279 int subdet(_id.subdetId());
0280 if (subdet == EcalBarrel) {
0281 EBDetId ebid(_id);
0282 if (btype_ == binning::kProjEta)
0283 x = eta(ebid, edso.geometry);
0284 else if (btype_ == binning::kProjPhi)
0285 x = phi(ebid);
0286 } else if (subdet == EcalEndcap) {
0287 if (btype_ == binning::kProjEta)
0288 x = eta(EEDetId(_id), edso.geometry);
0289 else if (btype_ == binning::kProjPhi)
0290 x = phi(EEDetId(_id));
0291 } else if (subdet == EcalTriggerTower) {
0292 EcalTrigTowerDetId ttid(_id);
0293 if (btype_ == binning::kProjEta) {
0294 int ieta(ttid.ieta());
0295 if (ieta < 18 && ieta > 0)
0296 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0297 else if (ieta > -18 && ieta < 0)
0298 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0299 } else if (btype_ == binning::kProjPhi)
0300 x = phi(ttid);
0301 }
0302
0303 int bin(me->getTH1()->FindBin(x));
0304 me->setBinEntries(bin, _entries);
0305 }
0306
0307 double MESetProjection::getBinContent(EcalDQMSetupObjects const edso, DetId const &_id, int) const {
0308 if (!active_)
0309 return 0.;
0310
0311 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0312 checkME_(iME);
0313
0314 MonitorElement *me(mes_[iME]);
0315
0316 if (isEndcapTTId(_id)) {
0317 EcalTrigTowerDetId ttid(_id);
0318 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0319 if (btype_ == binning::kProjEta) {
0320 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry)));
0321 return me->getBinContent(bin);
0322 } else if (btype_ == binning::kProjPhi) {
0323 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0]))));
0324 return me->getBinContent(bin);
0325 }
0326 return 0.;
0327 }
0328
0329 double x(0.);
0330 int subdet(_id.subdetId());
0331 if (subdet == EcalBarrel) {
0332 EBDetId ebid(_id);
0333 if (btype_ == binning::kProjEta)
0334 x = eta(ebid, edso.geometry);
0335 else if (btype_ == binning::kProjPhi)
0336 x = phi(ebid);
0337 } else if (subdet == EcalEndcap) {
0338 if (btype_ == binning::kProjEta)
0339 x = eta(EEDetId(_id), edso.geometry);
0340 else if (btype_ == binning::kProjPhi)
0341 x = phi(EEDetId(_id));
0342 } else if (subdet == EcalTriggerTower) {
0343 EcalTrigTowerDetId ttid(_id);
0344 if (btype_ == binning::kProjEta) {
0345 int ieta(ttid.ieta());
0346 if (ieta < 18 && ieta > 0)
0347 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0348 else if (ieta > -18 && ieta < 0)
0349 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0350 } else if (btype_ == binning::kProjPhi)
0351 x = phi(ttid);
0352 }
0353
0354 int bin(me->getTH1()->FindBin(x));
0355 return me->getBinContent(bin);
0356 }
0357
0358 double MESetProjection::getBinError(EcalDQMSetupObjects const edso, DetId const &_id, int) const {
0359 if (!active_)
0360 return 0.;
0361
0362 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0363 checkME_(iME);
0364
0365 MonitorElement *me(mes_[iME]);
0366
0367 if (isEndcapTTId(_id)) {
0368 EcalTrigTowerDetId ttid(_id);
0369 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0370 if (btype_ == binning::kProjEta) {
0371 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry)));
0372 return me->getBinError(bin);
0373 } else if (btype_ == binning::kProjPhi) {
0374 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0]))));
0375 return me->getBinError(bin);
0376 }
0377 return 0.;
0378 }
0379
0380 double x(0.);
0381 int subdet(_id.subdetId());
0382 if (subdet == EcalBarrel) {
0383 EBDetId ebid(_id);
0384 if (btype_ == binning::kProjEta)
0385 x = eta(ebid, edso.geometry);
0386 else if (btype_ == binning::kProjPhi)
0387 x = phi(ebid);
0388 } else if (subdet == EcalEndcap) {
0389 if (btype_ == binning::kProjEta)
0390 x = eta(EEDetId(_id), edso.geometry);
0391 else if (btype_ == binning::kProjPhi)
0392 x = phi(EEDetId(_id));
0393 } else if (subdet == EcalTriggerTower) {
0394 EcalTrigTowerDetId ttid(_id);
0395 if (btype_ == binning::kProjEta) {
0396 int ieta(ttid.ieta());
0397 if (ieta < 18 && ieta > 0)
0398 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0399 else if (ieta > -18 && ieta < 0)
0400 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0401 } else if (btype_ == binning::kProjPhi)
0402 x = phi(ttid);
0403 }
0404
0405 int bin(me->getTH1()->FindBin(x));
0406 return me->getBinError(bin);
0407 }
0408
0409 double MESetProjection::getBinEntries(EcalDQMSetupObjects const edso, DetId const &_id, int) const {
0410 if (!active_)
0411 return 0.;
0412
0413 unsigned iME(binning::findPlotIndex(edso.electronicsMap, otype_, _id));
0414 checkME_(iME);
0415
0416 MonitorElement *me(mes_[iME]);
0417
0418 if (isEndcapTTId(_id)) {
0419 EcalTrigTowerDetId ttid(_id);
0420 std::vector<DetId> ids(edso.trigtowerMap->constituentsOf(ttid));
0421 if (btype_ == binning::kProjEta) {
0422 int bin(me->getTH1()->FindBin(eta(EEDetId(ids[0]), edso.geometry)));
0423 return me->getBinEntries(bin);
0424 } else if (btype_ == binning::kProjPhi) {
0425 int bin(me->getTH1()->FindBin(phi(EEDetId(ids[0]))));
0426 return me->getBinEntries(bin);
0427 }
0428 return 0.;
0429 }
0430
0431 double x(0.);
0432 int subdet(_id.subdetId());
0433 if (subdet == EcalBarrel) {
0434 EBDetId ebid(_id);
0435 if (btype_ == binning::kProjEta)
0436 x = eta(ebid, edso.geometry);
0437 else if (btype_ == binning::kProjPhi)
0438 x = phi(ebid);
0439 } else if (subdet == EcalEndcap) {
0440 if (btype_ == binning::kProjEta)
0441 x = eta(EEDetId(_id), edso.geometry);
0442 else if (btype_ == binning::kProjPhi)
0443 x = phi(EEDetId(_id));
0444 } else if (subdet == EcalTriggerTower) {
0445 EcalTrigTowerDetId ttid(_id);
0446 if (btype_ == binning::kProjEta) {
0447 int ieta(ttid.ieta());
0448 if (ieta < 18 && ieta > 0)
0449 x = (ieta * 5 - 2.5) * EBDetId::crystalUnitToEta;
0450 else if (ieta > -18 && ieta < 0)
0451 x = (ieta * 5 + 2.5) * EBDetId::crystalUnitToEta;
0452 } else if (btype_ == binning::kProjPhi)
0453 x = phi(ttid);
0454 }
0455
0456 int bin(me->getTH1()->FindBin(x));
0457 return me->getBinEntries(bin);
0458 }
0459
0460 }