CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Attributes

CaloCellGeometry Class Reference

#include <CaloCellGeometry.h>

Inheritance diagram for CaloCellGeometry:
calogeom::IdealCastorTrapezoid calogeom::IdealObliquePrism calogeom::IdealZDCTrapezoid calogeom::IdealZPrism PreshowerStrip TruncatedPyramid

List of all members.

Public Types

typedef EZMgrFL< GlobalPointCornersMgr
enum  CornersSize { k_cornerSize = 8 }
typedef EZArrayFL< GlobalPointCornersVec
typedef EZMgrFL< double > ParMgr
typedef EZArrayFL< double > ParVec
typedef std::vector< ParVecParVecVec

Public Member Functions

bool emptyCorners () const
virtual const CornersVecgetCorners () const =0
const GlobalPointgetPosition () const
virtual HepGeom::Transform3D getTransform (std::vector< HepGeom::Point3D< double > > *lptr) const
bool inside (const GlobalPoint &point) const
const double * param () const
virtual std::vector
< HepGeom::Point3D< double > > 
vocalCorners (const double *pv, HepGeom::Point3D< double > &ref) const =0
virtual ~CaloCellGeometry ()

Static Public Member Functions

static const double * checkParmPtr (const std::vector< double > &vd, ParVecVec &pvv)
static const double * getParmPtr (const std::vector< double > &vd, ParMgr *mgr, ParVecVec &pvv)

Static Public Attributes

static const float k_ScaleFromDDDtoGeant

Protected Member Functions

 CaloCellGeometry (CornersVec::const_reference gp, const CornersMgr *mgr, const double *par)
 CaloCellGeometry (const CornersVec &cv, const double *par)
CornersVecsetCorners () const

Private Attributes

CornersVec m_corners
const double * m_parms
const GlobalPoint m_refPoint

Detailed Description

Abstract base class for an individual cell's geometry.

Date:
2010/04/20 17:23:11
Revision:
1.18
Author:
J. Mans, P. Meridiani

Definition at line 25 of file CaloCellGeometry.h.


Member Typedef Documentation

Definition at line 30 of file CaloCellGeometry.h.

Definition at line 29 of file CaloCellGeometry.h.

typedef EZMgrFL< double > CaloCellGeometry::ParMgr

Definition at line 34 of file CaloCellGeometry.h.

Definition at line 32 of file CaloCellGeometry.h.

typedef std::vector<ParVec> CaloCellGeometry::ParVecVec

Definition at line 33 of file CaloCellGeometry.h.


Member Enumeration Documentation

Enumerator:
k_cornerSize 

Definition at line 36 of file CaloCellGeometry.h.

{ k_cornerSize = 8 };

Constructor & Destructor Documentation

virtual CaloCellGeometry::~CaloCellGeometry ( ) [inline, virtual]

Definition at line 40 of file CaloCellGeometry.h.

{}
CaloCellGeometry::CaloCellGeometry ( CornersVec::const_reference  gp,
const CornersMgr mgr,
const double *  par 
) [inline, protected]

Definition at line 72 of file CaloCellGeometry.h.

                                                          :
         m_refPoint ( gp  ),
         m_corners  ( mgr ),
         m_parms    ( par ) {}
CaloCellGeometry::CaloCellGeometry ( const CornersVec cv,
const double *  par 
) [inline, protected]

Definition at line 79 of file CaloCellGeometry.h.

                                                : 
         m_refPoint ( GlobalPoint( 0.25*( cv[0].x() + cv[1].x() + cv[2].x() + cv[3].x() ),
                                   0.25*( cv[0].y() + cv[1].y() + cv[2].y() + cv[3].y() ),
                                   0.25*( cv[0].z() + cv[1].z() + cv[2].z() + cv[3].z() )  ) ), 
         m_corners  ( cv ),
         m_parms    ( par ) {}

Member Function Documentation

const double * CaloCellGeometry::checkParmPtr ( const std::vector< double > &  vd,
CaloCellGeometry::ParVecVec pvv 
) [static]

Definition at line 78 of file CaloCellGeometry.cc.

References EZArrayFL< T >::begin(), j, EZArrayFL< T >::size(), and v.

Referenced by getParmPtr().

{
   const double* pP ( 0 ) ;

   for( unsigned int ii ( 0 ) ; ii != pvv.size() ; ++ii )
   {
      const ParVec& v ( pvv[ii] ) ;
      assert( v.size() == vv.size() ) ;

      bool same ( true ) ;
      for( unsigned int j ( 0 ) ; j != vv.size() ; ++j )
      {
         same = same && ( fabs( vv[j] - v[j] )<1.e-6 ) ;
         if( !same ) break ;
      }
      if( same )
      {
         pP = &(*v.begin()) ;
         break ;
      }
   }
   return pP ;
}
bool CaloCellGeometry::emptyCorners ( ) const [inline]

Definition at line 51 of file CaloCellGeometry.h.

References EZArrayFL< T >::empty(), and m_corners.

Referenced by operator<<().

