CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Attributes
CaloCellGeometry Class Referenceabstract

#include <CaloCellGeometry.h>

Inheritance diagram for CaloCellGeometry:
IdealCastorTrapezoid IdealObliquePrism IdealZDCTrapezoid IdealZPrism PreshowerStrip TruncatedPyramid

Public Types

typedef float CCGFloat
 
typedef EZMgrFL< GlobalPointCornersMgr
 
enum  CornersSize { k_cornerSize = 8 }
 
typedef EZArrayFL< GlobalPointCornersVec
 
typedef EZMgrFL< CCGFloatParMgr
 
typedef EZArrayFL< CCGFloatParVec
 
typedef std::vector< ParVecParVecVec
 
typedef HepGeom::Point3D
< CCGFloat
Pt3D
 
typedef std::vector< Pt3DPt3DVec
 
typedef HepGeom::Transform3D Tr3D
 

Public Member Functions

bool emptyCorners () const
 
virtual const CornersVecgetCorners () const =0
 Returns the corner points of this cell's volume. More...
 
const GlobalPointgetPosition () const
 Returns the position of reference for this cell. More...
 
virtual void getTransform (Tr3D &tr, Pt3DVec *lptr) const
 --------— only needed by specific utility; overloaded when needed -— More...
 
bool inside (const GlobalPoint &point) const
 Returns true if the specified point is inside this cell. More...
 
const CCGFloatparam () const
 
virtual void vocalCorners (Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref) const =0
 
virtual ~CaloCellGeometry ()
 

Static Public Member Functions

static const CCGFloatcheckParmPtr (const std::vector< CCGFloat > &vd, ParVecVec &pvv)
 
