CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
HGCalTBGeomParameters Class Reference

#include <HGCalTBGeomParameters.h>

Classes

struct  cellParameters
 
struct  layerParameters
 

Public Member Functions

 HGCalTBGeomParameters ()
 
void loadCellParsHexagon (const DDCompactView *cpv, HGCalTBParameters &php)
 
void loadCellParsHexagon (const cms::DDVectorsMap &vmap, HGCalTBParameters &php)
 
void loadCellParsHexagon (const HGCalTBParameters &php)
 
void loadGeometryHexagon (const DDFilteredView &_fv, HGCalTBParameters &php, const std::string &sdTag1, const DDCompactView *cpv, const std::string &sdTag2, const std::string &sdTag3, HGCalGeometryMode::WaferMode mode)
 
void loadGeometryHexagon (const cms::DDCompactView *cpv, HGCalTBParameters &php, const std::string &sdTag1, const std::string &sdTag2, const std::string &sdTag3, HGCalGeometryMode::WaferMode mode)
 
void loadSpecParsHexagon (const DDFilteredView &fv, HGCalTBParameters &php, const DDCompactView *cpv, const std::string &sdTag1, const std::string &sdTag2)
 
void loadSpecParsHexagon (const cms::DDFilteredView &fv, HGCalTBParameters &php, const std::string &sdTag1, const std::string &sdTag2, const std::string &sdTag3, const std::string &sdTag4)
 
void loadWaferHexagon (HGCalTBParameters &php)
 
 ~HGCalTBGeomParameters ()=default
 

Private Member Functions

std::pair< double, double > cellPosition (const std::vector< cellParameters > &wafers, std::vector< cellParameters >::const_iterator &itrf, int wafer, double xx, double yy)
 
std::vector< double > getDDDArray (const std::string &str, const DDsvalues_type &sv, const int nmin)
 
void loadGeometryHexagon (const std::map< int, HGCalTBGeomParameters::layerParameters > &layers, std::vector< HGCalTBParameters::hgtrform > &trforms, std::vector< bool > &trformUse, const std::unordered_map< int32_t, int32_t > &copies, const HGCalTBParameters::layer_map &copiesInLayers, const std::vector< int32_t > &wafer2copy, const std::vector< HGCalTBGeomParameters::cellParameters > &wafers, const std::map< int, int > &wafertype, const std::map< int, HGCalTBGeomParameters::cellParameters > &cellsf, const std::map< int, HGCalTBGeomParameters::cellParameters > &cellsc, HGCalTBParameters &php)
 
void loadSpecParsHexagon (const HGCalTBParameters &php)
 
void rescale (std::vector< double > &, const double s)
 
void resetZero (std::vector< double > &)
 

Private Attributes

HGCalGeomTools geomTools_
 
const double sqrt3_
 
double waferSize_
 

Static Private Attributes

static constexpr double tan30deg_ = 0.5773502693
 

Detailed Description

this class extracts some geometry constants from CompactView to be used by Reco Geometry/Topology

Date
2022/12/31 00:06:50
Author
Sunanda Banerjee, Fermilab sunan.nosp@m.da.b.nosp@m.anerj.nosp@m.ee@c.nosp@m.ern.c.nosp@m.h

Definition at line 28 of file HGCalTBGeomParameters.h.

Constructor & Destructor Documentation

◆ HGCalTBGeomParameters()

HGCalTBGeomParameters::HGCalTBGeomParameters ( )

Definition at line 28 of file HGCalTBGeomParameters.cc.

28  : sqrt3_(std::sqrt(3.0)) {
29 #ifdef EDM_ML_DEBUG
30  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters::HGCalTBGeomParameters "
31  << "constructor";
32 #endif
33 }
Log< level::Info, true > LogVerbatim
T sqrt(T t)
Definition: SSEVec.h:19

◆ ~HGCalTBGeomParameters()

HGCalTBGeomParameters::~HGCalTBGeomParameters ( )
default

Member Function Documentation

◆ cellPosition()

std::pair< double, double > HGCalTBGeomParameters::cellPosition ( const std::vector< cellParameters > &  wafers,
std::vector< cellParameters >::const_iterator &  itrf,
int  wafer,
double  xx,
double  yy 
)
private

Definition at line 930 of file HGCalTBGeomParameters.cc.

References funct::abs(), PVValHelper::dx, PVValHelper::dy, tolerance, geometryCSVtoXML::xx, and geometryCSVtoXML::yy.

Referenced by loadGeometryHexagon().

935  {
936  if (itrf == wafers.end()) {
937  for (std::vector<HGCalTBGeomParameters::cellParameters>::const_iterator itr = wafers.begin(); itr != wafers.end();
938  ++itr) {
939  if (itr->wafer == wafer) {
940  itrf = itr;
941  break;
942  }
943  }
944  }
945  double dx(0), dy(0);
946  if (itrf != wafers.end()) {
947  dx = (xx - itrf->xyz.x());
948  if (std::abs(dx) < tolerance)
949  dx = 0;
950  dy = (yy - itrf->xyz.y());
951  if (std::abs(dy) < tolerance)
952  dy = 0;
953  }
954  return std::make_pair(dx, dy);
955 }
const double tolerance
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ getDDDArray()

std::vector< double > HGCalTBGeomParameters::getDDDArray ( const std::string &  str,
const DDsvalues_type sv,
const int  nmin 
)
private

Definition at line 901 of file HGCalTBGeomParameters.cc.

References DDfetch(), Exception, caHitNtupletGeneratorKernels::nmin, str, pfDeepBoostedJetPreprocessParams_cfi::sv, and relativeConstraints::value.

Referenced by loadSpecParsHexagon().

903  {
904  DDValue value(str);
905  if (DDfetch(&sv, value)) {
906  const std::vector<double>& fvec = value.doubles();
907  int nval = fvec.size();
908  if (nmin > 0) {
909  if (nval < nmin) {
910  throw cms::Exception("DDException")
911  << "HGCalTBGeomParameters: # of " << str << " bins " << nval << " < " << nmin << " ==> illegal";
912  }
913  } else {
914  if (nval < 1 && nmin == 0) {
915  throw cms::Exception("DDException")
916  << "HGCalTBGeomParameters: # of " << str << " bins " << nval << " < 1 ==> illegal"
917  << " (nmin=" << nmin << ")";
918  }
919  }
920  return fvec;
921  } else {
922  if (nmin >= 0) {
923  throw cms::Exception("DDException") << "HGCalTBGeomParameters: cannot get array " << str;
924  }
925  std::vector<double> fvec;
926  return fvec;
927  }
928 }
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:79
Definition: value.py:1
#define str(s)

◆ loadCellParsHexagon() [1/3]

void HGCalTBGeomParameters::loadCellParsHexagon ( const DDCompactView cpv,
HGCalTBParameters php 
)

Definition at line 861 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::cellCoarse_, HGCalTBParameters::cellFine_, dbl_to_int(), DDFilteredView::firstChild(), convertSQLiteXML::ok, AlCaHLTBitMon_QueryRunRegistry::string, and DDCompactView::vector().

Referenced by loadCellParsHexagon().

861  {
862  // Special parameters for cell parameters
863  std::string attribute = "OnlyForHGCalNumbering";
864  DDSpecificsHasNamedValueFilter filter1{attribute};
865  DDFilteredView fv1(*cpv, filter1);
866  bool ok = fv1.firstChild();
867 
868  if (ok) {
869  php.cellFine_ = dbl_to_int(cpv->vector("waferFine"));
870  php.cellCoarse_ = dbl_to_int(cpv->vector("waferCoarse"));
871  }
872 
873  loadCellParsHexagon(php);
874 }
std::vector< double > const & vector(std::string_view iKey) const
returns an empty container if not found
std::vector< int > cellFine_
std::vector< int > cellCoarse_
void loadCellParsHexagon(const DDCompactView *cpv, HGCalTBParameters &php)
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
Definition: DDutils.h:7

◆ loadCellParsHexagon() [2/3]

void HGCalTBGeomParameters::loadCellParsHexagon ( const cms::DDVectorsMap vmap,
HGCalTBParameters php 
)

Definition at line 876 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::cellCoarse_, HGCalTBParameters::cellFine_, mps_fire::i, and loadCellParsHexagon().

876  {
877  for (auto const& it : vmap) {
878  if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "waferFine")) {
879  for (const auto& i : it.second)
880  php.cellFine_.emplace_back(std::round(i));
881  } else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first), "waferCoarse")) {
882  for (const auto& i : it.second)
883  php.cellCoarse_.emplace_back(std::round(i));
884  }
885  }
886 
887  loadCellParsHexagon(php);
888 }
std::vector< int > cellFine_
std::vector< int > cellCoarse_
void loadCellParsHexagon(const DDCompactView *cpv, HGCalTBParameters &php)

◆ loadCellParsHexagon() [3/3]

void HGCalTBGeomParameters::loadCellParsHexagon ( const HGCalTBParameters php)

