CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
HcalDDDGeometryLoader Class Reference

#include <HcalDDDGeometryLoader.h>

Public Types

typedef CaloSubdetectorGeometryReturnType
 

Public Member Functions

 HcalDDDGeometryLoader (const HcalDDDRecConstants *hcons)
 
 HcalDDDGeometryLoader ()=delete
 
ReturnType load (const HcalTopology &topo, DetId::Detector, int)
 
ReturnType load (const HcalTopology &topo)
 Load all of HCAL. More...
 
virtual ~HcalDDDGeometryLoader ()
 

Private Member Functions

void fill (HcalSubdetector, HcalDDDGeometry *)
 
void makeCell (const HcalDetId &, const HcalCellType &, double, double, HcalDDDGeometry *geom) const
 

Private Attributes

const HcalDDDRecConstantshcalConstants_
 
bool isBH_
 

Detailed Description

Note
The Geometry as loaded from DDD
Author
S. Banerjee

Definition at line 21 of file HcalDDDGeometryLoader.h.

Member Typedef Documentation

Definition at line 26 of file HcalDDDGeometryLoader.h.

Constructor & Destructor Documentation

HcalDDDGeometryLoader::HcalDDDGeometryLoader ( const HcalDDDRecConstants hcons)
explicit

Definition at line 15 of file HcalDDDGeometryLoader.cc.

References hcalConstants_, HcalDDDRecConstants::isBH(), and isBH_.

15  : hcalConstants_(hcons) {
17 }
const HcalDDDRecConstants * hcalConstants_
HcalDDDGeometryLoader::~HcalDDDGeometryLoader ( )
virtual

Definition at line 19 of file HcalDDDGeometryLoader.cc.

19 {}
HcalDDDGeometryLoader::HcalDDDGeometryLoader ( )
delete

Member Function Documentation

void HcalDDDGeometryLoader::fill ( HcalSubdetector  subdet,
HcalDDDGeometry geom 
)
private

helper functions to make all the ids and cells, and put them into the vectors and mpas passed in.

Definition at line 65 of file HcalDDDGeometryLoader.cc.

References gather_cfg::cout, HcalDDDRecConstants::HcalCellTypes(), hcalConstants_, mps_fire::i, gpuClustering::id, HcalDDDGeometry::increaseReserve(), HcalDDDGeometry::insertCell(), makeCell(), and phi.

Referenced by load().

65  {
66  // start by making the new HcalDetIds
67  std::vector<HcalCellType> hcalCells = hcalConstants_->HcalCellTypes(subdet);
68  geom->insertCell(hcalCells);
69 #ifdef EDM_ML_DEBUG
70  std::cout << "HcalDDDGeometryLoader::fill gets " << hcalCells.size() << " cells for subdetector " << subdet
71  << std::endl;
72 #endif
73  // Make the new HcalDetIds and the cells
74 
75  std::vector<HcalDetId> hcalIds;
76  for (auto& hcalCell : hcalCells) {
77  int etaRing = hcalCell.etaBin();
78  int iside = hcalCell.zside();
79  int depthBin = hcalCell.depthSegment();
80  double dphi = hcalCell.phiBinWidth();
81  std::vector<std::pair<int, double> > phis = hcalCell.phis();
82 #ifdef EDM_ML_DEBUG
83  std::cout << "HcalDDDGeometryLoader: Subdet " << subdet << " side " << iside << " eta " << etaRing << " depth "
84  << depthBin << " with " << phis.size() << "modules:" << std::endl;
85  size_t i(0);
86 #endif
87  geom->increaseReserve(phis.size());
88  for (auto& phi : phis) {
89 #ifdef EDM_ML_DEBUG
90  std::cout << "HcalDDDGeometryLoader::fill Cell " << i << " eta " << iside * etaRing << " phi " << phi.first << "("
91  << phi.second / CLHEP::deg << ", " << dphi / CLHEP::deg << ") depth " << depthBin << std::endl;
92  i++;
93 #endif
94  HcalDetId id(subdet, iside * etaRing, phi.first, depthBin);
95  hcalIds.emplace_back(id);
96  makeCell(id, hcalCell, phi.second, dphi, geom);
97  }
98  }
99 
100  edm::LogInfo("HCalGeom") << "Number of HCAL DetIds made for " << subdet << " is " << hcalIds.size();
101 }
uint16_t *__restrict__ id
int insertCell(std::vector< HcalCellType > const &)
void increaseReserve(unsigned int extra)
std::vector< HcalCellType > HcalCellTypes(HcalSubdetector) const
const HcalDDDRecConstants * hcalConstants_
Log< level::Info, false > LogInfo
void makeCell(const HcalDetId &, const HcalCellType &, double, double, HcalDDDGeometry *geom) const
tuple cout
Definition: gather_cfg.py:144
HcalDDDGeometryLoader::ReturnType HcalDDDGeometryLoader::load ( const HcalTopology topo,
DetId::Detector  det,
int  subdet 
)

