20 using namespace geant_units::operators;
41 double mdx = mtrd.
x1();
49 std::string s =
"ERROR - DDDividedTrdX::makeDDTranslation()";
50 s +=
"\n Axis is along ";
53 s +=
"DDDividedTrdX::makeDDTranslation()";
54 s +=
" IllegalConstruct: Only axes along x are allowed !";
67 double pDy1 = mtrd.
y1();
68 double pDy2 = mtrd.
y2();
69 double pDz = mtrd.
halfZ();
75 if (!dsol.isDefined().second) {
76 dsol =
DDSolidFactory::trap(solname, pDz, 0._deg, 0._deg, pDy1, pDx, pDx, 0._deg, pDy2, pDx, pDx, 0._deg);
87 double mpDx1 = mtrd.
x1();
88 double mpDx2 = mtrd.
x2();
89 double mpDx3 = mtrd.
x3();
90 double mpDx4 = mtrd.
x4();
91 double mpTheta = mtrd.
theta();
92 double mpPhi = mtrd.
phi();
93 double mpAlpha1 = mtrd.
alpha1();
94 double mpAlpha2 = mtrd.
alpha2();
97 std::string s =
"ERROR - DDDividedTrdX::checkParametersValidity()";
98 s +=
"\n Making a division of a TRD along axis X,";
99 s +=
"\n while the X half lengths are not equal,";
100 s +=
"\n is not (yet) supported. It will result";
101 s +=
"\n in non-equal division solids.";
107 if (mpAlpha1 != 0._deg || mpAlpha2 != 0._deg || mpTheta != 0._deg || mpPhi != 0._deg) {
108 std::string s =
"ERROR - DDDividedTrdX::checkParametersValidity()";
109 s +=
"\n Making a division of a TRD along axis X,";
110 s +=
"\n while the theta, phi and aplhpa2 are not zero,";
111 s +=
"\n is not (yet) supported. It will result";
112 s +=
"\n in non-equal division solids.";
131 return 2 * mtrd.
y1();
136 double mdy = mtrd.
y1();
144 std::string s =
"ERROR - DDDividedTrdY::makeDDTranslation()";
145 s +=
"\n Axis is along ";
148 s +=
"DDDividedTrdY::makeDDTranslation()";
149 s +=
" IllegalConstruct: Only axes along y are allowed !";
163 double pDx1 = mtrd.
x1();
164 double pDx2 = mtrd.
x2();
165 double pDx3 = mtrd.
x3();
166 double pDx4 = mtrd.
x4();
167 double pDz = mtrd.
halfZ();
173 if (!dsol.isDefined().second) {
174 dsol =
DDSolidFactory::trap(solname, pDz, 0._deg, 0._deg, pDy, pDx1, pDx2, 0._deg, pDy, pDx3, pDx4, 0._deg);
185 double mpDy1 = mtrd.
y1();
186 double mpDy2 = mtrd.
y2();
187 double mpTheta = mtrd.
theta();
188 double mpPhi = mtrd.
phi();
189 double mpAlpha1 = mtrd.
alpha1();
190 double mpAlpha2 = mtrd.
alpha2();
193 std::string s =
"ERROR - DDDividedTrdY::checkParametersValidity()";
194 s +=
"\n Making a division of a TRD along axis Y while";
195 s +=
"\n the Y half lengths are not equal is not (yet)";
196 s +=
"\n supported. It will result in non-equal";
197 s +=
"\n division solids.";
202 if (mpAlpha1 != 0._deg || mpAlpha2 != 0._deg || mpTheta != 0._deg || mpPhi != 0._deg) {
203 std::string s =
"ERROR - DDDividedTrdY::checkParametersValidity()";
204 s +=
"\n Making a division of a TRD along axis X,";
205 s +=
"\n while the theta, phi and aplhpa2 are not zero,";
206 s +=
"\n is not (yet) supported. It will result";
207 s +=
"\n in non-equal division solids.";
226 return 2 * mtrd.
halfZ();
231 double mdz = mtrd.
halfZ();
239 std::string s =
"ERROR - DDDividedTrdZ::makeDDTranslation()";
240 s +=
"\n Axis is along ";
243 s +=
"DDDividedTrdY::makeDDTranslation()";
244 s +=
" IllegalConstruct: Only axes along z are allowed !";
257 double pDx1 = mtrd.
x1();
258 double DDx = (mtrd.
x2() - mtrd.
x1());
259 double pDy1 = mtrd.
y1();
260 double DDy = (mtrd.
y2() - mtrd.
y1());
262 double zLength = 2 * mtrd.
halfZ();
287 double mpTheta = mtrd.
theta();
288 double mpPhi = mtrd.
phi();
289 double mpAlpha1 = mtrd.
alpha1();
290 double mpAlpha2 = mtrd.
alpha2();
294 if (mpAlpha1 != 0._deg || mpAlpha2 != 0._deg || mpTheta != 0._deg || mpPhi != 0._deg) {
295 std::string s =
"ERROR - DDDividedTrdZ::checkParametersValidity()";
296 s +=
"\n Making a division of a TRD along axis X,";
297 s +=
"\n while the theta, phi and aplhpa2 are not zero,";
298 s +=
"\n is not (yet) supported. It will result";
299 s +=
"\n in non-equal division solids.";
double halfZ(void) const
half of the z-Axis
DDDividedTrdY(const DDDivision &div, DDCompactView *cpv)
double x1(void) const
Half-length along x of the side at y=-pDy1 of the face at -pDz.
DDRotation makeDDRotation(int copyNo) const override
DDMaterial is used to define and access material information.
DDRotation makeDDRotation(int copyNo) const override
double phi(void) const
Azimuthal angle of the line joining the centres of the faces at -/+pDz.
int calculateNDiv(double motherDim, double width, double offset) const
const std::string & ns() const
Returns the namespace.
DDName is used to identify DDD entities uniquely.
std::string to_string(const V &value)
double calculateWidth(double motherDim, int nDiv, double offset) const
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
Compact representation of the geometrical detector hierarchy.
DDTranslation makeDDTranslation(int copyNo) const override
A DDSolid represents the shape of a part.
virtual void checkParametersValidity(void)
DDLogicalPart makeDDLogicalPart(int copyNo) const override
DDLogicalPart makeDDLogicalPart(int copyNo) const override
Represents a uniquely identifyable rotation matrix.
DDDividedTrdX(const DDDivision &div, DDCompactView *cpv)
static const double tolerance(void)
DDDividedTrdZ(const DDDivision &div, DDCompactView *cpv)
double x4(void) const
Half-length along x of the side at y=+pDy2 of the face at +pDz.
void checkParametersValidity() override
DDTranslation makeDDTranslation(int copyNo) const override
DivisionType divisionType_
Interface to a Trapezoid.
double y1(void) const
Half-length along y of the face at -pDz.
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
static const std::string name(const DDAxes &s)
virtual void setType(const std::string &type)
DDLogicalPart makeDDLogicalPart(int copyNo) const override
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)
double getMaxParameter() const override
double alpha1(void) const
Angle with respect to the y axis from the centre of the side at y=-pDy1 to the centre at y=+pDy1 of t...
double alpha2(void) const
Angle with respect to the y axis from the centre of the side at y=-pDy2 to the centre at y=+pDy2 of t...
void checkParametersValidity() override
double x2(void) const
Half-length along x of the side at y=+pDy1 of the face at -pDz.
void checkParametersValidity() override
double y2(void) const
Half-length along y of the face at +pDz.
double getMaxParameter() const override
const DDLogicalPart & parent() const
double getMaxParameter() const override
DDRotation makeDDRotation(int copyNo) const override
double theta(void) const
Polar angle of the line joining the centres of the faces at -/+pDz.
DDTranslation makeDDTranslation(int copyNo) const override
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
const std::string & name() const
Returns the name.
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.
double x3(void) const
Half-length along x of the side at y=-pDy2 of the face at +pDz.