CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions
HGCalGeometryLoader Class Reference

#include <HGCalGeometryLoader.h>

Public Member Functions

HGCalGeometrybuild (const HGCalTopology &)
 
 HGCalGeometryLoader ()
 
 ~HGCalGeometryLoader ()
 

Detailed Description

Definition at line 7 of file HGCalGeometryLoader.h.

Constructor & Destructor Documentation

HGCalGeometryLoader::HGCalGeometryLoader ( )

Definition at line 15 of file HGCalGeometryLoader.cc.

15 {}
HGCalGeometryLoader::~HGCalGeometryLoader ( )

Definition at line 16 of file HGCalGeometryLoader.cc.

16 {}

Member Function Documentation

HGCalGeometry * HGCalGeometryLoader::build ( const HGCalTopology topology)

Definition at line 18 of file HGCalGeometryLoader.cc.

References CaloSubdetectorGeometry::allocateCorners(), CaloSubdetectorGeometry::allocatePar(), alpha, assert(), prof2calltree::back, ecal_dqm_sourceclient-live_cfg::cerr, counter, gather_cfg::cout, FlatTrd::createCorners(), HGCalTopology::dddConstants(), HGCalTopology::detectorType(), prof2calltree::front, relativeConstraints::geom, HGCalDDDConstants::getFirstModule(), HGCalDDDConstants::getFirstTrForm(), HGCalDDDConstants::getLastModule(), HGCalDDDConstants::getLastTrForm(), CaloCellGeometry::getParmPtr(), HGCEE, i, HGCalGeometry::k_NumberOfParametersPerShape, HGCalGeometry::k_NumberOfShapes, PV3DBase< T, PVType, FrameType >::mag2(), HGCalGeometry::newCell(), CaloSubdetectorGeometry::parMgr(), CaloSubdetectorGeometry::parVecVec(), HGCalTopology::subDetector(), std::swap(), HGCalTopology::totalGeomModules(), x, y, z, and ecaldqm::zside().

Referenced by HGCalGeometryESProducer::produce().

18  {
19 
20  // allocate geometry
21  HGCalGeometry* geom = new HGCalGeometry (topology);
22  unsigned int numberOfCells = topology.totalGeomModules(); // both sides
23 #ifdef DebugLog
24  std::cout << "Number of Cells " << numberOfCells << " for sub-detector "
25  << topology.subDetector() << " Shape parameters "
28 #endif
29  geom->allocateCorners( numberOfCells ) ;
32  ForwardSubdetector subdet = topology.subDetector();
33  bool detType = topology.detectorType();
34 
35  // loop over modules
36  std::vector<HGCalDDDConstants::hgtrform>::const_iterator trItr;
37  std::vector<HGCalDDDConstants::hgtrap>::const_iterator volItr;
39  unsigned int counter(0);
40  for (trItr = topology.dddConstants().getFirstTrForm();
41  trItr != topology.dddConstants().getLastTrForm(); ++trItr) {
42  int zside = trItr->zp;
43  int layer = trItr->lay;
44  int sector = trItr->sec;
45  int subSec = (detType ? trItr->subsec : 0);
46  const HepGeom::Transform3D ht3d (trItr->hr, trItr->h3v);
47  DetId detId= ((subdet == HGCEE) ?
48  (DetId)(HGCEEDetId(subdet,zside,layer,sector,subSec,0)) :
49  (DetId)(HGCHEDetId(subdet,zside,layer,sector,subSec,0)));
50 #ifdef DebugLog
51  std::cout << "HGCalGeometryLoader:: Z:Layer:Sector:Subsector " << zside
52  << ":" << layer << ":" << sector << ":" << subSec << " transf "
53  << ht3d.getTranslation() << " and " << ht3d.getRotation();
54 #endif
55  for (volItr = topology.dddConstants().getFirstModule(true);
56  volItr != topology.dddConstants().getLastModule(true); ++volItr) {
57  if (volItr->lay == layer) {
58  double alpha = ((detType && subSec == 0) ? -fabs(volItr->alpha) :
59  fabs(volItr->alpha));
60  params[0] = volItr->dz;
61  params[1] = params[2] = 0;
62  params[3] = params[7] = volItr->h;
63  params[4] = params[8] = volItr->bl;
64  params[5] = params[9] = volItr->tl;
65  params[6] = params[10]= alpha;
66  params[11]= volItr->cellSize;
67 #ifdef DebugLog
68  std::cout << "Volume Parameters";
69  for (unsigned int i=0; i<12; ++i) std::cout << " : " << params[i];
70  std::cout << std::endl;
71 #endif
72  std::vector<GlobalPoint> corners (8);
73 
74  FlatTrd::createCorners( params, ht3d, corners ) ;
75 
76  const CCGFloat* parmPtr (CaloCellGeometry::getParmPtr(params,
77  geom->parMgr(),
78  geom->parVecVec() ) ) ;
79 
80  GlobalPoint front ( 0.25*( corners[0].x() +
81  corners[1].x() +
82  corners[2].x() +
83  corners[3].x() ),
84  0.25*( corners[0].y() +
85  corners[1].y() +
86  corners[2].y() +
87  corners[3].y() ),
88  0.25*( corners[0].z() +
89  corners[1].z() +
90  corners[2].z() +
91  corners[3].z() ) ) ;
92 
93  GlobalPoint back ( 0.25*( corners[4].x() +
94  corners[5].x() +
95  corners[6].x() +
96  corners[7].x() ),
97  0.25*( corners[4].y() +
98  corners[5].y() +
99  corners[6].y() +
100  corners[7].y() ),
101  0.25*( corners[4].z() +
102  corners[5].z() +
103  corners[6].z() +
104  corners[7].z() ) ) ;
105 
106  if (front.mag2() > back.mag2()) { // front should always point to the center, so swap front and back
107  std::swap (front, back);
108  std::swap_ranges (corners.begin(), corners.begin()+4, corners.begin()+4);
109  }
110 
111  geom->newCell(front, back, corners[0], parmPtr, detId) ;
112  counter++;
113  break;
114  }
115  }
116  }
117 
118  if (counter != numberOfCells) {
119  std::cerr << "inconsistent # of cells: expected " << numberOfCells << " , inited " << counter << std::endl;
120  assert( counter == numberOfCells ) ;
121  }
122  std::cout << "HGCalGeometryBuilder-> " << counter << " cells are produced" << std::endl;
123  return geom;
124 }
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
std::vector< hgtrap >::const_iterator getLastModule(bool reco=false) const
std::vector< hgtrap >::const_iterator getFirstModule(bool reco=false) const
assert(m_qm.get())
bool detectorType() const
int zside(DetId const &)
ForwardSubdetector
void allocatePar(ParVec::size_type n, unsigned int m)
virtual void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
unsigned int totalGeomModules() const
Definition: HGCalTopology.h:95
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
CaloCellGeometry::CCGFloat CCGFloat
static const CCGFloat * getParmPtr(const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
std::vector< hgtrform >::const_iterator getFirstTrForm() const
Definition: DetId.h:18
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:97
ForwardSubdetector subDetector() const
static void createCorners(const std::vector< CCGFloat > &pv, const Tr3D &tr, std::vector< GlobalPoint > &co)
Definition: FlatTrd.cc:126
static std::atomic< unsigned int > counter
void allocateCorners(CaloCellGeometry::CornersVec::size_type n)
std::vector< float > ParmVec
tuple cout
Definition: gather_cfg.py:121
std::vector< hgtrform >::const_iterator getLastTrForm() const