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 }