14 #include "CLHEP/Units/GlobalSystemOfUnits.h" 16 #include <CLHEP/Geometry/Transform3D.h> 31 #include "CLHEP/Geometry/Transform3D.h" 38 typedef HepGeom::Point3D<double>
Pt3D;
39 typedef HepGeom::Transform3D
Tf3D;
40 typedef HepGeom::ReflectZ3D
RfZ3D;
41 typedef HepGeom::Translate3D
Tl3D;
42 typedef HepGeom::Rotate3D
Ro3D;
43 typedef HepGeom::RotateZ3D
RoZ3D;
44 typedef HepGeom::RotateY3D
RoY3D;
45 typedef HepGeom::RotateX3D
RoX3D;
47 typedef CLHEP::Hep3Vector
Vec3;
48 typedef CLHEP::HepRotation
Rota;
68 void EEPosSC(
const int iCol,
const int iRow,
DDName EEDeeName);
70 unsigned int EEGetSCType(
const unsigned int iCol,
const unsigned int iRow);
74 std::vector<double>
EEGetSCCtrs(
const int iCol,
const int iRow);
255 edm::LogVerbatim(
"EcalGeomX") <<
"DDEcalEndcapAlgo info: Creating an instance";
336 if (
temp.second.empty()) {
358 const double zFix(
m_zFront - 3172.0 * mm);
361 for (
unsigned int iC(0); iC != (
unsigned int)
eenSCquad(); ++iC) {
362 const unsigned int iOff(8 * iC);
363 const unsigned int ix((
unsigned int)
eevecEESCCtrs()[iOff + 0]);
364 const unsigned int iy((
unsigned int)
eevecEESCCtrs()[iOff + 1]);
366 assert(ix > 0 && ix < 11 && iy > 0 && iy < 11);
376 for (
unsigned int iC(0); iC != 25; ++iC) {
377 const unsigned int iOff(8 * iC);
378 const unsigned int ix((
unsigned int)
eevecEECRCtrs()[iOff + 0]);
379 const unsigned int iy((
unsigned int)
eevecEECRCtrs()[iOff + 1]);
381 assert(ix > 0 && ix < 6 && iy > 0 && iy < 6);
392 for (
unsigned int isc(0); isc <
eenSCTypes(); ++isc) {
400 for (
int irow =
int(colLimits[2 * icol - 2]); irow <=
int(colLimits[2 * icol - 1]); ++irow) {
404 const unsigned int isctype(
EEGetSCType(icol, irow));
418 <<
" Limits " <<
int(colLimits[2 * icol - 2]) <<
"->" 419 <<
int(colLimits[2 * icol - 1]) << std::endl
420 <<
" SC type = " << isctype << std::endl
421 <<
" Zoff = " <<
eezOff() << std::endl
422 <<
" Rotation " <<
rname <<
" " << scrys.
rotation() << std::endl
428 100 * isctype + 10 * (icol - 1) + (irow - 1),
458 const double ffived(45 * deg);
459 const double zerod(0 * deg);
474 << ffived <<
":" << eFront <<
":" << eFront <<
":" << eFront <<
":" << zerod <<
":" 475 << eRear <<
":" << eRear <<
":" << eRear <<
":" << zerod;
495 <<
":" << ffived <<
":" << aFront <<
":" << aFront <<
":" << aFront <<
":" << zerod
496 <<
":" << aRear <<
":" << aRear <<
":" << aRear <<
":" << zerod;
499 const double iFront(aFront - dwall);
500 const double iRear(iFront);
517 <<
":" << iFront <<
":" << iFront <<
":" << iFront <<
":" << zerod <<
":" << iRear <<
":" 518 << iRear <<
":" << iRear <<
":" << zerod;
523 const double xyIOff(
iXYOff());
534 const double fac(
eePF45());
536 const double zmm(0 * mm);
542 : (5 == iSCType ?
DDTranslation(-half * fac, -half * fac, zmm)
545 const CLHEP::HepRotationZ cutm(ffived);
574 const double mySign(iSCType < 4 ? +1. : -1.);
576 const DDTranslation extraI(xyIOff + mySign * 2 * mm, xyIOff + mySign * 2 * mm, zIOff);
596 <<
dxy <<
", " <<
dxy <<
", " <<
dz <<
")";
598 << xyIOff <<
", " << xyIOff <<
", " << zIOff <<
")";
605 unsigned int iType = 1;
610 edm::LogVerbatim(
"EcalGeomX") <<
"EEGetSCType: col, row, type = " << iCol <<
" " << iRow <<
" " << iType;
655 static const unsigned int ncol(5);
658 const unsigned int icoffset((iSCType - 1) * ncol - 1);
661 for (
unsigned int icol(1); icol <= ncol; ++icol) {
665 const int imin(0 < ncrcol ? 1 : (0 > ncrcol ? ncol + ncrcol + 1 : 0));
666 const int imax(0 < ncrcol ? ncrcol : (0 > ncrcol ? ncol : 0));
670 for (
int irow(imin); irow <= imax; ++irow) {
672 edm::LogVerbatim(
"EcalGeomX") <<
" type, col, row " << iSCType <<
" " << icol <<
" " << irow;
684 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
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
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