41 os << *(defined.first) <<
" ";
44 solid.
rep().stream(os);
47 os <<
"* solid not defined * ";
51 os <<
"* solid not declared * ";
76 std::vector<double> dummy;
94 solid =
new DDI::Trap(0,0,0,0,0,0,0,0,0,0,0);
130 solid =
new DDI::CutTubs(0.,0.,0.,0.,0.,0.,0.,1.,0.,0.,-1.);
133 throw cms::Exception(
"DDException") <<
"DDSolid::DDSolid(DDName,DDSolidShape,std::vector<double>: wrong shape";
142 return rep().volume();
153 return rep().shape();
159 return rep().parameters();
169 ex = ex +
"Use a different solid interface!";
203 ex = ex +
"Use a different solid interface!";
230 ex = ex +
"Use a different solid interface!";
256 ex = ex +
"Use a different solid interface!";
262 {
return rep().parameters()[0]; }
264 {
return rep().parameters()[1]; }
266 {
return rep().parameters()[2]; }
289 ex = ex +
"Use a different solid interface!";
302 ex = ex +
"Use a different solid interface!";
315 ex = ex +
"Use a different solid interface!";
328 ex = ex +
"Use a different solid interface!";
342 const size_t& numVecs)
const {
348 std::vector<double> tvec;
350 locErr =
std::string(
"Could not find equal sized components of std::vectors in a PolySolid description.");
351 edm::LogError (
"DDSolid") <<
"rep().parameters().size()=" <<
rep().parameters().size() <<
" numVecs=" << numVecs
352 <<
" offset=" << offset << std::endl;
357 for (
size_t i = offset + which;
i <
rep().parameters().size();
i =
i + numVecs) {
370 ex = ex +
"Use a different solid interface!";
380 std::vector<double> tvec;
394 std::vector<double> tvec;
401 std::vector<double> tvec;
415 ex = ex +
"Use a different solid interface!";
427 std::vector<double> tvec;
441 std::vector<double> tvec;
448 std::vector<double> tvec;
460 ex = ex +
"Use a different solid interface!";
485 ex = ex +
"Use a different solid interface!";
507 ex = ex +
"Use a different solid interface!";
568 ex = ex +
"Use a different solid interface!";
591 ex = ex +
"Use a different solid interface!";
604 ex = ex +
"Use a different solid interface!";
620 std::string ex =
"Solid [" + s.
name().
ns() +
":" + s.
name().
name() +
"] is not a DDEllipsoid (or truncated ellipsoid).\n";
621 ex = ex +
"Use a different solid interface!";
642 ex = ex +
"Use a different solid interface!";
665 ex = ex +
"Use a different solid interface!";
681 return std::array<double, 3>{{
rep().parameters()[5],
rep().parameters()[6],
rep().parameters()[7]}};
685 return std::array<double, 3>{{
rep().parameters()[8],
rep().parameters()[9],
rep().parameters()[10]}};
692 const std::vector<double> &
z,
693 const std::vector<double> & rmin,
694 const std::vector<double> & rmax)
701 const std::vector<double> &
z,
702 const std::vector<double> &
r)
712 const std::vector<double> &
z,
713 const std::vector<double> & rmin,
714 const std::vector<double> & rmax)
724 const std::vector<double> &
z,
725 const std::vector<double> &
r)
760 double pTheta,
double pPhi,
761 double pDy1,
double pDx1,
double pDx2,
763 double pDy2,
double pDx3,
double pDx4,
767 pDy1, pDx1, pDx2, pAlp1,
768 pDy2, pDx3, pDx4, pAlp2));
795 return DDSolid(name,
new DDI::TruncTubs(zHalf,rIn,rOut,startPhi,deltaPhi,cutAtStart,cutAtDelta,cutInside));
808 rInMinusZ, rOutMinusZ,
825 double rIn,
double rOut,
833 double rIn,
double rOut,
835 double lx,
double ly,
double lz,
836 double tx,
double ty,
double tz)
838 return DDSolid(name,
new DDI::CutTubs(zhalf,rIn,rOut,phiFrom,deltaPhi,lx,ly,lz,tx,ty,tz));
851 startTheta, deltaTheta));
860 double xSemiAxis,
double ySemiAxis,
double zHeight)
883 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)
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
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.
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
void setParameters(std::vector< double > const &p)
static value_type & instance()
double outerRadius(void) const
static const char *const name(DDSolidShape s)
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
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)
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
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
Geom::Phi< T > phi() 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
const DDSolid & solid() const
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 startPhi(void) const
double radius(void) const
radius of the cut-out (neg.) or rounding (pos.)