14 #include <CLHEP/Units/SystemOfUnits.h> 16 #include <CLHEP/Geometry/Transform3D.h> 31 #include <CLHEP/Geometry/Transform3D.h> 40 typedef HepGeom::Point3D<double>
Pt3D;
41 typedef HepGeom::Transform3D
Tf3D;
42 typedef HepGeom::ReflectZ3D
RfZ3D;
43 typedef HepGeom::Translate3D
Tl3D;
44 typedef HepGeom::Rotate3D
Ro3D;
45 typedef HepGeom::RotateZ3D
RoZ3D;
46 typedef HepGeom::RotateY3D
RoY3D;
47 typedef HepGeom::RotateX3D
RoX3D;
49 typedef CLHEP::Hep3Vector
Vec3;
50 typedef CLHEP::HepRotation
Rota;
70 void EEPosSC(
const int iCol,
const int iRow,
DDName EEDeeName);
72 unsigned int EEGetSCType(
const unsigned int iCol,
const unsigned int iRow);
76 std::vector<double>
EEGetSCCtrs(
const int iCol,
const int iRow);
257 edm::LogVerbatim(
"EcalGeomX") <<
"DDEcalEndcapAlgo info: Creating an instance";
338 if (
temp.second.empty()) {
360 const double zFix(
m_zFront - 3172.0 * mm);
363 for (
unsigned int iC(0); iC != (
unsigned int)
eenSCquad(); ++iC) {
364 const unsigned int iOff(8 * iC);
368 assert(
ix > 0 && ix < 11 && iy > 0 &&
iy < 11);
378 for (
unsigned int iC(0); iC != 25; ++iC) {
379 const unsigned int iOff(8 * iC);
394 for (
unsigned int isc(0); isc <
eenSCTypes(); ++isc) {
402 for (
int irow =
int(colLimits[2 * icol - 2]); irow <=
int(colLimits[2 * icol - 1]); ++irow) {
406 const unsigned int isctype(
EEGetSCType(icol, irow));
420 <<
" Limits " <<
int(colLimits[2 * icol - 2]) <<
"->" 421 <<
int(colLimits[2 * icol - 1]) << std::endl
422 <<
" SC type = " << isctype << std::endl
423 <<
" Zoff = " <<
eezOff() << std::endl
424 <<
" Rotation " <<
rname <<
" " << scrys.
rotation() << std::endl
430 100 * isctype + 10 * (icol - 1) + (irow - 1),
460 const double ffived(45 * deg);
461 const double zerod(0 * deg);
476 << ffived <<
":" << eFront <<
":" << eFront <<
":" << eFront <<
":" << zerod <<
":" 477 << eRear <<
":" << eRear <<
":" << eRear <<
":" << zerod;
497 <<
":" << ffived <<
":" << aFront <<
":" << aFront <<
":" << aFront <<
":" << zerod
498 <<
":" << aRear <<
":" << aRear <<
":" << aRear <<
":" << zerod;
501 const double iFront(aFront - dwall);
502 const double iRear(iFront);
519 <<
":" << iFront <<
":" << iFront <<
":" << iFront <<
":" << zerod <<
":" << iRear <<
":" 520 << iRear <<
":" << iRear <<
":" << zerod;
525 const double xyIOff(
iXYOff());
536 const double fac(
eePF45());
538 const double zmm(0 * mm);
544 : (5 == iSCType ?
DDTranslation(-half * fac, -half * fac, zmm)
547 const CLHEP::HepRotationZ cutm(ffived);
576 const double mySign(iSCType < 4 ? +1. : -1.);
578 const DDTranslation extraI(xyIOff + mySign * 2 * mm, xyIOff + mySign * 2 * mm, zIOff);
598 <<
dxy <<
", " <<
dxy <<
", " <<
dz <<
")";
600 << xyIOff <<
", " << xyIOff <<
", " << zIOff <<
")";
607 unsigned int iType = 1;
612 edm::LogVerbatim(
"EcalGeomX") <<
"EEGetSCType: col, row, type = " << iCol <<
" " << iRow <<
" " << iType;
657 static const unsigned int ncol(5);
660 const unsigned int icoffset((iSCType - 1) * ncol - 1);
663 for (
unsigned int icol(1); icol <= ncol; ++icol) {
667 const int imin(0 < ncrcol ? 1 : (0 > ncrcol ? ncol + ncrcol + 1 : 0));
668 const int imax(0 < ncrcol ? ncrcol : (0 > ncrcol ? ncol : 0));
672 for (
int irow(imin); irow <= imax; ++irow) {
674 edm::LogVerbatim(
"EcalGeomX") <<
" type, col, row " << iSCType <<
" " << icol <<
" " << irow;
686 100 * iSCType + 10 * (icol - 1) + (irow - 1),
Log< level::Info, true > LogVerbatim
DDTranslation m_cryFCtr[5][5]
HepGeom::Point3D< double > Pt3D
void execute(DDCompactView &cpv) override
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
const std::vector< double > & eevecEESCProf() const
double eeCrysLength() const
DDMaterial is used to define and access material information.
DDName ddname(const std::string &s) const
double eenSCTypes() const
void EEPositionCRs(const DDName &pName, const DDTranslation &offset, const int iSCType, DDCompactView &cpv)
DDTranslation m_scrRCtr[10][10]
DDRotation myrot(const std::string &s, const DDRotationMatrix &r) const
unsigned int EEGetSCType(const unsigned int iCol, const unsigned int iRow)
DDName is used to identify DDD entities uniquely.
HepGeom::Translate3D Tl3D
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
static std::string & ns()
const DDTranslation & scrRCtr(unsigned int iRow, unsigned int iCol) const
void moveto(const DDTranslation &frontCentre, const DDTranslation &rearCentre)
Compact representation of the geometrical detector hierarchy.
HepGeom::ReflectZ3D RfZ3D
A DDSolid represents the shape of a part.
static std::string to_string(const XMLCh *ch)
double eeSCELength() const
DDMaterial eeWallMat() const
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
Represents a uniquely identifyable rotation matrix.
const std::vector< double > & vecEESCLims() const
double eeSCAFront() const
double eenColumns() const
std::string m_idNameSpace
EcalTrapezoidParameters Trap
std::vector< double > m_vecEESCLims
void EEPosSC(const int iCol, const int iRow, DDName EEDeeName)
const std::string & name() const
Returns the name.
~DDEcalEndcapAlgo() override
double eeCrysRear() const
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
DDMaterial eeQuaMat() const
const DDTranslation & cryRCtr(unsigned int iRow, unsigned int iCol) const
std::vector< double > EEGetSCCtrs(const int iCol, const int iRow)
HepGeom::Transform3D Tf3D
DDTranslation m_scrFCtr[10][10]
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
DDName addTmp(DDName aName) const
static DDSolid trap(const DDName &name, double pDz, double pTheta, double pPhi, double pDy1, double pDx1, double pDx2, double pAlp1, double pDy2, double pDx3, double pDx4, double pAlp2)
DDName envName(unsigned int i) const
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
DDName cutBoxName() const
const DDTranslation & cryFCtr(unsigned int iRow, unsigned int iCol) const
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
std::vector< double > m_vecEEShape
DDTranslation m_cryRCtr[5][5]
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
std::vector< double > m_vecEESCCtrs
std::vector< double > m_vecEECRCtrs
double eeSCEFront() const
DDMaterial eeCrysMat() const
const std::vector< double > & eevecEECRCtrs() const
void translate(const DDTranslation &trans)
const G4String rname[NREG]
DDName intName(unsigned int i) const
const DDTranslation & scrFCtr(unsigned int iRow, unsigned int iCol) const
const std::vector< double > & eevecEESCCutaway() const
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t iy(uint32_t id)
double eeSCALength() const
#define DEFINE_EDM_PLUGIN(factory, type, name)
DDMaterial ddmat(const std::string &s) const
double eeCrysFront() const
void EECreateSC(const unsigned int iSCType, DDCompactView &cpv)
const std::string & idNameSpace() const
DDTranslation centrePos()
DDRotationMatrix rotation()
const std::vector< double > * m_cutParms
std::vector< double > m_vecEESCCutaway
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
double eeSCHLength() const
const std::vector< double > & eevecEEShape() const
DDName alvName(unsigned int i) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
const std::vector< double > & eevecEESCCtrs() const
double eenSCCutaway() const
DDName EEGetSCName(const int iCol, const int iRow)
std::vector< double > m_vecEESCProf