Definition at line 21 of file HcalDDDGeometryLoader.cc.

References CaloSubdetectorGeometry::allocateCorners(), CaloSubdetectorGeometry::allocatePar(), CaloSubdetectorGeometry::cornersMgr(), submitPVResolutionJobs::count, fill(), relativeConstraints::geom, HcalBarrel, hcalConstants_, HcalEndcap, HcalForward, HcalOuter, HcalDDDRecConstants::numberOfCells(), CaloSubdetectorGeometry::parMgr(), and HcalDDDGeometry::sortValidIds().

Referenced by HcalDDDGeometryEP::produceAligned().

23  {
24  HcalSubdetector hsub = static_cast<HcalSubdetector>(subdet);
25 
27 
28  if (geom->cornersMgr() == nullptr) {
31  geom->allocateCorners(count);
32  }
33 
34  // if( geom->cornersMgr() == 0 ) geom->allocateCorners( 2592 ) ;
35 
36  if (geom->parMgr() == nullptr)
37  geom->allocatePar(500, 3);
38 
39  fill(hsub, geom);
40  //fast insertion of valid ids requires sort at end
41  geom->sortValidIds();
42  return geom;
43 }
void fill(HcalSubdetector, HcalDDDGeometry *)
unsigned int numberOfCells(HcalSubdetector) const
HcalSubdetector
Definition: HcalAssistant.h:31
const HcalDDDRecConstants * hcalConstants_
HcalDDDGeometryLoader::ReturnType HcalDDDGeometryLoader::load ( const HcalTopology topo)

Load all of HCAL.

Definition at line 45 of file HcalDDDGeometryLoader.cc.

References CaloSubdetectorGeometry::allocateCorners(), CaloSubdetectorGeometry::allocatePar(), CaloSubdetectorGeometry::cornersMgr(), submitPVResolutionJobs::count, fill(), relativeConstraints::geom, HcalBarrel, hcalConstants_, HcalEndcap, HcalForward, HcalOuter, HcalDDDRecConstants::numberOfCells(), CaloSubdetectorGeometry::parMgr(), and HcalDDDGeometry::sortValidIds().

45  {
47 
48  if (geom->cornersMgr() == nullptr) {
51  geom->allocateCorners(count);
52  }
53  if (geom->parMgr() == nullptr)
54  geom->allocatePar(500, 3);
55 
60  //fast insertion of valid ids requires sort at end
61  geom->sortValidIds();
62  return geom;
63 }
void fill(HcalSubdetector, HcalDDDGeometry *)
unsigned int numberOfCells(HcalSubdetector) const
const HcalDDDRecConstants * hcalConstants_
void HcalDDDGeometryLoader::makeCell ( const HcalDetId detId,
const HcalCellType hcalCell,
double  phi,
double  dphi,
HcalDDDGeometry geom 
) const
private

Definition at line 103 of file HcalDDDGeometryLoader.cc.

References funct::abs(), funct::cos(), gather_cfg::cout, HcalCellType::depthMax(), HcalCellType::depthMin(), HcalCellType::depthType(), PVValHelper::eta, HLT_FULL_cff::eta1, HLT_FULL_cff::eta2, HcalCellType::etaMax(), HcalCellType::etaMin(), funct::exp(), CaloCellGeometry::getParmPtr(), HcalCellType::halfSize(), HcalBarrel, HcalForward, HcalOuter, PixelPluginsPhase0_cfi::isBarrel, isBH_, HcalDDDGeometry::newCellFast(), CaloSubdetectorGeometry::parMgr(), CaloSubdetectorGeometry::parVecVec(), point, alignCSCRings::r, diffTwoXMLs::r1, diffTwoXMLs::r2, jetcorrextractor::sign(), funct::sin(), HcalDetId::subdet(), funct::tan(), theta(), TrackerMaterial_cfi::thickness, x, y, z, and HcalDetId::zside().

Referenced by fill().

