418 dummyMaterial->
SetName(
"dummy");
477 Warning(
"Ctor",
"volume %s has invalid shape",
name);
480 Fatal(
"ctor",
"Shape of volume %s invalid. Aborting!",
fName.
Data());
529 if (daughter->
IsAssembly()) title.TString::Format(
"Assembly with %d daughter(s)",
533 s1.ReplaceAll(
"TGeoPattern",
"");
534 title.TString::Format(
"Volume having %s shape divided in %d %s slices",
537 }
else title.TString::Format(
"Volume with %s shape having %d daughter(s)",
610 for (
Int_t i=0; i<novlps; i++) {
616 if (novlps)
Info(
"CheckOverlaps",
"Number of illegal overlaps/extrusions for volume %s: %d\n",
GetName(), novlps);
651 Error(
"CheckShapes",
"volume %s has run-time shape",
GetName());
661 for (
Int_t i=0; i<nd; i++) {
664 if (!node->
GetName()[0]) printf(
"Daughter %i of volume %s - NO NAME!!!\n",
675 Fatal(
"CheckShapes",
"Cannot make copy node for %s", node->
GetName());
680 Error(
"CheckShapes",
"cannot resolve runtime shape for volume %s/%s\n",
704 static Int_t maxlevel = 0;
705 static Int_t nlev = 0;
707 if (option<0 || option>3) option = 0;
737 if (nlev>maxlevel) maxlevel = nlev;
741 for (
Int_t i=0; i<nd; i++) {
771 for (
Int_t i=0; i<nd; i++) {
778 while ((browser=(
TBrowser*)next())) {
779 for (
Int_t i=0; i<nd+1; i++) {
840 if (!filename)
return 0;
842 if (strstr(filename,
".gdml")) {
848 if (!
f ||
f->IsZombie()) {
849 printf(
"Error: TGeoVolume::Import : Cannot open file %s\n", filename);
855 TIter next(
f->GetListOfKeys());
857 while ((key = (
TKey*)next())) {
858 if (strcmp(key->
GetClassName(),
"TGeoVolume") != 0)
continue;
865 if (!volume)
return NULL;
892 Info(
"Export",
"Exporting volume %s as C++ code",
GetName());
898 Info(
"Export",
"Exporting %s as gdml code - not implemented yet",
GetName());
903 Info(
"Export",
"Exporting %s as root file.",
GetName());
905 if (!opt.
Length()) opt =
"recreate";
907 if (!
f ||
f->IsZombie()) {
908 Error(
"Export",
"Cannot open file");
938 Error(
"AddNode",
"Volume is NULL");
942 Error(
"AddNode",
"Won't add node with invalid shape");
943 printf(
"### invalid volume was : %s\n", vol->
GetName());
950 Error(
"AddNode",
"Cannot add node %s_%i into divided volume %s", vol->
GetName(), copy_no,
GetName());
975 Error(
"AddNodeOffset",
"invalid volume");
979 Error(
"AddNode",
"Won't add node with invalid shape");
980 printf(
"### invalid volume was : %s\n", vol->
GetName());
1000 Error(
"AddNodeOverlap",
"Volume is NULL");
1004 Error(
"AddNodeOverlap",
"Won't add node with invalid shape");
1005 printf(
"### invalid volume was : %s\n", vol->
GetName());
1009 Warning(
"AddNodeOverlap",
"Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",vol->
GetName(),
GetName());
1010 AddNode(vol, copy_no, mat, option);
1020 Error(
"AddNodeOverlap",
"Cannot add node %s_%i into divided volume %s", vol->
GetName(), copy_no,
GetName());
1029 Warning(
"AddNode",
"Volume %s : added node %s with same name",
GetName(),
name.Data());
1055 Fatal(
"Divide",
"volume %s already divided",
GetName());
1066 if ((start-xlo)<-1E-3) start+=360.;
1077 if (ndiv<=0 || opt.
Contains(
"s")) {
1079 Fatal(
"Divide",
"invalid division type for volume %s : ndiv=%i, step=%g",
GetName(), ndiv, step);
1083 if ((xlo-start)>1E-3 || (xhi-start)<-1E-3) {
1084 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)",
1091 ndiv =
Int_t((range+0.1*step)/step);
1094 if (ddx>1E-3)
Warning(
"Divide",
"division of volume %s on %s axis (ndiv=%d) will be centered in the full range",
1096 start = xlo + 0.5*ddx;
1098 if (step<=0 || opt.
Contains(
"n")) {
1100 if ((xlo-start)>1E-3 || (xhi-start)<-1E-3) {
1101 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)",
1113 if (((start-xlo)<-1E-3) || ((end-xhi)>1E-3)) {
1114 Fatal(
"Divide",
"division of volume %s on axis %s exceed range (%g, %g)",
1122 Fatal(
"Divide",
"invalid medium number %d for division volume %s", numed, divname);
1139 if (!painter)
return dist;
1154 if (option && option[0] > 0) {
1167 Info(
"DrawOnly",
"Volume assemblies do not support this option.");
1174 if (option && option[0] > 0) {
1187 printf(
"Optimizing volume %s ...\n",
GetName());
1210 if (option && option[0] > 0) {
1211 painter->
Paint(option);
1244 for (
Int_t i=0; i<nd; i++) {
1257 for (
Int_t i=0; i<nd; i++) {
1274 TH2F *hist = p->
LegoPlot(ntheta, themin, themax, nphi, phimin, phimax, rmin, rmax, option);
1275 hist->
Draw(
"lego1sph");
1307 for (i=0; i<nd; i++) {
1369 if (!filename)
return;
1371 out.open(filename, std::ios::out);
1373 Error(
"SavePrimitive",
"Bad file name: %s", filename);
1380 if (ind>0) fname.
Remove(ind);
1381 out <<
"void "<<fname<<
"() {" << std::endl;
1382 out <<
" gSystem->Load(\"libGeom\");" << std::endl;
1384 out << std::setprecision(prec);
1385 ((
TGeoVolume*)
this)->SavePrimitive(out,option);
1386 out <<
"}" << std::endl;
1460 out <<
" Double_t dx,dy,dz;" << std::endl;
1461 out <<
" Double_t dx1, dx2, dy1, dy2;" << std::endl;
1462 out <<
" Double_t vert[20], par[20];" << std::endl;
1463 out <<
" Double_t theta, phi, h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2;" << std::endl;
1464 out <<
" Double_t twist;" << std::endl;
1465 out <<
" Double_t origin[3];" << std::endl;
1466 out <<
" Double_t rmin, rmax, rmin1, rmax1, rmin2, rmax2;" << std::endl;
1467 out <<
" Double_t r, rlo, rhi;" << std::endl;
1468 out <<
" Double_t phi1, phi2;" << std::endl;
1469 out <<
" Double_t a,b;" << std::endl;
1470 out <<
" Double_t point[3], norm[3];" << std::endl;
1471 out <<
" Double_t rin, stin, rout, stout;" << std::endl;
1472 out <<
" Double_t thx, phx, thy, phy, thz, phz;" << std::endl;
1473 out <<
" Double_t alpha, theta1, theta2, phi1, phi2, dphi;" << std::endl;
1474 out <<
" Double_t tr[3], rot[9];" << std::endl;
1475 out <<
" Double_t z, density, radl, absl, w;" << std::endl;
1476 out <<
" Double_t lx,ly,lz,tx,ty,tz;" << std::endl;
1477 out <<
" Double_t xvert[50], yvert[50];" << std::endl;
1478 out <<
" Double_t zsect,x0,y0,scale0;" << std::endl;
1479 out <<
" Int_t nel, numed, nz, nedges, nvert;" << std::endl;
1480 out <<
" TGeoBoolNode *pBoolNode = 0;" << std::endl << std::endl;
1482 out <<
" // MATERIALS, MIXTURES AND TRACKING MEDIA" << std::endl;
1485 out << std::endl <<
" // TRANSFORMATION MATRICES" << std::endl;
1489 out << std::endl <<
" // SET TOP VOLUME OF GEOMETRY" << std::endl;
1490 out <<
" gGeoManager->SetTopVolume(" <<
GetPointerName() <<
");" << std::endl;
1492 out << std::endl <<
" // SHAPES, VOLUMES AND GEOMETRICAL HIERARCHY" << std::endl;
1494 out << std::endl <<
" // CLOSE GEOMETRY" << std::endl;
1495 out <<
" gGeoManager->CloseGeometry();" << std::endl;
1497 if (!
IsRaytracing()) out <<
" gGeoManager->GetTopVolume()->Draw();" << std::endl;
1498 else out <<
" gGeoManager->GetTopVolume()->Raytrace();" << std::endl;
1503 if (!strcmp(option,
"s")) {
1508 out <<
" // Volume: " <<
GetName() << std::endl;
1513 out <<
" // Assembly: " <<
GetName() << std::endl;
1514 out <<
" " <<
GetPointerName() <<
" = new TGeoVolumeAssembly(\"" <<
GetName() <<
"\"" <<
");" << std::endl;
1526 if (!strcmp(option,
"m")) {
1528 for (i=0; i<nd; i++) {
1535 if (!strcmp(option,
"x")) {
1541 for (i=0; i<nd; i++) {
1550 if (!strcmp(option,
"d")) {
1564 out <<
");" << std::endl;
1568 for (i=0; i<nd; i++) {
1579 out <<
");" << std::endl;
1582 for (i=0; i<nd; i++) {
1606 if (!painter)
return;
1624 for (
Int_t i=0; i<ncheck; i++) {
1626 if (current==node)
return check_list[i];
1639 for (
Int_t i=0; i<nd; i++) {
1641 if (current==node)
return i;
1653 if (!painter)
return 0;
1667 for (
id=0;
id<nd;
id++) {
1671 if (ncyl>(nd/2))
return kTRUE;
1682 return (
char*)
name.Data();
1728 for (i=0; i<nbits; i++)
1730 for (i=14; i<24; i++)
1736 for (i=0; i<nbits; i++)
1775 for (
Int_t i=0; i<nd; i++) {
1779 Fatal(
"CloneNodesAndConnect",
"cannot make copy node");
1839 static TMap map(100);
1841 Error(
"MakeReflectedVolume",
"Geometry must be closed.");
1846 if (newname && newname[0]) vol->
SetName(newname);
1852 Fatal(
"MakeReflectedVolume",
"Cannot clone volume %s\n",
GetName());
1856 if (newname && newname[0]) vol->
SetName(newname);
1870 if (!nd)
return vol;
1875 for (
Int_t i=0; i<nd; i++) {
1907 Fatal(
"MakeReflectedVolume",
"Could not copy finder for volume %s",
GetName());
1914 for (
Int_t i=0; i<nd; i++) {
1945 Error(
"SetShape",
"No shape");
1958 Error(
"SortNodes",
"Bounding box not valid");
1971 for (
id=0;
id<nd;
id++) {
1979 for (
id=0;
id<nd;
id++) {
1989 for (
id=0;
id<nd;
id++) {
1991 if (!node->
InheritsFrom(TGeoNodeOffset::Class()))
continue;
1997 if (inode != nd) printf(
" volume %s : number of nodes does not match!!!\n",
GetName());
2005void TGeoVolume::Streamer(
TBuffer &R__b)
2073 Int_t count = 28+2+6+4+0;
2075 count += 7*
sizeof(
char*);
2094 Error(
"FindOverlaps",
"Bounding box not valid");
2102 for (inode=0; inode<nd; inode++) {
2129 if (ind < 0)
return NULL;
2132 Error(
"ReplaceNode",
"Cannot replace node %s since it is an assembly", nodeorig->
GetName());
2136 if (newshape && !nodeorig->
IsOffset()) shape = newshape;
2138 if (newmed) med = newmed;
2153 Fatal(
"ReplaceNode",
"Cannot make copy node for %s", nodeorig->
GetName());
2159 if (newpos && !nodeorig->
IsOffset()) {
2180 static Int_t len = 0;
2184 for (i=0; i<len; i++) {
2207 while ((browser=(
TBrowser*)next())) {
2264 if (vol ==
this)
return kTRUE;
2268 if (!global)
return kFALSE;
2273 for (i=0; i<nd; i++) {
2282 for (i=0; i<nd; i++) {
2306 Error(
"Voxelize",
"Bounding box not valid");
2356 for (i=0; i<nd; i++) {
2358 weight += daughter->
WeightA();
2364 if (density<0.01) density = 0.0;
2366 weight += 0.001*capacity * density;
2431 Fatal(
"AddVolume",
"Cannot divide volume %s", vol->
GetName());
2441 for (
Int_t id=0;
id<nd;
id++) {
2461 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2467 volume->
AddNode(vol, copy_no, mat, option);
2482 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2509 Error(
"Divide",
"volume %s already divided",
GetName());
2517 Error(
"Divide",
"Invalid medium number %d for division volume %s", numed, divname);
2541 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2583 Fatal(
"MakeCopyVolume",
"Cannot divide volume %s", vol->
GetName());
2595 if (!nd)
return vol;
2601 for (i=0; i<nd; i++) {
2605 Fatal(
"MakeCopyNode",
"cannot make copy node for daughter %d of %s", i,
GetName());
2622 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2636 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2650 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2664 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2679 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2691 fCurrent(-1), fNext(-1)
2714 std::lock_guard<std::mutex> guard(
fMutex);
2716 std::vector<ThreadData_t*>::iterator i =
fThreadData.begin();
2730 std::lock_guard<std::mutex> guard(
fMutex);
2734 for (
Int_t tid=0; tid<nthreads; tid++) {
2820 Warning(
"AddNodeOverlap",
"Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",vol->
GetName(),
GetName());
2821 AddNode(vol, copy_no, mat, option);
2834 for (i=0; i<nbits; i++)
2836 for (i=14; i<24; i++)
2842 for (i=0; i<nbits; i++)
2868 Error(
"Divide",
"Assemblies cannot be divided");
2880 Error(
"Divide",
"Cannot divide assembly %s since it has nodes",
GetName());
2884 Error(
"Divide",
"Assembly %s already divided",
GetName());
2888 if (!ncells || pattern->
GetStep()<=0) {
2889 Error(
"Divide",
"Pattern finder for dividing assembly %s not initialized. Use SetRange() method.",
GetName());
2898 for (
Int_t i=0; i<ncells; i++) {
2919 for (i=0; i<nbits; i++)
2921 for (i=14; i<24; i++)
2927 for (i=0; i<nbits; i++)
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.
Width_t fLineWidth
Line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
Style_t fLineStyle
Line style.
Color_t fLineColor
Line color.
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=0)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
Small helper to keep current directory context.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
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.
Class handling Boolean composition of shapes.
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
void RandomRays(Int_t nrays=1000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=0, Bool_t check_norm=kFALSE)
Randomly shoot nrays and plot intersections with surfaces for current top node.
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.
static UInt_t GetExportPrecision()
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.
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 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.
virtual void Print(const Option_t *option="") const
print characteristics of this material
void SetUsed(Bool_t flag=kTRUE)
virtual Double_t GetDensity() const
Geometrical transformation package.
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.
void Print(Option_t *option="") const
print the matrix in 4x4 format
Bool_t IsIdentity() const
Bool_t IsRegistered() const
char * GetPointerName() const
Provide a pointer name containing uid.
Media are used to store properties related to tracking and which are useful only when using geometry ...
TGeoMaterial * GetMaterial() const
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
void SetMaterial(TGeoMaterial *mat)
char * GetPointerName() const
Provide a pointer name containing uid.
A node containing local transformation.
void SetMatrix(const TGeoMatrix *matrix)
Matrix setter.
virtual TGeoMatrix * GetMatrix() const
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 const char * GetName() const
Get the shape name.
virtual Int_t GetByteCount() const =0
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.
virtual Int_t GetCurrentNodeIndex() 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 makes no sense for assemblies.
virtual void ClearThreadData() const
virtual Int_t GetNextNodeIndex() const
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option)
Add an overlapping node - not allowed for assemblies.
std::vector< ThreadData_t * > fThreadData
virtual ~TGeoVolumeAssembly()
Destructor. The assembly is owner of its "shape".
std::mutex fMutex
Thread vector size.
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a component to the assembly.
Int_t fThreadSize
Thread specific data vector.
void SetNextNodeIndex(Int_t index)
virtual TGeoVolume * CloneVolume() const
Clone this volume.
void SetCurrentNodeIndex(Int_t index)
TGeoVolumeAssembly()
Default constructor.
virtual void CreateThreadData(Int_t nthreads)
ThreadData_t & GetThreadData() const
virtual void SetVisibility(Bool_t vis=kTRUE)
Set visibility for all components.
virtual TGeoVolume * MakeCopyVolume(TGeoShape *newshape)
Make a copy of this volume build a volume with same name, shape and medium.
void AddVolume(TGeoVolume *vol)
Add a volume with valid shape to the list of volumes.
virtual void SetLineStyle(Style_t lstyle)
Set the line style for all components.
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option="")
Add a new node to the list of nodes, This node is possibly overlapping with other daughters of the vo...
TGeoVolume * GetVolume(Int_t id) const
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option="")
Add a new node to the list of nodes.
virtual ~TGeoVolumeMulti()
Destructor.
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 of multiple volumes
virtual void SetLineColor(Color_t lcolor)
Set the line color for all components.
TGeoVolumeMulti * fDivision
TGeoVolumeMulti()
dummy constructor
TGeoShape * GetLastShape() const
Returns the last shape.
Int_t GetNvolumes() const
virtual void SetMedium(TGeoMedium *medium)
Set medium for a multiple volume.
virtual void SetLineWidth(Width_t lwidth)
Set the line width for all components.
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.
virtual void cd(Int_t inode) const
Actualize matrix of node indexed <inode>
virtual void ClearThreadData() const
virtual ~TGeoVolume()
Destructor.
virtual void Print(Option_t *option="") const
Print volume info.
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.
void RandomRays(Int_t nrays=10000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=0, Bool_t check_norm=kFALSE)
Random raytracing method.
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
TGeoNode * ReplaceNode(TGeoNode *nodeorig, TGeoShape *newshape=0, TGeoMatrix *newpos=0, TGeoMedium *newmed=0)
Replace an existing daughter with a new volume having the same name but possibly a new shape,...
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 Raytrace(Bool_t flag=kTRUE)
Draw this volume with current settings and perform raytracing in the pad.
TGeoVolume()
dummy constructor
TGeoMedium * GetMedium() const
virtual Bool_t IsFolder() const
Return TRUE if volume contains nodes.
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
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
compute the closest distance of approach from point px,py to 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
Bool_t OptimizeVoxels()
Perform an extensive sampling to find which type of voxelization is most efficient.
void SetCurrentPoint(Double_t x, Double_t y, Double_t z)
Set the current tracking point.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse actions on this volume.
virtual void SetVisLeaves(Bool_t flag=kTRUE)
Set visibility for leaves.
void Browse(TBrowser *b)
How to browse a volume.
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.
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.
virtual TGeoVolume * CloneVolume() const
Clone this volume.
void SetFinder(TGeoPatternFinder *finder)
Int_t GetNdaughters() const
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
char * GetPointerName() const
Provide a pointer name containing uid.
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.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Get volume info for the browser.
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
Option_t * GetOption() const
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
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of 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)
virtual void Paint(Option_t *option="")
paint volume
Bool_t GetOptimalVoxels() const
Returns true if cylindrical voxelization is optimal.
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
void SaveAs(const char *filename, Option_t *option="") const
Save geometry having this as top volume as a C++ macro.
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)
void SetShape(const TGeoShape *shape)
set the shape associated with this volume
static TGeoMedium * DummyMedium()
TObject * fField
pointer to TGeoManager owning this volume
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 void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
virtual void Draw(Option_t *option="")
draw top volume according to option
virtual void SetVisOnly(Bool_t flag=kTRUE)
Set visibility for leaves.
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 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)
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
Bool_t IsVisLeaves() const
virtual void SetVisContainers(Bool_t flag=kTRUE)
Set visibility for containers.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
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
virtual void SetLineColor(Color_t lcolor)
Set the line color.
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 InspectShape() const
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 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 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
virtual void Print(Option_t *option="") const
Print the voxels.
virtual void Draw(Option_t *option="")
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.
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
void Add(TObject *obj)
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.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Int_t GetEntriesFast() const
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
Return the number of objects in array (i.e.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual TObject * Remove(TObject *obj)
Remove object from array.
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
TObject * At(Int_t idx) const
Mother of all ROOT objects.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
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".
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.
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 TH2F * LegoPlot(Int_t ntheta=60, Double_t themin=0., Double_t themax=180., Int_t nphi=90, Double_t phimin=0., Double_t phimax=360., Double_t rmin=0., Double_t rmax=9999999, Option_t *option="")=0
virtual void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="") const =0
virtual void Paint(Option_t *option="")=0
This method must be overridden if a class wants to paint itself.
virtual Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py)=0
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.