21 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalParametersFromDD (DDD)::build called with " 22 <<
"names " <<
name <<
":" << namew <<
":" << namec <<
":" << namet;
55 std::unique_ptr<HGCalGeomParameters>
geom = std::make_unique<HGCalGeomParameters>();
57 attribute =
"OnlyForHGCalNumbering";
79 php.
levelZSide_ =
static_cast<int>(getDDDValue(
"LevelZSide",
sv));
86 php.
waferZSide_ =
static_cast<int>(getDDDValue(
"WaferZside",
sv));
88 php.
useSimWt_ =
static_cast<int>(getDDDValue(
"UseSimWt",
sv));
102 attribute =
"OnlyForHGCalNumbering";
111 php.
nCellsFine_ =
static_cast<int>(getDDDValue(
"NumberOfCellsFine", sv2));
112 php.
nCellsCoarse_ =
static_cast<int>(getDDDValue(
"NumberOfCellsCoarse", sv2));
131 for (
int k = 0;
k < 2; ++
k)
132 getCellPosition(php,
k);
138 geom->loadSpecParsHexagon(fv, php, cpv, namew, namec);
140 geom->loadGeometryHexagon(fv, php,
name, cpv, namew, namec,
mode);
142 geom->loadCellParsHexagon(cpv, php);
148 geom->loadSpecParsHexagon(fv, php, cpv, namew, namec);
150 geom->loadGeometryHexagon(fv, php,
name, cpv, namew, namec,
mode);
152 geom->loadWaferHexagon(php);
154 geom->loadCellParsHexagon(cpv, php);
159 geom->loadSpecParsHexagon8(fv, php);
161 geom->loadGeometryHexagon8(fv, php, 1);
165 geom->loadWaferHexagon8(php);
168 geom->loadSpecParsHexagon8(fv, php);
170 geom->loadGeometryHexagon8(fv, php, 1);
174 geom->loadWaferHexagon8(php);
177 geom->loadSpecParsHexagon8(fv, php);
179 geom->loadGeometryHexagonModule(cpv, php,
name, namec, 1);
183 geom->loadWaferHexagon8(php);
198 php.
waferZSide_ =
static_cast<int>(getDDDValue(
"WaferZside",
sv));
200 php.
useSimWt_ =
static_cast<int>(getDDDValue(
"UseSimWt",
sv));
211 geom->loadSpecParsTrapezoid(fv, php);
215 geom->loadCellTrapezoid(php);
217 edm::LogError(
"HGCalGeom") <<
"Unknown Geometry type " << php.
mode_ <<
" for HGCal " <<
name <<
":" << namew
220 <<
"Unknown Geometry type " << php.
mode_ <<
" for HGCal " <<
name <<
":" << namew <<
":" << namec;
223 edm::LogError(
"HGCalGeom") <<
" Attribute " <<
val <<
" not found but needed.";
224 throw cms::Exception(
"DDException") <<
"Attribute " <<
val <<
" not found but needed.";
228 <<
" with flag " <<
ok;
241 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalParametersFromDD (DD4hep)::build called with " 242 <<
"names " <<
name <<
":" << namew <<
":" << namec <<
":" << namet <<
":" <<
name2;
247 std::vector<std::string> tempS;
248 std::vector<double> tempD;
250 tempS = fv.
get<std::vector<std::string> >(
name2,
"GeometryMode");
252 tempS = fv.
get<std::vector<std::string> >(
name,
"GeometryMode");
254 std::string sv = (!tempS.empty()) ? tempS[0] :
"HGCalGeometryMode::Hexagon8Full";
277 std::unique_ptr<HGCalGeomParameters>
geom = std::make_unique<HGCalGeomParameters>();
279 tempS = fv.
get<std::vector<std::string> >(namet,
"WaferMode");
280 std::string sv2 = (!tempS.empty()) ? tempS[0] :
"HGCalGeometryMode::Polyhedra";
294 tempD = fv.
get<std::vector<double> >(
name,
"LevelZSide");
298 tempD = fv.
get<std::vector<double> >(
name,
"FirstMixedLayer");
300 tempD = fv.
get<std::vector<double> >(
name,
"DetectorType");
303 tempD = fv.
get<std::vector<double> >(
name,
"WaferMaskMode");
305 tempD = fv.
get<std::vector<double> >(
name,
"WaferZside");
308 tempD = fv.
get<std::vector<double> >(
name,
"LayerRotation");
310 tempD = fv.
get<std::vector<double> >(
name,
"UseSimWt");
315 tempD = fv.
get<std::vector<double> >(
name,
"Cassettes");
327 tempS = fv.
get<std::vector<std::string> >(namet,
"WaferMode");
328 std::string sv2 = (!tempS.empty()) ? tempS[0] :
"HGCalGeometryMode::ExtrudedPolygon";
330 tempD = fv.
get<std::vector<double> >(namet,
"NumberOfCellsFine");
332 tempD = fv.
get<std::vector<double> >(namet,
"NumberOfCellsCoarse");
334 tempD = fv.
get<std::vector<double> >(namet,
"WaferSize");
336 tempD = fv.
get<std::vector<double> >(namet,
"WaferThickness");
338 tempD = fv.
get<std::vector<double> >(namet,
"SensorSeparation");
340 tempD = fv.
get<std::vector<double> >(namet,
"SensorSizeOffset");
342 tempD = fv.
get<std::vector<double> >(namet,
"GuardRingOffset");
344 tempD = fv.
get<std::vector<double> >(namet,
"MouseBite");
358 for (
int k = 0;
k < 2; ++
k)
359 getCellPosition(php,
k);
364 geom->loadSpecParsHexagon(fv, php,
name, namew, namec,
name2);
366 geom->loadGeometryHexagon(cpv, php,
name, namew, namec,
mode);
368 geom->loadCellParsHexagon(vmap, php);
374 geom->loadSpecParsHexagon(fv, php,
name, namew, namec,
name2);
376 geom->loadGeometryHexagon(cpv, php,
name, namew, namec,
mode);
378 geom->loadWaferHexagon(php);
380 geom->loadCellParsHexagon(vmap, php);
385 geom->loadSpecParsHexagon8(fv, vmap, php,
name);
387 geom->loadGeometryHexagon8(cpv, php,
name, 1);
391 geom->loadWaferHexagon8(php);
394 geom->loadSpecParsHexagon8(fv, vmap, php,
name);
396 geom->loadGeometryHexagon8(cpv, php,
name, 1);
400 geom->loadWaferHexagon8(php);
403 geom->loadSpecParsHexagon8(fv, vmap, php,
name);
405 geom->loadGeometryHexagonModule(cpv, php,
name, namec, 1);
409 geom->loadWaferHexagon8(php);
415 tempD = fv.
get<std::vector<double> >(
name,
"LevelZSide");
418 tempD = fv.
get<std::vector<double> >(
name,
"FirstLayer");
420 tempD = fv.
get<std::vector<double> >(
name,
"FirstMixedLayer");
422 tempD = fv.
get<std::vector<double> >(
name,
"DetectorType");
424 tempD = fv.
get<std::vector<double> >(
name,
"WaferThickness");
426 tempD = fv.
get<std::vector<double> >(
name,
"MinimumTileSize");
431 tempD = fv.
get<std::vector<double> >(
name,
"WaferMaskMode");
433 tempD = fv.
get<std::vector<double> >(
name,
"WaferZside");
436 tempD = fv.
get<std::vector<double> >(
name,
"UseSimWt");
440 tempD = fv.
get<std::vector<double> >(
name,
"Cassettes");
452 geom->loadSpecParsTrapezoid(fv, vmap, php,
name);
456 geom->loadCellTrapezoid(php);
458 edm::LogError(
"HGCalGeom") <<
"Unknown Geometry type " << php.
mode_ <<
" for HGCal " <<
name <<
":" << namew
461 <<
"Unknown Geometry type " << php.
mode_ <<
" for HGCal " <<
name <<
":" << namew <<
":" << namec;
464 edm::LogError(
"HGCalGeom") <<
" Attribute Volume:" <<
name <<
" not found but needed.";
465 throw cms::Exception(
"DDException") <<
"Attribute Volume:" <<
name <<
" not found but needed.";
469 <<
" with flag " <<
ok;
484 std::vector<int> indtypes;
488 double r = 0.5 *
R *
sqrt(3.0);
491 for (
int u = 0; u < 2 *
N; ++u) {
492 for (
int v = 0;
v < 2 *
N; ++
v) {
493 if (((
v - u) <
N) && (u -
v) <=
N) {
494 double yp = (u - 0.5 *
v - n2) * 2 * r;
495 double xp = (1.5 * (
v -
N) + 1.0) *
R;
496 int id =
v * 100 + u;
498 indtypes.emplace_back(
id);
507 cellIndex[
id] = ipos;
522 int id = indtypes[
k];
529 int id = indtypes[
k];
540 const std::vector<double>& fvec =
val.doubles();
542 throw cms::Exception(
"HGCalGeom") <<
"getDDDValue::Failed to get " <<
s <<
" tag.";
546 throw cms::Exception(
"HGCalGeom") <<
"getDDDValue::Failed to fetch " <<
s <<
" tag";
553 const std::vector<double>& fvec =
val.doubles();
555 throw cms::Exception(
"HGCalGeom") <<
"getDDDArray::Failed to get " <<
s <<
" tag.";
559 throw cms::Exception(
"HGCalGeom") <<
"getDDDArray:Failed to fetch " <<
s <<
" tag";
Log< level::Info, true > LogVerbatim
static constexpr int scintillatorCassette
constexpr NumType convertRadToDeg(NumType radians)
std::vector< double > cellFineY_
const cms::DDDetector * detector() const
Log< level::Error, false > LogError
bool build(const DDCompactView *cpv, HGCalParameters &php, const std::string &name, const std::string &namew, const std::string &namec, const std::string &namet)
Compact representation of the geometrical detector hierarchy.
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
HGCalGeometryMode::GeometryMode mode_
std::unordered_map< std::string, std::vector< double > > DDVectorsMap
WaferMode getGeometryWaferMode(const char *s, const DDsvalues_type &sv)
std::vector< double > cellCoarseX_
static constexpr int siliconCassetteHE
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
std::vector< double > cellSize_
static constexpr int siliconCassetteEE
GeometryMode getGeometryMode(const char *s, const DDsvalues_type &sv)
static constexpr double k_ScaleFromDD4hep
bool firstChild()
set the current node to the first child
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
DDsvalues_type mergedSpecifics() const
T get(const std::string &)
extract attribute value
static constexpr double k_ScaleToDDD
std::unordered_map< int32_t, int32_t > wafer_map
double getDDDValue(const char *s, const DDsvalues_type &sv)
wafer_map cellCoarseIndex_
std::vector< double > cellFineX_
static constexpr double k_ScaleFromDDD
bool firstChild()
set the current node to the first child ...
std::vector< int > levelT_
std::vector< double > cellCoarseY_
cms::DDVectorsMap const & vectors() const
std::vector< double > getDDDArray(const char *s, const DDsvalues_type &sv)
void getCellPosition(HGCalParameters &php, int type)