{ return m_corners.empty() ; }
const CaloCellGeometry::CornersVec & CaloCellGeometry::getCorners ( ) const [pure virtual]
const double * CaloCellGeometry::getParmPtr ( const std::vector< double > &  vd,
CaloCellGeometry::ParMgr mgr,
CaloCellGeometry::ParVecVec pvv 
) [static]

Definition at line 105 of file CaloCellGeometry.cc.

References prof2calltree::back, checkParmPtr(), and i.

Referenced by CaloTowerHardcodeGeometryLoader::makeCell(), HcalHardcodeGeometryLoader::makeCell(), CastorHardcodeGeometryLoader::makeCell(), HcalDDDGeometryLoader::makeCell(), EcalTBHodoscopeGeometryLoaderFromDDD::makeGeometry(), and CaloGeometryDBEP< T, U >::produceAligned().

{
   const double* pP ( checkParmPtr( vv, pvv ) ) ;

   if( 0 == pP )
   {
      pvv.push_back( ParVec( mgr ) ) ;
      ParVec& back ( pvv.back() ) ;
      for( unsigned int i ( 0 ) ; i != vv.size() ; ++i )
      {
         back[i] = vv[i] ;
      }
      pP = &(*back.begin()) ;
   }
   return pP ;
}
const GlobalPoint& CaloCellGeometry::getPosition ( ) const [inline]

Definition at line 46 of file CaloCellGeometry.h.

References m_refPoint.

Referenced by EcalTPGParamBuilder::analyze(), HcalRecHitsValidation::analyze(), CaloTowersCreationAlgo::assignHit(), CaloRecoTauAlgorithm::buildCaloTau(), CaloGeometryHelper::buildCrystalArray(), EcalHaloAlgo::Calculate(), SuperClusterShapeAlgo::Calculate_Covariances(), ClusterShapeAlgo::Calculate_Covariances(), ClusterShapeAlgo::Calculate_EnergyDepTopology(), compEcalEnergySum(), compHcalEnergySum(), CaloTowersCreationAlgo::convert(), EcalClusterTools::covariances(), PFRecHitProducerECAL::createEcalRecHit(), PFRecHitProducerHCAL::createHcalRecHit(), DistanceToCell::DistanceToCell(), EcalHitMaker::EcalHitMaker(), InvRingCalib::EERingDef(), CaloTowersCreationAlgo::emCrystalShwrPos(), GlobalHitsProducer::fillECal(), GlobalHitsProdHist::fillECal(), GlobalHitsAnalyzer::fillECal(), ECALRecHitAnalyzer::FillGeometry(), HCALRecHitAnalyzer::FillGeometry(), GlobalRecHitsAnalyzer::fillHCal(), GlobalHitsAnalyzer::fillHCal(), GlobalHitsProducer::fillHCal(), GlobalHitsProdHist::fillHCal(), GlobalRecHitsProducer::fillHCal(), PFRecHitProducerECAL::findEcalRecHitGeometry(), TCTauAlgorithm::getCellMomentum(), EcalEndcapGeometry::getCells(), HcalGeometry::getCells(), EcalBarrelGeometry::getCells(), HcalGeometry::getClosestCell(), CaloGeometryHelper::getClosestCell(), EcalBarrelGeometry::getClosestCell(), EcalEndcapGeometry::getClosestCell(), calogeom::IdealCastorTrapezoid::getCorners(), calogeom::IdealObliquePrism::getCorners(), calogeom::IdealZPrism::getCorners(), calogeom::IdealZDCTrapezoid::getCorners(), PreshowerStrip::getCorners(), L2TauModularIsolationProducer::getECALHits(), L2TauNarrowConeIsolationProducer::getECALHits(), L2TauIsolationProducer::getECALHits(), EcalClusterTools::getEnergyDepTopology(), CaloGeometry::getPosition(), CaloDetIdAssociator::getPosition(), HCaloDetIdAssociator::getPosition(), TruncatedPyramid::getPosition(), TruncatedPyramid::getTransform(), getTransform(), CaloTowersCreationAlgo::hadSegmentShwrPos(), CaloTowersCreationAlgo::hadShwPosFromCells(), EcalEndcapRecHitsMaker::init(), EcalBarrelRecHitsMaker::init(), CaloGeometryHelper::initialize(), EcalRingCalibrationTools::initializeFromGeometry(), TruncatedPyramid::makeAxis(), CosmicClusterAlgo::makeClusters(), HybridClusterAlgo::makeClusters(), Multi5x5ClusterAlgo::makeClusters(), IslandClusterAlgo::makeClusters(), PreshowerClusterAlgo::makeOneCluster(), EcalClusterTools::meanClusterPosition(), DistanceToCell::operator()(), operator<<(), calogeom::operator<<(), PlotEcalRecHits::printEcalRecHit(), CastorEventDisplay::processEvent(), JetCrystalsAssociator::produce(), EcalRecHitWorkerRecover::run(), EcalGeomPhiSymHelper::setup(), CaloHitResponse::timeOfFlight(), and CaloHitRespoNew::timeOfFlight().

{ return m_refPoint ; }
HepGeom::Transform3D CaloCellGeometry::getTransform ( std::vector< HepGeom::Point3D< double > > *  lptr) const [virtual]