Definition at line 890 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::cellCoarse_, HGCalTBParameters::cellFine_, and dqmdumpme::k.

890  {
891 #ifdef EDM_ML_DEBUG
892  edm::LogVerbatim("HGCalGeom") << "HGCalLoadCellPars: " << php.cellFine_.size() << " rows for fine cells";
893  for (unsigned int k = 0; k < php.cellFine_.size(); ++k)
894  edm::LogVerbatim("HGCalGeom") << "[" << k << "]: " << php.cellFine_[k];
895  edm::LogVerbatim("HGCalGeom") << "HGCalLoadCellPars: " << php.cellCoarse_.size() << " rows for coarse cells";
896  for (unsigned int k = 0; k < php.cellCoarse_.size(); ++k)
897  edm::LogVerbatim("HGCalGeom") << "[" << k << "]: " << php.cellCoarse_[k];
898 #endif
899 }
Log< level::Info, true > LogVerbatim
std::vector< int > cellFine_
std::vector< int > cellCoarse_

◆ loadGeometryHexagon() [1/3]

void HGCalTBGeomParameters::loadGeometryHexagon ( const DDFilteredView _fv,
HGCalTBParameters php,
const std::string &  sdTag1,
const DDCompactView cpv,
const std::string &  sdTag2,
const std::string &  sdTag3,
HGCalGeometryMode::WaferMode  mode 
)

Definition at line 35 of file HGCalTBGeomParameters.cc.

References funct::abs(), HGCalTBParameters::hgtrap::alpha, HGCalTBParameters::hgtrap::bl, HGCalTBParameters::hgtrap::cellSize, HGCalTBParameters::cellSize_, filterCSVwithJSON::copy, DDFilteredView::copyNumbers(), CommonMethods::cp(), ddpolyhedra_rrz, ddpolyhedra_rz, ddtubs, HGCalTBParameters::hgtrap::dz, PVValHelper::dz, Exception, HGCalTBParameters::fillModule(), spr::find(), DDFilteredView::firstChild(), HGCalTypes::getUnpackedCell6(), HGCalTypes::getUnpackedCellType6(), HGCalTBParameters::hgtrap::h, HGCalTBParameters::hgtrform::h3v, HGCalTBParameters::hgtrform::hr, HGCalTBParameters::k_ScaleFromDDD, HGCalTBParameters::k_ScaleFromDDDToG4, HGCalTBParameters::hgtrap::lay, HGCalTBParameters::hgtrform::lay, pixelTopology::layer, HGCalTBParameters::layer_, hgcalTBTopologyTester_cfi::layers, DDFilteredView::logicalPart(), ALCARECOPromptCalibProdSiPixelAli0T_cff::mode, Skims_PA_cff::name, DDName::name(), DDBase< N, C >::name(), names, DDFilteredView::next(), convertSQLiteXML::ok, AlCaHLTBitMon_ParallelJobs::p, LaserDQM_cfg::p1, SiStripOfflineCRack_cfg::p2, HGCalGeometryMode::Polyhedra, DDTubs::rIn(), DDPolyhedra::rMaxVec(), DDPolyhedra::rMinVec(), idealTransformation::rotation, DDFilteredView::rotation(), DDTubs::rOut(), HGCalTBParameters::hgtrform::sec, mkfit::Const::sol, DDLogicalPart::solid(), AlCaHLTBitMon_QueryRunRegistry::string, HGCalTBParameters::hgtrform::subsec, tan30deg_, HGCalTBParameters::hgtrap::tl, HGCalTBParameters::tol, tolerance, DDFilteredView::translation(), HGCalTBParameters::waferR_, waferSize_, HGCalTBParameters::waferSize_, x, DDExtrudedPolygon::xVec(), geometryCSVtoXML::xx, y, geometryCSVtoXML::yy, z, HGCalTBParameters::hgtrform::zp, gpuVertexFinder::zv, DDPolyhedra::zVec(), DDExtrudedPolygon::zVec(), and geometryCSVtoXML::zz.

Referenced by loadGeometryHexagon().

41  {
42  DDFilteredView fv = _fv;
43  bool dodet(true);
44  std::map<int, HGCalTBGeomParameters::layerParameters> layers;
45  std::vector<HGCalTBParameters::hgtrform> trforms;
46  std::vector<bool> trformUse;
47 
48  while (dodet) {
49  const DDSolid& sol = fv.logicalPart().solid();
50  // Layers first
51  std::vector<int> copy = fv.copyNumbers();
52  int nsiz = static_cast<int>(copy.size());
53  int lay = (nsiz > 0) ? copy[nsiz - 1] : 0;
54  int zp = (nsiz > 2) ? copy[nsiz - 3] : -1;
55  if (zp != 1)
56  zp = -1;
57  if (lay == 0) {
58  throw cms::Exception("DDException") << "Funny layer # " << lay << " zp " << zp << " in " << nsiz << " components";
59  } else {
60  if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end())
61  php.layer_.emplace_back(lay);
62  auto itr = layers.find(lay);
63  if (itr == layers.end()) {
64  double rin(0), rout(0);
66  if ((sol.shape() == DDSolidShape::ddpolyhedra_rz) || (sol.shape() == DDSolidShape::ddpolyhedra_rrz)) {
67  const DDPolyhedra& polyhedra = static_cast<DDPolyhedra>(sol);
68  const std::vector<double>& rmin = polyhedra.rMinVec();
69  const std::vector<double>& rmax = polyhedra.rMaxVec();
70  rin = 0.5 * HGCalTBParameters::k_ScaleFromDDD * (rmin[0] + rmin[1]);
71  rout = 0.5 * HGCalTBParameters::k_ScaleFromDDD * (rmax[0] + rmax[1]);
72  } else if (sol.shape() == DDSolidShape::ddtubs) {
73  const DDTubs& tube = static_cast<DDTubs>(sol);
76  }
77  HGCalTBGeomParameters::layerParameters laypar(rin, rout, zz);
78  layers[lay] = laypar;
79  }
80  DD3Vector x, y, z;
81  fv.rotation().GetComponents(x, y, z);
82  const CLHEP::HepRep3x3 rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
83  const CLHEP::HepRotation hr(rotation);
85  if (std::abs(xx) < tolerance)
86  xx = 0;
88  if (std::abs(yy) < tolerance)
89  yy = 0;
91  const CLHEP::Hep3Vector h3v(xx, yy, zz);
93  mytrf.zp = zp;
94  mytrf.lay = lay;
95  mytrf.sec = 0;
96  mytrf.subsec = 0;
97  mytrf.h3v = h3v;
98  mytrf.hr = hr;
99  trforms.emplace_back(mytrf);
100  trformUse.emplace_back(false);
101  }
102  dodet = fv.next();
103  }
104 
105  // Then wafers
106  // This assumes layers are build starting from 1 (which on 25 Jan 2016, they
107  // were) to ensure that new copy numbers are always added to the end of the
108  // list.
109  std::unordered_map<int32_t, int32_t> copies;
110  HGCalTBParameters::layer_map copiesInLayers(layers.size() + 1);
111  std::vector<int32_t> wafer2copy;
112  std::vector<HGCalTBGeomParameters::cellParameters> wafers;
113  std::string attribute = "Volume";
114  DDValue val1(attribute, sdTag2, 0.0);
115  DDSpecificsMatchesValueFilter filter1{val1};
116  DDFilteredView fv1(*cpv, filter1);
117  bool ok = fv1.firstChild();
118  if (!ok) {
119  throw cms::Exception("DDException") << "Attribute " << val1 << " not found but needed.";
120  } else {
121  dodet = true;
122  std::unordered_set<std::string> names;
123  while (dodet) {
124  const DDSolid& sol = fv1.logicalPart().solid();
125  const std::string& name = fv1.logicalPart().name().name();
126  std::vector<int> copy = fv1.copyNumbers();
127  int nsiz = static_cast<int>(copy.size());
128  int wafer = (nsiz > 0) ? copy[nsiz - 1] : 0;
129  int layer = (nsiz > 1) ? copy[nsiz - 2] : 0;
130  if (nsiz < 2) {
131  throw cms::Exception("DDException") << "Funny wafer # " << wafer << " in " << nsiz << " components";
132  } else if (layer > static_cast<int>(layers.size())) {
133  edm::LogWarning("HGCalGeom") << "Funny wafer # " << wafer << " Layer " << layer << ":" << layers.size()
134  << " among " << nsiz << " components";
135  } else {
136  auto itr = copies.find(wafer);
137  auto cpy = copiesInLayers[layer].find(wafer);
138  if (itr != copies.end() && cpy == copiesInLayers[layer].end()) {
139  copiesInLayers[layer][wafer] = itr->second;
140  }
141  if (itr == copies.end()) {
142  copies[wafer] = wafer2copy.size();
143  copiesInLayers[layer][wafer] = wafer2copy.size();
144  double xx = HGCalTBParameters::k_ScaleFromDDD * fv1.translation().X();
145  if (std::abs(xx) < tolerance)
146  xx = 0;
147  double yy = HGCalTBParameters::k_ScaleFromDDD * fv1.translation().Y();
148  if (std::abs(yy) < tolerance)
149  yy = 0;
150  wafer2copy.emplace_back(wafer);
151  GlobalPoint p(xx, yy, HGCalTBParameters::k_ScaleFromDDD * fv1.translation().Z());
152  HGCalTBGeomParameters::cellParameters cell(false, wafer, p);
153  wafers.emplace_back(cell);
154  if (names.count(name) == 0) {
155  std::vector<double> zv, rv;
157  const DDPolyhedra& polyhedra = static_cast<DDPolyhedra>(sol);
158  zv = polyhedra.zVec();
159  rv = polyhedra.rMaxVec();
160  } else {
161  const DDExtrudedPolygon& polygon = static_cast<DDExtrudedPolygon>(sol);
162  zv = polygon.zVec();
163  rv = polygon.xVec();
164  }
167  double dz = 0.5 * HGCalTBParameters::k_ScaleFromDDDToG4 * (zv[1] - zv[0]);
168 #ifdef EDM_ML_DEBUG
169  edm::LogVerbatim("HGCalGeom")
170  << "Mode " << mode << " R " << php.waferSize_ << ":" << php.waferR_ << " z " << dz;
171 #endif
173  mytr.lay = 1;
174  mytr.bl = php.waferR_;
175  mytr.tl = php.waferR_;
176  mytr.h = php.waferR_;
177  mytr.dz = dz;
178  mytr.alpha = 0.0;
179  mytr.cellSize = waferSize_;
180  php.fillModule(mytr, false);
181  names.insert(name);
182  }
183  }
184  }
185  dodet = fv1.next();
186  }
187  }
188 
189  // Finally the cells
190  std::map<int, int> wafertype;
191  std::map<int, HGCalTBGeomParameters::cellParameters> cellsf, cellsc;
192  DDValue val2(attribute, sdTag3, 0.0);
193  DDSpecificsMatchesValueFilter filter2{val2};
194  DDFilteredView fv2(*cpv, filter2);
195  ok = fv2.firstChild();
196  if (!ok) {
197  throw cms::Exception("DDException") << "Attribute " << val2 << " not found but needed.";
198  } else {
199  dodet = true;
200  while (dodet) {
201  const DDSolid& sol = fv2.logicalPart().solid();
202  const std::string& name = sol.name().name();
203  std::vector<int> copy = fv2.copyNumbers();
204  int nsiz = static_cast<int>(copy.size());
205  int cellx = (nsiz > 0) ? copy[nsiz - 1] : 0;
206  int wafer = (nsiz > 1) ? copy[nsiz - 2] : 0;
207  int cell = HGCalTypes::getUnpackedCell6(cellx);
209  if (type != 1 && type != 2) {
210  throw cms::Exception("DDException")
211  << "Funny cell # " << cell << " type " << type << " in " << nsiz << " components";
212  } else {
213  auto ktr = wafertype.find(wafer);
214  if (ktr == wafertype.end())
215  wafertype[wafer] = type;
216  bool newc(false);
217  std::map<int, HGCalTBGeomParameters::cellParameters>::iterator itr;
218  double cellsize = php.cellSize_[0];
219  if (type == 1) {
220  itr = cellsf.find(cell);
221  newc = (itr == cellsf.end());
222  } else {
223  itr = cellsc.find(cell);
224  newc = (itr == cellsc.end());
225  cellsize = php.cellSize_[1];
226  }
227  if (newc) {
228  bool half = (name.find("Half") != std::string::npos);
229  double xx = HGCalTBParameters::k_ScaleFromDDD * fv2.translation().X();
230  double yy = HGCalTBParameters::k_ScaleFromDDD * fv2.translation().Y();
231  if (half) {
232  math::XYZPointD p1(-2.0 * cellsize / 9.0, 0, 0);
233  math::XYZPointD p2 = fv2.rotation()(p1);
236 #ifdef EDM_ML_DEBUG
238  p2.SetX(0.0);
240  p2.SetZ(0.0);
241  edm::LogVerbatim("HGCalGeom") << "Wafer " << wafer << " Type " << type << " Cell " << cellx << " local "
242  << xx << ":" << yy << " new " << p1 << ":" << p2;
243 #endif
244  }
246  if (type == 1) {
247  cellsf[cell] = cp;
248  } else {
249  cellsc[cell] = cp;
250  }
251  }
252  }
253  dodet = fv2.next();
254  }
255  }
256 
258  layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
259 }
Log< level::Info, true > LogVerbatim
nav_type copyNumbers() const
return the stack of copy numbers
std::vector< double > rMinVec(void) const
Definition: DDSolid.cc:335
std::vector< int > layer_
double rIn(void) const
Definition: DDSolid.cc:456
static constexpr double k_ScaleFromDDD
static int32_t getUnpackedCell6(int id)
Definition: HGCalTypes.cc:40
std::vector< double > xVec(void) const
Definition: DDSolid.cc:378
std::vector< double > zVec(void) const
Definition: DDSolid.cc:328
float *__restrict__ zv
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::vector< double > rMaxVec(void) const
Definition: DDSolid.cc:342
std::vector< std::unordered_map< int32_t, int32_t > > layer_map
double rOut(void) const
Definition: DDSolid.cc:458
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const std::string names[nVars_]
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
std::vector< double > zVec(void) const
Definition: DDSolid.cc:387
static constexpr double k_ScaleFromDDDToG4
static int32_t getUnpackedCellType6(int id)
Definition: HGCalTypes.cc:38
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
const double tolerance
static constexpr double tol
bool next()
set current node to the next node in the filtered tree
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static constexpr double tan30deg_
void fillModule(const hgtrap &mytr, bool reco)
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
constexpr float sol
Definition: Config.h:56
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double > > XYZPointD
point in space with cartesian internal representation
Definition: Point3D.h:8
std::vector< double > cellSize_
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
void loadGeometryHexagon(const DDFilteredView &_fv, HGCalTBParameters &php, const std::string &sdTag1, const DDCompactView *cpv, const std::string &sdTag2, const std::string &sdTag3, HGCalGeometryMode::WaferMode mode)
Log< level::Warning, false > LogWarning
const DDTranslation & translation() const
The absolute translation of the current node.
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)

◆ loadGeometryHexagon() [2/3]

void HGCalTBGeomParameters::loadGeometryHexagon ( const cms::DDCompactView cpv,
HGCalTBParameters php,
const std::string &  sdTag1,
const std::string &  sdTag2,
const std::string &  sdTag3,
HGCalGeometryMode::WaferMode  mode 
)

Definition at line 261 of file HGCalTBGeomParameters.cc.

References funct::abs(), HGCalTBParameters::hgtrap::alpha, HGCalTBParameters::hgtrap::bl, HGCalTBParameters::hgtrap::cellSize, HGCalTBParameters::cellSize_, filterCSVwithJSON::copy, cms::DDFilteredView::copyNos(), CommonMethods::cp(), HGCalTBParameters::hgtrap::dz, PVValHelper::dz, Exception, HGCalTBParameters::fillModule(), ALCARECOTkAlBeamHalo_cff::filter, spr::find(), cms::DDFilteredView::firstChild(), HGCalTypes::getUnpackedCell6(), HGCalTypes::getUnpackedCellType6(), HGCalTBParameters::hgtrap::h, HGCalTBParameters::hgtrform::h3v, HGCalTBParameters::hgtrform::hr, HGCalTBParameters::k_ScaleFromDD4hep, HGCalTBParameters::k_ScaleFromDD4hepToG4, HGCalTBParameters::k_ScaleFromDDD, HGCalTBParameters::hgtrap::lay, HGCalTBParameters::hgtrform::lay, pixelTopology::layer, HGCalTBParameters::layer_, hgcalTBTopologyTester_cfi::layers, loadGeometryHexagon(), ALCARECOPromptCalibProdSiPixelAli0T_cff::mode, Skims_PA_cff::name, cms::DDFilteredView::name(), names, convertSQLiteXML::ok, AlCaHLTBitMon_ParallelJobs::p, LaserDQM_cfg::p1, SiStripOfflineCRack_cfg::p2, cms::DDFilteredView::parameters(), HGCalGeometryMode::Polyhedra, idealTransformation::rotation, cms::DDFilteredView::rotation(), HGCalTBParameters::hgtrform::sec, cms::DDFilteredView::solid(), AlCaHLTBitMon_QueryRunRegistry::string, HGCalTBParameters::hgtrform::subsec, tan30deg_, HGCalTBParameters::hgtrap::tl, HGCalTBParameters::tol, tolerance, cms::DDFilteredView::translation(), HGCalTBParameters::waferR_, waferSize_, HGCalTBParameters::waferSize_, x, geometryCSVtoXML::xx, y, geometryCSVtoXML::yy, z, HGCalTBParameters::hgtrform::zp, gpuVertexFinder::zv, and geometryCSVtoXML::zz.

