|
|
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"
36 typedef HepGeom::Point3D<double>
Pt3D;
37 typedef HepGeom::Transform3D
Tf3D;
38 typedef HepGeom::ReflectZ3D
RfZ3D;
39 typedef HepGeom::Translate3D
Tl3D;
40 typedef HepGeom::Rotate3D
Ro3D;
41 typedef HepGeom::RotateZ3D
RoZ3D;
42 typedef HepGeom::RotateY3D
RoY3D;
43 typedef HepGeom::RotateX3D
RoX3D;
45 typedef CLHEP::Hep3Vector
Vec3;
46 typedef CLHEP::HepRotation
Rota;
66 void EEPosSC(
const int iCol,
const int iRow,
DDName EEDeeName);
68 unsigned int EEGetSCType(
const unsigned int iCol,
const unsigned int iRow);
72 std::vector<double>
EEGetSCCtrs(
const int iCol,
const int iRow);
253 LogDebug(
"EcalGeom") <<
"DDEcalEndcapAlgo info: Creating an instance";
332 if (
temp.second.empty()) {
354 const double zFix(
m_zFront - 3172 * mm);
357 for (
unsigned int iC(0); iC != (
unsigned int)
eenSCquad(); ++iC) {
358 const unsigned int iOff(8 * iC);
359 const unsigned int ix((
unsigned int)
eevecEESCCtrs()[iOff + 0]);
360 const unsigned int iy((
unsigned int)
eevecEESCCtrs()[iOff + 1]);
362 assert(ix > 0 && ix < 11 && iy > 0 && iy < 11);
372 for (
unsigned int iC(0); iC != 25; ++iC) {
373 const unsigned int iOff(8 * iC);
374 const unsigned int ix((
unsigned int)
eevecEECRCtrs()[iOff + 0]);
375 const unsigned int iy((
unsigned int)
eevecEECRCtrs()[iOff + 1]);
377 assert(ix > 0 && ix < 6 && iy > 0 && iy < 6);
388 for (
unsigned int isc(0); isc <
eenSCTypes(); ++isc) {
396 for (
int irow =
int(colLimits[2 * icol - 2]); irow <=
int(colLimits[2 * icol - 1]); ++irow) {
400 const unsigned int isctype(
EEGetSCType(icol, irow));
422 100 * isctype + 10 * (icol - 1) + (irow - 1),
441 const string anum(std::to_string(iSCType));
446 const double ffived(45 * deg);
447 const double zerod(0 * deg);
478 const double iFront(aFront - dwall);
479 const double iRear(iFront);
497 const double xyIOff(
iXYOff());
508 const double fac(
eePF45());
510 const double zmm(0 * mm);
516 : (5 == iSCType ?
DDTranslation(-half * fac, -half * fac, zmm)
519 const CLHEP::HepRotationZ cutm(ffived);
541 const double mySign(iSCType < 4 ? +1. : -1.);
543 const DDTranslation extraI(xyIOff + mySign * 2 * mm, xyIOff + mySign * 2 * mm, zIOff);
561 unsigned int iType = 1;
601 static const unsigned int ncol(5);
604 const unsigned int icoffset((iSCType - 1) * ncol - 1);
607 for (
unsigned int icol(1); icol <= ncol; ++icol) {
611 const int imin(0 < ncrcol ? 1 : (0 > ncrcol ? ncol + ncrcol + 1 : 0));
612 const int imax(0 < ncrcol ? ncrcol : (0 > ncrcol ? ncol : 0));
616 for (
int irow(imin); irow <= imax; ++irow) {
626 DDName rname(
"EECrRoC" + std::to_string(icol) +
"R" + std::to_string(irow));
630 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.
~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