CMS 3D CMS Logo

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

EcalEndcapGeometry Class Reference

#include <EcalEndcapGeometry.h>

Inheritance diagram for EcalEndcapGeometry:
CaloSubdetectorGeometry

List of all members.

Public Types

enum  { k_NumberOfCellsForCorners = EEDetId::kSizeForDenseIndexing }
enum  { k_NumberOfShapes = 1 }
enum  { k_NumberOfParametersPerShape = 11 }
typedef EcalEndcapGeometryRecord AlignedRecord
typedef EEAlignmentRcd AlignmentRecord
typedef EEDetId DetIdType
typedef IdealGeometryRecord IdealRecord
typedef EcalEndcapNumberingScheme NumberingScheme
typedef EZArrayFL< EBDetIdOrderedListOfEBDetId
typedef PEcalEndcapRcd PGeometryRecord
typedef std::vector
< OrderedListOfEBDetId * > 
VecOrdListEBDetIdPtr

Public Member Functions

double avgAbsZFrontFaceCenter () const
 EcalEndcapGeometry ()
virtual
CaloSubdetectorGeometry::DetIdSet 
getCells (const GlobalPoint &r, double dR) const
 Get a list of all cells within a dR of the given cell.
const OrderedListOfEBDetIdgetClosestBarrelCells (EEDetId id) const
virtual DetId getClosestCell (const GlobalPoint &r) const
int getNumberOfCrystalPerModule () const
int getNumberOfModules () const
virtual void initializeParms ()
virtual unsigned int numberOfParametersPerShape () const
virtual unsigned int numberOfShapes () const
void setNumberOfCrystalPerModule (const int nncrys)
void setNumberOfModules (const int nnmods)
virtual ~EcalEndcapGeometry ()

Static Public Member Functions

static unsigned int alignmentTransformIndexGlobal (const DetId &id)
static unsigned int alignmentTransformIndexLocal (const DetId &id)
static std::string dbString ()
static DetId detIdFromLocalAlignmentIndex (unsigned int iLoc)
static std::string hitString ()
static std::vector
< HepGeom::Point3D< double > > 
localCorners (const double *pv, unsigned int i, HepGeom::Point3D< double > &ref)
static CaloCellGeometrynewCell (const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, CaloCellGeometry::CornersMgr *mgr, const double *parm, const DetId &detId)
static unsigned int numberOfAlignments ()
static std::string producerTag ()

Private Member Functions

EEDetId gId (float x, float y, float z) const
unsigned int xindex (double x, double z) const
unsigned int yindex (double y, double z) const

Static Private Member Functions

static int myPhi (int i)

Private Attributes

int _nncrys
 number of crystals per module
int _nnmods
 number of modules
double m_avgZ
EZMgrFL< EBDetId > * m_borderMgr
VecOrdListEBDetIdPtrm_borderPtrVec
double m_del
unsigned int m_nref
double m_wref
double m_xhi [2]
double m_xlo [2]
double m_xoff [2]
double m_yhi [2]
double m_ylo [2]
double m_yoff [2]
double zeN
double zeP

Detailed Description

Definition at line 18 of file EcalEndcapGeometry.h.


Member Typedef Documentation

Definition at line 23 of file EcalEndcapGeometry.h.

Definition at line 24 of file EcalEndcapGeometry.h.

Definition at line 33 of file EcalEndcapGeometry.h.

Definition at line 22 of file EcalEndcapGeometry.h.

Definition at line 31 of file EcalEndcapGeometry.h.

Definition at line 27 of file EcalEndcapGeometry.h.

Definition at line 25 of file EcalEndcapGeometry.h.

Definition at line 29 of file EcalEndcapGeometry.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
k_NumberOfCellsForCorners 

Definition at line 35 of file EcalEndcapGeometry.h.

anonymous enum
Enumerator:
k_NumberOfShapes 

Definition at line 37 of file EcalEndcapGeometry.h.

{ k_NumberOfShapes = 1 } ;
anonymous enum
Enumerator:
k_NumberOfParametersPerShape 