266  {
267  const cms::DDFilter filter("Volume", sdTag1);
268  cms::DDFilteredView fv((*cpv), filter);
269  std::map<int, HGCalTBGeomParameters::layerParameters> layers;
270  std::vector<HGCalTBParameters::hgtrform> trforms;
271  std::vector<bool> trformUse;
272  std::vector<std::pair<int, int> > trused;
273 
274  while (fv.firstChild()) {
275  const std::vector<double>& pars = fv.parameters();
276  // Layers first
277  std::vector<int> copy = fv.copyNos();
278  int nsiz = static_cast<int>(copy.size());
279  int lay = (nsiz > 0) ? copy[0] : 0;
280  int zp = (nsiz > 2) ? copy[2] : -1;
281  if (zp != 1)
282  zp = -1;
283  if (lay == 0) {
284  throw cms::Exception("DDException") << "Funny layer # " << lay << " zp " << zp << " in " << nsiz << " components";
285  } else {
286  if (std::find(php.layer_.begin(), php.layer_.end(), lay) == php.layer_.end())
287  php.layer_.emplace_back(lay);
288  auto itr = layers.find(lay);
289  double zz = HGCalTBParameters::k_ScaleFromDD4hep * fv.translation().Z();
290  if (itr == layers.end()) {
291  double rin(0), rout(0);
292  if (dd4hep::isA<dd4hep::Polyhedra>(fv.solid())) {
293  rin = 0.5 * HGCalTBParameters::k_ScaleFromDD4hep * (pars[5] + pars[8]);
294  rout = 0.5 * HGCalTBParameters::k_ScaleFromDD4hep * (pars[6] + pars[9]);
295  } else if (dd4hep::isA<dd4hep::Tube>(fv.solid())) {
296  dd4hep::Tube tubeSeg(fv.solid());
297  rin = HGCalTBParameters::k_ScaleFromDD4hep * tubeSeg.rMin();
298  rout = HGCalTBParameters::k_ScaleFromDD4hep * tubeSeg.rMax();
299  }
300  HGCalTBGeomParameters::layerParameters laypar(rin, rout, zz);
301  layers[lay] = laypar;
302  }
303  std::pair<int, int> layz(lay, zp);
304  if (std::find(trused.begin(), trused.end(), layz) == trused.end()) {
305  trused.emplace_back(layz);
306  DD3Vector x, y, z;
307  fv.rotation().GetComponents(x, y, z);
308  const CLHEP::HepRep3x3 rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
309  const CLHEP::HepRotation hr(rotation);
310  double xx = HGCalTBParameters::k_ScaleFromDD4hep * fv.translation().X();
311  if (std::abs(xx) < tolerance)
312  xx = 0;
313  double yy = HGCalTBParameters::k_ScaleFromDD4hep * fv.translation().Y();
314  if (std::abs(yy) < tolerance)
315  yy = 0;
316  double zz = HGCalTBParameters::k_ScaleFromDD4hep * fv.translation().Z();
317  const CLHEP::Hep3Vector h3v(xx, yy, zz);
319  mytrf.zp = zp;
320  mytrf.lay = lay;
321  mytrf.sec = 0;
322  mytrf.subsec = 0;
323  mytrf.h3v = h3v;
324  mytrf.hr = hr;
325  trforms.emplace_back(mytrf);
326  trformUse.emplace_back(false);
327  }
328  }
329  }
330 
331  // Then wafers
332  // This assumes layers are build starting from 1 (which on 25 Jan 2016, they
333  // were) to ensure that new copy numbers are always added to the end of the
334  // list.
335  std::unordered_map<int32_t, int32_t> copies;
336  HGCalTBParameters::layer_map copiesInLayers(layers.size() + 1);
337  std::vector<int32_t> wafer2copy;
338  std::vector<HGCalTBGeomParameters::cellParameters> wafers;
339  const cms::DDFilter filter1("Volume", sdTag2);
340  cms::DDFilteredView fv1((*cpv), filter1);
341  bool ok = fv1.firstChild();
342  if (!ok) {
343  throw cms::Exception("DDException") << "Attribute " << sdTag2 << " not found but needed.";
344  } else {
345  bool dodet = true;
346  std::unordered_set<std::string> names;
347  while (dodet) {
348  const std::string name = static_cast<std::string>(fv1.name());
349  std::vector<int> copy = fv1.copyNos();
350  int nsiz = static_cast<int>(copy.size());
351  int wafer = (nsiz > 0) ? copy[0] : 0;
352  int layer = (nsiz > 1) ? copy[1] : 0;
353  if (nsiz < 2) {
354  throw cms::Exception("DDException") << "Funny wafer # " << wafer << " in " << nsiz << " components";
355  } else if (layer > static_cast<int>(layers.size())) {
356  edm::LogWarning("HGCalGeom") << "Funny wafer # " << wafer << " Layer " << layer << ":" << layers.size()
357  << " among " << nsiz << " components";
358  } else {
359  auto itr = copies.find(wafer);
360  auto cpy = copiesInLayers[layer].find(wafer);
361  if (itr != copies.end() && cpy == copiesInLayers[layer].end()) {
362  copiesInLayers[layer][wafer] = itr->second;
363  }
364  if (itr == copies.end()) {
365  copies[wafer] = wafer2copy.size();
366  copiesInLayers[layer][wafer] = wafer2copy.size();
367  double xx = HGCalTBParameters::k_ScaleFromDD4hep * fv1.translation().X();
368  if (std::abs(xx) < tolerance)
369  xx = 0;
370  double yy = HGCalTBParameters::k_ScaleFromDD4hep * fv1.translation().Y();
371  if (std::abs(yy) < tolerance)
372  yy = 0;
373  wafer2copy.emplace_back(wafer);
374  GlobalPoint p(xx, yy, HGCalTBParameters::k_ScaleFromDD4hep * fv1.translation().Z());
375  HGCalTBGeomParameters::cellParameters cell(false, wafer, p);
376  wafers.emplace_back(cell);
377  if (names.count(name) == 0) {
378  double zv[2], rv;
379  const std::vector<double>& pars = fv1.parameters();
381  zv[0] = pars[4];
382  zv[1] = pars[7];
383  rv = pars[6];
384  } else {
385  zv[0] = pars[3];
386  zv[1] = pars[9];
387  rv = pars[4];
388  }
391  double dz = 0.5 * HGCalTBParameters::k_ScaleFromDD4hepToG4 * (zv[1] - zv[0]);
392 #ifdef EDM_ML_DEBUG
393  edm::LogVerbatim("HGCalGeom")
394  << "Mode " << mode << " R " << php.waferSize_ << ":" << php.waferR_ << " z " << dz;
395 #endif
397  mytr.lay = 1;
398  mytr.bl = php.waferR_;
399  mytr.tl = php.waferR_;
400  mytr.h = php.waferR_;
401  mytr.dz = dz;
402  mytr.alpha = 0.0;
403  mytr.cellSize = waferSize_;
404  php.fillModule(mytr, false);
405  names.insert(name);
406  }
407  }
408  }
409  dodet = fv1.firstChild();
410  }
411  }
412 
413  // Finally the cells
414  std::map<int, int> wafertype;
415  std::map<int, HGCalTBGeomParameters::cellParameters> cellsf, cellsc;
416  const cms::DDFilter filter2("Volume", sdTag3);
417  cms::DDFilteredView fv2((*cpv), filter2);
418  ok = fv2.firstChild();
419  if (!ok) {
420  throw cms::Exception("DDException") << "Attribute " << sdTag3 << " not found but needed.";
421  } else {
422  bool dodet = true;
423  while (dodet) {
424  const std::string name = static_cast<std::string>(fv2.name());
425  std::vector<int> copy = fv2.copyNos();
426  int nsiz = static_cast<int>(copy.size());
427  int cellx = (nsiz > 0) ? copy[0] : 0;
428  int wafer = (nsiz > 1) ? copy[1] : 0;
429  int cell = HGCalTypes::getUnpackedCell6(cellx);
431  if (type != 1 && type != 2) {
432  throw cms::Exception("DDException")
433  << "Funny cell # " << cell << " type " << type << " in " << nsiz << " components";
434  } else {
435  auto ktr = wafertype.find(wafer);
436  if (ktr == wafertype.end())
437  wafertype[wafer] = type;
438  bool newc(false);
439  std::map<int, HGCalTBGeomParameters::cellParameters>::iterator itr;
440  double cellsize = php.cellSize_[0];
441  if (type == 1) {
442  itr = cellsf.find(cell);
443  newc = (itr == cellsf.end());
444  } else {
445  itr = cellsc.find(cell);
446  newc = (itr == cellsc.end());
447  cellsize = php.cellSize_[1];
448  }
449  if (newc) {
450  bool half = (name.find("Half") != std::string::npos);
451  double xx = HGCalTBParameters::k_ScaleFromDD4hep * fv2.translation().X();
452  double yy = HGCalTBParameters::k_ScaleFromDD4hep * fv2.translation().Y();
453  if (half) {
454  math::XYZPointD p1(-2.0 * cellsize / 9.0, 0, 0);
455  math::XYZPointD p2 = fv2.rotation()(p1);
458 #ifdef EDM_ML_DEBUG
460  p2.SetX(0.0);
462  p2.SetZ(0.0);
463  edm::LogVerbatim("HGCalGeom") << "Wafer " << wafer << " Type " << type << " Cell " << cellx << " local "
464  << xx << ":" << yy << " new " << p1 << ":" << p2;
465 #endif
466  }
468  if (type == 1) {
469  cellsf[cell] = cp;
470  } else {
471  cellsc[cell] = cp;
472  }
473  }
474  }
475  dodet = fv2.firstChild();
476  }
477  }
478 
480  layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
481 }
Log< level::Info, true > LogVerbatim
std::vector< int > layer_
static constexpr double k_ScaleFromDDD
static int32_t getUnpackedCell6(int id)
Definition: HGCalTypes.cc:40
float *__restrict__ zv
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::vector< std::unordered_map< int32_t, int32_t > > layer_map
static constexpr double k_ScaleFromDD4hepToG4
static constexpr double k_ScaleFromDD4hep
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const std::string names[nVars_]
static int32_t getUnpackedCellType6(int id)
Definition: HGCalTypes.cc:38
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
const double tolerance
static constexpr double tol
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static constexpr double tan30deg_
void fillModule(const hgtrap &mytr, bool reco)
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double > > XYZPointD
point in space with cartesian internal representation
Definition: Point3D.h:8
std::vector< double > cellSize_
void loadGeometryHexagon(const DDFilteredView &_fv, HGCalTBParameters &php, const std::string &sdTag1, const DDCompactView *cpv, const std::string &sdTag2, const std::string &sdTag3, HGCalGeometryMode::WaferMode mode)
Log< level::Warning, false > LogWarning
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)

