418 dummyMaterial->
SetName(
"dummy");
477 Warning(
"Ctor",
"volume %s has invalid shape", name);
480 Fatal(
"ctor",
"Shape of volume %s invalid. Aborting!",
fName.
Data());
531 TGeoAtt::operator=(gv);
532 TAttLine::operator=(gv);
533 TAttFill::operator=(gv);
534 TAtt3D::operator=(gv);
582 if (daughter->
IsAssembly()) title.TString::Format(
"Assembly with %d daughter(s)",
587 title.TString::Format(
"Volume having %s shape divided in %d %s slices",
590 }
else title.TString::Format(
"Volume with %s shape having %d daughter(s)",
663 for (
Int_t i=0; i<novlps; i++) {
669 if (novlps)
Info(
"CheckOverlaps",
"Number of illegal overlaps/extrusions for volume %s: %d\n",
GetName(), novlps);
704 Error(
"CheckShapes",
"volume %s has run-time shape",
GetName());
714 for (
Int_t i=0; i<nd; i++) {
717 if (!node->
GetName()[0]) printf(
"Daughter %i of volume %s - NO NAME!!!\n",
728 Fatal(
"CheckShapes",
"Cannot make copy node for %s", node->
GetName());
733 Error(
"CheckShapes",
"cannot resolve runtime shape for volume %s/%s\n",
757 static Int_t maxlevel = 0;
758 static Int_t nlev = 0;
760 if (option<0 || option>3) option = 0;
790 if (nlev>maxlevel) maxlevel = nlev;
794 for (
Int_t i=0; i<nd; i++) {
824 for (
Int_t i=0; i<nd; i++) {
831 while ((browser=(
TBrowser*)next())) {
832 for (
Int_t i=0; i<nd+1; i++) {
834 browser->CheckObjectItem(vol, !flag);
893 if (!filename)
return 0;
895 if (strstr(filename,
".gdml")) {
902 printf(
"Error: TGeoVolume::Import : Cannot open file %s\n", filename);
905 if (name && name[0]) {
910 while ((key = (
TKey*)next())) {
911 if (strcmp(key->GetClassName(),
"TGeoVolume") != 0)
continue;
918 if (!volume)
return NULL;
945 Info(
"Export",
"Exporting volume %s as C++ code",
GetName());
951 Info(
"Export",
"Exporting %s as gdml code - not implemented yet",
GetName());
956 Info(
"Export",
"Exporting %s as root file.",
GetName());
958 if (!opt.
Length()) opt =
"recreate";
961 Error(
"Export",
"Cannot open file");
991 Error(
"AddNode",
"Volume is NULL");
995 Error(
"AddNode",
"Won't add node with invalid shape");
996 printf(
"### invalid volume was : %s\n", vol->
GetName());
1003 Error(
"AddNode",
"Cannot add node %s_%i into divided volume %s", vol->
GetName(), copy_no,
GetName());
1027 Error(
"AddNodeOffset",
"invalid volume");
1031 Error(
"AddNode",
"Won't add node with invalid shape");
1032 printf(
"### invalid volume was : %s\n", vol->
GetName());
1052 Error(
"AddNodeOverlap",
"Volume is NULL");
1056 Error(
"AddNodeOverlap",
"Won't add node with invalid shape");
1057 printf(
"### invalid volume was : %s\n", vol->
GetName());
1061 Warning(
"AddNodeOverlap",
"Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",vol->
GetName(),
GetName());
1062 AddNode(vol, copy_no, mat, option);
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());
1107 Fatal(
"Divide",
"volume %s already divided",
GetName());
1118 if ((start-xlo)<-1
E-3) start+=360.;
1129 if (ndiv<=0 || opt.
Contains(
"s")) {
1131 Fatal(
"Divide",
"invalid division type for volume %s : ndiv=%i, step=%g",
GetName(), ndiv, step);
1135 if ((xlo-start)>1
E-3 || (xhi-start)<-1
E-3) {
1136 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)",
1143 ndiv =
Int_t((range+0.1*step)/step);
1146 if (ddx>1
E-3)
Warning(
"Divide",
"division of volume %s on %s axis (ndiv=%d) will be centered in the full range",
1148 start = xlo + 0.5*ddx;
1150 if (step<=0 || opt.
Contains(
"n")) {
1152 if ((xlo-start)>1
E-3 || (xhi-start)<-1
E-3) {
1153 Fatal(
"Divide",
"invalid START=%g for division on axis %s of volume %s. Range is (%g, %g)",
1165 if (((start-xlo)<-1
E-3) || ((end-xhi)>1
E-3)) {
1166 Fatal(
"Divide",
"division of volume %s on axis %s exceed range (%g, %g)",
1174 Fatal(
"Divide",
"invalid medium number %d for division volume %s", numed, divname);
1191 if (!painter)
return dist;
1206 if (option && option[0] > 0) {
1219 Info(
"DrawOnly",
"Volume assemblies do not support this option.");
1226 if (option && option[0] > 0) {
1239 printf(
"Optimizing volume %s ...\n",
GetName());
1262 if (option && option[0] > 0) {
1263 painter->
Paint(option);
1296 for (
Int_t i=0; i<nd; i++) {
1309 for (
Int_t i=0; i<nd; i++) {
1326 TH2F *hist = p->
LegoPlot(ntheta, themin, themax, nphi, phimin, phimax, rmin, rmax, option);
1327 hist->
Draw(
"lego1sph");
1359 for (i=0; i<nd; i++) {
1421 if (!filename)
return;
1423 out.open(filename, std::ios::out);
1425 Error(
"SavePrimitive",
"Bad file name: %s", filename);
1432 if (ind>0) fname.
Remove(ind);
1433 out <<
"void "<<fname<<
"() {" << std::endl;
1434 out <<
" gSystem->Load(\"libGeom\");" << std::endl;
1435 ((
TGeoVolume*)
this)->SavePrimitive(out,option);
1436 out <<
"}" << std::endl;
1497 out.setf(std::ios::fixed);
1512 out <<
" Double_t dx,dy,dz;" << std::endl;
1513 out <<
" Double_t dx1, dx2, dy1, dy2;" << std::endl;
1514 out <<
" Double_t vert[20], par[20];" << std::endl;
1515 out <<
" Double_t theta, phi, h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2;" << std::endl;
1516 out <<
" Double_t twist;" << std::endl;
1517 out <<
" Double_t origin[3];" << std::endl;
1518 out <<
" Double_t rmin, rmax, rmin1, rmax1, rmin2, rmax2;" << std::endl;
1519 out <<
" Double_t r, rlo, rhi;" << std::endl;
1520 out <<
" Double_t phi1, phi2;" << std::endl;
1521 out <<
" Double_t a,b;" << std::endl;
1522 out <<
" Double_t point[3], norm[3];" << std::endl;
1523 out <<
" Double_t rin, stin, rout, stout;" << std::endl;
1524 out <<
" Double_t thx, phx, thy, phy, thz, phz;" << std::endl;
1525 out <<
" Double_t alpha, theta1, theta2, phi1, phi2, dphi;" << std::endl;
1526 out <<
" Double_t tr[3], rot[9];" << std::endl;
1527 out <<
" Double_t z, density, radl, absl, w;" << std::endl;
1528 out <<
" Double_t lx,ly,lz,tx,ty,tz;" << std::endl;
1529 out <<
" Double_t xvert[50], yvert[50];" << std::endl;
1530 out <<
" Double_t zsect,x0,y0,scale0;" << std::endl;
1531 out <<
" Int_t nel, numed, nz, nedges, nvert;" << std::endl;
1532 out <<
" TGeoBoolNode *pBoolNode = 0;" << std::endl << std::endl;
1534 out <<
" // MATERIALS, MIXTURES AND TRACKING MEDIA" << std::endl;
1537 out << std::endl <<
" // TRANSFORMATION MATRICES" << std::endl;
1541 out << std::endl <<
" // SET TOP VOLUME OF GEOMETRY" << std::endl;
1542 out <<
" gGeoManager->SetTopVolume(" <<
GetPointerName() <<
");" << std::endl;
1544 out << std::endl <<
" // SHAPES, VOLUMES AND GEOMETRICAL HIERARCHY" << std::endl;
1546 out << std::endl <<
" // CLOSE GEOMETRY" << std::endl;
1547 out <<
" gGeoManager->CloseGeometry();" << std::endl;
1549 if (!
IsRaytracing()) out <<
" gGeoManager->GetTopVolume()->Draw();" << std::endl;
1550 else out <<
" gGeoManager->GetTopVolume()->Raytrace();" << std::endl;
1555 if (!strcmp(option,
"s")) {
1560 out <<
" // Volume: " <<
GetName() << std::endl;
1565 out <<
" // Assembly: " <<
GetName() << std::endl;
1566 out <<
" " <<
GetPointerName() <<
" = new TGeoVolumeAssembly(\"" <<
GetName() <<
"\"" <<
");" << std::endl;
1578 if (!strcmp(option,
"m")) {
1580 for (i=0; i<nd; i++) {
1587 if (!strcmp(option,
"x")) {
1593 for (i=0; i<nd; i++) {
1602 if (!strcmp(option,
"d")) {
1616 out <<
");" << std::endl;
1620 for (i=0; i<nd; i++) {
1631 out <<
");" << std::endl;
1634 for (i=0; i<nd; i++) {
1658 if (!painter)
return;
1676 for (
Int_t i=0; i<ncheck; i++) {
1678 if (current==node)
return check_list[i];
1691 for (
Int_t i=0; i<nd; i++) {
1693 if (current==node)
return i;
1705 if (!painter)
return 0;
1719 for (
id=0;
id<nd;
id++) {
1723 if (ncyl>(nd/2))
return kTRUE;
1734 return (
char*)name.
Data();
1779 for (i=0; i<nbits; i++)
1781 for (i=14; i<24; i++)
1787 for (i=0; i<nbits; i++)
1826 for (
Int_t i=0; i<nd; i++) {
1830 Fatal(
"CloneNodesAndConnect",
"cannot make copy node");
1890 static TMap map(100);
1892 Error(
"MakeReflectedVolume",
"Geometry must be closed.");
1897 if (newname && newname[0]) vol->
SetName(newname);
1903 Fatal(
"MakeReflectedVolume",
"Cannot clone volume %s\n",
GetName());
1907 if (newname && newname[0]) vol->
SetName(newname);
1921 if (!nd)
return vol;
1926 for (
Int_t i=0; i<nd; i++) {
1958 Fatal(
"MakeReflectedVolume",
"Could not copy finder for volume %s",
GetName());
1965 for (
Int_t i=0; i<nd; i++) {
1996 Error(
"SetShape",
"No shape");
2009 Error(
"SortNodes",
"Bounding box not valid");
2022 for (
id=0;
id<nd;
id++) {
2030 for (
id=0;
id<nd;
id++) {
2040 for (
id=0;
id<nd;
id++) {
2048 if (inode != nd) printf(
" volume %s : number of nodes does not match!!!\n",
GetName());
2056 void TGeoVolume::Streamer(
TBuffer &R__b)
2124 Int_t count = 28+2+6+4+0;
2126 count += 7*
sizeof(
char*);
2145 Error(
"FindOverlaps",
"Bounding box not valid");
2153 for (inode=0; inode<nd; inode++) {
2180 if (ind < 0)
return NULL;
2183 Error(
"ReplaceNode",
"Cannot replace node %s since it is an assembly", nodeorig->
GetName());
2187 if (newshape && !nodeorig->
IsOffset()) shape = newshape;
2189 if (newmed) med = newmed;
2204 Fatal(
"ReplaceNode",
"Cannot make copy node for %s", nodeorig->
GetName());
2210 if (newpos && !nodeorig->
IsOffset()) {
2231 static Int_t len = 0;
2235 for (i=0; i<len; i++) {
2258 while ((browser=(
TBrowser*)next())) {
2315 if (vol ==
this)
return kTRUE;
2319 if (!global)
return kFALSE;
2324 for (i=0; i<nd; i++) {
2333 for (i=0; i<nd; i++) {
2357 Error(
"Voxelize",
"Bounding box not valid");
2407 for (i=0; i<nd; i++) {
2409 weight += daughter->
WeightA();
2415 if (density<0.01) density = 0.0;
2417 weight += 0.001*capacity * density;
2465 fVolumes(vm.fVolumes),
2466 fDivision(vm.fDivision),
2512 TGeoVolumeMulti *div;
2517 Fatal(
"AddVolume",
"Cannot divide volume %s", vol->
GetName());
2527 for (
Int_t id=0;
id<nd;
id++) {
2547 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2553 volume->
AddNode(vol, copy_no, mat, option);
2567 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2594 Error(
"Divide",
"volume %s already divided",
GetName());
2602 Error(
"Divide",
"Invalid medium number %d for division volume %s", numed, divname);
2626 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2668 Fatal(
"MakeCopyVolume",
"Cannot divide volume %s", vol->
GetName());
2680 if (!nd)
return vol;
2686 for (i=0; i<nd; i++) {
2690 Fatal(
"MakeCopyNode",
"cannot make copy node for daughter %d of %s", i,
GetName());
2707 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2721 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2735 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2749 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2764 for (
Int_t ivo=0; ivo<nvolumes; ivo++) {
2776 fCurrent(-1), fNext(-1)
2804 return *fThreadData[tid];
2813 std::vector<ThreadData_t*>::iterator i = fThreadData.begin();
2814 while (i != fThreadData.end())
2819 fThreadData.clear();
2830 fThreadData.resize(nthreads);
2831 fThreadSize = nthreads;
2832 for (
Int_t tid=0; tid<nthreads; tid++) {
2833 if (fThreadData[tid] == 0) {
2918 Warning(
"AddNodeOverlap",
"Declaring assembly %s as possibly overlapping inside %s not allowed. Using AddNode instead !",vol->
GetName(),
GetName());
2919 AddNode(vol, copy_no, mat, option);
2932 for (i=0; i<nbits; i++)
2934 for (i=14; i<24; i++)
2940 for (i=0; i<nbits; i++)
2965 Error(
"Divide",
"Assemblies cannot be divided");
2977 Error(
"Divide",
"Cannot divide assembly %s since it has nodes",
GetName());
2981 Error(
"Divide",
"Assembly %s already divided",
GetName());
2985 if (!ncells || pattern->
GetStep()<=0) {
2986 Error(
"Divide",
"Pattern finder for dividing assembly %s not initialized. Use SetRange() method.",
GetName());
2995 for (
Int_t i=0; i<ncells; i++) {
3016 for (i=0; i<nbits; i++)
3018 for (i=14; i<24; i++)
3024 for (i=0; i<nbits; i++)
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
TGeoManager * fGeoManager
TGeoVolume()
dummy constructor
void CreateThreadData(Int_t nthreads)
Create thread data for n threads max.
virtual TGeoVolume * CloneVolume() const
Clone this volume.
virtual void Paint(Option_t *option="")=0
This method must be overridden if a class wants to paint itself.
void CleanAll()
Clean data of the volume.
virtual const char * GetName() const
Returns name of object.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
TGeoVolumeAssembly()
Thread vector size.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="")
Test for shape navigation methods.
void PrintNodes() const
print nodes
A node containing local transformation.
double dist(Rotation3D const &r1, Rotation3D const &r2)
Bool_t IsCheckingOverlaps() const
void SetNodes(TObjArray *nodes)
void ResetAttBit(UInt_t f)
virtual void SetLineColor(Color_t lcolor)
Set the line color for all components.
void Print(Option_t *option="") const
print the matrix in 4x4 format
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
void ClearShape()
Clear the shape of this volume from the list held by the current manager.
virtual void SetLineWidth(Width_t lwidth)
Set the line width for all components.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Bool_t TestAttBit(UInt_t f) const
static TGeoMedium * fgDummyMedium
The manager class for any TGeo geometry.
virtual void CreateThreadData(Int_t nthreads)
virtual void SetVisContainers(Bool_t flag=kTRUE)
Set branch type visibility.
char * GetPointerName() const
Provide a pointer name containing uid.
void Voxelize(Option_t *option)
build the voxels for this volume
void SetFinder(TGeoPatternFinder *finder)
virtual void ModifiedPad(Bool_t update=kFALSE) const =0
virtual TGeoNode * MakeCopyNode() const
void SetAllIndex()
Assigns uid's for all materials,media and matrices.
virtual void Voxelize(Option_t *option="")
Voxelize attached volume according to option If the volume is an assembly, make sure the bbox is comp...
TGeoExtension * fUserExtension
virtual void ClearThreadData() const
TGeoVolume * GetVolume(Int_t id) const
virtual void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py)=0
void SetVolume(TGeoVolume *vol)
virtual void Clear(Option_t *option="")
Remove all objects from the array.
void MultiplyLeft(const TGeoMatrix *left)
multiply to the left with an other transformation if right is identity matrix, just return ...
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 Double_t GetDensity() const
Bool_t IsOverlapping() const
Geometrical transformation package.
virtual Int_t GetByteCount() const =0
Visualization and tracking attributes for volumes and nodes.
ThreadData_t & GetThreadData() const
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const =0
virtual Int_t GetByteCount() const
TGeoExtension * fFWExtension
Transient user-defined extension to volumes.
Bool_t IsStyleDefault() const
check if the visibility and attributes are the default ones
static TGeoMedium * DummyMedium()
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
virtual void CreateThreadData(Int_t)
TString & ReplaceAll(const TString &s1, const TString &s2)
TVirtualGeoPainter * GetPainter() const
virtual void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="") const =0
R__EXTERN TStyle * gStyle
TGeoVolumeMulti & operator=(const TGeoVolumeMulti &)
assignment operator
Bool_t TestBit(UInt_t f) const
virtual void SetVisibility(Bool_t vis=kTRUE)
Set visibility for this object.
TGeoMaterial * GetMaterial() const
virtual void SetName(const char *name)
Set the name of the TNamed.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
virtual void Draw(Option_t *option="")
draw top volume according to option
void RegisterYourself()
Register the shape and all components to TGeoManager class.
virtual void Print(Option_t *option="") const
Print volume info.
Use this attribute class when an object should have 3D capabilities.
Buffer base class used for serializing objects.
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
virtual void SetVisibility(Bool_t vis=kTRUE)
Set visibility for all components.
virtual TObject * Remove(TObject *obj)
Remove object from array.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
void InspectShape() const
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
virtual void SetTopVolume(TGeoVolume *vol)=0
Matrix class used for computing global transformations Should NOT be used for node definition...
Base class describing materials.
virtual void DrawOnly(Option_t *option="")
draw only this volume
virtual TGeoShape * GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const =0
void ToLower()
Change string to lower-case.
void VisibleDaughters(Bool_t vis=kTRUE)
set visibility for daughters
void SetOption(const char *option)
Set the current options (none implemented)
Double_t Capacity() const
Computes the capacity of this [cm^3] as the capacity of its shape.
virtual ~TGeoVolumeAssembly()
Destructor. The assembly is owner of its "shape".
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
void RemoveNode(TGeoNode *node)
Remove an existing daughter.
Bool_t IsAllInvisible() const
Return TRUE if volume and all daughters are invisible.
void ReplayCreation(const TGeoVolume *other)
Recreate the content of the other volume without pointer copying.
void CheckObjectItem(TObject *obj, Bool_t check=kFALSE)
Change status of checkbox for this item.
TObject * At(Int_t idx) const
Bool_t IsVisibleDaughters() const
The shape encapsulating an assembly (union) of volumes.
void SetAsTopVolume()
Set this volume as the TOP one (the whole geometry starts from here)
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
virtual Bool_t TestVoxels(TGeoVolume *vol)=0
Bool_t IsVisContainers() const
void RegisterYourself(Option_t *option="")
Register the volume and all materials/media/matrices/shapes to the manager.
virtual Width_t GetLineWidth() const
Return the line width.
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the volume.
void Raytrace(Bool_t flag=kTRUE)
Draw this volume with current settings and perform raytracing in the pad.
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b)
Check if two numbers differ with less than a tolerance.
TObject * GetField() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Int_t GetByteCount() const
get the total size in bytes for this volume
TList * GetListOfMaterials() const
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual Bool_t IsAssembly() const
Bool_t IsRaytracing() const
Check if the painter is currently ray-tracing the content of this volume.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
Int_t CountNodes(Int_t nlevels=1000, Int_t option=0)
Count total number of subnodes starting from this volume, nlevels down.
void Browse(TBrowser *b)
How to browse a volume.
virtual void CreateThreadData(Int_t nthreads)
Int_t GetNdaughters() const
void SetVisRaytrace(Bool_t flag=kTRUE)
TList * GetListOfMedia() const
TObject * fField
pointer to TGeoManager owning this volume
virtual Style_t GetLineStyle() const
Return the line style.
Sequenceable collection abstract base class.
virtual ~TGeoVolume()
Destructor.
void SetUserPaintVolume(TGeoVolume *vol)
virtual const char * ClassName() const
Returns name of class to which the object belongs.
TGeoPatternFinder * GetFinder() const
Fill Area Attributes class.
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...
virtual void SetVisLeaves(Bool_t flag=kTRUE)
Set visibility for leaves.
Int_t GetNvolumes() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
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.
void SetMaterial(TGeoMaterial *mat)
virtual void GrabFocus(Int_t nfr=0, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)=0
Bool_t FindMatrixOfDaughterVolume(TGeoVolume *vol) const
Find a daughter node having VOL as volume and fill TGeoManager::fHMatrix with its global matrix...
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.
void PrintVoxels() const
Print the voxels for this volume.
void SetCurrentPoint(Double_t *point)
The TNamed class is the base class for all named ROOT classes.
void AddVolume(TGeoVolume *vol)
Add a volume with valid shape to the list of volumes.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
void InvisibleAll(Bool_t flag=kTRUE)
Make volume and each of it daughters (in)visible.
Int_t fThreadSize
Thread specific data vector.
void ClearShape(const TGeoShape *shape)
Remove a shape from the list of shapes.
void SortOverlaps()
Sort overlaps by decreasing overlap distance. Extrusions comes first.
Bool_t GetOptimalVoxels() const
Returns true if cylindrical voxelization is optimal.
TGeoVolume * MakeReflectedVolume(const char *newname="") const
Make a copy of this volume which is reflected with respect to XY plane.
TGeoMedium * GetMedium() const
Bool_t IsIdentity() const
Int_t AddVolume(TGeoVolume *volume)
Add a volume to the list. Returns index of the volume in list.
virtual void SetVisLeaves(Bool_t flag=kTRUE)
Set branch type visibility.
virtual Bool_t IsVisible() const
virtual TGeoMatrix * GetMatrix() const =0
virtual TGeoVolume * MakeCopyVolume(TGeoShape *newshape)
Make a copy of this volume build a volume with same name, shape and medium.
TGeoMaterial * GetMaterial() const
Int_t GetVisOption() const
Returns current depth to which geometry is drawn.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual void Print(Option_t *option="") const
Print the voxels.
char * GetPointerName() const
Provide a pointer name containing uid.
void RandomPoints(Int_t npoints=1000000, Option_t *option="")
Draw random points in the bounding box of this volume.
virtual Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py)=0
virtual void SetMedium(TGeoMedium *medium)
Set medium for a multiple volume.
virtual void Paint(Option_t *option="")
paint volume
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual Bool_t IsValidBox() const =0
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.
TString fOption
just a hook for now
static TGeoVolumeAssembly * MakeAssemblyFromVolume(TGeoVolume *vol)
Make a clone of volume VOL but which is an assembly.
virtual void ClearThreadData() const
void SortNodes()
sort nodes by decreasing volume of the bounding box.
const char * GetPointerName() const
Provide a pointer name containing uid.
Option_t * GetOption() const
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse actions on this volume.
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Get volume info for the browser.
Base finder class for patterns.
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option="")
Add a new node to the list of nodes.
void SetShape(const TGeoShape *shape)
set the shape associated with this volume
Class handling Boolean composition of shapes.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Using a TBrowser one can browse all ROOT objects.
virtual Int_t GetCurrentNodeIndex() const
virtual TGeoVolume * CloneVolume() const
Clone this volume.
TGeoVoxelFinder * fVoxels
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...
virtual void Release() const =0
void SetNeedRebuild(Bool_t flag=kTRUE)
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
compute the closest distance of approach from point px,py to this volume
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
Style_t fLineStyle
Line style.
Base abstract class for all shapes.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
void SetMotherVolume(TGeoVolume *mother)
virtual void Draw(Option_t *option="")
Draw this histogram with options.
TGeoPatternFinder * fFinder
dummy medium
Class describing rotation + translation.
void SetSpacedOut(Bool_t flag)
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
void SetField(TObject *field)
virtual void SetVisOnly(Bool_t flag=kTRUE)
Set branch type visibility.
ABC for user objects attached to TGeoVolume or TGeoNode.
virtual void FindOverlaps(Int_t inode) const
create the list of nodes for which the bboxes overlap with inode's bbox
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
Int_t GetIndex(const TGeoNode *node) const
get index number for a given daughter
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.
Color_t fLineColor
Line color.
virtual TGeoPatternFinder * MakeCopy(Bool_t reflect=kFALSE)=0
tomato 2-D histogram with a float per channel (see TH1 documentation)}
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
virtual Bool_t IsComposite() const
Double_t GetStart() const
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
TObjArray * GetListOfShapes() const
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.
void SetMatrix(const TGeoMatrix *matrix)
Matrix setter.
Bool_t IsRegistered() const
Width_t fLineWidth
Line width.
Int_t GetEntriesFast() const
void UnmarkSaved()
Reset SavePrimitive bits.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
Bool_t IsVisRaytrace() const
virtual Bool_t IsFolder() const
Return TRUE if volume contains nodes.
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="") const
Overlap checking tool.
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 CloneNodesAndConnect(TGeoVolume *newmother) const
Clone the array of nodes.
static Int_t Lock()
Static method to lock the main thread mutex.
virtual Int_t GetNextNodeIndex() const
void SetDivIndex(Int_t index)
virtual void DrawVolume(TGeoVolume *vol, Option_t *option="")=0
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a component to the assembly.
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
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
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the volume.
TObjArray * GetListOfMatrices() const
virtual TGeoVolume * GetTopVolume() const =0
void RandomPoints(const TGeoVolume *vol, Int_t npoints=10000, Option_t *option="")
Draw random points in the bounding box of a volume.
virtual const char * GetAxisName(Int_t iaxis) const =0
virtual void ClearThreadData() const
void SetFinder(TGeoPatternFinder *finder)
void SetAttVisibility(Bool_t vis)
virtual Color_t GetLineColor() const
Return the line color.
TGeoMedium * GetMedium(const char *medium) const
Search for a named tracking medium. All trailing blanks stripped.
void SetOverlapping(Bool_t flag=kTRUE)
Bool_t IsTopVolume() const
True if this is the top volume of the geometry.
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
void SetNextNodeIndex(Int_t index)
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
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.
static Int_t UnLock()
Static method to unlock the main thread mutex.
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
Class describing scale transformations.
~ThreadData_t()
Destructor.
R__EXTERN TGeoManager * gGeoManager
virtual TGeoVolume * MakeCopyVolume(TGeoShape *newshape)
make a copy of this volume build a volume with same name, shape and medium
Int_t Export(const char *filename, const char *name="", Option_t *option="")
Export this volume to a file.
void SetVoxelFinder(TGeoVoxelFinder *finder)
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of this volume
void MakeCopyNodes(const TGeoVolume *other)
make a new list of nodes and copy all nodes of other volume inside
void SaveAs(const char *filename, Option_t *option="") const
Save geometry having this as top volume as a C++ macro.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Bool_t TestShapeBit(UInt_t f) const
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
TGeoExtension * GrabFWExtension() const
Get a copy of the framework extension pointer.
Bool_t Valid() const
Check if the shape of this volume is valid.
Int_t fNumber
option - if any
virtual const char * GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const =0
virtual Color_t GetFillColor() const
Return the fill area color.
Node containing an offset.
virtual void SetVisContainers(Bool_t flag=kTRUE)
Set visibility for containers.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Finder class handling voxels.
virtual TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step)=0
virtual void ComputeBBox()=0
Int_t AddShape(const TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Bool_t IsReflection() const
Media are used to store properties related to tracking and which are useful only when using geometry ...
Bool_t IsVisLeaves() const
virtual Double_t Capacity() const =0
virtual void SetLineColor(Color_t lcolor)
Set the line color.
void SetVolume(TGeoVolume *volume)
void InspectMaterial() const
Inspect the material for this volume.
static void CreateDummyMedium()
Create a dummy medium.
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.
virtual Int_t GetDivAxis()
Mother of all ROOT objects.
static TGeoShape * MakeScaledShape(const char *name, TGeoShape *shape, TGeoScale *scale)
Create a scaled shape starting from a non-scaled one.
TGeoVolume & operator=(const TGeoVolume &)
assignment operator
you should not use this method at all Int_t Int_t z
virtual ~TGeoVolumeMulti()
Destructor.
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="")
Tests for checking the shape navigation algorithms. See TGeoShape::CheckShape()
static TGeoVolume * Import(const char *filename, const char *name="", Option_t *option="")
Import a volume from a file.
Abstract class for geometry painters.
void ClearOverlaps()
Clear the list of overlaps.
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
void SetNsegments(Int_t nseg)
Set number of segments for approximating circles in drawing.
TGeoVolumeMulti()
dummy constructor
virtual TGeoExtension * Grab()=0
char * GetPointerName() const
Provide a pointer name containing uid.
R__EXTERN TGeoIdentity * gGeoIdentity
Bool_t IsVisDaughters() const
static Int_t ThreadId()
Translates the current thread id to an ordinal number.
TGeoVolumeMulti * fDivision
virtual void Add(TObject *obj)
void SetVisDaughters(Bool_t vis=kTRUE)
Set visibility for the daughters.
void SetUsed(Bool_t flag=kTRUE)
virtual TList * GetListOfKeys() const
TObjArray * GetListOfVolumes() const
void SetCurrentNodeIndex(Int_t index)
virtual void SetLineStyle(Style_t lstyle)
Set the line style for all components.
Bool_t IsOverlappingCandidate() const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
void SetCurrentPoint(Double_t x, Double_t y, Double_t z)
Set the current tracking point.
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const =0
Int_t GetEntries() const
Return the number of objects in array (i.e.
Double_t WeightA() const
Analytical computation of the weight.
virtual Int_t GetByteCount() const
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
void SetOverlappingCandidate(Bool_t flag)
void GrabFocus()
Move perspective view focus to this volume.
virtual Bool_t IsVolumeMulti() const
TObjArray * GetListOfOverlaps()
void ClearThreadData() const
Bool_t IsStreamingVoxels() const
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void SetMedium(TGeoMedium *medium)
TGeoVolume * GetTopVolume() const
void FindOverlaps() const
loop all nodes marked as overlaps and find overlapping brothers
virtual TGeoVolume * GetDrawnVolume() const =0
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.
TGeoShape * GetShape() const
virtual void Compress()
Remove empty slots from array.
TGeoShape * GetLastShape() const
Returns the last shape.
virtual TGeoMatrix * GetMatrix() const
void SetVisTouched(Bool_t vis=kTRUE)
Mark visualization attributes as "modified".
void SetNumber(Int_t number)
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
void CheckShapes()
check for negative parameters in shapes.
void SetVisOption(Int_t option=0)
set drawing mode :
void SelectVolume(Bool_t clear=kFALSE)
Select this volume as matching an arbitrary criteria.
TVirtualGeoPainter * GetGeomPainter()
Make a default painter if none present. Returns pointer to it.
Bool_t OptimizeVoxels()
Perform an extensive sampling to find which type of voxelization is most efficient.
TGeoNode * FindNode(const char *name) const
search a daughter inside the list of nodes
TGeoVolume * GetVolume() const
virtual Int_t GetOptimalVoxels() const
virtual void AddNodeOverlap(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat, Option_t *option)
Add an overlapping node - not allowed for assemblies.
void Refresh()
Refresh browser contents.
virtual void cd(Int_t inode) const
Actualize matrix of node indexed <inode>
virtual void Print(const Option_t *option="") const
print characteristics of this material
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetNumber(Int_t number)
virtual void SetVisOnly(Bool_t flag=kTRUE)
Set visibility for leaves.
virtual const char * GetTitle() const
Returns title of object.
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
Bool_t IsRunTimeShape() const
const char * Data() const
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
void SetNtotal(Int_t ntotal)
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.