Definition at line 39 of file EcalEndcapGeometry.h.


Constructor & Destructor Documentation

EcalEndcapGeometry::EcalEndcapGeometry ( )

Definition at line 9 of file EcalEndcapGeometry.cc.

                                       :
   _nnmods ( 316 ) ,
   _nncrys ( 25 ) ,
   m_borderMgr ( 0 ),
   m_borderPtrVec ( 0 ),
   m_avgZ ( -1 )
{
}
EcalEndcapGeometry::~EcalEndcapGeometry ( ) [virtual]

Definition at line 18 of file EcalEndcapGeometry.cc.

References m_borderMgr, and m_borderPtrVec.

{
   delete m_borderPtrVec ;
   delete m_borderMgr ;
}

Member Function Documentation

unsigned int EcalEndcapGeometry::alignmentTransformIndexGlobal ( const DetId id) [static]

Definition at line 42 of file EcalEndcapGeometry.cc.

References DetId::Ecal.

{
   return (unsigned int)DetId::Ecal - 1 ;
}
unsigned int EcalEndcapGeometry::alignmentTransformIndexLocal ( const DetId id) [static]

Definition at line 25 of file EcalEndcapGeometry.cc.

References getHLTprescales::index, and CaloGenericDetId::isEE().

{
   const CaloGenericDetId gid ( id ) ;

   assert( gid.isEE() ) ;
   unsigned int index ( EEDetId(id).ix()/51 + ( EEDetId(id).zside()<0 ? 0 : 2 ) ) ;

   return index ;
}
double EcalEndcapGeometry::avgAbsZFrontFaceCenter ( ) const

Definition at line 465 of file EcalEndcapGeometry.cc.

References CaloSubdetectorGeometry::cellGeometries(), i, m_avgZ, and z.

{
   if( 0 > m_avgZ )
   {
      double sum ( 0 ) ;
      const CaloSubdetectorGeometry::CellCont& cells ( cellGeometries() ) ;
      for( unsigned int i ( 0 ) ; i != cells.size() ; ++i )
      {
         sum += fabs( cells[i]->getPosition().z() ) ;
      }
      m_avgZ = sum/cells.size() ;
   }
   return m_avgZ ;
}
static std::string EcalEndcapGeometry::dbString ( ) [inline, static]

Definition at line 42 of file EcalEndcapGeometry.h.

{ return "PEcalEndcapRcd" ; }
DetId EcalEndcapGeometry::detIdFromLocalAlignmentIndex ( unsigned int  iLoc) [static]

Definition at line 36 of file EcalEndcapGeometry.cc.

Referenced by FakeCaloAlignmentEP::produceEEAli(), and TestCaloAlignmentEP::produceEEAli().

{
   return EEDetId( 20 + 50*( iLoc%2 ), 50, 2*( iLoc/2 ) - 1 ) ;
}
CaloSubdetectorGeometry::DetIdSet EcalEndcapGeometry::getCells ( const GlobalPoint r,
double  dR 
) const [virtual]

Get a list of all cells within a dR of the given cell.

The default implementation makes a loop over all cell geometries. Cleverer implementations are suggested to use rough conversions between eta/phi and ieta/iphi and test on the boundaries.

Reimplemented from CaloSubdetectorGeometry.

Definition at line 318 of file EcalEndcapGeometry.cc.

References reco::deltaR2(), eta(), PV3DBase< T, PVType, FrameType >::eta(), CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), ExpressReco_HICollisions_FallBack::id, m_nref, M_PI, m_wref, m_xhi, m_xlo, m_yhi, m_ylo, L1TEmulatorMonitor_cff::p, PV3DBase< T, PVType, FrameType >::phi(), phi, funct::tan(), EEDetId::validDetId(), PV3DBase< T, PVType, FrameType >::x(), xindex(), PV3DBase< T, PVType, FrameType >::y(), yindex(), PV3DBase< T, PVType, FrameType >::z(), and zeP.