static const CCGFloatgetParmPtr (const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
 

Static Public Attributes

static const CCGFloat k_ScaleFromDDDtoGeant
 

Protected Member Functions

 CaloCellGeometry (CornersVec::const_reference gp, const CornersMgr *mgr, const CCGFloat *par)
 
 CaloCellGeometry (const CornersVec &cv, const CCGFloat *par)
 
 CaloCellGeometry (void)
 
 CaloCellGeometry (const CaloCellGeometry &cell)
 
CaloCellGeometryoperator= (const CaloCellGeometry &cell)
 
CornersVecsetCorners () const
 

Private Attributes

CornersVec m_corners
 
const CCGFloatm_parms
 
GlobalPoint m_refPoint
 

Detailed Description

Abstract base class for an individual cell's geometry.

The base class declares a pure virtual function and also writes a definition (body) to force conscious acceptance of default behaviour.

If a derived class doesn't choose to override a normal virtual, it just inherits the base version's behaviour by default. If you want to provide a default behaviour but not let derived classes just inherit it "silently" like this, you can make it pure virtual but still provide a default that the derived class author has to call deliberately if he wants it:

class B {
public:
virtual bool f() = 0;
};
bool B::f() {
return true; // this is a good default, but
} // shouldn't be used blindly
class D : public B {
public:
bool f() {
return B::f(); // if D wants the default
} // behaviour, it has to say so
};
Date:
2011/09/27 09:10:38
Revision:
1.20
Author
J. Mans, P. Meridiani

Definition at line 48 of file CaloCellGeometry.h.

Member Typedef Documentation

Definition at line 52 of file CaloCellGeometry.h.

Definition at line 58 of file CaloCellGeometry.h.

Definition at line 57 of file CaloCellGeometry.h.

Definition at line 62 of file CaloCellGeometry.h.

Definition at line 60 of file CaloCellGeometry.h.

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

Definition at line 61 of file CaloCellGeometry.h.

Definition at line 54 of file CaloCellGeometry.h.

typedef std::vector<Pt3D> CaloCellGeometry::Pt3DVec

Definition at line 55 of file CaloCellGeometry.h.

typedef HepGeom::Transform3D CaloCellGeometry::Tr3D

Definition at line 53 of file CaloCellGeometry.h.

Member Enumeration Documentation

Enumerator
k_cornerSize 

Definition at line 64 of file CaloCellGeometry.h.

Constructor & Destructor Documentation

CaloCellGeometry::~CaloCellGeometry ( )
virtual

Definition at line 42 of file CaloCellGeometry.cc.

43 {}
CaloCellGeometry::CaloCellGeometry ( CornersVec::const_reference  gp,
const CornersMgr mgr,
const CCGFloat par 
)
protected

Definition at line 63 of file CaloCellGeometry.cc.

65  :
66  m_refPoint ( gp ),
67  m_corners ( mgr ),
68  m_parms ( par )
69 {}
const CCGFloat * m_parms
GlobalPoint m_refPoint
CaloCellGeometry::CaloCellGeometry ( const CornersVec cv,
const CCGFloat par 
)
protected

Definition at line 71 of file CaloCellGeometry.cc.

72  :
73  m_refPoint ( 0.25*( cv[0].x() + cv[1].x() + cv[2].x() + cv[3].x() ),
74  0.25*( cv[0].y() + cv[1].y() + cv[2].y() + cv[3].y() ),
75  0.25*( cv[0].z() + cv[1].z() + cv[2].z() + cv[3].z() ) ),
76  m_corners ( cv ),
77  m_parms ( par )
78 {}
const CCGFloat * m_parms
double double double z
GlobalPoint m_refPoint
Definition: DDAxes.h:10
CaloCellGeometry::CaloCellGeometry ( void  )
protected

Definition at line 19 of file CaloCellGeometry.cc.

19  :
20  m_refPoint ( 0., 0., 0. ),
21  m_corners ( ) ,
22  m_parms ( (CCGFloat*) 0 )
23 {}
const CCGFloat * m_parms
CaloCellGeometry::CCGFloat CCGFloat
GlobalPoint m_refPoint
CaloCellGeometry::CaloCellGeometry ( const CaloCellGeometry cell)
protected

Definition at line 25 of file CaloCellGeometry.cc.

26 {
27  *this = cell ;
28 }

Member Function Documentation

const float * CaloCellGeometry::checkParmPtr ( const std::vector< CCGFloat > &  vd,
CaloCellGeometry::ParVecVec pvv 
)
static

Definition at line 161 of file CaloCellGeometry.cc.

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

Referenced by getParmPtr().

164 {
165  const float* pP ( 0 ) ;
166 
167  for( unsigned int ii ( 0 ) ; ii != pvv.size() ; ++ii )
168  {
169  const ParVec& v ( pvv[ii] ) ;
170  assert( v.size() == vv.size() ) ;
171 
172  bool same ( true ) ;
173  for( unsigned int j ( 0 ) ; j != vv.size() ; ++j )
174  {
175  same = same && ( fabs( vv[j] - v[j] )<1.e-6 ) ;
176  if( !same ) break ;
177  }
178  if( same )
179  {
180  pP = &(*v.begin()) ;
181  break ;
182  }
183  }
184  return pP ;
185 }
EZArrayFL< CCGFloat > ParVec
int j
Definition: DBlmapReader.cc:9
mathSSE::Vec4< T > v
bool CaloCellGeometry::emptyCorners ( ) const

Definition at line 52 of file CaloCellGeometry.cc.

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

Referenced by operator<<().

53 {
54  return m_corners.empty() ;
55 }
bool empty() const
Definition: EZArrayFL.h:79
const CaloCellGeometry::CornersVec & CaloCellGeometry::getCorners ( ) const
pure virtual
const float * CaloCellGeometry::getParmPtr ( const std::vector< CCGFloat > &  vd,
CaloCellGeometry::ParMgr mgr,
CaloCellGeometry::ParVecVec pvv 
)
static

Definition at line 188 of file CaloCellGeometry.cc.

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

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

192 {
193  const float* pP ( checkParmPtr( vv, pvv ) ) ;
194 
195  if( 0 == pP )
196  {
197  pvv.push_back( ParVec( mgr ) ) ;
198  ParVec& back ( pvv.back() ) ;
199  for( unsigned int i ( 0 ) ; i != vv.size() ; ++i )
200  {
201  back[i] = vv[i] ;
202  }
203  pP = &(*back.begin()) ;
204  }
205  return pP ;
206 }
int i
Definition: DBlmapReader.cc:9
EZArrayFL< CCGFloat > ParVec
static const CCGFloat * checkParmPtr(const std::vector< CCGFloat > &vd, ParVecVec &pvv)
const GlobalPoint & CaloCellGeometry::getPosition ( ) const

Returns the position of reference for this cell.

Definition at line 46 of file CaloCellGeometry.cc.

References m_refPoint.

Referenced by HcalRecHitsValidation::analyze(), EcalTPGParamBuilder::analyze(), CaloTowersCreationAlgo::assignHit(), EcalEndcapGeometry::avgAbsZFrontFaceCenter(), EcalBarrelGeometry::avgRadiusXYFrontFaceCenter(), EcalBoundaryInfoCalculator< EcalDetId >::boundaryRecHits(), CaloRecoTauAlgorithm::buildCaloTau(), CaloGeometryHelper::buildCrystalArray(), SuperClusterShapeAlgo::Calculate_Covariances(), ClusterShapeAlgo::Calculate_Covariances(), ClusterShapeAlgo::Calculate_EnergyDepTopology(), ggPFClusters::ClusterWidth(), compEcalEnergySum(), compHcalEnergySum(), CaloTowersCreationAlgo::convert(), EcalClusterTools::covariances(), PFRecHitProducerECAL::createEcalRecHit(), PFRecHitProducerHCAL::createHcalRecHit(), PFRecHitProducerHO::createHORecHit(), PFRecHitProducerPS::createRecHits(), DistanceToCell::DistanceToCell(), EcalHitMaker::EcalHitMaker(), InvRingCalib::EERingDef(), CaloTowersCreationAlgo::emCrystalShwrPos(), GlobalHitsAnalyzer::fillECal(), GlobalHitsProdHist::fillECal(), GlobalHitsProducer::fillECal(), HCALRecHitAnalyzer::FillGeometry(), ECALRecHitAnalyzer::FillGeometry(), GlobalHitsAnalyzer::fillHCal(), GlobalHitsProdHist::fillHCal(), GlobalHitsProducer::fillHCal(), GlobalRecHitsAnalyzer::fillHCal(), GlobalRecHitsProducer::fillHCal(), EcalDeadCellBoundaryEnergyFilter::filter(), PFRecHitProducerECAL::findEcalRecHitGeometry(), PFRecHitProducerHO::findHORecHitGeometry(), EcalBoundaryInfoCalculator< EcalDetId >::gapRecHits(), TCTauAlgorithm::getCellMomentum(), HcalGeometry::getCells(), EcalEndcapGeometry::getCells(), CaloSubdetectorGeometry::getCells(), EcalBarrelGeometry::getCells(), EcalDeadCellTriggerPrimitiveFilter::getChannelStatusMaps(), EcalDeadCellDeltaRFilter::getChannelStatusMaps(), CaloGeometryHelper::getClosestCell(), HcalGeometry::getClosestCell(), CaloSubdetectorGeometry::getClosestCell(), EcalEndcapGeometry::getClosestCell(), EcalBarrelGeometry::getClosestCell(), EcalPreshowerGeometry::getClosestCellInPlane(), IdealZDCTrapezoid::getCorners(), PreshowerStrip::getCorners(), IdealZPrism::getCorners(), IdealObliquePrism::getCorners(), IdealCastorTrapezoid::getCorners(), L2TauModularIsolationProducer::getECALHits(), L2TauIsolationProducer::getECALHits(), L2TauNarrowConeIsolationProducer::getECALHits(), EcalClusterTools::getEnergyDepTopology(), ggPFESClusters::getLinkDist(), ParticleTowerProducer::getNearestTower(), CaloGeometry::getPosition(), HCaloDetIdAssociator::getPosition(), TruncatedPyramid::getPosition(), CaloDetIdAssociator::getPosition(), CaloSubdetectorGeometry::getSummary(), TruncatedPyramid::getTransform(), getTransform(), CaloTowersCreationAlgo::hadSegmentShwrPos(), CaloTowersCreationAlgo::hadShwPosFromCells(), EcalEndcapRecHitsMaker::init(), EcalBarrelRecHitsMaker::init(), PhotonFixCMS::initialise(), CaloGeometryHelper::initialize(), EcalRingCalibrationTools::initializeFromGeometry(), EcalPreshowerGeometry::initializeParms(), EcalEndcapGeometry::initializeParms(), TruncatedPyramid::makeAxis(), IslandClusterAlgo::makeClusters(), CosmicClusterAlgo::makeClusters(), Multi5x5ClusterAlgo::makeClusters(), HybridClusterAlgo::makeClusters(), PreshowerClusterAlgo::makeOneCluster(), EcalClusterTools::meanClusterPosition(), DistanceToCell::operator()(), operator<<(), PlotEcalRecHits::printEcalRecHit(), CastorEventDisplay::processEvent(), ParticleTowerProducer::produce(), JetCrystalsAssociator::produce(), ParticleTowerProducer::resetTowers(), EcalRecHitWorkerRecover::run(), EcalGeomPhiSymHelper::setup(), ggPFPhotons::SuperClusterSize(), CaloHitRespoNew::timeOfFlight(), EcalHitResponse::timeOfFlight(), and CaloHitResponse::timeOfFlight().

47 {
48  return m_refPoint ;
49 }
GlobalPoint m_refPoint
void CaloCellGeometry::getTransform ( Tr3D tr,
Pt3DVec lptr 
) const
virtual

--------— only needed by specific utility; overloaded when needed -—

Reimplemented in TruncatedPyramid.

Definition at line 112 of file CaloCellGeometry.cc.

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

Referenced by CaloSubdetectorGeometry::getSummary().

113 {
115  const Pt3D gFront ( p.x(), p.y(), p.z() ) ;
116  const DPt3D dgFront ( p.x(), p.y(), p.z() ) ;
117 
118  Pt3D lFront ;
119  assert( 0 != param() ) ;
120  Pt3DVec lc ( 8, Pt3D(0,0,0) ) ;
121  vocalCorners( lc, param(), lFront ) ;
122 
123  DPt3D dlFront ( lFront.x(), lFront.y(), lFront.z() ) ;
124 
125  const Pt3D lBack ( 0.25*(lc[4]+lc[5]+lc[6]+lc[7]) ) ;
126  const DPt3D dlBack ( lBack.x(), lBack.y(), lBack.z() ) ;
127 
128  const Pt3D dlOne ( lc[0].x(), lc[0].y(), lc[0].z() ) ;
129 
130  const CornersVec& cor ( getCorners() ) ;
131  DPt3DVec dkor ( 8, DPt3D(0,0,0) ) ;
132  for( unsigned int i ( 0 ) ; i != 8 ; ++i )
133  {
134  dkor[i] = DPt3D ( cor[i].x(), cor[i].y(), cor[i].z() ) ;
135  }
136 
137  DPt3D dgBack ( 0.25*( dkor[4]+dkor[5]+dkor[6]+dkor[7] ) ) ;
138 
139  const DVec3D dgAxis ( (dgBack-dgFront).unit() ) ;
140 
141  dgBack = ( dgFront + (dlBack-dlFront).mag()*dgAxis ) ;
142  const DPt3D dgOneT ( dgFront + ( dlOne - dlFront ).mag()*( dkor[0] - dgFront ).unit() ) ;
143 
144  const double dlangle ( ( dlBack - dlFront).angle( dlOne - dlFront ) ) ;
145  const double dgangle ( ( dgBack - dgFront).angle( dgOneT- dgFront ) ) ;
146  const double ddangle ( dlangle - dgangle ) ;
147 
148  const DPlane3D dgPl ( dgFront, dgOneT, dgBack ) ;
149  const DPt3D dp2 ( dgFront + dgPl.normal().unit() ) ;
150 
151  const DPt3D dgOne ( dgFront + HepGeom::Rotate3D( -ddangle, dgFront, dp2 )*
152  DVec3D ( dgOneT - dgFront ) ) ;
153 
154  tr = Tr3D( dlFront , dlBack , dlOne ,
155  dgFront , dgBack , dgOne ) ;
156 
157  if( 0 != lptr ) (*lptr) = lc ;
158 }
EZArrayFL< GlobalPoint > CornersVec
int i
Definition: DBlmapReader.cc:9
HepGeom::Point3D< double > DPt3D
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
HepGeom::Transform3D Tr3D
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
double double double z
const CCGFloat * param() const
string unit
Definition: csvLumiCalc.py:46
HepGeom::Vector3D< double > DVec3D
virtual void vocalCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref) const =0
CaloCellGeometry::Pt3D Pt3D
HepGeom::Plane3D< double > DPlane3D
CaloCellGeometry::Pt3DVec Pt3DVec
HepGeom::Point3D< CCGFloat > Pt3D
std::vector< DPt3D > DPt3DVec
Definition: DDAxes.h:10
virtual const CornersVec & getCorners() const =0
Returns the corner points of this cell&#39;s volume.
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
bool CaloCellGeometry::inside ( const GlobalPoint point) const

