CMS 3D CMS Logo

Public Member Functions | Static Public Member Functions

calogeom::IdealZPrism Class Reference

#include <IdealZPrism.h>

Inheritance diagram for calogeom::IdealZPrism:
CaloCellGeometry

List of all members.

Public Member Functions

double dEta () const
double dPhi () const
double dz () const
double eta () const
virtual const CornersVecgetCorners () const
 IdealZPrism (const GlobalPoint &faceCenter, const CornersMgr *mgr, const double *parm)
virtual std::vector
< HepGeom::Point3D< double > > 
vocalCorners (const double *pv, HepGeom::Point3D< double > &ref) const
double z () const
virtual ~IdealZPrism ()

Static Public Member Functions

static std::vector
< HepGeom::Point3D< double > > 
localCorners (const double *pv, HepGeom::Point3D< double > &ref)

Detailed Description

Prism class used for HF volumes. HF volumes are prisms with axes along the Z direction whose face shapes are set by

Required parameters for an ideal Z prism:

Total: 6 parameters

Internally, the "point of reference" is the center (eta/phi) of the front face of the prism. Therefore, the only internally stored parameters are eta and phi HALF-widths and the tower z thickness.

Date:
2010/04/20 17:23:11
Revision:
1.8
Author:
J. Mans - Minnesota

Definition at line 29 of file IdealZPrism.h.


Constructor & Destructor Documentation

calogeom::IdealZPrism::IdealZPrism ( const GlobalPoint faceCenter,
const CornersMgr mgr,
const double *  parm 
) [inline]

Definition at line 33 of file IdealZPrism.h.

                                                          : 
            CaloCellGeometry ( faceCenter, mgr, parm )   {}
virtual calogeom::IdealZPrism::~IdealZPrism ( ) [inline, virtual]

Definition at line 38 of file IdealZPrism.h.

{}

Member Function Documentation

double calogeom::IdealZPrism::dEta ( ) const [inline]

Definition at line 42 of file IdealZPrism.h.

References CaloCellGeometry::param().

Referenced by getCorners(), localCorners(), and calogeom::operator<<().

{ return param()[0] ; }
double calogeom::IdealZPrism::dPhi ( ) const [inline]

Definition at line 43 of file IdealZPrism.h.

References CaloCellGeometry::param().

Referenced by getCorners(), localCorners(), and calogeom::operator<<().

{ return param()[1] ; }
double calogeom::IdealZPrism::dz ( ) const [inline]

Definition at line 44 of file IdealZPrism.h.

References CaloCellGeometry::param().

Referenced by getCorners(), localCorners(), and calogeom::operator<<().

{ return param()[2] ; }
double calogeom::IdealZPrism::eta ( void  ) const [inline]

Definition at line 45 of file IdealZPrism.h.

References CaloCellGeometry::param().

Referenced by getCorners(), and localCorners().

{ return param()[3] ; }
const CaloCellGeometry::CornersVec & calogeom::IdealZPrism::getCorners ( ) const [virtual]

Implements CaloCellGeometry.

Definition at line 76 of file IdealZPrism.cc.

References dEta(), dPhi(), dz(), PV3DBase< T, PVType, FrameType >::eta(), eta(), calogeom::etaPhiZ(), CaloCellGeometry::getCorners(), CaloCellGeometry::getPosition(), L1TEmulatorMonitor_cff::p, PV3DBase< T, PVType, FrameType >::phi(), phi, CaloCellGeometry::setCorners(), EZArrayFL< T >::uninitialized(), x, detailsBasic3DVector::y, and PV3DBase< T, PVType, FrameType >::z().

   {
      const CornersVec& co ( CaloCellGeometry::getCorners() ) ;
      if( co.uninitialized() ) 
      {
         CornersVec& corners ( setCorners() ) ;

         const GlobalPoint p      ( getPosition() ) ;
         const float       z_near ( p.z() ) ;
         const float       z_far  ( z_near + 2*dz()*p.z()/fabs( p.z() ) ) ;
         const float       eta    ( p.eta() ) ;
         const float       phi    ( p.phi() ) ;

         corners[ 0 ] = etaPhiZ( eta + dEta(), phi + dPhi(), z_near ); // (+,+,near)
         corners[ 1 ] = etaPhiZ( eta + dEta(), phi - dPhi(), z_near ); // (+,-,near)
         corners[ 2 ] = etaPhiZ( eta - dEta(), phi - dPhi(), z_near ); // (-,-,near)
         corners[ 3 ] = etaPhiZ( eta - dEta(), phi + dPhi(), z_near ); // (-,+,near)
         corners[ 4 ] = GlobalPoint( corners[0].x(), corners[0].y(), z_far ); // (+,+,far)
         corners[ 5 ] = GlobalPoint( corners[1].x(), corners[1].y(), z_far ); // (+,-,far)
         corners[ 6 ] = GlobalPoint( corners[2].x(), corners[2].y(), z_far ); // (-,-,far)
         corners[ 7 ] = GlobalPoint( corners[3].x(), corners[3].y(), z_far ); // (-,+,far)      
      }
      return co ;
   }