◆ loadGeometryHexagon() [3/3]

void HGCalTBGeomParameters::loadGeometryHexagon ( const std::map< int, HGCalTBGeomParameters::layerParameters > &  layers,
std::vector< HGCalTBParameters::hgtrform > &  trforms,
std::vector< bool > &  trformUse,
const std::unordered_map< int32_t, int32_t > &  copies,
const HGCalTBParameters::layer_map copiesInLayers,
const std::vector< int32_t > &  wafer2copy,
const std::vector< HGCalTBGeomParameters::cellParameters > &  wafers,
const std::map< int, int > &  wafertype,
const std::map< int, HGCalTBGeomParameters::cellParameters > &  cellsf,
const std::map< int, HGCalTBGeomParameters::cellParameters > &  cellsc,
HGCalTBParameters php 
)
private

Definition at line 483 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::addTrForm(), HGCalTBParameters::hgtrap::bl, HGCalTBParameters::boundR_, HGCalTBParameters::cellCoarseHalf_, HGCalTBParameters::cellCoarseX_, HGCalTBParameters::cellCoarseY_, HGCalTBParameters::cellFineHalf_, HGCalTBParameters::cellFineX_, HGCalTBParameters::cellFineY_, cellPosition(), HGCalTBParameters::hgtrap::cellSize, HGCalTBParameters::copiesInLayers_, TauDecayModes::dec, LEDCalibrationChannels::depth, HGCalTBParameters::depth_, HGCalTBParameters::depthIndex_, HGCalTBParameters::depthLayerF_, HGCalTBParameters::hgtrap::dz, PVValHelper::dz, Exception, HGCalTBParameters::fillModule(), HGCalTBParameters::fillTrForm(), dqmdumpme::first, HGCalTBParameters::firstLayer_, HGCalTBParameters::getModule(), HGCalTBParameters::hgtrap::h, mps_fire::i, testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, dqmdumpme::k, HGCalTBParameters::k_ScaleFromDDD, pixelTopology::layer, HGCalTBParameters::layer_, HGCalTBParameters::layerGroup_, HGCalTBParameters::layerIndex_, hgcalTBTopologyTester_cfi::layers, HGCalTBParameters::moduleAlphaR_, HGCalTBParameters::moduleAlphaS_, HGCalTBParameters::moduleBlR_, HGCalTBParameters::moduleBlS_, HGCalTBParameters::moduleDzR_, HGCalTBParameters::moduleDzS_, HGCalTBParameters::moduleHR_, HGCalTBParameters::moduleHS_, HGCalTBParameters::moduleLayR_, HGCalTBParameters::moduleLayS_, HGCalTBParameters::moduleTlR_, HGCalTBParameters::moduleTlS_, HGCalTBParameters::nSectors_, alignCSCRings::r, HGCalTBParameters::rMaxLayHex_, HGCalTBParameters::rMinLayHex_, HGCalTBParameters::scaleTrForm(), HGCalTBParameters::hgtrap::tl, HGCalTBParameters::trformIndex_, HGCalTBParameters::trformRotXX_, HGCalTBParameters::trformRotXY_, HGCalTBParameters::trformRotXZ_, HGCalTBParameters::trformRotYX_, HGCalTBParameters::trformRotYY_, HGCalTBParameters::trformRotYZ_, HGCalTBParameters::trformRotZX_, HGCalTBParameters::trformRotZY_, HGCalTBParameters::trformRotZZ_, HGCalTBParameters::trformTranX_, HGCalTBParameters::trformTranY_, HGCalTBParameters::trformTranZ_, HGCalTBParameters::waferCopy_, HGCalTBParameters::waferPosX_, HGCalTBParameters::waferPosY_, HGCalTBParameters::waferR_, HGCalTBParameters::waferTypeL_, HGCalTBParameters::waferTypeT_, geometryCSVtoXML::xx, geometryCSVtoXML::xy, geometryCSVtoXML::yy, and HGCalTBParameters::zLayerHex_.

