419 dummyMaterial->
SetName(
"dummy");
482 Warning(
"Ctor",
"volume %s has invalid shape",
name);
485 Fatal(
"ctor",
"Shape of volume %s invalid. Aborting!",
fName.
Data());
547 title.TString::Format(
"Assembly with %d daughter(s)", daughter->
GetNdaughters());
550 s1.ReplaceAll(
"TGeoPattern",
"");
551 title.TString::Format(
"Volume having %s shape divided in %d %s slices", daughter->
GetShape()->
ClassName(),
555 title.TString::Format(
"Volume with %s shape having %d daughter(s)", daughter->
GetShape()->
ClassName(),
578 for (i = 0; i < nd; i++)
635 for (
Int_t i = 0; i < novlps; i++) {
644 Info(
"CheckOverlaps",
"Number of illegal overlaps/extrusions for volume %s: %d\n",
GetName(), novlps);
679 Error(
"CheckShapes",
"volume %s has run-time shape",
GetName());
690 for (
Int_t i = 0; i < nd; i++) {
694 printf(
"Daughter %i of volume %s - NO NAME!!!\n", i,
GetName());
704 Fatal(
"CheckShapes",
"Cannot make copy node for %s", node->
GetName());
709 Error(
"CheckShapes",
"cannot resolve runtime shape for volume %s/%s\n",
GetName(), old_vol->
GetName());
732 static Int_t maxlevel = 0;
733 static Int_t nlev = 0;
735 if (option < 0 || option > 3)
756 case 3:
return maxlevel;
769 for (
Int_t i = 0; i < nd; i++) {
786 for (
Int_t i = 0; i < nd; i++)
802 for (
Int_t i = 0; i < nd; i++) {
809 while ((browser = (
TBrowser *)next())) {
810 for (
Int_t i = 0; i < nd + 1; i++) {
886 if (!
f ||
f->IsZombie()) {
887 printf(
"Error: TGeoVolume::Import : Cannot open file %s\n",
filename);
893 TIter next(
f->GetListOfKeys());
895 while ((key = (
TKey *)next())) {
932 Info(
"Export",
"Exporting volume %s as C++ code",
GetName());
938 Info(
"Export",
"Exporting %s as gdml code - not implemented yet",
GetName());
943 Info(
"Export",
"Exporting %s as root file.",
GetName());
948 if (!
f ||
f->IsZombie()) {
949 Error(
"Export",
"Cannot open file");
978 if (matrix ==
nullptr)
983 Error(
"AddNode",
"Volume is NULL");
987 Error(
"AddNode",
"Won't add node with invalid shape");
988 printf(
"### invalid volume was : %s\n", vol->
GetName());
996 Error(
"AddNode",
"Cannot add node %s_%i into divided volume %s", vol->
GetName(), copy_no,
GetName());
1021 Error(
"AddNodeOffset",
"invalid volume");
1025 Error(
"AddNode",
"Won't add node with invalid shape");
1026 printf(
"### invalid volume was : %s\n", vol->
GetName());
1047 Error(
"AddNodeOverlap",
"Volume is NULL");
1051 Error(
"AddNodeOverlap",
"Won't add node with invalid shape");
1052 printf(
"### invalid volume was : %s\n", vol->
GetName());
1057 "Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",
1063 if (matrix ==
nullptr)
1072 Error(
"AddNodeOverlap",
"Cannot add node %s_%i into divided volume %s", vol->
GetName(), copy_no,
GetName());
1081 Warning(
"AddNode",
"Volume %s : added node %s with same name",
GetName(),
name.Data());
1108 Fatal(
"Divide",
"volume %s already divided",
GetName());
1120 if ((start - xlo) < -1E-3)
1124 xhi = start + range;
1132 if (ndiv <= 0 || opt.
Contains(
"s")) {
1134 Fatal(
"Divide",
"invalid division type for volume %s : ndiv=%i, step=%g",
GetName(), ndiv, step);
1138 if ((xlo - start) > 1E-3 || (xhi - start) < -1E-3) {
1139 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)", start,
1146 ndiv =
Int_t((range + 0.1 * step) / step);
1147 Double_t ddx = range - ndiv * step;
1150 Warning(
"Divide",
"division of volume %s on %s axis (ndiv=%d) will be centered in the full range",
GetName(),
1152 start = xlo + 0.5 * ddx;
1154 if (step <= 0 || opt.
Contains(
"n")) {
1156 if ((xlo - start) > 1E-3 || (xhi - start) < -1E-3) {
1157 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)", start,
1164 step = range / ndiv;
1168 Double_t end = start + ndiv * step;
1169 if (((start - xlo) < -1E-3) || ((end - xhi) > 1E-3)) {
1178 Fatal(
"Divide",
"invalid medium number %d for division volume %s", numed, divname);
1228 Info(
"DrawOnly",
"Volume assemblies do not support this option.");
1249 printf(
"Optimizing volume %s ...\n",
GetName());
1308 for (
Int_t i = 0; i < nd; i++) {
1323 for (
Int_t i = 0; i < nd; i++) {
1337 if (old_vol !=
this)
1341 TH2F *hist =
p->LegoPlot(ntheta, themin, themax, nphi, phimin, phimax, rmin, rmax,
option);
1342 hist->
Draw(
"lego1sph");
1375 for (i = 0; i < nd; i++) {
1385 for (i = 0; i < nd; i++)
1397 if (old_vol !=
this)
1415 if (old_vol !=
this)
1464 out <<
"void " << fname <<
"() {" << std::endl;
1465 out <<
" gSystem->Load(\"libGeom\");" << std::endl;
1467 out << std::setprecision(prec);
1469 out <<
"}" << std::endl;
1554 out <<
" Double_t dx, dy, dz;" << std::endl;
1555 out <<
" Double_t dx1, dx2, dy1, dy2;" << std::endl;
1556 out <<
" Double_t vert[20], par[20];" << std::endl;
1557 out <<
" Double_t theta, phi, h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2;" << std::endl;
1558 out <<
" Double_t twist;" << std::endl;
1559 out <<
" Double_t origin[3];" << std::endl;
1560 out <<
" Double_t rmin, rmax, rmin1, rmax1, rmin2, rmax2;" << std::endl;
1561 out <<
" Double_t r, rlo, rhi;" << std::endl;
1562 out <<
" Double_t a, b;" << std::endl;
1563 out <<
" Double_t point[3], norm[3];" << std::endl;
1564 out <<
" Double_t rin, stin, rout, stout;" << std::endl;
1565 out <<
" Double_t thx, phx, thy, phy, thz, phz;" << std::endl;
1566 out <<
" Double_t alpha, theta1, theta2, phi1, phi2, dphi;" << std::endl;
1567 out <<
" Double_t tr[3], rot[9];" << std::endl;
1568 out <<
" Double_t z, density, radl, absl, w;" << std::endl;
1569 out <<
" Double_t lx, ly, lz, tx, ty, tz;" << std::endl;
1570 out <<
" Double_t xvert[50], yvert[50];" << std::endl;
1571 out <<
" Double_t zsect, x0, y0, scale0;" << std::endl;
1572 out <<
" Int_t nel, numed, nz, nedges, nvert;" << std::endl;
1573 out <<
" TGeoBoolNode *pBoolNode = nullptr;" << std::endl << std::endl;
1575 out <<
" // MATERIALS, MIXTURES AND TRACKING MEDIA" << std::endl;
1578 out << std::endl <<
" // TRANSFORMATION MATRICES" << std::endl;
1582 out << std::endl <<
" // SET TOP VOLUME OF GEOMETRY" << std::endl;
1583 out <<
" gGeoManager->SetTopVolume(" <<
GetPointerName() <<
");" << std::endl;
1585 out << std::endl <<
" // SHAPES, VOLUMES AND GEOMETRICAL HIERARCHY" << std::endl;
1587 out << std::endl <<
" // CLOSE GEOMETRY" << std::endl;
1588 out <<
" gGeoManager->CloseGeometry();" << std::endl;
1591 out <<
" gGeoManager->GetTopVolume()->Draw();" << std::endl;
1593 out <<
" gGeoManager->GetTopVolume()->Raytrace();" << std::endl;
1598 if (!strcmp(
option,
"s")) {
1604 out <<
" // Volume: " <<
GetName() << std::endl;
1609 out <<
");" << std::endl;
1611 out <<
" // Assembly: " <<
GetName() << std::endl;
1613 <<
");" << std::endl;
1617 out <<
" " <<
GetPointerName() <<
"->SetVisibility(kFALSE);" << std::endl;
1619 out <<
" " <<
GetPointerName() <<
"->VisibleDaughters(kFALSE);" << std::endl;
1621 out <<
" " <<
GetPointerName() <<
"->SetVisContainers(kTRUE);" << std::endl;
1623 out <<
" " <<
GetPointerName() <<
"->SetVisLeaves(kTRUE);" << std::endl;
1627 if (!strcmp(
option,
"m")) {
1630 for (i = 0; i < nd; i++) {
1637 if (!strcmp(
option,
"x")) {
1643 for (i = 0; i < nd; i++) {
1653 if (!strcmp(
option,
"d")) {
1668 out <<
");" << std::endl;
1672 for (i = 0; i < nd; i++) {
1685 out <<
");" << std::endl;
1688 for (i = 0; i < nd; i++) {
1732 for (
Int_t i = 0; i < ncheck; i++) {
1734 if (current == node)
1735 return check_list[i];
1749 for (
Int_t i = 0; i < nd; i++) {
1751 if (current == node)
1780 for (
id = 0;
id < nd;
id++) {
1784 if (ncyl > (nd / 2))
1844 for (i = 0; i < nbits; i++)
1846 for (i = 14; i < 24; i++)
1852 for (i = 0; i < nbits; i++)
1893 for (
Int_t i = 0; i < nd; i++) {
1897 Fatal(
"CloneNodesAndConnect",
"cannot make copy node");
1919 for (
Int_t i = 0; i < nd; i++)
1960 static TMap map(100);
1962 Error(
"MakeReflectedVolume",
"Geometry must be closed.");
1967 if (newname && newname[0])
1974 Fatal(
"MakeReflectedVolume",
"Cannot clone volume %s\n",
GetName());
1978 if (newname && newname[0])
1999 for (
Int_t i = 0; i < nd; i++) {
2032 Fatal(
"MakeReflectedVolume",
"Could not copy finder for volume %s",
GetName());
2039 for (
Int_t i = 0; i < nd; i++) {
2070 Error(
"SetShape",
"No shape");
2083 Error(
"SortNodes",
"Bounding box not valid");
2098 for (
id = 0;
id < nd;
id++) {
2107 for (
id = 0;
id < nd;
id++) {
2118 for (
id = 0;
id < nd;
id++) {
2128 printf(
" volume %s : number of nodes does not match!!!\n",
GetName());
2206 Int_t count = 28 + 2 + 6 + 4 + 0;
2208 count += 7 *
sizeof(
char *);
2218 while ((node = (
TGeoNode *)next()))
2230 Error(
"FindOverlaps",
"Bounding box not valid");
2240 for (inode = 0; inode < nd; inode++) {
2276 Error(
"ReplaceNode",
"Cannot replace node %s since it is an assembly", nodeorig->
GetName());
2280 if (newshape && !nodeorig->
IsOffset())
2299 Fatal(
"ReplaceNode",
"Cannot make copy node for %s", nodeorig->
GetName());
2305 if (newpos && !nodeorig->
IsOffset()) {
2332 for (i = 0; i <
len; i++) {
2356 while ((browser = (
TBrowser *)next())) {
2432 for (i = 0; i < nd; i++) {
2441 for (i = 0; i < nd; i++) {
2467 Error(
"Voxelize",
"Bounding box not valid");
2524 for (i = 0; i < nd; i++) {
2526 weight += daughter->
WeightA();
2536 weight += 0.001 * capacity * density;
2601 Fatal(
"AddVolume",
"Cannot divide volume %s", vol->
GetName());
2611 for (
Int_t id = 0;
id < nd;
id++) {
2632 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2653 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2682 Error(
"Divide",
"volume %s already divided",
GetName());
2690 Error(
"Divide",
"Invalid medium number %d for division volume %s", numed, divname);
2715 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2759 Fatal(
"MakeCopyVolume",
"Cannot divide volume %s", vol->
GetName());
2779 for (i = 0; i < nd; i++) {
2783 Fatal(
"MakeCopyNode",
"cannot make copy node for daughter %d of %s", i,
GetName());
2800 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2814 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2828 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2842 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2856 for (
Int_t ivo = 0; ivo < nvolumes; ivo++) {
2886 std::lock_guard<std::mutex> guard(
fMutex);
2888 std::vector<ThreadData_t *>::iterator i =
fThreadData.begin();
2901 std::lock_guard<std::mutex> guard(
fMutex);
2905 for (
Int_t tid = 0; tid < nthreads; tid++) {
2992 "Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",
3007 for (i = 0; i < nbits; i++)
3009 for (i = 14; i < 24; i++)
3015 for (i = 0; i < nbits; i++)
3044 Error(
"Divide",
"Assemblies cannot be divided");
3056 Error(
"Divide",
"Cannot divide assembly %s since it has nodes",
GetName());
3060 Error(
"Divide",
"Assembly %s already divided",
GetName());
3064 if (!ncells || pattern->
GetStep() <= 0) {
3065 Error(
"Divide",
"Pattern finder for dividing assembly %s not initialized. Use SetRange() method.",
GetName());
3076 for (
Int_t i = 0; i < ncells; i++) {
3099 for (i = 0; i < nbits; i++)
3101 for (i = 14; i < 24; i++)
3107 for (i = 0; i < nbits; i++)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
R__EXTERN TGeoManager * gGeoManager
R__EXTERN TGeoIdentity * gGeoIdentity
R__EXTERN TStyle * gStyle
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
Using a TBrowser one can browse all ROOT objects.
void CheckObjectItem(TObject *obj, Bool_t check=kFALSE)
Change status of checkbox for this item.
void Refresh()
Refresh browser contents.
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TDirectory::TContext keeps track and restore the current directory.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Bool_t IsVisRaytrace() const
virtual void SetVisOnly(Bool_t flag=kTRUE)
Set branch type visibility.
Bool_t TestAttBit(UInt_t f) const
virtual void SetVisLeaves(Bool_t flag=kTRUE)
Set branch type visibility.
void SetVisDaughters(Bool_t vis=kTRUE)
Set visibility for the daughters.
void ResetAttBit(UInt_t f)
void SetVisRaytrace(Bool_t flag=kTRUE)
Bool_t IsVisDaughters() const
virtual void SetVisibility(Bool_t vis=kTRUE)
Set visibility for this object.
void SetVisTouched(Bool_t vis=kTRUE)
Mark visualization attributes as "modified".
virtual void SetVisContainers(Bool_t flag=kTRUE)
Set branch type visibility.
Class describing rotation + translation.
Composite shapes are Boolean combinations of two or more shape components.
void RegisterYourself()
Register the shape and all components to TGeoManager class.
ABC for user objects attached to TGeoVolume or TGeoNode.
virtual TGeoExtension * Grab()=0
virtual void Release() const =0
Matrix class used for computing global transformations Should NOT be used for node definition.
void MultiplyLeft(const TGeoMatrix *left)
multiply to the left with an other transformation if right is identity matrix, just return
The manager class for any TGeo geometry.
TObjArray * GetListOfOverlaps()
TList * GetListOfMedia() const
void SetUserPaintVolume(TGeoVolume *vol)
TObjArray * GetListOfVolumes() const
void ClearOverlaps()
Clear the list of overlaps.
TObjArray * GetListOfMatrices() const
TVirtualGeoPainter * GetGeomPainter()
Make a default painter if none present. Returns pointer to it.
void SetVisOption(Int_t option=0)
set drawing mode :
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
Int_t AddVolume(TGeoVolume *volume)
Add a volume to the list. Returns index of the volume in list.
Bool_t IsStreamingVoxels() const
void SetCurrentPoint(Double_t *point)
Int_t GetVisOption() const
Returns current depth to which geometry is drawn.
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
void ClearShape(const TGeoShape *shape)
Remove a shape from the list of shapes.
TGeoMedium * GetMedium(const char *medium) const
Search for a named tracking medium. All trailing blanks stripped.
Double_t Weight(Double_t precision=0.01, Option_t *option="va")
Estimate weight of volume VOL with a precision SIGMA(W)/W better than PRECISION.
void SetNsegments(Int_t nseg)
Set number of segments for approximating circles in drawing.
static UInt_t GetExportPrecision()
TVirtualGeoPainter * GetPainter() const
Bool_t IsCheckingOverlaps() const
void RandomPoints(const TGeoVolume *vol, Int_t npoints=10000, Option_t *option="")
Draw random points in the bounding box of a volume.
TList * GetListOfMaterials() const
void RandomRays(Int_t nrays=1000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=nullptr, Bool_t check_norm=kFALSE)
Randomly shoot nrays and plot intersections with surfaces for current top node.
void SetAllIndex()
Assigns uid's for all materials,media and matrices.
TObjArray * GetListOfShapes() const
TGeoVolume * GetTopVolume() const
static Int_t ThreadId()
Translates the current thread id to an ordinal number.
Int_t AddShape(const TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
void SortOverlaps()
Sort overlaps by decreasing overlap distance. Extrusions comes first.
Base class describing materials.
void SetUsed(Bool_t flag=kTRUE)
void Print(const Option_t *option="") const override
print characteristics of this material
virtual Double_t GetDensity() const
Geometrical transformation package.
void Print(Option_t *option="") const override
print the matrix in 4x4 format
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
Bool_t IsReflection() const
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
Bool_t IsIdentity() const
const char * GetPointerName() const
Provide a pointer name containing uid.
Bool_t IsRegistered() const
Media are used to store properties related to tracking and which are useful only when using geometry ...
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
TGeoMaterial * GetMaterial() const
const char * GetPointerName() const
Provide a pointer name containing uid.
void SetMaterial(TGeoMaterial *mat)
A node containing local transformation.
void SetMatrix(const TGeoMatrix *matrix)
Matrix setter.
TGeoMatrix * GetMatrix() const override
Node containing an offset.
void SetFinder(TGeoPatternFinder *finder)
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Bool_t IsOverlapping() const
TGeoVolume * GetVolume() const
void SetVolume(TGeoVolume *volume)
virtual Int_t GetByteCount() const
void SetOverlapping(Bool_t flag=kTRUE)
virtual Int_t GetOptimalVoxels() const
virtual TGeoMatrix * GetMatrix() const =0
void SetMotherVolume(TGeoVolume *mother)
virtual TGeoNode * MakeCopyNode() const
void SetNumber(Int_t number)
Base finder class for patterns.
void SetSpacedOut(Bool_t flag)
void SetDivIndex(Int_t index)
virtual TGeoPatternFinder * MakeCopy(Bool_t reflect=kFALSE)=0
virtual Int_t GetDivAxis()
void SetVolume(TGeoVolume *vol)
void ClearThreadData() const
Double_t GetStart() const
virtual Int_t GetByteCount() const
void CreateThreadData(Int_t nthreads)
Create thread data for n threads max.
Class describing scale transformations.
static TGeoShape * MakeScaledShape(const char *name, TGeoShape *shape, TGeoScale *scale)
Create a scaled shape starting from a non-scaled one.
The shape encapsulating an assembly (union) of volumes.
Base abstract class for all shapes.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const =0
virtual void CreateThreadData(Int_t)
virtual const char * GetAxisName(Int_t iaxis) const =0
virtual TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step)=0
virtual Bool_t IsComposite() const
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b)
Check if two numbers differ with less than a tolerance.
Bool_t IsRunTimeShape() const
virtual void ClearThreadData() const
const char * GetPointerName() const
Provide a pointer name containing uid.
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="")
Test for shape navigation methods.
virtual Bool_t IsValidBox() const =0
virtual Int_t GetByteCount() const =0
const char * GetName() const override
Get the shape name.
virtual void ComputeBBox()=0
virtual Double_t Capacity() const =0
virtual TGeoShape * GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const =0
virtual Bool_t IsAssembly() const
Bool_t TestShapeBit(UInt_t f) const
static TGeoVolumeAssembly * MakeAssemblyFromVolume(TGeoVolume *vol)
Make a clone of volume VOL but which is an assembly.
~TGeoVolumeAssembly() override
Destructor. The assembly is owner of its "shape".
Int_t GetNextNodeIndex() const override
void CreateThreadData(Int_t nthreads) override
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="") override
Add a component to the assembly.
void ClearThreadData() const override
TGeoVolume * CloneVolume() const override
Clone this volume.
void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option) override
Add an overlapping node - not allowed for assemblies.
std::vector< ThreadData_t * > fThreadData
std::mutex fMutex
Thread vector size.
Int_t fThreadSize
Thread specific data vector.
void SetNextNodeIndex(Int_t index)
Int_t GetCurrentNodeIndex() const override
void SetCurrentNodeIndex(Int_t index)
TGeoVolumeAssembly()
Default constructor.
TGeoVolume * Divide(const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="") override
Division makes no sense for assemblies.
ThreadData_t & GetThreadData() const
TGeoVolume * Divide(const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="") override
division of multiple volumes
void SetLineColor(Color_t lcolor) override
Set the line color for all components.
void AddVolume(TGeoVolume *vol)
Add a volume with valid shape to the list of volumes.
TGeoVolume * MakeCopyVolume(TGeoShape *newshape) override
Make a copy of this volume build a volume with same name, shape and medium.
void SetMedium(TGeoMedium *medium) override
Set medium for a multiple volume.
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option="") override
Add a new node to the list of nodes.
TGeoVolume * GetVolume(Int_t id) const
void SetVisibility(Bool_t vis=kTRUE) override
Set visibility for all components.
~TGeoVolumeMulti() override
Destructor.
TGeoVolumeMulti * fDivision
TGeoVolumeMulti()
dummy constructor
void SetLineWidth(Width_t lwidth) override
Set the line width for all components.
TGeoShape * GetLastShape() const
Returns the last shape.
void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option="") override
Add a new node to the list of nodes, This node is possibly overlapping with other daughters of the vo...
void SetLineStyle(Style_t lstyle) override
Set the line style for all components.
Int_t GetNvolumes() const
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Double_t WeightA() const
Analytical computation of the weight.
void AddNodeOffset(TGeoVolume *vol, Int_t copy_no, Double_t offset=0, Option_t *option="")
Add a division node to the list of nodes.
void SetVisContainers(Bool_t flag=kTRUE) override
Set visibility for containers.
virtual void cd(Int_t inode) const
Actualize matrix of node indexed <inode>
virtual void ClearThreadData() const
void SetVisibility(Bool_t vis=kTRUE) override
set visibility of this volume
Bool_t IsVisContainers() const
void SetVoxelFinder(TGeoVoxelFinder *finder)
void RemoveNode(TGeoNode *node)
Remove an existing daughter.
Int_t GetNodeIndex(const TGeoNode *node, Int_t *check_list, Int_t ncheck) const
Get the index of a daughter within check_list by providing the node pointer.
Bool_t Valid() const
Check if the shape of this volume is valid.
Bool_t IsAllInvisible() const
Return TRUE if volume and all daughters are invisible.
void MakeCopyNodes(const TGeoVolume *other)
make a new list of nodes and copy all nodes of other volume inside
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the volume.
TGeoExtension * GrabFWExtension() const
Get a copy of the framework extension pointer.
void SetNumber(Int_t number)
void SetLineWidth(Width_t lwidth) override
Set the line width.
void Raytrace(Bool_t flag=kTRUE)
Draw this volume with current settings and perform raytracing in the pad.
void RandomRays(Int_t nrays=10000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=nullptr, Bool_t check_norm=kFALSE)
Random raytracing method.
TGeoVolume()
dummy constructor
TGeoMedium * GetMedium() const
char * GetObjectInfo(Int_t px, Int_t py) const override
Get volume info for the browser.
void Print(Option_t *option="") const override
Print volume info.
void CloneNodesAndConnect(TGeoVolume *newmother) const
Clone the array of nodes.
void SortNodes()
sort nodes by decreasing volume of the bounding box.
Bool_t FindMatrixOfDaughterVolume(TGeoVolume *vol) const
Find a daughter node having VOL as volume and fill TGeoManager::fHMatrix with its global matrix.
void Voxelize(Option_t *option)
build the voxels for this volume
Double_t Capacity() const
Computes the capacity of this [cm^3] as the capacity of its shape.
virtual TGeoVolume * MakeCopyVolume(TGeoShape *newshape)
make a copy of this volume build a volume with same name, shape and medium
void ReplayCreation(const TGeoVolume *other)
Recreate the content of the other volume without pointer copying.
Double_t Weight(Double_t precision=0.01, Option_t *option="va")
Estimate the weight of a volume (in kg) with SIGMA(M)/M better than PRECISION.
Int_t fNumber
option - if any
virtual void CreateThreadData(Int_t nthreads)
virtual Int_t GetByteCount() const
get the total size in bytes for this volume
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
Bool_t OptimizeVoxels()
Perform an extensive sampling to find which type of voxelization is most efficient.
void Browse(TBrowser *b) override
How to browse a volume.
void SetCurrentPoint(Double_t x, Double_t y, Double_t z)
Set the current tracking point.
void Paint(Option_t *option="") override
paint volume
void SetVisOnly(Bool_t flag=kTRUE) override
Set visibility for leaves.
TGeoManager * fGeoManager
TH2F * LegoPlot(Int_t ntheta=20, Double_t themin=0., Double_t themax=180., Int_t nphi=60, Double_t phimin=0., Double_t phimax=360., Double_t rmin=0., Double_t rmax=9999999, Option_t *option="")
Generate a lego plot fot the top volume, according to option.
void Draw(Option_t *option="") override
draw top volume according to option
TGeoVoxelFinder * fVoxels
TGeoMaterial * GetMaterial() const
virtual Bool_t IsVolumeMulti() const
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
Int_t CountNodes(Int_t nlevels=1000, Int_t option=0)
Count total number of subnodes starting from this volume, nlevels down.
void GrabFocus()
Move perspective view focus to this volume.
void UnmarkSaved()
Reset SavePrimitive bits.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute mouse actions on this volume.
virtual TGeoVolume * CloneVolume() const
Clone this volume.
void SetFinder(TGeoPatternFinder *finder)
Int_t GetNdaughters() const
void CheckGeometry(Int_t nrays=1, Double_t startx=0, Double_t starty=0, Double_t startz=0) const
Shoot nrays with random directions from starting point (startx, starty, startz) in the reference fram...
void SelectVolume(Bool_t clear=kFALSE)
Select this volume as matching an arbitrary criteria.
const char * GetPointerName() const
Provide a pointer name containing uid.
void ClearShape()
Clear the shape of this volume from the list held by the current manager.
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the volume.
void VisibleDaughters(Bool_t vis=kTRUE)
set visibility for daughters
void FindOverlaps() const
loop all nodes marked as overlaps and find overlapping brothers
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
compute the closest distance of approach from point px,py to this volume
void RandomPoints(Int_t npoints=1000000, Option_t *option="")
Draw random points in the bounding box of this volume.
void CheckShapes()
check for negative parameters in shapes.
void SetNtotal(Int_t ntotal)
Bool_t GetOptimalVoxels() const
Returns true if cylindrical voxelization is optimal.
TGeoNode * ReplaceNode(TGeoNode *nodeorig, TGeoShape *newshape=nullptr, TGeoMatrix *newpos=nullptr, TGeoMedium *newmed=nullptr)
Replace an existing daughter with a new volume having the same name but possibly a new shape,...
void InvisibleAll(Bool_t flag=kTRUE)
Make volume and each of it daughters (in)visible.
Bool_t IsVisibleDaughters() const
TString fOption
just a hook for now
Int_t GetIndex(const TGeoNode *node) const
get index number for a given daughter
void SetNodes(TObjArray *nodes)
TGeoPatternFinder * GetFinder() const
void PrintVoxels() const
Print the voxels for this volume.
TGeoExtension * fUserExtension
virtual void SetMedium(TGeoMedium *medium)
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
void SetAttVisibility(Bool_t vis)
~TGeoVolume() override
Destructor.
void SetShape(const TGeoShape *shape)
set the shape associated with this volume
static TGeoMedium * DummyMedium()
TObject * fField
pointer to TGeoManager owning this volume
void SetLineColor(Color_t lcolor) override
Set the line color.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
void CleanAll()
Clean data of the volume.
Bool_t IsTopVolume() const
True if this is the top volume of the geometry.
TGeoShape * GetShape() const
void InspectMaterial() const
Inspect the material for this volume.
void PrintNodes() const
print nodes
static TGeoMedium * fgDummyMedium
void RegisterYourself(Option_t *option="")
Register the volume and all materials/media/matrices/shapes to the manager.
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.
Bool_t IsRaytracing() const
Check if the painter is currently ray-tracing the content of this volume.
void SaveAs(const char *filename="", Option_t *option="") const override
Save geometry having this as top volume as a C++ macro.
void SetField(TObject *field)
static TGeoVolume * Import(const char *filename, const char *name="", Option_t *option="")
Import a volume from a file.
Bool_t IsStyleDefault() const
check if the visibility and attributes are the default ones
static void CreateDummyMedium()
Create a dummy medium.
TGeoExtension * fFWExtension
Transient user-defined extension to volumes.
void SetAsTopVolume()
Set this volume as the TOP one (the whole geometry starts from here)
Bool_t IsVisLeaves() const
Option_t * GetOption() const override
TObject * GetField() const
TGeoPatternFinder * fFinder
dummy medium
Int_t Export(const char *filename, const char *name="", Option_t *option="")
Export this volume to a file.
virtual void DrawOnly(Option_t *option="")
draw only this volume
void SetLineStyle(Style_t lstyle) override
Set the line style.
void SetOption(const char *option)
Set the current options (none implemented)
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.
TGeoVolume * MakeReflectedVolume(const char *newname="") const
Make a copy of this volume which is reflected with respect to XY plane.
virtual Bool_t IsVisible() const
void SetVisLeaves(Bool_t flag=kTRUE) override
Set visibility for leaves.
void InspectShape() const
Bool_t IsFolder() const override
Return TRUE if volume contains nodes.
TGeoNode * FindNode(const char *name) const
search a daughter inside the list of nodes
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="") const
Overlap checking tool.
void SetOverlappingCandidate(Bool_t flag)
Bool_t IsOverlappingCandidate() const
void Streamer(TBuffer &) override
Stream an object of class TGeoVolume.
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="")
Tests for checking the shape navigation algorithms. See TGeoShape::CheckShape()
Finder class handling voxels.
void Print(Option_t *option="") const override
Print the voxels.
void SetNeedRebuild(Bool_t flag=kTRUE)
virtual void Voxelize(Option_t *option="")
Voxelize attached volume according to option If the volume is an assembly, make sure the bbox is comp...
virtual void FindOverlaps(Int_t inode) const
create the list of nodes for which the bboxes overlap with inode's bbox
void Draw(Option_t *option="") override
Draw this histogram with options.
2-D histogram with a float per channel (see TH1 documentation)
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual const char * GetClassName() const
virtual TObject * ReadObj()
To read a TObject* from the file.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
void Add(TObject *obj) override
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
The TNamed class is the base class for all named ROOT classes.
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
void AddAt(TObject *obj, Int_t idx) override
Add object at position ids.
void Clear(Option_t *option="") override
Remove all objects from the array.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
virtual void Compress()
Remove empty slots from array.
Int_t GetEntries() const override
Return the number of objects in array (i.e.
void Delete(Option_t *option="") override
Remove all objects from the array AND delete all heap based objects.
TObject * At(Int_t idx) const override
TObject * Remove(TObject *obj) override
Remove object from array.
TObject * RemoveAt(Int_t idx) override
Remove object at index idx.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Add(TObject *obj) override
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
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.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Sequenceable collection abstract base class.
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
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Abstract class for geometry painters.
virtual void SetTopVolume(TGeoVolume *vol)=0
virtual void ModifiedPad(Bool_t update=kFALSE) const =0
virtual TGeoVolume * GetTopVolume() const =0
virtual void DrawVolume(TGeoVolume *vol, Option_t *option="")=0
virtual void GrabFocus(Int_t nfr=0, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)=0
virtual void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="") const =0
virtual Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py)=0
void Paint(Option_t *option="") override=0
This method must be overridden if a class wants to paint itself.
virtual Bool_t TestVoxels(TGeoVolume *vol)=0
virtual TGeoVolume * GetDrawnVolume() const =0
virtual const char * GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const =0
virtual void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py)=0
virtual void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const =0
ThreadData_t()
index of next node to be entered
~ThreadData_t()
Destructor.