File indexing completed on 2024-09-18 05:06:56
0001 #include "Geometry/CaloGeometry/interface/CaloGenericDetId.h"
0002 #include "FWCore/Utilities/interface/Exception.h"
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include <iostream>
0005
0006 CaloGenericDetId::CaloGenericDetId(DetId::Detector iDet, int iSub, uint32_t iDin) : DetId(iDet, iSub) {
0007 if (isHcal()) {
0008 edm::LogError("CaloGenericDetIdError") << "No support for HB/HE/HO/HF in CaloGenericDetId";
0009 throw cms::Exception("No support");
0010 } else if (isCaloTower()) {
0011 edm::LogError("CaloGenericDetIdError") << "No support for CaloTower in CaloGenericDetId";
0012 throw cms::Exception("No support");
0013 } else {
0014 id_ =
0015 (isEB()
0016 ? EBDetId::detIdFromDenseIndex(iDin).rawId()
0017 : (isEE() ? EEDetId::detIdFromDenseIndex(iDin).rawId()
0018 : (isES() ? ESDetId::detIdFromDenseIndex(iDin).rawId()
0019 : (isZDC() ? HcalZDCDetId::detIdFromDenseIndex(iDin).rawId()
0020 : (isCastor() ? HcalCastorDetId::detIdFromDenseIndex(iDin).rawId() : 0)))));
0021 }
0022 }
0023
0024 uint32_t CaloGenericDetId::denseIndex() const {
0025 if (isHcal()) {
0026 edm::LogError("CaloGenericDetIdError") << "No support for HB/HE/HO/HF in CaloGenericDetId";
0027 throw cms::Exception("No support");
0028 } else if (isCaloTower()) {
0029 edm::LogError("CaloGenericDetIdError") << "No support for CaloTower in CaloGenericDetId";
0030 throw cms::Exception("No support");
0031 }
0032
0033 return (isEB() ? EBDetId(rawId()).denseIndex()
0034 : (isEE() ? EEDetId(rawId()).denseIndex()
0035 : (isES() ? ESDetId(rawId()).denseIndex()
0036 : (isZDC() ? HcalZDCDetId(rawId()).denseIndex()
0037 : (isCastor() ? HcalCastorDetId(rawId()).denseIndex() : ~0)))));
0038 }
0039
0040 uint32_t CaloGenericDetId::sizeForDenseIndexing() const {
0041 if (isHcal()) {
0042 edm::LogError("CaloGenericDetIdError") << "No support for HB/HE/HO/HF in CaloGenericDetId";
0043 throw cms::Exception("No support");
0044 } else if (isCaloTower()) {
0045 edm::LogError("CaloGenericDetIdError") << "No support for CaloTower in CaloGenericDetId";
0046 throw cms::Exception("No support");
0047 }
0048
0049 return (isEB() ? EBDetId::kSizeForDenseIndexing
0050 : (isEE() ? EEDetId::kSizeForDenseIndexing
0051 : (isES() ? ESDetId::kSizeForDenseIndexing
0052 : (isZDC() ? HcalZDCDetId::kSizeForDenseIndexing
0053 : (isCastor() ? HcalCastorDetId::kSizeForDenseIndexing : 0)))));
0054 }
0055
0056 bool CaloGenericDetId::validDetId() const {
0057 bool returnValue(false);
0058 if (isEB()) {
0059 const EBDetId ebid(rawId());
0060 returnValue = EBDetId::validDetId(ebid.ieta(), ebid.iphi());
0061 } else if (isEE()) {
0062 const EEDetId eeid(rawId());
0063 returnValue = EEDetId::validDetId(eeid.ix(), eeid.iy(), eeid.zside());
0064 } else if (isES()) {
0065 const ESDetId esid(rawId());
0066 returnValue = ESDetId::validDetId(esid.strip(), esid.six(), esid.siy(), esid.plane(), esid.zside());
0067 } else if (isHcal()) {
0068 edm::LogError("CaloGenericDetIdError") << "No support for HB/HE/HO/HF in CaloGenericDetId";
0069 throw cms::Exception("No support");
0070 returnValue = false;
0071 } else if (isCastor()) {
0072 const HcalCastorDetId zdid(rawId());
0073 returnValue = HcalCastorDetId::validDetId(zdid.section(), zdid.zside() > 0, zdid.sector(), zdid.module());
0074 } else if (isCaloTower()) {
0075 edm::LogError("CaloGenericDetIdError") << "No support for CaloTower in CaloGenericDetId";
0076 throw cms::Exception("No support");
0077
0078 returnValue = false;
0079 }
0080
0081 return returnValue;
0082 }
0083
0084 std::ostream& operator<<(std::ostream& s, const CaloGenericDetId& id) {
0085 if (id.isHcal()) {
0086 edm::LogError("CaloGenericDetIdError") << "No support for HB/HE/HO/HF in CaloGenericDetId";
0087 throw cms::Exception("No support");
0088 } else if (id.isCaloTower()) {
0089 edm::LogError("CaloGenericDetIdError") << "No support for CaloTower in CaloGenericDetId";
0090 throw cms::Exception("No support");
0091 }
0092
0093 return (id.isEB()
0094 ? s << EBDetId(id)
0095 : (id.isEE() ? s << EEDetId(id)
0096 : (id.isES() ? s << ESDetId(id)
0097 : (id.isZDC() ? s << HcalZDCDetId(id)
0098 : s << "UnknownId=" << std::hex << id.rawId() << std::dec))));
0099 }