CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/Geometry/HcalTowerAlgo/src/CaloTowerGeometry.cc

Go to the documentation of this file.
00001 #include "Geometry/CaloGeometry/interface/CaloGenericDetId.h"
00002 #include "Geometry/HcalTowerAlgo/interface/CaloTowerGeometry.h"
00003 
00004 typedef CaloCellGeometry::CCGFloat CCGFloat ;
00005 typedef CaloCellGeometry::Pt3D     Pt3D     ;
00006 typedef CaloCellGeometry::Pt3DVec  Pt3DVec  ;
00007 
00008 CaloTowerGeometry::CaloTowerGeometry() :
00009    m_cellVec ( k_NumberOfCellsForCorners ) 
00010 {
00011 }
00012   
00013 
00014 CaloTowerGeometry::~CaloTowerGeometry()
00015 {
00016 }
00017 
00018 
00019 unsigned int
00020 CaloTowerGeometry::alignmentTransformIndexLocal( const DetId& id )
00021 {
00022    const CaloGenericDetId gid ( id ) ;
00023 
00024    assert( gid.isCaloTower() ) ;
00025 
00026    const CaloTowerDetId cid ( id ) ;
00027 
00028    const unsigned int iea ( cid.ietaAbs() ) ;
00029 
00030    const unsigned int ip ( ( cid.iphi() - 1 )/4 ) ;
00031 
00032    const int izoff ( ( cid.zside() + 1 )/2 ) ;
00033 
00034    const unsigned int offset ( izoff*3*18) ;
00035 
00036    return ( offset + ip + ( CaloTowerDetId::kEndIEta < iea ? 36 :
00037                             ( CaloTowerDetId::kBarIEta < iea ? 18 : 0 ) ) ) ;
00038 }
00039 
00040 unsigned int
00041 CaloTowerGeometry::alignmentTransformIndexGlobal( const DetId& id )
00042 {
00043    return (unsigned int) DetId::Calo - 1 ;
00044 }
00045 
00046 void
00047 CaloTowerGeometry::localCorners( Pt3DVec&        lc  ,
00048                                  const CCGFloat* pv  ,
00049                                  unsigned int    i   ,
00050                                  Pt3D&           ref  )
00051 {
00052    IdealObliquePrism::localCorners( lc, pv, ref ) ;
00053 }
00054 
00055 void
00056 CaloTowerGeometry::newCell( const GlobalPoint& f1 ,
00057                             const GlobalPoint& f2 ,
00058                             const GlobalPoint& f3 ,
00059                             const CCGFloat*    parm ,
00060                             const DetId&       detId   ) 
00061 {
00062    const CaloGenericDetId cgid ( detId ) ;
00063 
00064    assert( cgid.isCaloTower() ) ;
00065 
00066    const unsigned int di ( cgid.denseIndex() ) ;
00067 
00068    m_cellVec[ di ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
00069    m_validIds.push_back( detId ) ;
00070 }
00071 
00072 const CaloCellGeometry* 
00073 CaloTowerGeometry::cellGeomPtr( uint32_t index ) const
00074 {
00075    const CaloCellGeometry* cell ( &m_cellVec[ index ] ) ;
00076    return  ( m_cellVec.size() < index ||
00077              0 == cell->param() ? 0 : cell ) ;
00078 }