|
|
Go to the documentation of this file.
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),
453 const string anum(std::to_string(iSCType));
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;
680 DDName rname(
"EECrRoC" + std::to_string(icol) +
"R" + std::to_string(irow));
684 100 * iSCType + 10 * (icol - 1) + (irow - 1),
std::vector< double > m_vecEEShape
EcalTrapezoidParameters Trap
DDRotationMatrix rotation()
DDTranslation m_scrFCtr[10][10]
DDName addTmp(DDName aName) const
DDTranslation m_cryRCtr[5][5]
DDName is used to identify DDD entities uniquely.
std::vector< double > EEGetSCCtrs(const int iCol, const int iRow)
DDName intName(unsigned int i) const
const std::vector< double > & eevecEESCCutaway() const
HepGeom::Transform3D Tf3D
const DDTranslation & cryFCtr(unsigned int iRow, unsigned int iCol) const
std::vector< double > m_vecEECRCtrs
double eeSCEFront() const
const DDTranslation & scrFCtr(unsigned int iRow, unsigned int iCol) const
double eeSCHLength() const
DDName alvName(unsigned int i) const
std::vector< double > m_vecEESCCutaway
DDMaterial is used to define and access material information.
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
std::vector< double > m_vecEESCCtrs
const std::vector< double > & eevecEESCCtrs() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
void execute(DDCompactView &cpv) override
DDMaterial ddmat(const std::string &s) const
Compact representation of the geometrical detector hierarchy.
DDMaterial eeCrysMat() const
const std::vector< double > & eevecEECRCtrs() const
void EECreateSC(const unsigned int iSCType, DDCompactView &cpv)
double eeCrysFront() const
const std::string & idNameSpace() const
DDName EEGetSCName(const int iCol, const int iRow)
const std::vector< double > & eevecEESCProf() const
#define DEFINE_EDM_PLUGIN(factory, type, name)
HepGeom::Point3D< double > Pt3D
const std::vector< double > & eevecEEShape() const
double eenSCCutaway() const
double eeSCALength() const
DDName ddname(const std::string &s) const
std::vector< double > m_vecEESCProf
const std::vector< double > * m_cutParms
DDRotation myrot(const std::string &s, const DDRotationMatrix &r) const
const G4String rname[NREG]
double eeCrysLength() const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ....
const std::string & name() const
Returns the name.
void EEPositionCRs(const DDName &pName, const DDTranslation &offset, const int iSCType, DDCompactView &cpv)
DDTranslation m_scrRCtr[10][10]
unsigned int EEGetSCType(const unsigned int iCol, const unsigned int iRow)
DDTranslation m_cryFCtr[5][5]
HepGeom::Translate3D Tl3D
double eenSCTypes() const
double eenColumns() const
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
const std::vector< double > & vecEESCLims() const
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Log< level::Info, true > LogVerbatim
~DDEcalEndcapAlgo() override
static std::string & ns()
double eeCrysRear() const
const DDTranslation & scrRCtr(unsigned int iRow, unsigned int iCol) const
std::string m_idNameSpace
DDMaterial eeQuaMat() const
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
void translate(const DDTranslation &trans)
A DDSolid represents the shape of a part.
Represents a uniquely identifyable rotation matrix.
const DDTranslation & cryRCtr(unsigned int iRow, unsigned int iCol) const
void EEPosSC(const int iCol, const int iRow, DDName EEDeeName)
DDTranslation centrePos()
double eeSCELength() const
double eeSCAFront() const
DDMaterial eeWallMat() 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.
void moveto(const DDTranslation &frontCentre, const DDTranslation &rearCentre)
std::vector< double > m_vecEESCLims
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
HepGeom::ReflectZ3D RfZ3D
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
DDName cutBoxName() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation