420 double hthick = 0.5 * thick;
422 double thickTot(0), zpos(-hthick);
437 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: Layer " << ly <<
":" << ii <<
" Copy " << copy <<
" Tiles "
438 << firstTile <<
":" << lastTile;
440 for (
int ti = firstTile; ti < lastTile; ++ti) {
445 double phi1 = dphi * (fimin - 1);
446 double phi2 = dphi * (fimax - fimin + 1);
448 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: Layer " << copy <<
" iR "
451 << r2 <<
" Thick " << (2.0 * hthickl) <<
" phi " << fimin <<
":" << fimax <<
":"
460 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: " << glog1.
name() <<
" Tubs made of " << matName
461 <<
" of dimensions " << r1 <<
", " << r2 <<
", " << hthickl <<
", "
465 cpv.
position(glog1, glog, copy, tran, rot);
467 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: Position " << glog1.
name() <<
" number " << copy <<
" in "
468 << glog.
name() <<
" at " << tran <<
" with no rotation";
475 if (thickTot > thick) {
476 edm::LogError(
"HGCalGeom") <<
"Thickness of the partition " << thick <<
" is smaller than " << thickTot
477 <<
": thickness of all its components in the top part **** ERROR ****";
479 edm::LogWarning(
"HGCalGeom") <<
"Thickness of the partition " << thick <<
" does not match with " << thickTot
480 <<
" of the components in top part";
486 static const double sqrt3 =
std::sqrt(3.0);
495 double R = 2.0 * r / sqrt3;
496 double dy = 0.75 *
R;
499 int ium(0), ivm(0), kount(0);
500 std::vector<int> ntype(3, 0);
501 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: " << glog.
ddname() <<
" r " << r <<
" R " << R <<
" dy " << dy
502 <<
" Shift " << xyoff.first <<
":" << xyoff.second <<
" WaferSize "
505 for (
int k = firstWafer; k < lastWafer; ++
k) {
514 double xpos = xyoff.first + nc *
r;
515 double ypos = xyoff.second + nr *
dy;
528 edm::LogVerbatim(
"HGCalGeom") <<
" layertype:type:part:orien:ind " << layerType <<
":" << type <<
":" << part
529 <<
":" << orien <<
":" <<
i <<
":" <<
waferPart_.size();
536 <<
" Wafer " << wafer <<
" number " << copy <<
" type :part:orien:ind " << type <<
":"
537 << part <<
":" << orien <<
":" <<
i <<
" layer:u:v " << (layer +
firstLayer_) <<
":"
552 edm::LogVerbatim(
"HGCalGeom") <<
" DDHGCalMixLayer: " << name <<
" number " << copy <<
" type " << layerType <<
":"
553 << type <<
" positioned in " << glog.
ddname() <<
" at " << tran
554 <<
" with no rotation";
558 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixLayer: Maximum # of u " << ium <<
" # of v " << ivm <<
" and " << kount
559 <<
" wafers (" << ntype[0] <<
":" << ntype[1] <<
":" << ntype[2] <<
") for "
Log< level::Info, true > LogVerbatim
std::vector< int > tileIndex_
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
DDMaterial is used to define and access material information.
int32_t waferU(const int32_t index)
int32_t waferLayer(const int32_t index)
std::vector< int > layerTypes_
std::vector< double > layerThickTop_
constexpr NumType convertRadToDeg(NumType radians)
HGCalGeomTools geomTools_
DDName is used to identify DDD entities uniquely.
std::unordered_set< int > copies_
std::vector< int > tilePhis_
Log< level::Error, false > LogError
int32_t waferOrient(const int32_t property)
A DDSolid represents the shape of a part.
constexpr std::array< uint8_t, layerIndexSize > layer
std::vector< double > tileRMax_
Represents a uniquely identifyable rotation matrix.
U second(std::pair< T, U > const &p)
std::vector< int > copyNumberTop_
std::vector< std::string > materialTop_
std::vector< int > waferIndex_
std::vector< int > waferLayerStart_
Abs< T >::type abs(const T &t)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
static constexpr double tol2_
static DDSolid tubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
int32_t waferThick(const int32_t property)
std::vector< std::string > namesTop_
std::tuple< int32_t, int32_t, int32_t > tileUnpack(int32_t index)
std::vector< int > layerTypeTop_
std::vector< int > tileLayerStart_
std::vector< std::string > waferPart_
int32_t waferPartial(const int32_t property)
std::vector< int > waferProperty_
int32_t waferV(const int32_t index)
static int32_t packTypeUV(int type, int u, int v)
std::vector< std::string > waferFull_
Log< level::Warning, false > LogWarning
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
std::vector< double > tileRMin_