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(
181VGM::ISolid* BaseVGM::VFactory::ExportBooleanSolid(
182 VGM::IBooleanSolid* solid, VGM::IFactory* factory)
const
198 VGM::ISolid* newSolid = 0;
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;
224VGM::ISolid* BaseVGM::VFactory::ExportMultiUnion(
225 VGM::IMultiUnion* solid, VGM::IFactory* factory)
const
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));
237 VGM::ISolid* newSolid =
244VGM::ISolid* BaseVGM::VFactory::ExportSolid(
245 VGM::ISolid* solid, VGM::IFactory* factory)
const
252 std::cout <<
" Exporting solid: ";
253 if (Debug() > 1) std::cout << solid;
254 std::cout << std::endl;
256 std::cout <<
" " << *solid << std::endl;
261 VGM::IArb8* arb8 =
dynamic_cast<VGM::IArb8*
>(solid);
262 std::vector<VGM::TwoVector> vertices;
264 vertices.push_back(arb8->
Vertex(i));
268 VGM::IBox* box =
dynamic_cast<VGM::IBox*
>(solid);
273 VGM::ICons* cons =
dynamic_cast<VGM::ICons*
>(solid);
280 VGM::ICtubs* ctubs =
dynamic_cast<VGM::ICtubs*
>(solid);
287 VGM::IEllipsoid* ellipsoid =
dynamic_cast<VGM::IEllipsoid*
>(solid);
293 VGM::IEllipticalTube* eltu =
dynamic_cast<VGM::IEllipticalTube*
>(solid);
298 VGM::IExtrudedSolid* xtru =
dynamic_cast<VGM::IExtrudedSolid*
>(solid);
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);
314 VGM::IHype* hype =
dynamic_cast<VGM::IHype*
>(solid);
320 VGM::IPara* para =
dynamic_cast<VGM::IPara*
>(solid);
326 VGM::IParaboloid* paraboloid =
dynamic_cast<VGM::IParaboloid*
>(solid);
332 VGM::IPolycone* polycone =
dynamic_cast<VGM::IPolycone*
>(solid);
338 VGM::IPolyhedra* polyhedra =
dynamic_cast<VGM::IPolyhedra*
>(solid);
345 VGM::ISphere* sphere =
dynamic_cast<VGM::ISphere*
>(solid);
351 VGM::ITessellatedSolid* tessellated =
352 dynamic_cast<VGM::ITessellatedSolid*
>(solid);
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);
365 VGM::ITorus* torus =
dynamic_cast<VGM::ITorus*
>(solid);
371 VGM::ITrap* trap =
dynamic_cast<VGM::ITrap*
>(solid);
379 VGM::ITrd* trd =
dynamic_cast<VGM::ITrd*
>(solid);
385 VGM::ITubs* tubs =
dynamic_cast<VGM::ITubs*
>(solid);
391 VGM::IDisplacedSolid* displaced =
392 dynamic_cast<VGM::IDisplacedSolid*
>(solid);
393 return ExportDisplacedSolid(displaced, factory);
396 VGM::IScaledSolid* scaled =
dynamic_cast<VGM::IScaledSolid*
>(solid);
397 return ExportScaledSolid(scaled, factory);
400 VGM::IBooleanSolid*
boolean =
dynamic_cast<VGM::IBooleanSolid*
>(solid);
401 return ExportBooleanSolid(
boolean, factory);
404 VGM::IMultiUnion* multiUnion =
dynamic_cast<VGM::IMultiUnion*
>(solid);
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(
418 VGM::IFactory* factory)
const
425 std::cout <<
"Exporting volume store: " << std::endl;
428 VolumeMap* volumeMap =
new VolumeMap();
430 for (
unsigned int i = 0; i < Volumes().size(); i++) {
432 VGM::IVolume* volume = Volumes()[i];
435 VGM::ISolid* solid = ExportSolid(volume->
Solid(), factory);
438 VGM::IVolume* newVolume =
442 (*volumeMap)[volume] = newVolume;
448 std::cout <<
"Exporting volume: " << i <<
"th \"" << volume->
Name();
453 <<
" oldVGM=" << volume <<
" newVGM=" << newVolume;
454 std::cout << std::endl;
462VGM::IPlacement* BaseVGM::VFactory::ExportSimplePlacement(
463 VGM::IPlacement* placement, VGM::IFactory* factory,
464 VolumeMap* volumeMap)
const
471 std::cout <<
" simple placement: " << placement->
Name() << std::endl;
475 VGM::IVolume* newVolume = (*volumeMap)[placement->
Volume()];
476 VGM::IVolume* newMother = (*volumeMap)[placement->
Mother()];
481 VGM::IBooleanSolid* booleanSolid =
482 dynamic_cast<VGM::IBooleanSolid*
>(placement->
Volume()->Solid());
483 VGM::IScaledSolid* scaledSolid =
484 dynamic_cast<VGM::IScaledSolid*
>(placement->
Volume()->Solid());
491 placement->
Name(), placement->
CopyNo(), newVolume, newMother, transform);
497VGM::IPlacement* BaseVGM::VFactory::ExportMultiplePlacement(
498 VGM::IPlacement* placement, VGM::IFactory* factory,
499 VolumeMap* volumeMap)
const
504 VGM::IVolume* newVolume = (*volumeMap)[placement->
Volume()];
505 VGM::IVolume* newMother = (*volumeMap)[placement->
Mother()];
516 std::cout <<
" multiple placement - data: " << axis <<
", " << nofItems
517 <<
", " << width <<
", " << offset <<
", " << halfGap
522 VGM::IPlacement* newPlacement =
524 axis, nofItems, width, offset, halfGap);
530VGM::IPlacement* BaseVGM::VFactory::ExportParameterisedPlacement(
531 VGM::IPlacement* placement, VGM::IFactory* factory,
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;
565 VGM::IVolume* newMother = (*volumeMap)[placement->
Mother()];
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(
577 VGM::IFactory* factory, VolumeMap* volumeMap)
const
585 std::cout <<
"Exporting placements:" << std::endl;
589 for (
unsigned int i = 0; i < Volumes().size(); i++) {
591 VGM::IVolume* volume = Volumes()[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++) {
604 VGM::IPlacement* daughter = volume->Daughter(
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);
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;
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;
756 fDummyBoxDimensions = dummyBoxDimensions;
VFactory(const std::string &name, VGM::IMaterialFactory *materialFactory)
virtual bool Export(VGM::IFactory *factory) const
Export geometry to the specified factory.
virtual const VGM::SolidStore & Solids() const
Return the store of solids.
virtual bool SingleMode() const
Return the single mode option.
virtual const VGM::VolumeStore & Volumes() const
Return the store of volumes.
virtual void PrintSolids() const
Print all solids.
virtual VGM::IMaterialFactory * MaterialFactory() const
Return the associated material factory.
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.
virtual std::string Name() const
Return the name of this factory.
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.
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.
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.
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.
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.
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.
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.
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 * SingleSolid() const =0
Return solid (if in one solid conversion mode)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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