Returns true if the specified point is inside this cell.

Definition at line 209 of file CaloCellGeometry.cc.

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

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

210 {
211  bool ans ( false ) ;
212  const Pt3D p ( point.x(), point.y(), point.z() ) ;
213  const CornersVec& cog ( getCorners() ) ;
214  Pt3D co[8] ;
215  for( unsigned int i ( 0 ) ; i != 8 ; ++i )
216  {
217  co[i] = Pt3D ( cog[i].x(), cog[i].y(), cog[i].z() ) ;
218  }
219 
220  const Plane3D AA ( co[0], co[1], co[2] ) ; // z<0
221  const Plane3D BB ( co[6], co[5], co[4] ) ; // z>0
222 
223  if( AA.distance(p)*BB.distance(p) >= 0 )
224  {
225  const Plane3D CC ( co[0], co[4], co[5] ) ; // x<0
226  const Plane3D DD ( co[2], co[6], co[7] ) ; // x>0
227  if( CC.distance(p)*DD.distance(p) >= 0 )
228  {
229  const Plane3D EE ( co[3], co[7], co[4] ) ; // y<0
230  const Plane3D FF ( co[1], co[5], co[6] ) ; // y>0
231  if( EE.distance(p)*FF.distance(p) >= 0 )
232  {
233  ans = true ;
234  }
235  }
236  }
237  return ans ;
238 }
EZArrayFL< GlobalPoint > CornersVec
int i
Definition: DBlmapReader.cc:9
T y() const
Definition: PV3DBase.h:62
double double double z
T z() const
Definition: PV3DBase.h:63
CaloCellGeometry::Pt3D Pt3D
HepGeom::Point3D< CCGFloat > Pt3D
Definition: DDAxes.h:10
T x() const
Definition: PV3DBase.h:61
ROOT::Math::Plane3D Plane3D
virtual const CornersVec & getCorners() const =0
Returns the corner points of this cell&#39;s volume.
CaloCellGeometry & CaloCellGeometry::operator= ( const CaloCellGeometry cell)
protected