104  {
105  // the two eta boundaries of the cell
106  double eta1 = hcalCell.etaMin();
107  double eta2 = hcalCell.etaMax();
108  HcalSubdetector subdet = detId.subdet();
109  double eta = 0.5 * (eta1 + eta2) * detId.zside();
110  double deta = (eta2 - eta1);
111  double theta = 2.0 * atan(exp(-eta));
112 
113  // barrel vs forward
114  bool rzType = hcalCell.depthType();
115  bool isBarrel = (subdet == HcalBarrel || subdet == HcalOuter);
116 
117  double z, r, thickness;
118 #ifdef EDM_ML_DEBUG
119  double r0, r1, r2;
120 #endif
121  if (rzType) {
122  r = hcalCell.depthMin();
123  if (isBarrel) {
124  z = r * sinh(eta); // sinh(eta) == 1/tan(theta)
125  thickness = (hcalCell.depthMax() - r) * cosh(eta); // cosh(eta) == 1/sin(theta)
126 #ifdef EDM_ML_DEBUG
127  r1 = r;
128  r2 = hcalCell.depthMax();
129  r0 = 0.5 * (r1 + r2);
130 #endif
131  } else {
132  z = r * sinh(eta2);
133  thickness = 2. * hcalCell.halfSize();
134  r = z / sinh(std::abs(eta));
135 #ifdef EDM_ML_DEBUG
136  r0 = z / sinh(std::abs(eta));
137  r1 = z / sinh(std::abs(eta) + 0.5 * deta);
138  r2 = z / sinh(std::abs(eta) - 0.5 * deta);
139 #endif
140  }
141 #ifdef EDM_ML_DEBUG
142  std::cout << "HcalDDDGeometryLoader::makeCell SubDet " << subdet << " eta = " << eta << " theta = " << theta
143  << " r = " << r << " thickness = " << thickness << " r0-r2 (" << r0 << ":" << r1 << ":" << r2 << ")"
144  << std::endl;
145 #endif
146  } else {
147  z = hcalCell.depthMin();
148  thickness = hcalCell.depthMax() - z;
149  if (isBH_)
150  z += (0.5 * thickness);
151  z *= detId.zside(); // get the sign right.
152  r = z * tan(theta);
153  thickness /= std::abs(cos(theta));
154 #ifdef EDM_ML_DEBUG
155  r0 = z / sinh(std::abs(eta));
156  r1 = z / sinh(std::abs(eta) + 0.5 * deta);
157  r2 = z / sinh(std::abs(eta) - 0.5 * deta);
158  std::cout << "HcalDDDGeometryLoader::makeCell SubDet " << subdet << " eta = " << eta << " theta = " << theta
159  << " z = " << z << " r = " << r << " thickness = " << thickness << " r0-r2 (" << r0 << ":" << r1 << ":"
160  << r2 << ")" << std::endl;
161 #endif
162  }
163 
164  double x = r * cos(phi);
165  double y = r * sin(phi);
166  GlobalPoint point(x, y, z);
167 
168 #ifdef EDM_ML_DEBUG
169  std::cout << "HcalDDDGeometryLoader::makeCell for " << detId << " Point " << point << " deta = " << deta
170  << " dphi = " << dphi << " thickness = " << thickness << " isBarrel = " << isBarrel << " " << rzType
171  << std::endl;
172 #endif
173 
174  std::vector<CCGFloat> hp;
175  hp.reserve(3);
176 
177  if (subdet == HcalForward) {
178  hp.emplace_back(deta / 2.);
179  hp.emplace_back(dphi / 2.);
180  hp.emplace_back(thickness / 2.);
181  } else {
182  const double sign(isBarrel ? 1 : -1);
183  hp.emplace_back(deta / 2.);
184  hp.emplace_back(dphi / 2.);
185  hp.emplace_back(sign * thickness / 2.);
186  }
187  geom->newCellFast(point, point, point, CaloCellGeometry::getParmPtr(hp, geom->parMgr(), geom->parVecVec()), detId);
188 }
double depthMax() const
Definition: HcalCellType.h:89
double depthMin() const
Definition: HcalCellType.h:88
bool depthType() const
Definition: HcalCellType.h:90
constexpr int zside() const
get the z-side of the cell (1/-1)
Definition: HcalDetId.h:141
double sign(double x)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
void newCellFast(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
double halfSize() const
Definition: HcalCellType.h:91
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static const CCGFloat * getParmPtr(const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
double etaMax() const
cell edge, always positive &amp; greater than etaMin
Definition: HcalCellType.h:81
double etaMin() const
lower cell edge. Always positive
Definition: HcalCellType.h:78
tuple cout
Definition: gather_cfg.py:144
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5

Member Data Documentation

const HcalDDDRecConstants* HcalDDDGeometryLoader::hcalConstants_
private

Definition at line 40 of file HcalDDDGeometryLoader.h.

Referenced by fill(), HcalDDDGeometryLoader(), and load().

bool HcalDDDGeometryLoader::isBH_
private

Definition at line 42 of file HcalDDDGeometryLoader.h.

Referenced by HcalDDDGeometryLoader(), and makeCell().