1 #ifndef DETECTOR_DESCRIPTION_CORE_DD_SOLID_H
2 #define DETECTOR_DESCRIPTION_CORE_DD_SOLID_H
59 const std::vector<double>&
parameters(
void)
const;
94 double halfZ(
void)
const;
96 double theta(
void)
const;
98 double phi(
void)
const;
100 double y1(
void)
const;
102 double x1(
void)
const;
104 double x2(
void)
const;
106 double alpha1(
void)
const;
108 double y2(
void)
const;
110 double x3(
void)
const;
112 double x4(
void)
const;
114 double alpha2(
void)
const;
123 double halfZ(
void)
const;
125 double x1(
void)
const;
127 double x2(
void)
const;
129 double y1(
void)
const;
131 double y2(
void)
const;
133 double radius(
void)
const;
145 double zHalf(
void)
const;
147 double rIn(
void)
const;
149 double rOut(
void)
const;
170 DDBox(
void) =
delete;
172 double halfX(
void)
const;
173 double halfY(
void)
const;
174 double halfZ(
void)
const;
203 const std::vector<DDSolid>&
solids(
void)
const;
204 const std::vector<DDTranslation>&
translations(
void)
const;
205 const std::vector<DDRotation>&
rotations(
void)
const;
219 virtual std::vector<double>
getVec(
const size_t&
which,
const size_t&
offset = 0,
const size_t& nVecs = 1)
const;
229 std::vector<double>
zVec(
void)
const;
230 std::vector<double>
rVec(
void)
const;
231 std::vector<double>
rMinVec(
void)
const;
232 std::vector<double>
rMaxVec(
void)
const;
240 int sides(
void)
const;
243 std::vector<double>
zVec(
void)
const;
244 std::vector<double>
rVec(
void)
const;
245 std::vector<double>
rMinVec(
void)
const;
246 std::vector<double>
rMaxVec(
void)
const;
254 std::vector<double>
xVec(
void)
const;
255 std::vector<double>
yVec(
void)
const;
256 std::vector<double>
zVec(
void)
const;
257 std::vector<double>
zxVec(
void)
const;
258 std::vector<double>
zyVec(
void)
const;
259 std::vector<double>
zscaleVec(
void)
const;
271 double zhalf(
void)
const;
272 double rIn(
void)
const;
273 double rOut(
void)
const;
283 double zhalf(
void)
const;
284 double rIn(
void)
const;
285 double rOut(
void)
const;
288 std::array<double, 3>
lowNorm(
void)
const;
289 std::array<double, 3>
highNorm(
void)
const;
297 double zhalf(
void)
const;
311 double rMin(
void)
const;
312 double rMax(
void)
const;
313 double rTorus(
void)
const;
358 DDOrb(
void) =
delete;
360 double radius(
void)
const;
390 double xHalf(
void)
const;
391 double yHalf(
void)
const;
392 double zHalf(
void)
const;
393 double alpha(
void)
const;
394 double theta(
void)
const;
395 double phi(
void)
const;
411 static DDSolid box(
const DDName& name,
double xHalf,
double yHalf,
double zHalf);
420 const std::vector<double>&
z,
421 const std::vector<double>& rmin,
422 const std::vector<double>& rmax);
429 const DDName& name,
double startPhi,
double deltaPhi,
const std::vector<double>& z,
const std::vector<double>&
r);
439 const std::vector<double>& z,
440 const std::vector<double>& rmin,
441 const std::vector<double>& rmax);
451 const std::vector<double>& z,
452 const std::vector<double>& r);
458 const std::vector<DDSolid>& a,
459 const std::vector<DDTranslation>& t,
460 const std::vector<DDRotation>& r);
500 static DDSolid tubs(
const DDName& name,
double zhalf,
double rIn,
double rOut,
double startPhi,
double deltaPhi);
524 static DDSolid torus(
const DDName& name,
double rMin,
double rMax,
double rTorus,
double startPhi,
double deltaPhi);
542 double zBottomCut = 0.,
543 double zTopCut = 0.);
546 const DDName& name,
double xHalf,
double yHalf,
double zHalf,
double alpha,
double theta,
double phi);
549 const std::vector<double>&
x,
550 const std::vector<double>&
y,
551 const std::vector<double>& z,
552 const std::vector<double>& zx,
553 const std::vector<double>& zy,
554 const std::vector<double>& zscale);
DDPseudoTrap(void)=delete
DDExtrudedPolygon(void)=delete
static DDSolid torus(const DDName &name, double rMin, double rMax, double rTorus, double startPhi, double deltaPhi)
double startPhi(void) const
double cutAtStart(void) const
truncation at begin of the tube-section
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
double xSemiAxis(void) const
double halfZ(void) const
half of the z-Axis
bool cutInside(void) const
true, if truncation is on the inner side of the tube-section
std::vector< double > rVec(void) const
A truncated tube section.
double x1(void) const
Half-length along x of the side at y=-pDy1 of the face at -pDz.
const DDName & name() const
double zHalf(void) const
half of the z-Axis
double y2(void) const
half length along y on +z
double startTheta(void) const
std::vector< double > rMaxVec(void) const
double deltaPhi(void) const
angular span of the tube-section
static DDSolid pseudoTrap(const DDName &name, double pDx1, double pDx2, double pDy1, double pDy2, double pDz, double radius, bool atMinusZ)
double deltaPhi(void) const
std::vector< double > rMaxVec(void) const
Abstract class for DDPolycone and DDPolyhedra. Basically a common member function.
double phi(void) const
Azimuthal angle of the line joining the centres of the faces at -/+pDz.
This is simply a handle on the solid.
virtual std::vector< double > getVec(const size_t &which, const size_t &offset=0, const size_t &nVecs=1) const
note defaults please.
static DDSolid cons(const DDName &name, double zhalf, double rInMinusZ, double rOutMinusZ, double rInPlusZ, double rOutPlusZ, double phiFrom, double deltaPhi)
std::array< double, 3 > highNorm(void) const
static DDSolid polycone(const DDName &name, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polycone (refere to Geant3 or Geant4 documentation)
double rTorus(void) const
std::vector< double > rVec(void) const
double cutAtDelta(void) const
truncation at end of the tube-section
std::vector< double > yVec(void) const
double phiFrom(void) const
Geom::Theta< T > theta() const
auto xyPointsSize(void) const -> std::size_t
double zTopCut(void) const
DDName is used to identify DDD entities uniquely.
double radius(void) const
double rIn(void) const
inner radius
double rOutMinusZ(void) const
double rOutPlusZ(void) const
std::vector< double > zyVec(void) const
DDTranslation translation(void) const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
double ySemiAxis(void) const
DDIntersection(void)=delete
double innerRadius(void) const
const DDI::BooleanSolid & boolean_
A DDSolid represents the shape of a part.
double y1(void) const
half length along y on -z
DDSolid solidB(void) const
static DDSolid orb(const DDName &name, double radius)
Represents a uniquely identifyable rotation matrix.
std::vector< double > xVec(void) const
static DDSolid cuttubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi, double lx, double ly, double lz, double tx, double ty, double tz)
std::array< double, 3 > lowNorm(void) const
double outerRadius(void) const
double x4(void) const
Half-length along x of the side at y=+pDy2 of the face at +pDz.
static DDSolid intersection(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
DDRotation rotation(void) const
bool atMinusZ(void) const
true, if cut-out or rounding is on the -z side
Interface to an Assembly.
double halfZ(void) const
half of the z-Axis
std::vector< double > rMinVec(void) const
DDParallelepiped(void)=delete
double startPhi(void) const
double startPhi(void) const
double xSemiAxis(void) const
static DDSolid sphere(const DDName &name, double innerRadius, double outerRadius, double startPhi, double deltaPhi, double startTheta, double deltaTheta)
double deltaPhi(void) const
Interface to a Trapezoid.
double startPhi(void) const
double y1(void) const
Half-length along y of the face at -pDz.
double rInMinusZ(void) const
static DDSolid assembly(const DDName &name)
Creates an assembly.
DDSolidShape shape(void) const
The type of the solid.
static DDSolid reflection(const DDName &name, const DDSolid &s)
double deltaTheta(void) const
static DDSolid tubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
double ySemiAxis(void) const
static DDSolid truncTubs(const DDName &name, double zHalf, double rIn, double rOut, double startPhi, double deltaPhi, double cutAtStart, double cutAtDelta, bool cutInside)
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)
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
std::vector< double > rMinVec(void) const
double deltaPhi(void) const
DDMultiUnion(void)=delete
DDSolid solidA(void) const
double deltaPhi(void) const
double deltaPhi(void) const
double startPhi(void) const
std::vector< double > zVec(void) const
static DDSolid multiUnionSolid(const DDName &name, const std::vector< DDSolid > &a, const std::vector< DDTranslation > &t, const std::vector< DDRotation > &r)
std::vector< double > zxVec(void) const
static DDSolid ellipticalTube(const DDName &name, double xSemiAxis, double ySemiAxis, double zHeight)
const std::vector< DDTranslation > & translations(void) const
std::vector< double > zVec(void) const
double deltaPhi(void) const
static DDSolid extrudedpolygon(const DDName &name, const std::vector< double > &x, const std::vector< double > &y, const std::vector< double > &z, const std::vector< double > &zx, const std::vector< double > &zy, const std::vector< double > &zscale)
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
static DDSolid ellipsoid(const DDName &name, double xSemiAxis, double ySemiAxis, double zSemiAxis, double zBottomCut=0., double zTopCut=0.)
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...
double startPhi(void) const
angular start of the tube-section
double zBottomCut(void) const
auto zSectionsSize(void) const -> std::size_t
double x2(void) const
Half-length along x of the side at y=+pDy1 of the face at -pDz.
static DDSolid shapeless(const DDName &name)
DDEllipticalTube(void)=delete
DDShapelessSolid(void)=delete
double zHeight(void) const
double zSemiAxis(void) const
double deltaPhi(void) const
double y2(void) const
Half-length along y of the face at +pDz.
DDBooleanSolid(void)=delete
const std::vector< DDSolid > & solids(void) const
DDSubtraction(void)=delete
double rInPlusZ(void) const
DDSolid(void)
Uninitialilzed solid reference-object; for further details on reference-objects see documentation of ...
static DDSolid unionSolid(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
friend std::ostream & operator<<(std::ostream &, const DDSolid &)
double x2(void) const
half length along x on +z
double rOut(void) const
outer radius
double theta(void) const
Polar angle of the line joining the centres of the faces at -/+pDz.
DDMultiUnionSolid(void)=delete
std::vector< double > zscaleVec(void) const
const std::vector< DDRotation > & rotations(void) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
double x3(void) const
Half-length along x of the side at y=-pDy2 of the face at +pDz.
double volume(void) const
Returns the volume of the given solid (does not work with boolean soids !)
std::vector< double > zVec(void) const
double x1(void) const
half length along x on -z
static DDSolid parallelepiped(const DDName &name, double xHalf, double yHalf, double zHalf, double alpha, double theta, double phi)
double startPhi(void) const
double radius(void) const
radius of the cut-out (neg.) or rounding (pos.)