{
   CaloSubdetectorGeometry::DetIdSet dis ; // return object
   if( 0.000001 < dR )
   {
      if( dR > M_PI/2. ) // this code assumes small dR
      {
         dis = CaloSubdetectorGeometry::getCells( r, dR ) ; // base class version
      }
      else
      {
         const double dR2  ( dR*dR ) ;
         const double reta ( r.eta() ) ;
         const double rphi ( r.phi() ) ;
         const double rx   ( r.x() ) ;
         const double ry   ( r.y() ) ;
         const double rz   ( r.z() ) ;
         const double fac  ( fabs( zeP/rz ) ) ;
         const double xx   ( rx*fac ) ; // xyz at endcap z
         const double yy   ( ry*fac ) ; 
         const double zz   ( rz*fac ) ; 

         const double xang  ( atan( xx/zz ) ) ;
         const double lowX  ( zz>0 ? zz*tan( xang - dR ) : zz*tan( xang + dR ) ) ;
         const double highX ( zz>0 ? zz*tan( xang + dR ) : zz*tan( xang - dR ) ) ;
         const double yang  ( atan( yy/zz ) ) ;
         const double lowY  ( zz>0 ? zz*tan( yang - dR ) : zz*tan( yang + dR ) ) ;
         const double highY ( zz>0 ? zz*tan( yang + dR ) : zz*tan( yang - dR ) ) ;

         const double refxlo ( 0 > rz ? m_xlo[0] : m_xlo[1] ) ;
         const double refxhi ( 0 > rz ? m_xhi[0] : m_xhi[1] ) ;
         const double refylo ( 0 > rz ? m_ylo[0] : m_ylo[1] ) ;
         const double refyhi ( 0 > rz ? m_yhi[0] : m_yhi[1] ) ;

         if( lowX  <  refxhi &&   // proceed if any possible overlap with the endcap
             lowY  <  refyhi &&
             highX >  refxlo &&
             highY >  refylo    )
         {
            const int ix_ctr ( xindex( xx, rz ) ) ;
            const int iy_ctr ( yindex( yy, rz ) ) ;
            const int iz     ( rz>0 ? 1 : -1 ) ;
            
            const int ix_hi  ( ix_ctr + int( ( highX - xx )/m_wref ) + 2 ) ;
            const int ix_lo  ( ix_ctr - int( ( xx - lowX  )/m_wref ) - 2 ) ;
            
            const int iy_hi  ( iy_ctr + int( ( highY - yy )/m_wref ) + 2 ) ;
            const int iy_lo  ( iy_ctr - int( ( yy - lowY  )/m_wref ) - 2 ) ;
            
            for( int kx ( ix_lo ) ; kx <= ix_hi ; ++kx ) 
            {
               if( kx >  0      && 
                   kx <= (int) m_nref    )
               {
                  for( int ky ( iy_lo ) ; ky <= iy_hi ; ++ky ) 
                  {
                     if( ky >  0      && 
                         ky <= (int) m_nref    )
                     {
                        if( EEDetId::validDetId( kx, ky, iz ) ) // reject invalid ids
                        {
                           const EEDetId id ( kx, ky, iz ) ;
                           const CaloCellGeometry* cell ( getGeometry( id ) );
                           if( 0 != cell )
                           {
                              const GlobalPoint& p    ( cell->getPosition() ) ;
                              const double       eta  ( p.eta() ) ;
                              const double       phi  ( p.phi() ) ;
                              if( reco::deltaR2( eta, phi, reta, rphi ) < dR2 ) dis.insert( id ) ;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
   return dis;
}
const EcalEndcapGeometry::OrderedListOfEBDetId * EcalEndcapGeometry::getClosestBarrelCells ( EEDetId  id) const

Definition at line 401 of file EcalEndcapGeometry.cc.

References degrees(), CaloSubdetectorGeometry::getGeometry(), i, m_borderMgr, m_borderPtrVec, myPhi(), and phi.

Referenced by spr::simpleMove(), and PFRecHitProducerECAL::stdsimplemove().

{
   OrderedListOfEBDetId* ptr ( 0 ) ;
   if( 0 != id.rawId() &&
       0 != getGeometry( id ) )
   {
      const float phi ( 370. +
                        getGeometry( id )->getPosition().phi().degrees() );
      const int iPhi ( 1 + int(phi)%360 ) ;
      const int iz ( id.zside() ) ;
      if( 0 == m_borderMgr )
      {
         m_borderMgr = new EZMgrFL<EBDetId>( 720*9, 9 ) ;
      }
      if( 0 == m_borderPtrVec )
      {
         m_borderPtrVec = new VecOrdListEBDetIdPtr() ;
         m_borderPtrVec->reserve( 720 ) ;
         for( unsigned int i ( 0 ) ; i != 720 ; ++i )
         {
            const int kz     ( 360>i ? -1 : 1 ) ;
            const int iEta   ( kz*85 ) ;
            const int iEtam1 ( kz*84 ) ;
            const int iEtam2 ( kz*83 ) ;
            const int jPhi   ( i%360 + 1 ) ;
            OrderedListOfEBDetId& olist ( *new OrderedListOfEBDetId( m_borderMgr ) );
            olist[0]=EBDetId( iEta  ,        jPhi     ) ;
            olist[1]=EBDetId( iEta  , myPhi( jPhi+1 ) ) ;
            olist[2]=EBDetId( iEta  , myPhi( jPhi-1 ) ) ;
            olist[3]=EBDetId( iEtam1,        jPhi     ) ;
            olist[4]=EBDetId( iEtam1, myPhi( jPhi+1 ) ) ;
            olist[5]=EBDetId( iEtam1, myPhi( jPhi-1 ) ) ;
            olist[6]=EBDetId( iEta  , myPhi( jPhi+2 ) ) ;
            olist[7]=EBDetId( iEta  , myPhi( jPhi-2 ) ) ;
            olist[8]=EBDetId( iEtam2,        jPhi     ) ;
            m_borderPtrVec->push_back( &olist ) ;
         }
      }
      ptr = (*m_borderPtrVec)[ ( iPhi - 1 ) + ( 0>iz ? 0 : 360 ) ] ;
   }
   return ptr ;
}
DetId EcalEndcapGeometry::getClosestCell ( const GlobalPoint r) const [virtual]

Reimplemented from CaloSubdetectorGeometry.

Definition at line 203 of file EcalEndcapGeometry.cc.

References funct::A, funct::C, ExpressReco_HICollisions_FallBack::e, CaloCellGeometry::getCorners(), CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), gId(), i, EEDetId::ix(), EEDetId::iy(), evf::evtn::offset(), point, EEDetId::validDetId(), ExpressReco_HICollisions_FallBack::x, PV3DBase< T, PVType, FrameType >::x(), ExpressReco_HICollisions_FallBack::y, PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), z, and EEDetId::zside().

Referenced by spr::chargeIsolationEcal(), CaloGeometryHelper::getClosestCell(), and spr::propagateCALO().

{
   try
   {
      EEDetId mycellID ( gId( r.x(), r.y(), r.z() ) ) ; // educated guess

      if( EEDetId::validDetId( mycellID.ix(), 
                               mycellID.iy(),
                               mycellID.zside() ) )
      {
         // now get points in convenient ordering

         HepGeom::Point3D<double>   A;
         HepGeom::Point3D<double>   B;
         HepGeom::Point3D<double>   C;
         HepGeom::Point3D<double>   point(r.x(),r.y(),r.z());
         // D.K. : equation of plane : AA*x+BB*y+CC*z+DD=0;
         // finding equation for each edge
         
         // ================================================================
         double x,y,z;
         unsigned offset=0;
         int zsign=1;
         //================================================================
         std::vector<double> SS;
      
         // compute the distance of the point with respect of the 4 crystal lateral planes

         
         if( 0 != getGeometry(mycellID) )
         {
            const GlobalPoint& myPosition=getGeometry(mycellID)->getPosition();
         
            x=myPosition.x();
            y=myPosition.y();
            z=myPosition.z();
         
            offset=0;
            // This will disappear when Andre has applied his fix
            zsign=1;
         
            if(z>0)
            {
               if(x>0&&y>0)
                  offset=1;
               else  if(x<0&&y>0)
                  offset=2;
               else if(x>0&&y<0)
                  offset=0;
               else if (x<0&&y<0)
                  offset=3;
               zsign=1;
            }
            else
            {
               if(x>0&&y>0)
                  offset=3;
               else if(x<0&&y>0)
                  offset=2;
               else if(x>0&&y<0)
                  offset=0;
               else if(x<0&&y<0)
                  offset=1;
               zsign=-1;
            }
            std::vector<GlobalPoint> corners;
            corners.clear();
            corners.resize(8);
            for(unsigned ic=0;ic<4;++ic)
            {
               corners[ic]=getGeometry(mycellID)->getCorners()[(unsigned)((zsign*ic+offset)%4)];
               corners[4+ic]=getGeometry(mycellID)->getCorners()[(unsigned)(4+(zsign*ic+offset)%4)];
            }
            
            for (short i=0; i < 4 ; ++i)
            {
               A = HepGeom::Point3D<double> (corners[i%4].x(),corners[i%4].y(),corners[i%4].z());
               B = HepGeom::Point3D<double> (corners[(i+1)%4].x(),corners[(i+1)%4].y(),corners[(i+1)%4].z());
               C = HepGeom::Point3D<double> (corners[4+(i+1)%4].x(),corners[4+(i+1)%4].y(),corners[4+(i+1)%4].z());
               HepGeom::Plane3D<double>  plane(A,B,C);
               plane.normalize();
               double distance = plane.distance(point);
               if (corners[0].z()<0.) distance=-distance;
               SS.push_back(distance);
            }
         
            // Only one move in necessary direction
         
            const bool yout ( 0 > SS[0]*SS[2] ) ;
            const bool xout ( 0 > SS[1]*SS[3] ) ;
         
            if( yout || xout )
            {
               const int ydel ( !yout ? 0 :  ( 0 < SS[0] ? -1 : 1 ) ) ;
               const int xdel ( !xout ? 0 :  ( 0 < SS[1] ? -1 : 1 ) ) ;
               const unsigned int ix ( mycellID.ix() + xdel ) ;
               const unsigned int iy ( mycellID.iy() + ydel ) ;
               const unsigned int iz ( mycellID.zside()     ) ;
               if( EEDetId::validDetId( ix, iy, iz ) ) 
                  mycellID = EEDetId( ix, iy, iz ) ;
            }
  
            return mycellID;
         }
         return DetId(0);
      }
   }
   catch ( cms::Exception &e ) 
   { 
      return DetId(0);
   }
   return DetId(0);
}
int EcalEndcapGeometry::getNumberOfCrystalPerModule ( ) const [inline]

Definition at line 53 of file EcalEndcapGeometry.h.

References _nncrys.

{ return _nncrys ; }
int EcalEndcapGeometry::getNumberOfModules ( ) const [inline]

Definition at line 51 of file EcalEndcapGeometry.h.

References _nnmods.

{ return _nnmods ; }
EEDetId EcalEndcapGeometry::gId ( float  x,
float  y,
float  z 
) const [private]

Definition at line 167 of file EcalEndcapGeometry.cc.

References i, gen::k, EEDetId::validDetId(), xindex(), yindex(), zeN, and zeP.

Referenced by getClosestCell().

{
   const double       fac ( fabs( ( 0 > z ? zeN : zeP )/z ) ) ;
   const unsigned int ix  ( xindex( x*fac, z ) ) ; 
   const unsigned int iy  ( yindex( y*fac, z ) ) ; 
   const unsigned int iz  ( z>0 ? 1 : -1 ) ;

   if( EEDetId::validDetId( ix, iy, iz ) ) 
   {
      return EEDetId( ix, iy, iz ) ; // first try is on target
   }
   else // try nearby coordinates, spiraling out from center
   {
      for( unsigned int i ( 1 ) ; i != 6 ; ++i )
      {
         for( unsigned int k ( 0 ) ; k != 8 ; ++k )
         {
            const int jx ( 0 == k || 4 == k || 5 == k ? +i :
                           ( 1 == k || 5 < k ? -i : 0 ) ) ;
            const int jy ( 2 == k || 4 == k || 6 == k ? +i :
                           ( 3 == k || 5 == k || 7 == k ? -i : 0 ) ) ;
            if( EEDetId::validDetId( ix + jx, iy + jy, iz ) ) 
            {
               return EEDetId( ix + jx, iy + jy, iz ) ;
            }
         }
      }
   }
   return EEDetId() ; // nowhere near any crystal
}
static std::string EcalEndcapGeometry::hitString ( ) [inline, static]

Definition at line 70 of file EcalEndcapGeometry.h.

{ return "EcalHitsEE" ; }
void EcalEndcapGeometry::initializeParms ( ) [virtual]

Reimplemented from CaloSubdetectorGeometry.

Definition at line 48 of file EcalEndcapGeometry.cc.

References CaloSubdetectorGeometry::cellGeometries(), EEDetId::detIdFromDenseIndex(), i, EEDetId::ix(), EEDetId::iy(), m_del, m_nref, m_wref, m_xhi, m_xlo, m_xoff, m_yhi, m_ylo, m_yoff, L1TEmulatorMonitor_cff::p, ExpressReco_HICollisions_FallBack::x, PV3DBase< T, PVType, FrameType >::x(), ExpressReco_HICollisions_FallBack::y, PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), z, zeN, and zeP.

{
  zeP=0.;
  zeN=0.;
  unsigned nP=0;
  unsigned nN=0;
  m_nref = 0 ;

  for( uint32_t i ( 0 ) ; i != cellGeometries().size() ; ++i )
  {
     if( 0 != cellGeometries()[i] )
     {
//      addCrystalToZGridmap(i->first,dynamic_cast<const TruncatedPyramid*>(i->second));
        const double z ( cellGeometries()[i]->getPosition().z() ) ;
        if(z>0.)
        {
           zeP+=z;
           ++nP;
        }
        else
        {
           zeN+=z;
           ++nN;
        }
        const EEDetId myId ( EEDetId::detIdFromDenseIndex(i) ) ;
        const unsigned int ix ( myId.ix() ) ;
        const unsigned int iy ( myId.iy() ) ;
        if( ix > m_nref ) m_nref = ix ;
        if( iy > m_nref ) m_nref = iy ;
     }
  }
  if( 0 < nP ) zeP/=(double)nP;
  if( 0 < nN ) zeN/=(double)nN;

  m_xlo[0] =  999 ;
  m_xhi[0] = -999 ;
  m_ylo[0] =  999 ;
  m_yhi[0] = -999 ;
  m_xlo[1] =  999 ;
  m_xhi[1] = -999 ;
  m_ylo[1] =  999 ;
  m_yhi[1] = -999 ;
  for( uint32_t i ( 0 ) ; i != cellGeometries().size() ; ++i )
  {
     const GlobalPoint p ( cellGeometries()[i]->getPosition()  ) ;
     const double z ( p.z() ) ;
     const double zz ( 0 > z ? zeN : zeP ) ;
     const double x ( p.x()*zz/z ) ;
     const double y ( p.y()*zz/z ) ;

     if( 0 > z && x < m_xlo[0] ) m_xlo[0] = x ;
     if( 0 < z && x < m_xlo[1] ) m_xlo[1] = x ;
     if( 0 > z && y < m_ylo[0] ) m_ylo[0] = y ;
     if( 0 < z && y < m_ylo[1] ) m_ylo[1] = y ;

     if( 0 > z && x > m_xhi[0] ) m_xhi[0] = x ;
     if( 0 < z && x > m_xhi[1] ) m_xhi[1] = x ;
     if( 0 > z && y > m_yhi[0] ) m_yhi[0] = y ;
     if( 0 < z && y > m_yhi[1] ) m_yhi[1] = y ;
  }

  m_xoff[0] = ( m_xhi[0] + m_xlo[0] )/2. ;
  m_xoff[1] = ( m_xhi[1] + m_xlo[1] )/2. ;
  m_yoff[0] = ( m_yhi[0] + m_ylo[0] )/2. ;
  m_yoff[1] = ( m_yhi[1] + m_ylo[1] )/2. ;

  m_del = ( m_xhi[0] - m_xlo[0] + m_xhi[1] - m_xlo[1] +
            m_yhi[0] - m_ylo[0] + m_yhi[1] - m_ylo[1]   ) ;

  m_wref = m_del/(4.*(m_nref-1)) ;

  m_xlo[0] -= m_wref/2 ;
  m_xlo[1] -= m_wref/2 ;
  m_xhi[0] += m_wref/2 ;
  m_xhi[1] += m_wref/2 ;

  m_ylo[0] -= m_wref/2 ;
  m_ylo[1] -= m_wref/2 ;
  m_yhi[0] += m_wref/2 ;
  m_yhi[1] += m_wref/2 ;

  m_del += m_wref ;
/*
  std::cout<<"zeP="<<zeP<<", zeN="<<zeN<<", nP="<<nP<<", nN="<<nN<<std::endl ;

  std::cout<<"xlo[0]="<<m_xlo[0]<<", xlo[1]="<<m_xlo[1]<<", xhi[0]="<<m_xhi[0]<<", xhi[1]="<<m_xhi[1]
           <<"\nylo[0]="<<m_ylo[0]<<", ylo[1]="<<m_ylo[1]<<", yhi[0]="<<m_yhi[0]<<", yhi[1]="<<m_yhi[1]<<std::endl ;

  std::cout<<"xoff[0]="<<m_xoff[0]<<", xoff[1]"<<m_xoff[1]<<", yoff[0]="<<m_yoff[0]<<", yoff[1]"<<m_yoff[1]<<std::endl ;

  std::cout<<"nref="<<m_nref<<", m_wref="<<m_wref<<std::endl ;
*/  
}
std::vector< HepGeom::Point3D< double > > EcalEndcapGeometry::localCorners ( const double *  pv,
unsigned int  i,
HepGeom::Point3D< double > &  ref 
) [static]

Definition at line 445 of file EcalEndcapGeometry.cc.

References TruncatedPyramid::localCorners().

{
   return ( TruncatedPyramid::localCorners( pv, ref ) ) ;
}
static int EcalEndcapGeometry::myPhi ( int  i) [inline, static, private]

Definition at line 95 of file EcalEndcapGeometry.h.

Referenced by getClosestBarrelCells().

{ i+=720; return ( 1 + (i-1)%360 ) ; }
CaloCellGeometry * EcalEndcapGeometry::newCell ( const GlobalPoint f1,
const GlobalPoint f2,
const GlobalPoint f3,
CaloCellGeometry::CornersMgr mgr,
const double *  parm,
const DetId detId 
) [static]

Definition at line 453 of file EcalEndcapGeometry.cc.

{
   return ( new TruncatedPyramid( mgr, f1, f2, f3, parm ) ) ;
}
static unsigned int EcalEndcapGeometry::numberOfAlignments ( ) [inline, static]

Definition at line 74 of file EcalEndcapGeometry.h.

Referenced by FakeCaloAlignmentEP::produceEEAli(), and TestCaloAlignmentEP::produceEEAli().

{ return 4 ; }
virtual unsigned int EcalEndcapGeometry::numberOfParametersPerShape ( ) const [inline, virtual]

Reimplemented from CaloSubdetectorGeometry.

Definition at line 45 of file EcalEndcapGeometry.h.

References k_NumberOfParametersPerShape.

virtual unsigned int EcalEndcapGeometry::numberOfShapes ( ) const [inline, virtual]

Reimplemented from CaloSubdetectorGeometry.

Definition at line 44 of file EcalEndcapGeometry.h.

References k_NumberOfShapes.

{ return k_NumberOfShapes ; }
static std::string EcalEndcapGeometry::producerTag ( ) [inline, static]

Definition at line 72 of file EcalEndcapGeometry.h.

Referenced by PCaloGeometryBuilder::beginRun(), and CaloGeometryBuilder::produceAligned().

{ return "EcalEndcap" ; }
void EcalEndcapGeometry::setNumberOfCrystalPerModule ( const int  nncrys) [inline]

Definition at line 57 of file EcalEndcapGeometry.h.

References _nncrys.

{ _nncrys=nncrys ; }
void EcalEndcapGeometry::setNumberOfModules ( const int  nnmods) [inline]

Definition at line 55 of file EcalEndcapGeometry.h.

References _nnmods.

{ _nnmods=nnmods ; }
unsigned int EcalEndcapGeometry::xindex ( double  x,
double  z 
) const [private]

Definition at line 144 of file EcalEndcapGeometry.cc.

References i, m_nref, m_wref, and m_xlo.

Referenced by getCells(), and gId().

{
   const double xlo ( 0 > z ? m_xlo[0]  : m_xlo[1]  ) ;
   const int i ( 1 + int( ( x - xlo )/m_wref ) ) ;

   return ( 1 > i ? 1 :
            ( m_nref < (unsigned int) i ? m_nref : (unsigned int) i ) ) ;

}
unsigned int EcalEndcapGeometry::yindex ( double  y,
double  z 
) const [private]

Definition at line 156 of file EcalEndcapGeometry.cc.

References i, m_nref, m_wref, and m_ylo.

Referenced by getCells(), and gId().

{
   const double ylo ( 0 > z ? m_ylo[0]  : m_ylo[1]  ) ;
   const int i ( 1 + int( ( y - ylo )/m_wref ) ) ;

   return ( 1 > i ? 1 :
            ( m_nref < (unsigned int) i ? m_nref : (unsigned int) i ) ) ;
}

Member Data Documentation

number of crystals per module

Definition at line 101 of file EcalEndcapGeometry.h.

Referenced by getNumberOfCrystalPerModule(), and setNumberOfCrystalPerModule().

number of modules

Definition at line 98 of file EcalEndcapGeometry.h.

Referenced by getNumberOfModules(), and setNumberOfModules().

double EcalEndcapGeometry::m_avgZ [mutable, private]

Definition at line 118 of file EcalEndcapGeometry.h.

Referenced by avgAbsZFrontFaceCenter().

Definition at line 114 of file EcalEndcapGeometry.h.

Referenced by getClosestBarrelCells(), and ~EcalEndcapGeometry().

Definition at line 116 of file EcalEndcapGeometry.h.

Referenced by getClosestBarrelCells(), and ~EcalEndcapGeometry().

double EcalEndcapGeometry::m_del [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by initializeParms().

unsigned int EcalEndcapGeometry::m_nref [private]

Definition at line 107 of file EcalEndcapGeometry.h.

Referenced by getCells(), initializeParms(), xindex(), and yindex().

double EcalEndcapGeometry::m_wref [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by getCells(), initializeParms(), xindex(), and yindex().

double EcalEndcapGeometry::m_xhi[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by getCells(), and initializeParms().

double EcalEndcapGeometry::m_xlo[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by getCells(), initializeParms(), and xindex().

double EcalEndcapGeometry::m_xoff[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by initializeParms().

double EcalEndcapGeometry::m_yhi[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by getCells(), and initializeParms().

double EcalEndcapGeometry::m_ylo[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by getCells(), initializeParms(), and yindex().

double EcalEndcapGeometry::m_yoff[2] [private]

Definition at line 105 of file EcalEndcapGeometry.h.

Referenced by initializeParms().

double EcalEndcapGeometry::zeN [private]

Definition at line 103 of file EcalEndcapGeometry.h.

Referenced by gId(), and initializeParms().

double EcalEndcapGeometry::zeP [private]

Definition at line 103 of file EcalEndcapGeometry.h.

Referenced by getCells(), gId(), and initializeParms().