CMS 3D CMS Logo

IdealZPrism.cc

Go to the documentation of this file.
00001 #include "Geometry/CaloGeometry/interface/IdealZPrism.h"
00002 #include <math.h>
00003 
00004 namespace calogeom 
00005 {
00006    static GlobalPoint etaPhiR( float eta ,
00007                                float phi ,
00008                                float rad   ) 
00009    {
00010       return GlobalPoint( rad*cosf(  phi )/coshf( eta ) ,
00011                           rad*sinf(  phi )/coshf( eta ) ,
00012                           rad*tanhf( eta )             ) ;
00013    }
00014 
00015    static GlobalPoint etaPhiPerp( float eta , 
00016                                   float phi , 
00017                                   float perp  ) 
00018    {
00019       return GlobalPoint( perp*cosf(  phi ) , 
00020                           perp*sinf(  phi ) , 
00021                           perp*sinhf( eta ) );
00022    }
00023 
00024    static GlobalPoint etaPhiZ( float eta , 
00025                                float phi ,
00026                                float z    ) 
00027    {
00028       return GlobalPoint( z*cosf( phi )/sinhf( eta ) ,
00029                           z*sinf( phi )/sinhf( eta ) ,
00030                           z                            ) ;
00031    }
00032 
00033    const CaloCellGeometry::CornersVec& 
00034    IdealZPrism::getCorners() const 
00035    {
00036       const CornersVec& co ( CaloCellGeometry::getCorners() ) ;
00037       if( co.uninitialized() ) 
00038       {
00039          CornersVec& corners ( setCorners() ) ;
00040 
00041          const GlobalPoint p      ( getPosition() ) ;
00042          const float       z_near ( p.z() ) ;
00043          const float       z_far  ( z_near + 2*dz()*p.z()/fabs( p.z() ) ) ;
00044          const float       eta    ( p.eta() ) ;
00045          const float       phi    ( p.phi() ) ;
00046 
00047          corners[ 0 ] = etaPhiZ( eta + dEta(), phi + dPhi(), z_near ); // (+,+,near)
00048          corners[ 1 ] = etaPhiZ( eta + dEta(), phi - dPhi(), z_near ); // (+,-,near)
00049          corners[ 2 ] = etaPhiZ( eta - dEta(), phi - dPhi(), z_near ); // (-,-,near)
00050          corners[ 3 ] = etaPhiZ( eta - dEta(), phi + dPhi(), z_near ); // (-,+,near)
00051          corners[ 4 ] = GlobalPoint( corners[0].x(), corners[0].y(), z_far ); // (+,+,far)
00052          corners[ 5 ] = GlobalPoint( corners[1].x(), corners[1].y(), z_far ); // (+,-,far)
00053          corners[ 6 ] = GlobalPoint( corners[2].x(), corners[2].y(), z_far ); // (-,-,far)
00054          corners[ 7 ] = GlobalPoint( corners[3].x(), corners[3].y(), z_far ); // (-,+,far)      
00055       }
00056       return co ;
00057    }
00058 
00059    bool 
00060    IdealZPrism::inside( const GlobalPoint & point ) const 
00061    {
00062       return ( fabs( point.eta() - getPosition().eta() ) <= dEta() &&
00063                fabs( point.phi() - getPosition().phi() ) <= dPhi() &&
00064                fabs( point.z()   - getPosition().z()   ) <= dz()       ) ; 
00065    }
00066 
00067    std::ostream& operator<<( std::ostream& s, const IdealZPrism& cell ) 
00068    {
00069       s << "Center: " <<  cell.getPosition() << std::endl ;
00070       s << "dEta = " << cell.dEta() << ", dPhi = " << cell.dPhi() << ", dz = " << cell.dz() << std::endl ;
00071       return s;
00072    }
00073 
00074 }

Generated on Tue Jun 9 17:37:17 2009 for CMSSW by  doxygen 1.5.4