493  {
494  if (((cellsf.size() + cellsc.size()) == 0) || (wafers.empty()) || (layers.empty())) {
495  throw cms::Exception("DDException") << "HGCalTBGeomParameters: mismatch between geometry and specpar: cells "
496  << cellsf.size() << ":" << cellsc.size() << " wafers " << wafers.size()
497  << " layers " << layers.size();
498  }
499 
500  for (unsigned int i = 0; i < layers.size(); ++i) {
501  for (auto& layer : layers) {
502  if (layer.first == static_cast<int>(i + php.firstLayer_)) {
503  php.layerIndex_.emplace_back(i);
504  php.rMinLayHex_.emplace_back(layer.second.rmin);
505  php.rMaxLayHex_.emplace_back(layer.second.rmax);
506  php.zLayerHex_.emplace_back(layer.second.zpos);
507  break;
508  }
509  }
510  }
511 
512  for (unsigned int i = 0; i < php.layer_.size(); ++i) {
513  for (unsigned int i1 = 0; i1 < trforms.size(); ++i1) {
514  if (!trformUse[i1] && php.layerGroup_[trforms[i1].lay - 1] == static_cast<int>(i + 1)) {
515  trforms[i1].h3v *= static_cast<double>(HGCalTBParameters::k_ScaleFromDDD);
516  trforms[i1].lay = (i + 1);
517  trformUse[i1] = true;
518  php.fillTrForm(trforms[i1]);
519  int nz(1);
520  for (unsigned int i2 = i1 + 1; i2 < trforms.size(); ++i2) {
521  if (!trformUse[i2] && trforms[i2].zp == trforms[i1].zp &&
522  php.layerGroup_[trforms[i2].lay - 1] == static_cast<int>(i + 1)) {
523  php.addTrForm(trforms[i2].h3v);
524  nz++;
525  trformUse[i2] = true;
526  }
527  }
528  if (nz > 0) {
529  php.scaleTrForm(double(1.0 / nz));
530  }
531  }
532  }
533  }
534 
535  double rmin = HGCalTBParameters::k_ScaleFromDDD * php.waferR_;
536  for (unsigned i = 0; i < wafer2copy.size(); ++i) {
537  php.waferCopy_.emplace_back(wafer2copy[i]);
538  php.waferPosX_.emplace_back(wafers[i].xyz.x());
539  php.waferPosY_.emplace_back(wafers[i].xyz.y());
540  auto ktr = wafertype.find(wafer2copy[i]);
541  int typet = (ktr == wafertype.end()) ? 0 : (ktr->second);
542  php.waferTypeT_.emplace_back(typet);
543  double r = wafers[i].xyz.perp();
544  int type(3);
545  for (int k = 1; k < 4; ++k) {
546  if ((r + rmin) <= php.boundR_[k]) {
547  type = k;
548  break;
549  }
550  }
551  php.waferTypeL_.emplace_back(type);
552  }
553  php.copiesInLayers_ = copiesInLayers;
554  php.nSectors_ = static_cast<int>(php.waferCopy_.size());
555 
556  std::vector<HGCalTBGeomParameters::cellParameters>::const_iterator itrf = wafers.end();
557  for (unsigned int i = 0; i < cellsf.size(); ++i) {
558  auto itr = cellsf.find(i);
559  if (itr == cellsf.end()) {
560  throw cms::Exception("DDException") << "HGCalTBGeomParameters: missing info for fine cell number " << i;
561  } else {
562  double xx = (itr->second).xyz.x();
563  double yy = (itr->second).xyz.y();
564  int waf = (itr->second).wafer;
565  std::pair<double, double> xy = cellPosition(wafers, itrf, waf, xx, yy);
566  php.cellFineX_.emplace_back(xy.first);
567  php.cellFineY_.emplace_back(xy.second);
568  php.cellFineHalf_.emplace_back((itr->second).half);
569  }
570  }
571  itrf = wafers.end();
572  for (unsigned int i = 0; i < cellsc.size(); ++i) {
573  auto itr = cellsc.find(i);
574  if (itr == cellsc.end()) {
575  throw cms::Exception("DDException") << "HGCalTBGeomParameters: missing info for coarse cell number " << i;
576  } else {
577  double xx = (itr->second).xyz.x();
578  double yy = (itr->second).xyz.y();
579  int waf = (itr->second).wafer;
580  std::pair<double, double> xy = cellPosition(wafers, itrf, waf, xx, yy);
581  php.cellCoarseX_.emplace_back(xy.first);
582  php.cellCoarseY_.emplace_back(xy.second);
583  php.cellCoarseHalf_.emplace_back((itr->second).half);
584  }
585  }
586  int depth(0);
587  for (unsigned int i = 0; i < php.layerGroup_.size(); ++i) {
588  bool first(true);
589  for (unsigned int k = 0; k < php.layerGroup_.size(); ++k) {
590  if (php.layerGroup_[k] == static_cast<int>(i + 1)) {
591  if (first) {
592  php.depth_.emplace_back(i + 1);
593  php.depthIndex_.emplace_back(depth);
594  php.depthLayerF_.emplace_back(k);
595  ++depth;
596  first = false;
597  }
598  }
599  }
600  }
601  HGCalTBParameters::hgtrap mytr = php.getModule(0, false);
607  double dz = mytr.dz;
608  php.fillModule(mytr, true);
609  mytr.dz = 2 * dz;
610  php.fillModule(mytr, true);
611  mytr.dz = 3 * dz;
612  php.fillModule(mytr, true);
613 #ifdef EDM_ML_DEBUG
614  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters finds " << php.zLayerHex_.size() << " layers";
615  for (unsigned int i = 0; i < php.zLayerHex_.size(); ++i) {
616  int k = php.layerIndex_[i];
617  edm::LogVerbatim("HGCalGeom") << "Layer[" << i << ":" << k << ":" << php.layer_[k]
618  << "] with r = " << php.rMinLayHex_[i] << ":" << php.rMaxLayHex_[i]
619  << " at z = " << php.zLayerHex_[i];
620  }
621  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters has " << php.depthIndex_.size() << " depths";
622  for (unsigned int i = 0; i < php.depthIndex_.size(); ++i) {
623  int k = php.depthIndex_[i];
624  edm::LogVerbatim("HGCalGeom") << "Reco Layer[" << i << ":" << k << "] First Layer " << php.depthLayerF_[i]
625  << " Depth " << php.depth_[k];
626  }
627  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters finds " << php.nSectors_ << " wafers";
628  for (unsigned int i = 0; i < php.waferCopy_.size(); ++i)
629  edm::LogVerbatim("HGCalGeom") << "Wafer[" << i << ": " << php.waferCopy_[i] << "] type " << php.waferTypeL_[i]
630  << ":" << php.waferTypeT_[i] << " at (" << php.waferPosX_[i] << ","
631  << php.waferPosY_[i] << ",0)";
632  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: wafer radius " << php.waferR_ << " and dimensions of the "
633  << "wafers:";
634  edm::LogVerbatim("HGCalGeom") << "Sim[0] " << php.moduleLayS_[0] << " dx " << php.moduleBlS_[0] << ":"
635  << php.moduleTlS_[0] << " dy " << php.moduleHS_[0] << " dz " << php.moduleDzS_[0]
636  << " alpha " << php.moduleAlphaS_[0];
637  for (unsigned int k = 0; k < php.moduleLayR_.size(); ++k)
638  edm::LogVerbatim("HGCalGeom") << "Rec[" << k << "] " << php.moduleLayR_[k] << " dx " << php.moduleBlR_[k] << ":"
639  << php.moduleTlR_[k] << " dy " << php.moduleHR_[k] << " dz " << php.moduleDzR_[k]
640  << " alpha " << php.moduleAlphaR_[k];
641  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters finds " << php.cellFineX_.size() << " fine cells in a wafer";
642  for (unsigned int i = 0; i < php.cellFineX_.size(); ++i)
643  edm::LogVerbatim("HGCalGeom") << "Fine Cell[" << i << "] at (" << php.cellFineX_[i] << "," << php.cellFineY_[i]
644  << ",0)";
645  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters finds " << php.cellCoarseX_.size()
646  << " coarse cells in a wafer";
647  for (unsigned int i = 0; i < php.cellCoarseX_.size(); ++i)
648  edm::LogVerbatim("HGCalGeom") << "Coarse Cell[" << i << "] at (" << php.cellCoarseX_[i] << ","
649  << php.cellCoarseY_[i] << ",0)";
650  edm::LogVerbatim("HGCalGeom") << "Obtained " << php.trformIndex_.size() << " transformation matrices";
651  for (unsigned int k = 0; k < php.trformIndex_.size(); ++k) {
652  edm::LogVerbatim("HGCalGeom") << "Matrix[" << k << "] (" << std::hex << php.trformIndex_[k] << std::dec
653  << ") Translation (" << php.trformTranX_[k] << ", " << php.trformTranY_[k] << ", "
654  << php.trformTranZ_[k] << " Rotation (" << php.trformRotXX_[k] << ", "
655  << php.trformRotYX_[k] << ", " << php.trformRotZX_[k] << ", " << php.trformRotXY_[k]
656  << ", " << php.trformRotYY_[k] << ", " << php.trformRotZY_[k] << ", "
657  << php.trformRotXZ_[k] << ", " << php.trformRotYZ_[k] << ", " << php.trformRotZZ_[k]
658  << ")";
659  }
660  edm::LogVerbatim("HGCalGeom") << "Dump copiesInLayers for " << php.copiesInLayers_.size() << " layers";
661  for (unsigned int k = 0; k < php.copiesInLayers_.size(); ++k) {
662  const auto& theModules = php.copiesInLayers_[k];
663  edm::LogVerbatim("HGCalGeom") << "Layer " << k << ":" << theModules.size();
664  int k2(0);
665  for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++k2) {
666  edm::LogVerbatim("HGCalGeom") << "[" << k2 << "] " << itr->first << ":" << itr->second;
667  }
668  }
669 #endif
670 }
std::vector< double > moduleBlS_
Log< level::Info, true > LogVerbatim
std::vector< double > cellFineX_
std::vector< int > layer_
std::vector< bool > cellCoarseHalf_
std::vector< int > waferCopy_
static constexpr double k_ScaleFromDDD
std::vector< double > rMaxLayHex_
std::vector< double > trformRotZY_
std::vector< double > moduleHS_
std::vector< double > trformRotZX_
std::vector< double > moduleTlS_
std::vector< double > trformTranX_
std::vector< int > waferTypeL_
std::vector< double > cellCoarseY_
std::vector< int > moduleLayR_
void scaleTrForm(double)
std::vector< double > moduleHR_
std::vector< double > boundR_
std::vector< int > layerIndex_
std::vector< double > cellCoarseX_
std::vector< double > moduleAlphaR_
std::vector< double > trformRotYZ_
std::vector< double > waferPosX_
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
std::vector< int > depthIndex_
std::vector< double > moduleAlphaS_
std::vector< double > zLayerHex_
void fillTrForm(const hgtrform &mytr)
std::vector< int > waferTypeT_
std::vector< double > moduleDzR_
std::vector< double > trformTranZ_
std::vector< double > moduleBlR_
std::vector< int > layerGroup_
std::vector< int > moduleLayS_
std::vector< double > trformRotXX_
void fillModule(const hgtrap &mytr, bool reco)
std::vector< double > trformRotYX_
std::vector< double > rMinLayHex_
std::vector< double > trformRotZZ_
std::vector< double > cellFineY_
std::vector< double > trformRotYY_
void addTrForm(const CLHEP::Hep3Vector &h3v)
std::pair< double, double > cellPosition(const std::vector< cellParameters > &wafers, std::vector< cellParameters >::const_iterator &itrf, int wafer, double xx, double yy)
std::vector< double > trformTranY_
std::vector< int > depth_
std::vector< uint32_t > trformIndex_
std::vector< int > depthLayerF_
std::vector< double > trformRotXY_
std::vector< double > moduleTlR_
std::vector< bool > cellFineHalf_
std::vector< double > trformRotXZ_
std::vector< double > moduleDzS_
std::vector< double > waferPosY_
hgtrap getModule(unsigned int k, bool reco) const

