440 double hthick = 0.5 * thick;
442 double thickTot(0), zpos(-hthick);
458 <<
" Tiles " << firstTile <<
":" << lastTile;
460 for (
int ti = firstTile; ti < lastTile; ++ti) {
466 double phi1 = dphi * (fimin - 1);
467 double phi2 = dphi * (fimax - fimin + 1);
473 <<
r2 <<
" Thick " << (2.0 * hthickl) <<
" phi " << fimin <<
":" << fimax <<
":" 475 <<
" Shift " << cshift.first <<
":" << cshift.second;
482 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: " << glog1.
name() <<
" Tubs made of " << matName
483 <<
" of dimensions " <<
r1 <<
", " <<
r2 <<
", " << hthickl <<
", " 490 <<
" in " << glog.
name() <<
" at " << tran <<
" with no rotation";
497 if (thickTot > thick) {
498 edm::LogError(
"HGCalGeom") <<
"Thickness of the partition " << thick <<
" is smaller than " << thickTot
499 <<
": thickness of all its components in the top part **** ERROR ****";
501 edm::LogWarning(
"HGCalGeom") <<
"Thickness of the partition " << thick <<
" does not match with " << thickTot
502 <<
" of the components in top part";
508 static const double sqrt3 =
std::sqrt(3.0);
518 double R = 2.0 *
r / sqrt3;
519 double dy = 0.75 *
R;
522 int ium(0), ivm(0), kount(0);
523 std::vector<int> ntype(3, 0);
525 <<
dy <<
" Shift " << xyoff.first <<
":" << xyoff.second <<
" WaferSize " 528 for (
int k = firstWafer;
k < lastWafer; ++
k) {
543 edm::LogVerbatim(
"HGCalGeom") <<
" index:Property:layertype:type:part:orien:cassette:place:offsets:ind " <<
k <<
":" 545 <<
":" << cassette <<
":" << place;
548 double xpos = xyoff.first + cshift.first + nc *
r;
549 double ypos = xyoff.second + cshift.second +
nr *
dy;
555 edm::LogVerbatim(
"HGCalGeom") <<
" FullWafer type:place:ind " <<
type <<
":" << place <<
":" <<
i <<
":" 564 edm::LogVerbatim(
"HGCalGeom") <<
" layertype:type:part:orien:cassette:place:offsets:ind " << layertype <<
":" 565 <<
type <<
":" <<
part <<
":" << orien <<
":" << cassette <<
":" << place <<
":" 574 <<
" Wafer " << wafer <<
" number " <<
copy <<
" type :part:orien:ind " <<
type <<
":" 591 <<
":" <<
type <<
" positioned in " << glog.
ddname() <<
" at " << tran
592 <<
" with no rotation";
596 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: Maximum # of u " << ium <<
" # of v " << ivm <<
" and " 597 << kount <<
" wafers (" << ntype[0] <<
":" << ntype[1] <<
":" << ntype[2] <<
") for "
Log< level::Info, true > LogVerbatim
static constexpr int32_t WaferPartLDOffset
std::pair< double, double > getShift(int layer, int zside, int cassette)
static constexpr int32_t WaferCenter
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
std::vector< int > layerTypes_
static constexpr int32_t WaferTypeOffset[3]
HGCalGeomTools geomTools_
DDMaterial is used to define and access material information.
int32_t waferU(const int32_t index)
int32_t waferLayer(const int32_t index)
static constexpr int32_t CornerCenterYm
constexpr NumType convertRadToDeg(NumType radians)
DDName is used to identify DDD entities uniquely.
std::string to_string(const V &value)
std::vector< int > copyNumberTop_
std::vector< double > tileRMin_
Log< level::Error, false > LogError
std::vector< std::string > waferFull_
std::vector< int > waferLayerStart_
int32_t waferOrient(const int32_t property)
std::vector< int > waferIndex_
A DDSolid represents the shape of a part.
constexpr std::array< uint8_t, layerIndexSize > layer
Represents a uniquely identifyable rotation matrix.
U second(std::pair< T, U > const &p)
int32_t waferCassette(const int32_t property)
static constexpr int32_t WaferFull
static int32_t cellPlacementIndex(int32_t iz, int32_t fwdBack, int32_t orient)
std::vector< int > tilePhis_
Abs< T >::type abs(const T &t)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
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< double > tileRMax_
std::vector< int > layerTypeTop_
static constexpr int32_t CornerCenterYp
std::vector< double > layerThickTop_
std::vector< int > waferProperty_
std::tuple< int32_t, int32_t, int32_t > tileUnpack(int32_t index)
static constexpr int32_t WaferPartHDOffset
static constexpr int32_t WaferCenteredBack
std::vector< std::string > waferPart_
static constexpr int32_t CornerCenteredLambda
int32_t waferPartial(const int32_t property)
std::vector< std::string > materialTop_
static constexpr int32_t CornerCenteredY
int32_t waferV(const int32_t index)
static int32_t packTypeUV(int type, int u, int v)
static constexpr int32_t WaferHDTop
std::vector< std::string > namesTop_
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
static constexpr double tol2_
std::vector< int > tileLayerStart_
std::unordered_set< int > copies_
std::vector< int > tileIndex_