442 double hthick = 0.5 * thick;
444 double thickTot(0), zpos(-hthick);
460 <<
" Tiles " << firstTile <<
":" << lastTile;
462 for (
int ti = firstTile; ti < lastTile; ++ti) {
468 double phi1 = dphi * (fimin - 1);
469 double phi2 = dphi * (fimax - fimin + 1);
476 <<
r2 <<
" Thick " << (2.0 * hthickl) <<
" phi " << fimin <<
":" << fimax <<
":" 478 <<
":" << cassette0 <<
" Shift " << cshift.first <<
":" << cshift.second;
485 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: " << glog1.
name() <<
" Tubs made of " << matName
486 <<
" of dimensions " <<
r1 <<
", " <<
r2 <<
", " << hthickl <<
", " 493 <<
" in " << glog.
name() <<
" at " << tran <<
" with no rotation";
500 if (thickTot > thick) {
501 edm::LogError(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: Thickness of the partition " << thick
502 <<
" is smaller than " << thickTot
503 <<
": thickness of all its components in the top part **** ERROR ****";
505 edm::LogWarning(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: Thickness of the partition " << thick
506 <<
" does not match with " << thickTot <<
" of the components in top part";
512 static const double sqrt3 =
std::sqrt(3.0);
519 double dely = 2.0 * delx / sqrt3;
520 double dy = 0.75 * dely;
523 int ium(0), ivm(0), kount(0);
524 std::vector<int> ntype(3, 0);
525 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: " << glog.
ddname() <<
" r " << delx <<
" R " << dely
526 <<
" dy " <<
dy <<
" Shift " << xyoff.first <<
":" << xyoff.second <<
" WaferSize " 529 for (
int k = firstWafer;
k < lastWafer; ++
k) {
545 <<
"DDHGCalMixRotatedLayer::index:Property:layertype:type:part:orien:cassette:place:offsets:ind " <<
k <<
":" 546 <<
waferProperty_[
k] <<
":" << layertype <<
":" <<
type <<
":" <<
part <<
":" << orien <<
":" << cassette <<
":" 550 double xpos = xyoff.first - cshift.first + nc * delx;
551 double ypos = xyoff.second + cshift.second +
nr *
dy;
553 double xorig = xyoff.first + nc * delx;
554 double yorig = xyoff.second +
nr *
dy;
555 double angle = std::atan2(yorig, xorig);
556 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer::Wafer: layer " <<
layer + 1 <<
" cassette " << cassette
557 <<
" Shift " << cshift.first <<
":" << cshift.second <<
" Original " << xorig <<
":" 565 edm::LogVerbatim(
"HGCalGeom") <<
" FullWafer type:place:ind " <<
type <<
":" << place <<
":" <<
i <<
":" 574 edm::LogVerbatim(
"HGCalGeom") <<
" layertype:type:part:orien:cassette:place:offsets:ind " << layertype <<
":" 575 <<
type <<
":" <<
part <<
":" << orien <<
":" << cassette <<
":" << place <<
":" 584 <<
" Wafer " << wafer <<
" number " <<
copy <<
" type :part:orien:ind " <<
type <<
":" 601 <<
":" <<
type <<
" positioned in " << glog.
ddname() <<
" at " << tran
602 <<
" with no rotation";
606 edm::LogVerbatim(
"HGCalGeom") <<
"DDHGCalMixRotatedLayer: Maximum # of u " << ium <<
" # of v " << ivm <<
" and " 607 << kount <<
" wafers (" << ntype[0] <<
":" << ntype[1] <<
":" << ntype[2] <<
") for " Log< level::Info, true > LogVerbatim
static int32_t cellPlacementIndex(int32_t iz, int32_t frontBack, int32_t orient)
static constexpr int32_t WaferPartLDOffset
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
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)
constexpr NumType convertRadToDeg(NumType radians)
std::pair< double, double > getShift(int layer, int zside, int cassette) const
DDName is used to identify DDD entities uniquely.
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.
static std::string to_string(const XMLCh *ch)
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
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_
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
std::vector< std::string > waferPart_
int32_t waferPartial(const int32_t property)
std::vector< std::string > materialTop_
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 > layerOrient_
static int cassetteType(int det, int zside, int cassette)
std::vector< int > tileLayerStart_
std::unordered_set< int > copies_
std::vector< int > tileIndex_
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
static constexpr int32_t layerFrontBack(int32_t layerOrient)