75 printf(
"ERROR: Cannot create geometry builder with NULL geometry\n");
94 materials->
Add(material);
123 index = shapes->GetEntriesFast();
124 shapes->AddAtAndExpand(shape, index);
158 if (
box->IsRunTimeShape()) {
174 Warning(
"MakePara",
"parallelepiped %s having alpha=0, theta=0 -> making box instead",
name);
178 para =
new TGeoPara(
name, dx, dy, dz, alpha, theta, phi);
217 Error(
"MakeTube",
"tube %s, Rmin=%g greater than Rmax=%g",
name, rmin, rmax);
303 TGeoCtub *ctub =
new TGeoCtub(
name, rmin, rmax, dz, phi1, phi2, lx, ly, lz, tx, ty, tz);
404 TGeoTrap *trap =
new TGeoTrap(
name, dz, theta, phi,
h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
416 TGeoGtra *gtra =
new TGeoGtra(
name, dz, theta, phi, twist,
h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
467 sname = sname.
Strip();
468 const char *vname = sname.
Data();
470 smname = smname.
Strip();
471 const char *mname = smname.
Data();
477 return amother->
Divide(vname, iaxis, ndiv,
start, step, numed, option);
479 Error(
"Division",
"VOLUME: \"%s\" not defined", mname);
525 for (i = 0; i < nelem; i++) {
541 for (i = 0; i < nelem; i++) {
570 return new TGeoMedium(
name, numed, nmat, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
597 amother =
fGeometry->FindVolumeFast(mother);
600 mname = mname.
Strip();
601 Error(
"Node",
"Mother VOLUME \"%s\" not defined", mname.
Data());
608 Info(
"Node",
"Calling gspos, mother=%s, name=%s, nr=%d, x=%g, y=%g, z=%g, irot=%d, konly=%i", mother,
name, nr,
616 vname = vname.
Strip();
617 Error(
"Node",
"VOLUME: \"%s\" not defined", vname.
Data());
621 Error(
"Node",
"cannot add multiple-volume object %s as node", volume->
GetName());
630 Warning(
"Node",
"volume: %s is defined as single -> ignoring shape parameters", volume->
GetName());
631 Node(
name, nr, mother,
x,
y, z, irot, isOnly, upar);
635 vname = vname.
Strip();
636 Error(
"Node",
"VOLUME: \"%s\" not defined ", vname.
Data());
643 volume =
MakeBox(
name, medium, upar[0], upar[1], upar[2]);
645 volume =
MakeTrd1(
name, medium, upar[0], upar[1], upar[2], upar[3]);
647 volume =
MakeTrd2(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
649 volume =
MakeTrap(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
650 upar[8], upar[9], upar[10]);
652 volume =
MakeGtra(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
653 upar[8], upar[9], upar[10], upar[11]);
655 volume =
MakeTube(
name, medium, upar[0], upar[1], upar[2]);
657 volume =
MakeTubs(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
659 volume =
MakeCone(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
661 volume =
MakeCons(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6]);
665 for (i = 0; i < nz; i++) {
666 ((
TGeoPgon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 4], upar[3 * i + 5], upar[3 * i + 6]);
671 for (i = 0; i < nz; i++) {
672 ((
TGeoPcon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 3], upar[3 * i + 4], upar[3 * i + 5]);
675 volume =
MakeEltu(
name, medium, upar[0], upar[1], upar[2]);
677 volume =
MakeSphere(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
679 volume =
MakeCtub(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
680 upar[8], upar[9], upar[10]);
682 volume =
MakePara(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
684 Error(
"Node",
"cannot create shape %s", sh.
Data());
702 Fatal(
"Node",
"Node %s/%s_%d rotation %i not found", mother,
name, nr, irot);
749 amother =
fGeometry->FindVolumeFast(mother);
752 mname = mname.
Strip();
753 Error(
"Node",
"Mother VOLUME \"%s\" not defined", mname.
Data());
760 Info(
"Node",
"Calling gspos, mother=%s, name=%s, nr=%d, x=%g, y=%g, z=%g, irot=%d, konly=%i", mother,
name, nr,
768 vname = vname.
Strip();
769 Error(
"Node",
"VOLUME: \"%s\" not defined", vname.
Data());
773 Error(
"Node",
"cannot add multiple-volume object %s as node", volume->
GetName());
782 Warning(
"Node",
"volume: %s is defined as single -> ignoring shape parameters", volume->
GetName());
783 Node(
name, nr, mother,
x,
y, z, irot, isOnly, upar);
787 vname = vname.
Strip();
788 Error(
"Node",
"VOLUME: \"%s\" not defined ", vname.
Data());
795 volume =
MakeBox(
name, medium, upar[0], upar[1], upar[2]);
797 volume =
MakeTrd1(
name, medium, upar[0], upar[1], upar[2], upar[3]);
799 volume =
MakeTrd2(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
801 volume =
MakeTrap(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
802 upar[8], upar[9], upar[10]);
804 volume =
MakeGtra(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
805 upar[8], upar[9], upar[10], upar[11]);
807 volume =
MakeTube(
name, medium, upar[0], upar[1], upar[2]);
809 volume =
MakeTubs(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
811 volume =
MakeCone(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
813 volume =
MakeCons(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6]);
817 for (i = 0; i < nz; i++) {
818 ((
TGeoPgon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 4], upar[3 * i + 5], upar[3 * i + 6]);
823 for (i = 0; i < nz; i++) {
824 ((
TGeoPcon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 3], upar[3 * i + 4], upar[3 * i + 5]);
827 volume =
MakeEltu(
name, medium, upar[0], upar[1], upar[2]);
829 volume =
MakeSphere(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
831 volume =
MakeCtub(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7],
832 upar[8], upar[9], upar[10]);
834 volume =
MakePara(
name, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
836 Error(
"Node",
"cannot create shape %s", sh.
Data());
854 Fatal(
"Node",
"Node %s/%s_%d rotation %i not found", mother,
name, nr, irot);
891 Error(
"Volume",
"cannot create volume: %s, medium: %d is unknown",
name, nmed);
896 sname = sname.
Strip();
897 const char *vname = sname.
Data();
904 Error(
"Volume",
"volume multi: %s not created", vname);
912 volume =
MakeBox(vname, medium, upar[0], upar[1], upar[2]);
914 volume =
MakeTrd1(vname, medium, upar[0], upar[1], upar[2], upar[3]);
916 volume =
MakeTrd2(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
918 volume =
MakeTrap(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
921 volume =
MakeGtra(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
922 upar[9], upar[10], upar[11]);
924 volume =
MakeTube(vname, medium, upar[0], upar[1], upar[2]);
926 volume =
MakeTubs(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
928 volume =
MakeCone(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
930 volume =
MakeCons(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6]);
934 for (i = 0; i < nz; i++) {
935 ((
TGeoPgon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 4], upar[3 * i + 5], upar[3 * i + 6]);
938 volume =
MakePcon(vname, medium, upar[0], upar[1], (
Int_t)upar[2]);
940 for (i = 0; i < nz; i++) {
941 ((
TGeoPcon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 3], upar[3 * i + 4], upar[3 * i + 5]);
944 volume =
MakeEltu(vname, medium, upar[0], upar[1], upar[2]);
946 volume =
MakeSphere(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
948 volume =
MakeCtub(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
951 volume =
MakePara(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
953 volume =
MakeTorus(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
957 Error(
"Volume",
"volume: %s not created", vname);
977 Error(
"Volume",
"cannot create volume: %s, medium: %d is unknown",
name, nmed);
982 sname = sname.
Strip();
983 const char *vname = sname.
Data();
990 Error(
"Volume",
"volume multi: %s not created", vname);
998 volume =
MakeBox(vname, medium, upar[0], upar[1], upar[2]);
1000 volume =
MakeTrd1(vname, medium, upar[0], upar[1], upar[2], upar[3]);
1002 volume =
MakeTrd2(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
1004 volume =
MakeTrap(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
1007 volume =
MakeGtra(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
1008 upar[9], upar[10], upar[11]);
1010 volume =
MakeTube(vname, medium, upar[0], upar[1], upar[2]);
1012 volume =
MakeTubs(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
1014 volume =
MakeCone(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
1016 volume =
MakeCons(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6]);
1020 for (i = 0; i < nz; i++) {
1021 ((
TGeoPgon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 4], upar[3 * i + 5], upar[3 * i + 6]);
1024 volume =
MakePcon(vname, medium, upar[0], upar[1], (
Int_t)upar[2]);
1026 for (i = 0; i < nz; i++) {
1027 ((
TGeoPcon *)volume->
GetShape())->DefineSection(i, upar[3 * i + 3], upar[3 * i + 4], upar[3 * i + 5]);
1030 volume =
MakeEltu(vname, medium, upar[0], upar[1], upar[2]);
1032 volume =
MakeSphere(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
1034 volume =
MakeCtub(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5], upar[6], upar[7], upar[8],
1037 volume =
MakePara(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4], upar[5]);
1039 volume =
MakeTorus(vname, medium, upar[0], upar[1], upar[2], upar[3], upar[4]);
1043 Error(
"Volume",
"volume: %s not created", vname);
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
float Float_t
Float 4 bytes (float).
const char Option_t
Option string (const char).
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Utility class for creating geometry objects.These will be associated with the current selected geomet...
TGeoBuilder()
Default constructor.
void Node(const char *name, Int_t nr, const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot, Bool_t isOnly, Float_t *upar, Int_t npar=0)
Create a node called <name_nr> pointing to the volume called <name> as daughter of the volume called ...
TGeoVolume * MakePgon(const char *name, TGeoMedium *medium, Double_t phi, Double_t dphi, Int_t nedges, Int_t nz)
Make in one step a volume pointing to a polygone shape with given medium.
TGeoVolume * MakeGtra(const char *name, TGeoMedium *medium, Double_t dz, Double_t theta, Double_t phi, Double_t twist, Double_t h1, Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2, Double_t tl2, Double_t alpha2)
Make in one step a volume pointing to a twisted trapezoid shape with given medium.
TGeoVolume * MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
Make a TGeoXtru-shaped volume with nz planes.
TGeoVolume * MakePcon(const char *name, TGeoMedium *medium, Double_t phi, Double_t dphi, Int_t nz)
Make in one step a volume pointing to a polycone shape with given medium.
TGeoVolume * MakeTrap(const char *name, TGeoMedium *medium, Double_t dz, Double_t theta, Double_t phi, Double_t h1, Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2, Double_t tl2, Double_t alpha2)
Make in one step a volume pointing to a trapezoid shape with given medium.
Int_t AddShape(TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
TGeoVolume * MakeTorus(const char *name, TGeoMedium *medium, Double_t r, Double_t rmin, Double_t rmax, Double_t phi1=0, Double_t dphi=360)
Make in one step a volume pointing to a torus shape with given medium.
static TGeoBuilder * Instance(TGeoManager *geom)
Return pointer to singleton.
TGeoVolume * MakeEltu(const char *name, TGeoMedium *medium, Double_t a, Double_t b, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakeHype(const char *name, TGeoMedium *medium, Double_t rin, Double_t stin, Double_t rout, Double_t stout, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=nullptr)
Make an TGeoArb8 volume.
TGeoMaterial * Material(const char *name, Double_t a, Double_t z, Double_t dens, Int_t uid, Double_t radlen=0, Double_t intlen=0)
Create material with given A, Z and density, having an unique id.
~TGeoBuilder() override
Destructor.
TGeoVolume * MakeTube(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakePara(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz, Double_t alpha, Double_t theta, Double_t phi)
Make in one step a volume pointing to a parallelepiped shape with given medium.
Int_t AddTransformation(TGeoMatrix *matrix)
Add a matrix to the list. Returns index of the matrix in list.
TGeoVolume * MakeSphere(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t themin=0, Double_t themax=180, Double_t phimin=0, Double_t phimax=360)
Make in one step a volume pointing to a sphere shape with given medium.
TGeoMedium * Medium(const char *name, Int_t numed, Int_t nmat, Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd, Double_t stemax, Double_t deemax, Double_t epsil, Double_t stmin)
Create tracking medium.
TGeoVolume * MakeTubs(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a tube segment shape with given medium.
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
Make in one step a volume pointing to a box shape with given medium.
void Matrix(Int_t index, Double_t theta1, Double_t phi1, Double_t theta2, Double_t phi2, Double_t theta3, Double_t phi3)
Create rotation matrix named 'mat<index>'.
TGeoVolume * Division(const char *name, const char *mother, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")
Create a new volume by dividing an existing one (GEANT3 like).
TGeoVolume * MakeParaboloid(const char *name, TGeoMedium *medium, Double_t rlo, Double_t rhi, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakeTrd1(const char *name, TGeoMedium *medium, Double_t dx1, Double_t dx2, Double_t dy, Double_t dz)
Make in one step a volume pointing to a TGeoTrd1 shape with given medium.
TGeoVolumeAssembly * MakeVolumeAssembly(const char *name)
Make an assembly of volumes.
TGeoVolume * MakeCons(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a cone segment shape with given medium.
Int_t AddMaterial(TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
TGeoManager * fGeometry
! current geometry
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
TGeoVolume * MakeTrd2(const char *name, TGeoMedium *medium, Double_t dx1, Double_t dx2, Double_t dy1, Double_t dy2, Double_t dz)
Make in one step a volume pointing to a TGeoTrd2 shape with given medium.
TGeoVolume * Volume(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t npar=0)
Create a volume in GEANT3 style.
TGeoMaterial * Mixture(const char *name, Float_t *a, Float_t *z, Double_t dens, Int_t nelem, Float_t *wmat, Int_t uid)
Create mixture OR COMPOUND IMAT as composed by THE BASIC nelem materials defined by arrays A,...
TGeoVolume * MakeCone(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Make in one step a volume pointing to a cone shape with given medium.
void RegisterMatrix(TGeoMatrix *matrix)
Register a matrix to the list of matrices.
static TGeoBuilder * fgInstance
! static pointer to singleton
TGeoVolume * MakeCtub(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2, Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz)
Make in one step a volume pointing to a tube segment shape with given medium.
Class describing rotation + translation.
The manager class for any TGeo geometry.
Base class describing materials.
void SetIndex(Int_t index)
Geometrical transformation package.
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
Bool_t IsRegistered() const
Media are used to store properties related to tracking and which are useful only when using geometry ...
void DefineElement(Int_t iel, Double_t a, Double_t z, Double_t weight)
A paraboloid is defined by the revolution surface generated by a parabola and is bounded by two plane...
Class describing rotations.
Base abstract class for all shapes.
Bool_t IsRunTimeShape() const
static Double_t Tolerance()
Class describing translations.
void AddVolume(TGeoVolume *vol)
Add a volume with valid shape to the list of volumes.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMedium * GetMedium() const
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
void SetShape(const TGeoShape *shape)
set the shape associated with this volume
TGeoShape * GetShape() const
virtual TGeoVolume * Divide(const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")
Division a la G3.
A TGeoXtru shape is represented by the extrusion of an arbitrary polygon with fixed outline between s...
void Add(TObject *obj) override
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
Int_t GetEntriesFast() const
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
Bool_t TestBit(UInt_t f) const
virtual const char * GetName() const
Returns name of object.
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
TObject()
TObject constructor.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void ToLower()
Change string to lower-case.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)