Reimplemented in PreshowerStrip, and TruncatedPyramid.

Definition at line 32 of file CaloCellGeometry.cc.

References angle(), getCorners(), getPosition(), i, mag(), L1TEmulatorMonitor_cff::p, p2, param(), csvLumiCalc::unit, vocalCorners(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

{
   const GlobalPoint& p ( CaloCellGeometry::getPosition() ) ;
   const HepGeom::Point3D<double>    gFront ( p.x(), p.y(), p.z() ) ;

   HepGeom::Point3D<double>  lFront ;
   assert(                               0 != param() ) ;
   std::vector<HepGeom::Point3D<double> > lc ( vocalCorners( param(), lFront ) ) ;

   HepGeom::Point3D<double>  lBack  ( 0.25*(lc[4]+lc[5]+lc[6]+lc[7]) ) ;

   const HepGeom::Point3D<double>  lOne  ( lc[0] ) ;

   const CornersVec& cor ( getCorners() ) ;
   std::vector<HepGeom::Point3D<double> > kor ( 8, HepGeom::Point3D<double> (0,0,0) ) ;
   for( unsigned int i ( 0 ) ; i != 8 ; ++i )
   {
      kor[i] = HepGeom::Point3D<double> ( cor[i].x(), cor[i].y(), cor[i].z() ) ;
   }

   HepGeom::Point3D<double>  gBack ( 0.25*( kor[4]+kor[5]+kor[6]+kor[7] ) ) ;

   const HepGeom::Vector3D<double>  gAxis ( (gBack-gFront).unit() ) ;

   gBack = ( gFront + (lBack-lFront).mag()*gAxis ) ;
   const HepGeom::Point3D<double>  gOneT ( gFront + ( lOne - lFront ).mag()*( kor[0] - gFront ).unit() ) ;

   const double langle ( ( lBack - lFront).angle( lOne - lFront ) ) ;
   const double gangle ( ( gBack - gFront).angle( gOneT- gFront ) ) ;
   const double dangle ( langle - gangle ) ;

   const HepGeom::Plane3D<double>  gPl (  gFront, gOneT, gBack ) ;
   const HepGeom::Point3D<double>  p2  ( gFront + gPl.normal().unit() ) ;

   const HepGeom::Point3D<double>  gOne ( gFront + HepGeom::Rotate3D( -dangle, gFront, p2 )*
                           HepGeom::Vector3D<double> ( gOneT - gFront ) ) ;

   const HepGeom::Transform3D tr ( lFront , lBack , lOne ,
                             gFront , gBack , gOne    ) ;

   if( 0 != lptr ) (*lptr) = lc ;

   return tr ;
}
bool CaloCellGeometry::inside ( const GlobalPoint point) const

Definition at line 126 of file CaloCellGeometry.cc.

References getCorners(), i, L1TEmulatorMonitor_cff::p, funct::true, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by CastorGeometry::getClosestCell(), ZdcGeometry::getClosestCell(), CaloDetIdAssociator::insideElement(), and HCaloDetIdAssociator::insideElement().

{
   bool ans ( false ) ;
   const HepGeom::Point3D<double>  p ( point.x(), point.y(), point.z() ) ;
   const CornersVec& cog ( getCorners() ) ;
   HepGeom::Point3D<double>  co[8] ;
   for( unsigned int i ( 0 ) ; i != 8 ; ++i )
   {
      co[i] = HepGeom::Point3D<double> ( cog[i].x(), cog[i].y(), cog[i].z() ) ;
   }

   const HepGeom::Plane3D<double>  AA ( co[0], co[1], co[2] ) ; // z<0
   const HepGeom::Plane3D<double>  BB ( co[6], co[5], co[4] ) ; // z>0

   if( AA.distance(p)*BB.distance(p) >= 0 )
   {
     const HepGeom::Plane3D<double>  CC ( co[0], co[4], co[5] ) ; // x<0
     const HepGeom::Plane3D<double>  DD ( co[2], co[6], co[7] ) ; // x>0
     if( CC.distance(p)*DD.distance(p) >= 0 )
     {
       const HepGeom::Plane3D<double>  EE ( co[3], co[7], co[4] ) ; // y<0
       const HepGeom::Plane3D<double>  FF ( co[1], co[5], co[6] ) ; // y>0
       if( EE.distance(p)*FF.distance(p) >= 0 )
       {
           ans = true ;
       }
      }
   }
   return ans ;
}
const double* CaloCellGeometry::param ( ) const [inline]
CornersVec& CaloCellGeometry::setCorners ( ) const [inline, protected]
virtual std::vector<HepGeom::Point3D<double> > CaloCellGeometry::vocalCorners ( const double *  pv,
HepGeom::Point3D< double > &  ref 
) const [pure virtual]

Member Data Documentation

Definition at line 93 of file CaloCellGeometry.h.

Referenced by emptyCorners(), getCorners(), and setCorners().

const double* CaloCellGeometry::m_parms [private]

Definition at line 95 of file CaloCellGeometry.h.

Referenced by param().

Definition at line 91 of file CaloCellGeometry.h.

Referenced by getPosition().