std::vector< HepGeom::Point3D< double > > calogeom::IdealZPrism::localCorners ( const double *  pv,
HepGeom::Point3D< double > &  ref 
) [static]

Definition at line 34 of file IdealZPrism.cc.

References dEta(), dPhi(), dz(), eta(), calogeom::etaPhiPerp(), calogeom::etaPhiR(), calogeom::etaPhiZ(), i, PV3DBase< T, PVType, FrameType >::mag(), L1TEmulatorMonitor_cff::p, x, detailsBasic3DVector::y, and z().

Referenced by HcalGeometry::localCorners(), and vocalCorners().

   {
      if( false )
      {
         GlobalPoint g1 ( etaPhiR(0,0,0) ) ;
         GlobalPoint g2 ( etaPhiPerp(0,0,0) ) ;
      }
      assert( 0 != pv ) ;

      const double dEta ( pv[0] ) ;
      const double dPhi ( pv[1] ) ;
      const double dz   ( pv[2] ) ;
      const double eta  ( pv[3] ) ;
      const double z    ( pv[4] ) ;

      std::vector<GlobalPoint> gc ( 8, GlobalPoint(0,0,0) ) ;
      std::vector<HepGeom::Point3D<double> >  lc ( 8, HepGeom::Point3D<double> ( 0,0,0) ) ;

      const GlobalPoint p ( etaPhiZ( eta, 0, z ) ) ;

      const float z_near ( z ) ;
      const float z_far  ( z*( 1 - 2*dz/p.mag() ) ) ;
      gc[ 0 ] = etaPhiZ( eta + dEta , +dPhi , z_near ) ; // (+,+,near)
      gc[ 1 ] = etaPhiZ( eta + dEta , -dPhi , z_near ) ; // (+,-,near)
      gc[ 2 ] = etaPhiZ( eta - dEta , -dPhi , z_near ) ; // (-,-,near)
      gc[ 3 ] = etaPhiZ( eta - dEta , +dPhi , z_near ) ; // (-,+,far)
      gc[ 4 ] = GlobalPoint( gc[0].x(), gc[0].y(), z_far ); // (+,+,far)
      gc[ 5 ] = GlobalPoint( gc[1].x(), gc[1].y(), z_far ); // (+,-,far)
      gc[ 6 ] = GlobalPoint( gc[2].x(), gc[2].y(), z_far ); // (-,-,far)
      gc[ 7 ] = GlobalPoint( gc[3].x(), gc[3].y(), z_far ); // (-,+,far)        

      for( unsigned int i ( 0 ) ; i != 8 ; ++i )
      {
         lc[i] = HepGeom::Point3D<double> ( gc[i].x(), gc[i].y(), gc[i].z() ) ;
      }

      ref   = 0.25*( lc[0] + lc[1] + lc[2] + lc[3] ) ;
      return lc ;
   }
virtual std::vector<HepGeom::Point3D<double> > calogeom::IdealZPrism::vocalCorners ( const double *  pv,
HepGeom::Point3D< double > &  ref 
) const [inline, virtual]

Implements CaloCellGeometry.

Definition at line 51 of file IdealZPrism.h.

References localCorners().

         { return localCorners( pv, ref ) ; }
double calogeom::IdealZPrism::z ( ) const [inline]

Definition at line 46 of file IdealZPrism.h.

References CaloCellGeometry::param().

Referenced by localCorners().

{ return param()[4] ; }