37 os << *(defined.first) <<
" ";
40 solid.
rep().stream(os);
43 os <<
"* solid not defined * ";
47 os <<
"* solid not declared * ";
72 std::vector<double> dummy;
90 solid =
new DDI::Trap(0,0,0,0,0,0,0,0,0,0,0);
126 throw cms::Exception(
"DDException") <<
"DDSolid::DDSolid(DDName,DDSolidShape,std::vector<double>: wrong shape";
135 return rep().volume();
146 return rep().shape();
152 return rep().parameters();
161 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is no DDTrap.\n";
162 ex = ex +
"Use a different solid interface!";
195 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is no DDTruncTubs\n";
196 ex = ex +
"Use a different solid interface!";
222 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is no DDPseudoTrap\n";
223 ex = ex +
"Use a different solid interface!";
248 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDBox.\n";
249 ex = ex +
"Use a different solid interface!";
255 {
return rep().parameters()[0]; }
257 {
return rep().parameters()[1]; }
259 {
return rep().parameters()[2]; }
281 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDShapelessSolid.\n";
282 ex = ex +
"Use a different solid interface!";
294 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDUnion.\n";
295 ex = ex +
"Use a different solid interface!";
307 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDIntersection.\n";
308 ex = ex +
"Use a different solid interface!";
320 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is no DDSubtraction.\n";
321 ex = ex +
"Use a different solid interface!";
335 const size_t& numVecs)
const {
341 std::vector<double> tvec;
343 locErr = std::string(
"Could not find equal sized components of std::vectors in a PolySolid description.");
344 edm::LogError (
"DDSolid") <<
"rep().parameters().size()=" <<
rep().parameters().size() <<
" numVecs=" << numVecs
345 <<
" offset=" << offset << std::endl;
350 for (
size_t i = offset + which;
i <
rep().parameters().size();
i =
i + numVecs) {
362 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDPolycone.\n";
363 ex = ex +
"Use a different solid interface!";
373 std::vector<double> tvec;
387 std::vector<double> tvec;
394 std::vector<double> tvec;
407 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDPolyhedra.\n";
408 ex = ex +
"Use a different solid interface!";
420 std::vector<double> tvec;
434 std::vector<double> tvec;
441 std::vector<double> tvec;
452 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDCons.\n";
453 ex = ex +
"Use a different solid interface!";
477 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDTorus.\n";
478 ex = ex +
"Use a different solid interface!";
499 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDTubs.\n";
500 ex = ex +
"Use a different solid interface!";
560 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDSphere (or sphere section).\n";
561 ex = ex +
"Use a different solid interface!";
583 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDOrb.\n";
584 ex = ex +
"Use a different solid interface!";
596 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDEllipticalTube.\n";
597 ex = ex +
"Use a different solid interface!";
613 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDEllipsoid (or truncated ellipsoid).\n";
614 ex = ex +
"Use a different solid interface!";
634 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDParallelepiped.\n";
635 ex = ex +
"Use a different solid interface!";
657 const std::vector<double> &
z,
658 const std::vector<double> & rmin,
659 const std::vector<double> & rmax)
666 const std::vector<double> &
z,
667 const std::vector<double> &
r)
677 const std::vector<double> &
z,
678 const std::vector<double> & rmin,
679 const std::vector<double> & rmax)
689 const std::vector<double> &
z,
690 const std::vector<double> &
r)
725 double pTheta,
double pPhi,
726 double pDy1,
double pDx1,
double pDx2,
728 double pDy2,
double pDx3,
double pDx4,
732 pDy1, pDx1, pDx2, pAlp1,
733 pDy2, pDx3, pDx4, pAlp2));
760 return DDSolid(name,
new DDI::TruncTubs(zHalf,rIn,rOut,startPhi,deltaPhi,cutAtStart,cutAtDelta,cutInside));
773 rInMinusZ, rOutMinusZ,
790 double rIn,
double rOut,
807 startTheta, deltaTheta));
816 double xSemiAxis,
double ySemiAxis,
double zHeight)
839 double xHalf,
double yHalf,
double zHalf,
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.
const DDI::rep_traits< N, C >::reference rep() const
double xSemiAxis(void) const
double halfZ(void) const
half of the z-Axis
def_type isDefined() const
bool cutInside(void) const
true, if truncation is on the inner side of the tube-section
std::vector< double > rVec(void) const
double x1(void) const
Half-length along x of the side at y=-pDy1 of the face at -pDz.
double zHalf(void) const
half of the z-Axis
const DDTranslation & t() const
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
static DDSolid parallelepiped(const DDName &name, double xHalf, double yHalf, double zHalf, double alpha, double theta, double phi)
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.
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)
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
double phiFrom(void) const
Geom::Theta< T > theta() const
double zTopCut(void) const
const std::string & ns() const
Returns the namespace.
DDName is used to identify DDD entities uniquely.
double radius(void) const
double rIn(void) const
inner radius
const DDSolid & a() const
double rOutMinusZ(void) const
double rOutPlusZ(void) const
const DDRotation & r() const
DDTranslation translation(void) const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
double ySemiAxis(void) const
double innerRadius(void) const
A DDSolid represents the shape of a part.
double y1(void) const
half length along y on -z
DDSolid solidB(void) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
void setParameters(std::vector< double > const &p)
static value_type & instance()
double outerRadius(void) const
DDSolid unreflected(void) const
double x4(void) const
Half-length along x of the side at y=+pDy2 of the face at +pDz.
DDI::BooleanSolid * boolean_
static DDSolid intersection(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
DDRotation rotation(void) const
static const char * name(DDSolidShape s)
bool atMinusZ(void) const
true, if cut-out or rounding is on the -z side
double halfZ(void) const
half of the z-Axis
std::vector< double > rMinVec(void) const
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)
static DDSolid orb(const DDName &name, double radius)
const DDSolid & b() const
DDI::Reflection * reflected_
double deltaPhi(void) const
static DDSolid ellipsoid(const DDName &name, double xSemiAxis, double ySemiAxis, double zSemiAxis, double zBottomCut=0., double zTopCut=0.)
double startPhi(void) const
double y1(void) const
Half-length along y of the face at -pDz.
double rInMinusZ(void) const
DDSolidShape shape(void) const
The type of the solid.
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)
unsigned int offset(bool)
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
DDSolid solidA(void) const
double deltaPhi(void) const
double deltaPhi(void) const
double startPhi(void) const
static DDSolid ellipticalTube(const DDName &name, double xSemiAxis, double ySemiAxis, double zHeight)
std::vector< double > zVec(void) const
double deltaPhi(void) const
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
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
double x2(void) const
Half-length along x of the side at y=+pDy1 of the face at -pDz.
static DDSolid reflection(const DDName &name, const DDSolid &s)
static DDSolid shapeless(const DDName &name)
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.
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)
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.
const std::string & name() const
Returns the name.
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
double radius(void) const
radius of the cut-out (neg.) or rounding (pos.)