Definition at line 31 of file CaloCellGeometry.cc.

References m_corners, m_parms, and m_refPoint.

Referenced by TruncatedPyramid::operator=(), IdealZDCTrapezoid::operator=(), PreshowerStrip::operator=(), IdealZPrism::operator=(), IdealObliquePrism::operator=(), and IdealCastorTrapezoid::operator=().

32 {
33  if( this != &cell )
34  {
35  m_refPoint = cell.m_refPoint ;
36  m_corners = cell.m_corners ;
37  m_parms = cell.m_parms ;
38  }
39  return *this ;
40 }
const CCGFloat * m_parms
GlobalPoint m_refPoint
const CCGFloat * CaloCellGeometry::param ( ) const
CaloCellGeometry::CornersVec & CaloCellGeometry::setCorners ( ) const
protected
virtual void CaloCellGeometry::vocalCorners ( Pt3DVec vec,
const CCGFloat pv,
Pt3D ref 
) const
pure virtual

Member Data Documentation

const float CaloCellGeometry::k_ScaleFromDDDtoGeant
static
CornersVec CaloCellGeometry::m_corners
mutableprivate

Definition at line 116 of file CaloCellGeometry.h.

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

const CCGFloat* CaloCellGeometry::m_parms
private

Definition at line 117 of file CaloCellGeometry.h.

Referenced by operator=(), and param().

GlobalPoint CaloCellGeometry::m_refPoint
private

Definition at line 115 of file CaloCellGeometry.h.

Referenced by getPosition(), and operator=().