Go to the documentation of this file.00001 #include "Geometry/CaloGeometry/interface/CaloGenericDetId.h"
00002 #include "FWCore/Utilities/interface/Exception.h"
00003 #include <iostream>
00004
00005 CaloGenericDetId::CaloGenericDetId( DetId::Detector iDet ,
00006 int iSub ,
00007 uint32_t iDin ) : DetId( iDet, iSub )
00008 {
00009 if (det() == DetId::Hcal) {
00010 std::cerr << "No support for HB/HE/HO/HF in CaloGenericDetId" << std::endl;
00011 cms::Exception("No support");
00012 } else {
00013
00014 id_ = ( isEB() ? EBDetId::detIdFromDenseIndex( iDin ).rawId() :
00015 ( isEE() ? EEDetId::detIdFromDenseIndex( iDin ).rawId() :
00016 ( isES() ? ESDetId::detIdFromDenseIndex( iDin ).rawId() :
00017 ( isZDC() ? HcalZDCDetId::detIdFromDenseIndex( iDin ).rawId() :
00018 ( isCastor() ? HcalCastorDetId::detIdFromDenseIndex( iDin ).rawId() :
00019 ( isCaloTower() ? CaloTowerDetId::detIdFromDenseIndex( iDin ).rawId() : 0 ) ) ) ) ) );
00020 }
00021 }
00022
00023 uint32_t
00024 CaloGenericDetId::denseIndex() const
00025 {
00026 if (det() == DetId::Hcal) {
00027 std::cerr << "No support for HB/HE/HO/HF in CaloGenericDetId" << std::endl;
00028 cms::Exception("No support");
00029 }
00030
00031 return ( isEB() ? EBDetId( rawId() ).denseIndex() :
00032 ( isEE() ? EEDetId( rawId() ).denseIndex() :
00033 ( isES() ? ESDetId( rawId() ).denseIndex() :
00034 ( isZDC() ? HcalZDCDetId( rawId() ).denseIndex() :
00035 ( isCastor() ? HcalCastorDetId( rawId() ).denseIndex() :
00036 ( isCaloTower() ? CaloTowerDetId( rawId() ).denseIndex() : ~0 ) ) ) ) ) ) ;
00037 }
00038
00039 uint32_t
00040 CaloGenericDetId::sizeForDenseIndexing() const
00041 {
00042 if (det() == DetId::Hcal) {
00043 std::cerr << "No support for HB/HE/HO/HF in CaloGenericDetId" << std::endl;
00044 cms::Exception("No support");
00045 }
00046
00047 return ( isEB() ? EBDetId::kSizeForDenseIndexing :
00048 ( isEE() ? EEDetId::kSizeForDenseIndexing :
00049 ( isES() ? ESDetId::kSizeForDenseIndexing :
00050 ( isZDC() ? HcalZDCDetId::kSizeForDenseIndexing :
00051 ( isCastor() ? HcalCastorDetId::kSizeForDenseIndexing :
00052 ( isCaloTower() ? CaloTowerDetId::kSizeForDenseIndexing : 0 ) ) ) ) ) ) ;
00053 }
00054
00055 bool
00056 CaloGenericDetId::validDetId() const
00057 {
00058 bool returnValue ( false ) ;
00059 if( isEB() )
00060 {
00061 const EBDetId ebid ( rawId() ) ;
00062 returnValue = EBDetId::validDetId( ebid.ieta(),
00063 ebid.iphi() ) ;
00064 }
00065 else
00066 {
00067 if( isEE() )
00068 {
00069 const EEDetId eeid ( rawId() ) ;
00070 returnValue = EEDetId::validDetId( eeid.ix(),
00071 eeid.iy(),
00072 eeid.zside() ) ;
00073 }
00074 else
00075 {
00076 if( isES() )
00077 {
00078 const ESDetId esid ( rawId() ) ;
00079 returnValue = ESDetId::validDetId( esid.strip(),
00080 esid.six(),
00081 esid.siy(),
00082 esid.plane(),
00083 esid.zside() ) ;
00084 }
00085 else
00086 {
00087 if (det() == DetId::Hcal) {
00088 std::cerr << "No support for HB/HE/HO/HF in CaloGenericDetId" << std::endl;
00089 cms::Exception("No support");
00090
00091 returnValue = false;
00092 }
00093 else
00094 {
00095 if( isZDC() )
00096 {
00097 const HcalZDCDetId zdid ( rawId() ) ;
00098 returnValue = HcalZDCDetId::validDetId( zdid.section(),
00099 zdid.channel() ) ;
00100 }
00101 else
00102 {
00103 if( isCastor() )
00104 {
00105 const HcalCastorDetId zdid ( rawId() ) ;
00106 returnValue = HcalCastorDetId::validDetId( zdid.section(),
00107 zdid.zside()>0,
00108 zdid.sector(),
00109 zdid.module() ) ;
00110 }
00111 else
00112 {
00113 if( isCaloTower() )
00114 {
00115 const CaloTowerDetId ctid ( rawId() ) ;
00116 returnValue = CaloTowerDetId::validDetId( ctid.ieta(),
00117 ctid.iphi() ) ;
00118 }
00119 }
00120 }
00121 }
00122 }
00123 }
00124 }
00125 return returnValue ;
00126 }
00127
00128 std::ostream& operator<<(std::ostream& s, const CaloGenericDetId& id)
00129 {
00130 if (id.det() == DetId::Hcal) {
00131 std::cerr << "No support for HB/HE/HO/HF in CaloGenericDetId" << std::endl;
00132 cms::Exception("No support");
00133 }
00134
00135 return ( id.isEB() ? s<<EBDetId( id ) :
00136 ( id.isEE() ? s<<EEDetId( id ) :
00137 ( id.isES() ? s<<ESDetId( id ) :
00138 ( id.isCaloTower() ? s<<CaloTowerDetId( id ) :
00139 ( id.isZDC() ? s<<HcalZDCDetId( id ) :
00140 s<<"UnknownId="<<std::hex<<id.rawId()<<std::dec ) ) ) ) ) ;
00141 }