◆ loadSpecParsHexagon() [1/3]

void HGCalTBGeomParameters::loadSpecParsHexagon ( const DDFilteredView fv,
HGCalTBParameters php,
const DDCompactView cpv,
const std::string &  sdTag1,
const std::string &  sdTag2 
)

Definition at line 672 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::boundR_, HGCalTBParameters::cellSize_, dbl_to_int(), DDFilteredView::firstChild(), getDDDArray(), HGCalTBParameters::k_ScaleFromDDD, HGCalTBParameters::layerGroup_, HGCalTBParameters::layerGroupM_, HGCalTBParameters::layerGroupO_, HGCalTBParameters::levelT_, DDFilteredView::mergedSpecifics(), rescale(), HGCalTBParameters::rLimit_, HGCalTBParameters::slopeMin_, AlCaHLTBitMon_QueryRunRegistry::string, pfDeepBoostedJetPreprocessParams_cfi::sv, and waferSize_.

Referenced by loadSpecParsHexagon().

676  {
678  php.boundR_ = getDDDArray("RadiusBound", sv, 4);
680  php.rLimit_ = getDDDArray("RadiusLimits", sv, 2);
682  php.levelT_ = dbl_to_int(getDDDArray("LevelTop", sv, 0));
683 
684  // Grouping of layers
685  php.layerGroup_ = dbl_to_int(getDDDArray("GroupingZFine", sv, 0));
686  php.layerGroupM_ = dbl_to_int(getDDDArray("GroupingZMid", sv, 0));
687  php.layerGroupO_ = dbl_to_int(getDDDArray("GroupingZOut", sv, 0));
688  php.slopeMin_ = getDDDArray("Slope", sv, 1);
689 
690  // Wafer size
691  std::string attribute = "Volume";
692  DDSpecificsMatchesValueFilter filter1{DDValue(attribute, sdTag1, 0.0)};
693  DDFilteredView fv1(*cpv, filter1);
694  if (fv1.firstChild()) {
695  DDsvalues_type sv(fv1.mergedSpecifics());
696  const auto& dummy = getDDDArray("WaferSize", sv, 0);
697  waferSize_ = dummy[0];
698  }
699 
700  // Cell size
701  DDSpecificsMatchesValueFilter filter2{DDValue(attribute, sdTag2, 0.0)};
702  DDFilteredView fv2(*cpv, filter2);
703  if (fv2.firstChild()) {
704  DDsvalues_type sv(fv2.mergedSpecifics());
705  php.cellSize_ = getDDDArray("CellSize", sv, 0);
706  }
707 
708  loadSpecParsHexagon(php);
709 }
void rescale(std::vector< double > &, const double s)
static constexpr double k_ScaleFromDDD
std::vector< double > boundR_
std::vector< double > slopeMin_
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
Definition: DDsvalues.h:12
std::vector< double > getDDDArray(const std::string &str, const DDsvalues_type &sv, const int nmin)
std::vector< int > levelT_
std::vector< int > layerGroup_
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
Definition: DDutils.h:7
DDsvalues_type mergedSpecifics() const
std::vector< int > layerGroupM_
std::vector< double > cellSize_
void loadSpecParsHexagon(const DDFilteredView &fv, HGCalTBParameters &php, const DDCompactView *cpv, const std::string &sdTag1, const std::string &sdTag2)
std::vector< int > layerGroupO_
std::vector< double > rLimit_

◆ loadSpecParsHexagon() [2/3]

void HGCalTBGeomParameters::loadSpecParsHexagon ( const cms::DDFilteredView fv,
HGCalTBParameters php,
const std::string &  sdTag1,
const std::string &  sdTag2,
const std::string &  sdTag3,
const std::string &  sdTag4 
)

Definition at line 711 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::boundR_, HGCalTBParameters::cellSize_, dbl_to_int(), cms::DDFilteredView::get(), HGCalTBParameters::k_ScaleFromDD4hep, HGCalTBParameters::k_ScaleFromDD4hepToG4, HGCalTBParameters::layerGroup_, HGCalTBParameters::layerGroupM_, HGCalTBParameters::layerGroupO_, HGCalTBParameters::levelT_, loadSpecParsHexagon(), rescale(), HGCalTBParameters::rLimit_, HGCalTBParameters::slopeMin_, and waferSize_.

716  {
717  php.boundR_ = fv.get<std::vector<double> >(sdTag4, "RadiusBound");
719  php.rLimit_ = fv.get<std::vector<double> >(sdTag4, "RadiusLimits");
721  php.levelT_ = dbl_to_int(fv.get<std::vector<double> >(sdTag4, "LevelTop"));
722 
723  // Grouping of layers
724  php.layerGroup_ = dbl_to_int(fv.get<std::vector<double> >(sdTag1, "GroupingZFine"));
725  php.layerGroupM_ = dbl_to_int(fv.get<std::vector<double> >(sdTag1, "GroupingZMid"));
726  php.layerGroupO_ = dbl_to_int(fv.get<std::vector<double> >(sdTag1, "GroupingZOut"));
727  php.slopeMin_ = fv.get<std::vector<double> >(sdTag4, "Slope");
728  if (php.slopeMin_.empty())
729  php.slopeMin_.emplace_back(0);
730 
731  // Wafer size
732  const auto& dummy = fv.get<std::vector<double> >(sdTag2, "WaferSize");
734 
735  // Cell size
736  php.cellSize_ = fv.get<std::vector<double> >(sdTag3, "CellSize");
738 
739  loadSpecParsHexagon(php);
740 }
void rescale(std::vector< double > &, const double s)
static constexpr double k_ScaleFromDD4hepToG4
static constexpr double k_ScaleFromDD4hep
std::vector< double > boundR_
std::vector< double > slopeMin_
std::vector< int > levelT_
std::vector< int > layerGroup_
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
Definition: DDutils.h:7
T get(const std::string &)
extract attribute value
std::vector< int > layerGroupM_
std::vector< double > cellSize_
void loadSpecParsHexagon(const DDFilteredView &fv, HGCalTBParameters &php, const DDCompactView *cpv, const std::string &sdTag1, const std::string &sdTag2)
std::vector< int > layerGroupO_
std::vector< double > rLimit_

◆ loadSpecParsHexagon() [3/3]

void HGCalTBGeomParameters::loadSpecParsHexagon ( const HGCalTBParameters php)
private

Definition at line 742 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::boundR_, HGCalTBParameters::cellSize_, HGCalTBParameters::firstLayer_, dqmdumpme::k, HGCalTBParameters::layerGroup_, HGCalTBParameters::layerGroupM_, HGCalTBParameters::layerGroupO_, HGCalTBParameters::levelT_, HGCalTBParameters::rLimit_, HGCalTBParameters::slopeMin_, and waferSize_.

742  {
743 #ifdef EDM_ML_DEBUG
744  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: wafer radius ranges"
745  << " for cell grouping " << php.boundR_[0] << ":" << php.boundR_[1] << ":"
746  << php.boundR_[2] << ":" << php.boundR_[3];
747  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: Minimum/maximum R " << php.rLimit_[0] << ":"
748  << php.rLimit_[1];
749  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: LevelTop " << php.levelT_[0];
750  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: minimum slope " << php.slopeMin_[0]
751  << " and layer groupings "
752  << "for the 3 ranges:";
753  for (unsigned int k = 0; k < php.layerGroup_.size(); ++k)
754  edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << php.layerGroup_[k] << ":" << php.layerGroupM_[k] << ":"
755  << php.layerGroupO_[k];
756  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: Wafer Size: " << waferSize_;
757  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: " << php.cellSize_.size() << " cells of sizes:";
758  for (unsigned int k = 0; k < php.cellSize_.size(); ++k)
759  edm::LogVerbatim("HGCalGeom") << " [" << k << "] " << php.cellSize_[k];
760  edm::LogVerbatim("HGCalGeom") << "HGCalTBGeomParameters: First Layer " << php.firstLayer_;
761 #endif
762 }
Log< level::Info, true > LogVerbatim
std::vector< double > boundR_
std::vector< double > slopeMin_
std::vector< int > levelT_
std::vector< int > layerGroup_
std::vector< int > layerGroupM_
std::vector< double > cellSize_
std::vector< int > layerGroupO_
std::vector< double > rLimit_

◆ loadWaferHexagon()

void HGCalTBGeomParameters::loadWaferHexagon ( HGCalTBParameters php)

Definition at line 764 of file HGCalTBGeomParameters.cc.

