CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/Geometry/CaloGeometry/src/CaloGenericDetId.cc

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 }