59 std::cout << std::endl
60 <<
"============================================================="
62 <<
" Virtual Geometry Model " << std::endl
65 <<
" WWW : https://vmc-project.github.io/vgm-documentation/"
67 <<
"============================================================="
82 fDummyBoxDimensions(
VGM::kDefaultDummyBoxDimensions),
86 fMaterialFactory(materialFactory)
91 static bool printVersion =
true;
117 for (
unsigned int i = 0; i < fSolids.size(); i++) {
122 for (
unsigned int j = 0; j < fVolumes.size(); j++) {
129 delete fMaterialFactory;
137VGM::ISolid* BaseVGM::VFactory::ExportDisplacedSolid(
201 solid->
Name(), solidA, solidB, transform);
213 std::cerr <<
" BaseVGM::VFactory::ExportBooleanSolid:" << std::endl;
214 std::cerr <<
" Unknown Boolean type (solid \"" << solid->
Name() <<
"\")"
216 std::cerr <<
"*** Error: Aborting execution ***" << std::endl;
231 std::vector<VGM::ISolid*> newConstituents;
232 std::vector<VGM::Transform> newTransforms;
233 for (
int i = 0; i < solid->
NofSolids(); ++i) {
234 newConstituents.push_back(ExportSolid(solid->
ConstituentSolid(i), factory));
252 std::cout <<
" Exporting solid: ";
253 if (Debug() > 1) std::cout << solid;
254 std::cout << std::endl;
256 std::cout <<
" " << *solid << std::endl;
262 std::vector<VGM::TwoVector> vertices;
264 vertices.push_back(arb8->
Vertex(i));
299 std::vector<VGM::TwoVector> polygon;
301 polygon.push_back(xtru->
Vertex(i));
302 std::vector<std::vector<double>> zsections;
304 std::vector<double> zsection;
306 zsection.push_back(xtru->
Offset(i).first);
307 zsection.push_back(xtru->
Offset(i).second);
308 zsection.push_back(xtru->
Scale(i));
309 zsections.push_back(zsection);
354 std::vector<std::vector<VGM::ThreeVector>> facets;
355 for (
int i = 0; i < tessellated->
NofFacets(); ++i) {
356 std::vector<VGM::ThreeVector> facet;
357 for (
int j = 0; j < tessellated->
NofVertices(i); ++j) {
358 facet.push_back(tessellated->
Vertex(i, j));
360 facets.push_back(facet);
393 return ExportDisplacedSolid(displaced, factory);
397 return ExportScaledSolid(scaled, factory);
401 return ExportBooleanSolid(
boolean, factory);
405 return ExportMultiUnion(multiUnion, factory);
408 std::cerr <<
" BaseVGM::VFactory::ExportSolid:" << std::endl;
409 std::cerr <<
" Unknown solid type (solid \"" << solid->
Name() <<
"\")"
411 std::cerr <<
"*** Error: Aborting execution ***" << std::endl;
417BaseVGM::VFactory::VolumeMap* BaseVGM::VFactory::ExportVolumeStore(
425 std::cout <<
"Exporting volume store: " << std::endl;
428 VolumeMap* volumeMap =
new VolumeMap();
430 for (
unsigned int i = 0; i < Volumes().size(); i++) {
442 (*volumeMap)[volume] = newVolume;
448 std::cout <<
"Exporting volume: " << i <<
"th \"" << volume->
Name();
453 <<
" oldVGM=" << volume <<
" newVGM=" << newVolume;
454 std::cout << std::endl;
464 VolumeMap* volumeMap)
const
471 std::cout <<
" simple placement: " << placement->
Name() << std::endl;
491 placement->
Name(), placement->
CopyNo(), newVolume, newMother, transform);
499 VolumeMap* volumeMap)
const
516 std::cout <<
" multiple placement - data: " << axis <<
", " << nofItems
517 <<
", " << width <<
", " << offset <<
", " << halfGap
524 axis, nofItems, width, offset, halfGap);
532 VolumeMap* volumeMap)
const
538 std::vector<VGM::Transform> transforms;
539 std::vector<VGM::IVolume*> volumes;
544 std::cout <<
" parameterised placement" << std::endl;
548 std::cout <<
" parameterised placement - transforms: " << std::endl;
550 std::cout <<
" " << tr << std::endl;
556 std::cout <<
" parameterised volumes: "
559 for (
auto& vol : volumes) {
560 std::cout <<
" Volume from element "
561 << counter++ <<
": " <<
" " << vol->Name() << std::endl;
566 std::vector<VGM::IVolume*> newVolumes;
567 for (
auto volume : volumes) {
568 newVolumes.emplace_back((*volumeMap)[volume]);
572 placement->
Name(), newMother, transforms, newVolumes);
576void BaseVGM::VFactory::ExportPlacements(
585 std::cout <<
"Exporting placements:" << std::endl;
589 for (
unsigned int i = 0; i < Volumes().size(); i++) {
596 std::cout <<
"ExportPlacements for " << i <<
"th volume ";
597 if (Debug() > 1) std::cout << volume <<
" ";
598 std::cout << volume->
Name() << std::endl;
602 for (
int id = 0;
id < volume->NofDaughters();
id++) {
609 std::cout <<
" " <<
id <<
"th daughter vol = ";
610 if (Debug() > 1) std::cout << daughter->
Volume() <<
" ";
618 std::cout <<
"Exporting placement: ";
619 if (Debug() > 1) std::cout << daughter;
620 std::cout << std::endl;
622 std::cout <<
" " << *daughter << std::endl;
627 ExportSimplePlacement(daughter, factory, volumeMap);
630 ExportMultiplePlacement(daughter, factory, volumeMap);
633 ExportParameterisedPlacement(daughter, factory, volumeMap);
636 std::cout << std::endl;
637 std::cerr <<
" BaseVGM::VFactory::ExportPlacements:" << std::endl;
638 std::cerr <<
" Unknown placement type (placement \""
639 << daughter->
Name() <<
"\")" << std::endl;
640 std::cerr <<
"*** Error: Aborting execution ***" << std::endl;
650 VGM::IVolume* topVolume = (*volumeMap)[Top()->Volume()];
653 Top()->Name(), Top()->CopyNo(), topVolume, 0,
Identity());
663 for (
int i = 0; i < 7; i++) transform[i] = 0;
687 VolumeMap* volumeMap = ExportVolumeStore(factory);
688 ExportPlacements(factory, volumeMap);
696 if (!SingleSolid()) {
697 std::cerr <<
"++ Warning: ++ " << std::endl;
698 std::cerr <<
" BaseVGM::Export:" << std::endl;
699 std::cerr <<
" A solid must be created/imported first." << std::endl;
705 VGM::ISolid* solid = ExportSolid(SingleSolid(), factory);
718 std::cout << Name() <<
" factory solids store: " << std::endl;
722 for (
unsigned i = 0; i < solids.size(); i++) {
723 std::cout <<
" " << i <<
"th solid: " << *solids[i] << std::endl;
733 std::cout << Name() <<
" factory volumes store: " << std::endl;
737 for (
unsigned i = 0; i < volumes.size(); i++) {
738 std::cout <<
" " << i <<
"th: " << *volumes[i] << std::endl;
749 MaterialFactory()->SetDebug(debug);
756 fDummyBoxDimensions = dummyBoxDimensions;
The abstract base class to geometry factory.
virtual bool Export(VGM::IFactory *factory) const
Export geometry to the specified factory.
virtual void PrintSolids() const
Print all solids.
virtual void PrintVolumes() const
Print all volumes.
virtual void SetDebug(int debug)
Set the debug level.
virtual void SetIgnore(bool ignore, double dummyBoxDimensions=VGM::kDefaultDummyBoxDimensions)
Set ignoring of unsupported features.
The VGM interface to Arb8 solids.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual int NofVertices() const =0
Return the number of vertices.
virtual TwoVector Vertex(int index) const =0
Return the index-th vertex.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to Boolean solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual ISolid * ConstituentSolidB() const =0
Return the second constituent solid.
virtual bool ToBeReflected() const =0
Return true if the solid has to be first reflected before being placed.
virtual ISolid * ConstituentSolidA() const =0
Return the first constituent solid.
virtual BooleanType BoolType() const =0
Return the Boolean type of this solid.
virtual Transform Displacement() const =0
Return the 3D displacement of the second constituent solid with respect to the first one.
The VGM interface to box solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double YHalfLength() const =0
Return the half-length along the y axis in mm.
virtual double XHalfLength() const =0
Return the half-length along the x axis in mm.
The VGM interface to cons solids.
virtual double DeltaPhi() const =0
Return the opening phi angle of the segment in deg.
virtual double OuterRadiusPlusZ() const =0
Return the outer radius at -z in mm.
virtual double OuterRadiusMinusZ() const =0
Return the outer radius at -z in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double InnerRadiusMinusZ() const =0
Return the innner radius at -z in mm.
virtual double InnerRadiusPlusZ() const =0
Return the innner radius at +z in mm.
virtual double StartPhi() const =0
Return the starting phi angle of the segment in deg.
The VGM interface to cut tubs solids.
virtual double OuterRadius() const =0
Return the outside radius in mm.
virtual double NxHigh() const =0
X-component of the normal unit vector to the cut plane in +z.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in m.
virtual double DeltaPhi() const =0
Return the opening angle of the segment in deg.
virtual double NyLow() const =0
Y-component of the normal unit vector to the cut plane in -z.
virtual double NzLow() const =0
Z-component of the normal unit vector to the cut plane in -z.
virtual double NzHigh() const =0
Z-component of the normal unit vector to the cut plane in +z.
virtual std::string Name() const =0
Return the name of this solid.
virtual double InnerRadius() const =0
Return the inside radius in mm.
virtual double StartPhi() const =0
Return the starting angle of the segment in deg.
virtual double NxLow() const =0
X-component of the normal unit vector to the cut plane in -z.
virtual double NyHigh() const =0
Y-component of the normal unit vector to the cut plane in +z.
The VGM interface to displaced solids.
virtual ISolid * ConstituentSolid() const =0
Return the constituent solid.
virtual Transform Displacement() const =0
Return the 3D displacement of the constituent solid.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to ellipsoid solids.
virtual double ZBottomCut() const =0
Return the z bottom cut in mm.
virtual double ZSemiAxis() const =0
Return the semi-axis of the ellipse along z in mm.
virtual double ZTopCut() const =0
Return the z top cut in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double XSemiAxis() const =0
Return the semi-axis of the ellipse along x in mm.
virtual double YSemiAxis() const =0
Return the semi-axis of the ellipse along y in mm.
The VGM interface to elliptical tube solids.
virtual double Dx() const =0
Return the semi-axis of the ellipse along x in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double Dy() const =0
Return the semi-axis of the ellipse along y in mm.
The VGM interface to extruded solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual TwoVector Offset(int iz) const =0
Return the polygon offset in iz-th side.
virtual int NofZSections() const =0
Return the number of planes perpendicular to the z axis.
virtual double ZPosition(int iz) const =0
Return the z position of the iz-th plane in mm.
virtual int NofVertices() const =0
Return the number of vertices of outline polygon.
virtual TwoVector Vertex(int index) const =0
Return the index-th vertex of outline polygon.
virtual double Scale(int iz) const =0
Return the polygon scale in iz-th side.
The VGM interface to geometry factory providing functions for geometry construction and conversions.
virtual IVolume * CreateVolume(const std::string &name, VGM::ISolid *solid, const std::string &mediumName)=0
Create the volume.
virtual ISolid * CreateTessellatedSolid(const std::string &name, std::vector< std::vector< VGM::ThreeVector > > facets)=0
Create tessellated solid = solid composed from triangular and rectangular facets.
virtual IMaterialFactory * MaterialFactory() const =0
Return the associated material factory.
virtual IPlacement * CreateMultiplePlacement(const std::string &name, VGM::IVolume *volume, VGM::IVolume *motherVolume, VGM::Axis axis, int nofItems, double width, double offset, double halfGap)=0
Create the multiple volume placement.
virtual ISolid * CreateScaledSolid(const std::string &name, VGM::ISolid *solid, const VGM::Transform &transform)=0
Create scaled solid.
virtual ISolid * CreateExtrudedSolid(const std::string &name, std::vector< TwoVector > polygon, std::vector< std::vector< double > > zsections)=0
Create the extruded solid.
virtual ISolid * CreateEllipsoid(const std::string &name, double dx, double dy, double dz, double zBottomCut, double zTopCut)=0
Create the ellipsoid solid.
virtual void SetSolid(VGM::ISolid *solid)=0
Set solid (in single mode)
virtual ISolid * CreateParaboloid(const std::string &name, double r1, double r2, double hz)=0
Create the paraboloid solid.
virtual IPlacement * CreatePlacement(const std::string &name, int copyNo, VGM::IVolume *volume, VGM::IVolume *motherVolume, const VGM::Transform &transform)=0
Create the simple volume placement.
virtual ISolid * CreateTorus(const std::string &name, double rin, double rout, double rax, double sphi, double dphi)=0
Create the torus solid = phi segment of a torus.
virtual ISolid * CreateCtubs(const std::string &name, double rin, double rout, double hz, double sphi, double dphi, double nxlow, double nylow, double nzlow, double nxhigh, double nyhigh, double nzhigh)=0
Create the cut tubs solid = phi segment of a tube cut with two planes.
virtual ISolid * CreateSphere(const std::string &name, double rin, double rout, double sphi, double dphi, double stheta, double dtheta)=0
Create the sphere solid = phi segment of a spherical shell.
virtual ISolid * CreatePolycone(const std::string &name, double sphi, double dphi, int nofZplanes, double *z, double *rin, double *rout)=0
Create the polycone solid = phi segment of a polycone.
virtual ISolid * CreateSubtractionSolid(const std::string &name, VGM::ISolid *solidA, VGM::ISolid *solidB, const VGM::Transform &transform)=0
Create the subtraction of two solids.
virtual ISolid * CreatePara(const std::string &name, double hx, double hy, double hz, double alpha, double theta, double phi)=0
Create the para solid = parallelepiped.
virtual ISolid * CreateTubs(const std::string &name, double rin, double rout, double hz, double sphi, double dphi)=0
Create the trd solid = phi segment of a tube.
virtual ISolid * CreateIntersectionSolid(const std::string &name, VGM::ISolid *solidA, VGM::ISolid *solidB, const VGM::Transform &transform)=0
Create the intersection of two solids.
virtual ISolid * CreatePolyhedra(const std::string &name, double sphi, double dphi, int nofSides, int nofZplanes, double *z, double *rin, double *rout)=0
Create the polyhedra solid = phi segment of a polyhedra (polygone)
virtual VGM::IPlacement * CreateParameterisedPlacement(const std::string &name, VGM::IVolume *motherVolume, const std::vector< VGM::Transform > &transforms, const std::vector< VGM::IVolume * > &volumes)=0
Create the parameterised volume placement.
virtual ISolid * CreateTrd(const std::string &name, double hx1, double hx2, double hy1, double hy2, double hz)=0
Create the trd solid = a trapezoid with the x and y dimensions varying along z.
virtual void SetSingleMode(bool value)=0
Set single mode option.
virtual ISolid * CreateTrap(const std::string &name, double hz, double theta, double phi, double dy1, double dx1, double dx2, double alpha1, double dy2, double dx3, double dx4, double alpha2)=0
Create the trap solid = general trapezoid ( Note that of the 11 parameters described below,...
virtual ISolid * CreateUnionSolid(const std::string &name, VGM::ISolid *solidA, VGM::ISolid *solidB, const VGM::Transform &transform)=0
Create the union of two solids.
virtual ISolid * CreateMultiUnion(const std::string &name, std::vector< VGM::ISolid * > constituents, std::vector< VGM::Transform > transforms)=0
Create the multi union of solids.
virtual ISolid * CreateDisplacedSolid(const std::string &name, VGM::ISolid *solid, const VGM::Transform &transform)=0
Create displaced solid.
virtual ISolid * CreateBox(const std::string &name, double hx, double hy, double hz)=0
Create the box solid.
virtual ISolid * CreateEllipticalTube(const std::string &name, double dx, double dy, double hz)=0
Create the elliptical tube solid.
virtual ISolid * CreateArb8(const std::string &name, double hz, std::vector< VGM::TwoVector > vertices)=0
Create the arbitrary trapezoid with 8 vertices standing on two paralel planes perpendicular to Z axis...
virtual ISolid * CreateHype(const std::string &name, double r1, double r2, double stereo1, double stereo2, double hz)=0
Create the hyperboloid solid.
virtual ISolid * CreateCons(const std::string &name, double rin1, double rout1, double rin2, double rout2, double hz, double sphi, double dphi)=0
Create the cons solid = phi segment of a conical tube.
The VGM interface to hyperboloid solids.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double OuterStereoAngle() const =0
Return the inner stereo angle.
virtual double OuterRadius() const =0
Return the outer radius in mm.
virtual double InnerStereoAngle() const =0
Return the inner stereo angle.
virtual std::string Name() const =0
Return the name of this solid.
virtual double InnerRadius() const =0
Return the inner radius in mm.
The VGM interface to material factory providing functions for material conversions.
The VGM interface to Boolean solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual Transform Transformation(int index) const =0
Return the displacement of the ith constituent solid.
virtual int NofSolids() const =0
Return the number of constituent solids.
virtual ISolid * ConstituentSolid(int index) const =0
Return the i-th constituent solid.
The VGM interface to para solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual double Alpha() const =0
Return angle formed by the y axis and by the plane joining the centre of the faces parallel to the z-...
virtual double Theta() const =0
Return polar angle of the line joining the centres of the faces at -hz and +hz in deg.
virtual double YHalfLength() const =0
Return half-length along the y axis in mm.
virtual double ZHalfLength() const =0
Return half-length along the z axis in mm.
virtual double XHalfLength() const =0
Return half-length along the x axis in mm.
virtual double Phi() const =0
Return azimuthal angle of the line joining the centres of the faces at -hz and +hz in deg.
The VGM interface to paraboloid solids.
virtual double RadiusMinusZ() const =0
Return the radius at -z in mm.
virtual double RadiusPlusZ() const =0
Return the radius at +z in mm.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to positions of volumes.
virtual PlacementType Type() const =0
Return the type of this placement.
virtual Transform Transformation() const =0
Return the 3D transformation (if simple placement)
virtual bool MultiplePlacementData(VGM::Axis &axis, int &nofItems, double &width, double &offset, double &halfGap) const =0
Fill the multiple placement data if relevant and return true; return false if not multiple placement.
virtual bool ParameterisedPlacementData(std::vector< VGM::Transform > &transforms, std::vector< VGM::IVolume * > &volumes) const =0
Fill the parameterised placement data if relevant and return true; return false if not parameterised ...
virtual int CopyNo() const =0
Return the copy number of this placement.
virtual std::string Name() const =0
Return the name of this placement.
virtual IVolume * Volume() const =0
Return the associated volume.
virtual IVolume * Mother() const =0
Return the associated mother volume.
The VGM interface to polycone solids.
virtual double StartPhi() const =0
Return starting phi angle of the segment in deg.
virtual int NofZPlanes() const =0
Return number of planes perpendicular to the z axis.
virtual double * ZValues() const =0
Return the array of z positions of the planes in mm.
virtual double DeltaPhi() const =0
Return opening phi angle of the segment in deg.
virtual double * InnerRadiusValues() const =0
Return the array of inner radius of the planes in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double * OuterRadiusValues() const =0
Return the array of outer radius of the planes in mm.
The VGM interface to polyhedra solids.
virtual std::string Name() const =0
Return the name of this solid.
virtual double * OuterRadiusValues() const =0
Return the array of outer radius of the planes in mm.
virtual int NofSides() const =0
Return number of sides of the cross section between the given phi limits.
virtual double StartPhi() const =0
Return starting phi angle of the segment in deg.
virtual double * InnerRadiusValues() const =0
Return the array of innner radius of the planes in mm.
virtual double * ZValues() const =0
Return the array of z positions of the planes in mm.
virtual double DeltaPhi() const =0
Return opening phi angle of the segment in deg.
virtual int NofZPlanes() const =0
Return number of planes perpendicular to the z axis.
The VGM interface to Boolean solids.
virtual bool ToBeReflected() const =0
Return true if the solid has to be first reflected before being placed.
virtual Transform Scale() const =0
Return the 3D scale.
virtual ISolid * ConstituentSolid() const =0
Return the constituent solid.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to solids.
virtual SolidType Type() const =0
Return the type of this solid.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to sphere solids.
virtual double StartPhi() const =0
Return the starting azimuthal angle of the segment in deg.
virtual double DeltaPhi() const =0
Return the opening azimuthal angle of the segment in deg.
virtual double StartTheta() const =0
Return the starting polar angle of the segment in deg.
virtual double DeltaTheta() const =0
Return the opening polar angle of the segment in deg.
virtual std::string Name() const =0
Return the name of this solid.
virtual double OuterRadius() const =0
Return the outside radius of the shell in mm.
virtual double InnerRadius() const =0
Return the inside radius of the shell in mm.
The VGM interface to extruded solids.
virtual int NofVertices(int ifacet) const =0
Return the number of vertices in the the ifacet-th facet.
virtual ThreeVector Vertex(int ifacet, int index) const =0
Return the index-th vertex in the ifacet-th facet.
virtual std::string Name() const =0
Return the name of this solid.
virtual int NofFacets() const =0
Return the number of facets.
The VGM interface to torus solids.
virtual double OuterRadius() const =0
Return the outside radius of the torus in mm.
virtual double StartPhi() const =0
Return the starting phi angle of the segment in deg (with 0 being the +x axis)
virtual double AxialRadius() const =0
Return the axial (swept) radius of the torus in mm.
virtual double DeltaPhi() const =0
Return the opening phi angle of the segment in deg.
virtual double InnerRadius() const =0
Return the inside radius of the torus in mm.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to trap solids.
virtual double Phi() const =0
Return the azimuthal angle of the line joining the centres of the faces at -hz and +hz in deg.
virtual double XHalfLengthPlusZMinusY() const =0
Return the half-length along x of the side at -hy of the face at +hz in m.
virtual double AlphaPlusZ() const =0
Return the angle with respect to the y axis from the centre of the side at -hy to the centre at +hy o...
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double YHalfLengthMinusZ() const =0
Return the half-length along y of the face at -hz in mm.
virtual double XHalfLengthMinusZMinusY() const =0
Return the half-length along x of the side at -hy of the face at -hz in mm.
virtual double YHalfLengthPlusZ() const =0
Return the half-length along y of the face at +hz in m.
virtual double XHalfLengthPlusZPlusY() const =0
Return the half-length along x of the side at +hy of the face at +hz in m.
virtual double Theta() const =0
Return the polar angle of the line joining the centres of the faces at -hz and +hz in deg.
virtual double AlphaMinusZ() const =0
Return the angle with respect to the y axis from the centre of the side at -hy to the centre at +hy o...
virtual double XHalfLengthMinusZPlusY() const =0
Return the half-length along x of the side at +hy of the face at +hz in mm.
virtual std::string Name() const =0
Return the name of this solid.
The VGM interface to trd solids.
virtual double XHalfLengthPlusZ() const =0
Return the half-length along x at the surface positioned at +hz in mm.
virtual double YHalfLengthPlusZ() const =0
Return thehalf-length along y at the surface positioned at +hz in mm.
virtual double XHalfLengthMinusZ() const =0
Return the half-length along x at the surface positioned at -hz in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in mm.
virtual double YHalfLengthMinusZ() const =0
Return the half-length along y at the surface positioned at -hz in mm.
The VGM interface to tubs solids.
virtual double ZHalfLength() const =0
Return the half-length along the z axis in m.
virtual double StartPhi() const =0
Return the starting angle of the segment in deg.
virtual double DeltaPhi() const =0
Return the opening angle of the segment in deg.
virtual double InnerRadius() const =0
Return the inside radius in mm.
virtual std::string Name() const =0
Return the name of this solid.
virtual double OuterRadius() const =0
Return the outside radius in mm.
The VGM interface to volumes.
virtual ISolid * Solid() const =0
Return the associated solid.
virtual std::string MaterialName() const =0
Return the name of the associated material.
virtual std::string Name() const =0
Return the name of this volume.
virtual std::string MediumName() const =0
Return the name of the associated medium.
#define VGM_RELEASE
BaseVGM version.
void DebugInfo()
Debug printing.
VGM::Transform Identity()
std::vector< double > Transform
std::vector< IVolume * > VolumeStore
std::vector< ISolid * > SolidStore