References HGCalTBParameters::boundR_, HGCalTBParameters::copiesInLayers_, filterCSVwithJSON::copy, TCMET_cfi::corner, PVValHelper::dx, PVValHelper::dy, dqmdumpme::k, HGCalTBParameters::k_CornerSize, HGCalTBParameters::k_ScaleFromDDD, HGCalTBParameters::layer_, EgHLTOffHistBins_cfi::nr, HGCalTBParameters::nSectors_, gpuPixelDoublets::ntot, HGCalTypes::packTypeUV(), HGCalTBParameters::rLimit_, HGCalTBParameters::rMaxLayHex_, HGCalTBParameters::rMinLayHex_, findQualityFiles::rr, mathSSE::sqrt(), funct::tan(), HGCalTBParameters::waferCopy_, HGCalGeomTools::waferCorner(), HGCalWaferIndex::waferIndex(), HGCalTBParameters::waferPosX_, HGCalTBParameters::waferPosY_, HGCalTBParameters::waferR_, waferSize_, HGCalTBParameters::waferTypeL_, HGCalTBParameters::waferTypes_, HGCalTBParameters::waferTypeT_, HGCalTBParameters::waferUVMax_, and LaserClient_cfi::wl.

764  {
766  double rin(php.rLimit_[0]), rout(php.rLimit_[1]), rMaxFine(php.boundR_[1]);
767 #ifdef EDM_ML_DEBUG
768  edm::LogVerbatim("HGCalGeom") << "Input waferWidth " << waferW << ":" << rmin << " R Limits: " << rin << ":" << rout
769  << " Fine " << rMaxFine;
770 #endif
771  // Clear the vectors
772  php.waferCopy_.clear();
773  php.waferTypeL_.clear();
774  php.waferTypeT_.clear();
775  php.waferPosX_.clear();
776  php.waferPosY_.clear();
777  double dx = 0.5 * waferW;
778  double dy = 3.0 * dx * tan(30._deg);
779  double rr = 2.0 * dx * tan(30._deg);
780  int ncol = static_cast<int>(2.0 * rout / waferW) + 1;
781  int nrow = static_cast<int>(rout / (waferW * tan(30._deg))) + 1;
782  int ns2 = (2 * ncol + 1) * (2 * nrow + 1) * php.layer_.size();
783  int incm(0), inrm(0), kount(0), ntot(0);
784  HGCalTBParameters::layer_map copiesInLayers(php.layer_.size() + 1);
785  HGCalTBParameters::waferT_map waferTypes(ns2 + 1);
786 #ifdef EDM_ML_DEBUG
787  edm::LogVerbatim("HGCalGeom") << "Row " << nrow << " Column " << ncol;
788 #endif
789  for (int nr = -nrow; nr <= nrow; ++nr) {
790  int inr = (nr >= 0) ? nr : -nr;
791  for (int nc = -ncol; nc <= ncol; ++nc) {
792  int inc = (nc >= 0) ? nc : -nc;
793  if (inr % 2 == inc % 2) {
794  double xpos = nc * dx;
795  double ypos = nr * dy;
796  std::pair<int, int> corner = HGCalGeomTools::waferCorner(xpos, ypos, dx, rr, rin, rout, true);
797  double rpos = std::sqrt(xpos * xpos + ypos * ypos);
798  int typet = (rpos < rMaxFine) ? 1 : 2;
799  int typel(3);
800  for (int k = 1; k < 4; ++k) {
801  if ((rpos + rmin) <= php.boundR_[k]) {
802  typel = k;
803  break;
804  }
805  }
806  ++ntot;
807  if (corner.first > 0) {
808  int copy = HGCalTypes::packTypeUV(typel, nc, nr);
809  if (inc > incm)
810  incm = inc;
811  if (inr > inrm)
812  inrm = inr;
813  kount++;
814 #ifdef EDM_ML_DEBUG
815  edm::LogVerbatim("HGCalGeom") << kount << ":" << ntot << " Copy " << copy << " Type " << typel << ":" << typet
816  << " Location " << corner.first << " Position " << xpos << ":" << ypos
817  << " Layers " << php.layer_.size();
818 #endif
819  php.waferCopy_.emplace_back(copy);
820  php.waferTypeL_.emplace_back(typel);
821  php.waferTypeT_.emplace_back(typet);
822  php.waferPosX_.emplace_back(xpos);
823  php.waferPosY_.emplace_back(ypos);
824  for (unsigned int il = 0; il < php.layer_.size(); ++il) {
825  std::pair<int, int> corner =
826  HGCalGeomTools::waferCorner(xpos, ypos, dx, rr, php.rMinLayHex_[il], php.rMaxLayHex_[il], true);
827  if (corner.first > 0) {
828  auto cpy = copiesInLayers[php.layer_[il]].find(copy);
829  if (cpy == copiesInLayers[php.layer_[il]].end())
830  copiesInLayers[php.layer_[il]][copy] =
831  ((corner.first == static_cast<int>(HGCalTBParameters::k_CornerSize)) ? php.waferCopy_.size() : -1);
832  }
833  if ((corner.first > 0) && (corner.first < static_cast<int>(HGCalTBParameters::k_CornerSize))) {
834  int wl = HGCalWaferIndex::waferIndex(php.layer_[il], copy, 0, true);
835  waferTypes[wl] = corner;
836  }
837  }
838  }
839  }
840  }
841  }
842  php.copiesInLayers_ = copiesInLayers;
843  php.waferTypes_ = waferTypes;
844  php.nSectors_ = static_cast<int>(php.waferCopy_.size());
845  php.waferUVMax_ = 0;
846 #ifdef EDM_ML_DEBUG
847  edm::LogVerbatim("HGCalGeom") << "HGCalWaferHexagon: # of columns " << incm << " # of rows " << inrm << " and "
848  << kount << ":" << ntot << " wafers; R " << rin << ":" << rout;
849  edm::LogVerbatim("HGCalGeom") << "Dump copiesInLayers for " << php.copiesInLayers_.size() << " layers";
850  for (unsigned int k = 0; k < copiesInLayers.size(); ++k) {
851  const auto& theModules = copiesInLayers[k];
852  edm::LogVerbatim("HGCalGeom") << "Layer " << k << ":" << theModules.size();
853  int k2(0);
854  for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++k2) {
855  edm::LogVerbatim("HGCalGeom") << "[" << k2 << "] " << itr->first << ":" << itr->second;
856  }
857  }
858 #endif
859 }
Log< level::Info, true > LogVerbatim
std::vector< int > layer_
std::vector< int > waferCopy_
static constexpr double k_ScaleFromDDD
std::vector< double > rMaxLayHex_
std::vector< std::unordered_map< int32_t, int32_t > > layer_map
std::vector< int > waferTypeL_
static constexpr uint32_t k_CornerSize
std::vector< double > boundR_
std::vector< double > waferPosX_
static std::pair< int32_t, int32_t > waferCorner(double xpos, double ypos, double r, double R, double rMin, double rMax, bool oldBug=false)
std::vector< int > waferTypeT_
T sqrt(T t)
Definition: SSEVec.h:19
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
std::vector< double > rMinLayHex_
std::unordered_map< int32_t, std::pair< int32_t, int32_t > > waferT_map
static int32_t packTypeUV(int type, int u, int v)
Definition: HGCalTypes.cc:3
__shared__ uint32_t ntot
std::vector< double > waferPosY_
std::vector< double > rLimit_

◆ rescale()

void HGCalTBGeomParameters::rescale ( std::vector< double > &  v,
const double  s 
)
private

Definition at line 957 of file HGCalTBGeomParameters.cc.

References dqmiodumpmetadata::n, alignCSCRings::s, and findQualityFiles::v.

Referenced by loadSpecParsHexagon().

957  {
958  std::for_each(v.begin(), v.end(), [s](double& n) { n *= s; });
959 }

◆ resetZero()

void HGCalTBGeomParameters::resetZero ( std::vector< double > &  v)
private

Definition at line 961 of file HGCalTBGeomParameters.cc.

References funct::abs(), dqmiodumpmetadata::n, tolmin, and findQualityFiles::v.

961  {
962  for (auto& n : v) {
963  if (std::abs(n) < tolmin)
964  n = 0;
965  }
966 }
const double tolmin
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

Member Data Documentation

◆ geomTools_

HGCalGeomTools HGCalTBGeomParameters::geomTools_
private

Definition at line 97 of file HGCalTBGeomParameters.h.

◆ sqrt3_

const double HGCalTBGeomParameters::sqrt3_
private

Definition at line 98 of file HGCalTBGeomParameters.h.

◆ tan30deg_

constexpr double HGCalTBGeomParameters::tan30deg_ = 0.5773502693
staticprivate

Definition at line 96 of file HGCalTBGeomParameters.h.

Referenced by loadGeometryHexagon().

◆ waferSize_

double HGCalTBGeomParameters::waferSize_
private