112 Error(
"ctor",
"volume not specified");
192 static Int_t icall = 0;
195 if (unique_volumes) {
230 Info(
"CheckOverlaps",
"Checking overlaps for %s and daughters within %g",
fVolume->
GetName(),ovlp);
232 Info(
"CheckOverlaps",
"Checking overlaps by sampling <%s> for %s and daughters", option,
fVolume->
GetName());
233 Info(
"CheckOverlaps",
"=== NOTE: Extrusions NOT checked with sampling option ! ===");
245 while ((node=next())) {
260 for (i=0; i<novlps; i++) {
265 Info(
"CheckOverlaps",
"Number of illegal overlaps/extrusions : %d\n", novlps);
278 if (!painter)
return dist;
290 if (!painter)
return;
301 if (!painter)
return 0;
319 printf(
"== Inspecting node %s ",
GetName());
324 printf(
" possibly overlapping with : ");
329 printf(
"Transformation matrix:\n");
372 if (!
fNovlp) {printf(
"node %s is ONLY\n",
GetName());
return;}
377 for (i=0; i<nd; i++) {
382 for (i=0; i<
fNovlp; i++) {
398 Int_t istart = ifree;
400 for (
Int_t id=0;
id<nd;
id++) {
402 array[istart+
id] = ifree;
403 array[ifree++] = ++nodeid;
418 while ((daughter=(
TGeoNode*)next())) {
419 if (daughter==node) {
426 while ((daughter=(
TGeoNode*)next())) {
427 new_level = daughter->FindNode(node, level+1);
447 out <<
" vol = gGeoManager->GetVolume("<<quote<<
fVolume->
GetName()<<quote<<
");"<<std::endl;
450 out <<
" vol->SetVisDaughters(kFALSE);"<<std::endl;
461 out <<
" vol->SetVisibility(kFALSE);"<<std::endl;
468 for (
Int_t i=0; i<nd; i++) {
473 out <<
" vol = gGeoManager->GetVolume("<<quote<<
fVolume->
GetName()<<quote<<
");"<<std::endl;
474 out<<
" node = vol->GetNode("<<i<<
");"<<std::endl;
476 out<<
" node->VisibleDaughters(kFALSE);"<<std::endl;
481 out<<
" node->SetVisibility(kFALSE);"<<std::endl;
595 if (!painter)
return;
606 printf(
" Local : %g, %g, %g\n", point[0], point[1], point[2]);
608 printf(
"current point not inside this\n");
614 printf(
"current node divided\n");
617 printf(
"point not inside division element\n");
620 printf(
"inside division element %s\n", node->
GetName());
625 printf(
"volume not voxelized\n");
635 printf(
"no candidates for current point\n");
639 for (
Int_t id=0;
id<ncheck;
id++) {
642 else overlap =
"ONLY";
643 printf(
"%i %s %s\n", check_list[
id], node->
GetName(), overlap.
Data());
654 printf(
"Overlaps for node %s :\n",
GetName());
658 printf(
" %s\n", node->
GetName());
761 Int_t count = 40 + 4;
1010 fArray =
new Int_t[30];
1012 fTopName = fTop->GetName();
1014 fPluginAutoexec =
kFALSE;
1028 for (
Int_t i=0; i<fLevel+1; i++) fArray[i] = iter.
GetIndex(i);
1040 if (fArray)
delete [] fArray;
1049 if (&iter ==
this)
return *
this;
1055 if (fArray)
delete [] fArray;
1057 for (
Int_t i=0; i<fLevel+1; i++) fArray[i] = iter.
GetIndex(i);
1071 if (fMustStop)
return 0;
1081 fArray[++fLevel] = 0;
1082 next = fTop->GetNode(0);
1083 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1086 next = fTop->GetNode(fArray[1]);
1088 for (i=2; i<fLevel+1; i++) {
1094 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1104 if ((fLevel%30)==0) IncreaseArray();
1106 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1111 next = GetNode(fLevel-1);
1113 nd = fTop->GetNdaughters();
1114 if (fArray[fLevel]<nd-1) {
1116 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1117 return fTop->GetNode(fArray[fLevel]);
1123 if (fArray[fLevel]<nd-1) {
1125 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1134 if (fArray[fLevel]<nd-1) {
1136 if (fPlugin && fPluginAutoexec) fPlugin->ProcessNode();
1137 if (!mother)
return fTop->GetNode(fArray[fLevel]);
1159 if (!fLevel)
return fMatrix;
1160 TGeoNode *node = fTop->GetNode(fArray[1]);
1162 for (
Int_t i=2; i<fLevel+1; i++) {
1174 if (!level || level>fLevel)
return 0;
1175 TGeoNode *node = fTop->GetNode(fArray[1]);
1186 if (!fLevel)
return;
1187 TGeoNode *node = fTop->GetNode(fArray[1]);
1190 for (
Int_t i=2; i<fLevel+1; i++) {
1203 memcpy(array, fArray, fLevel*
sizeof(
Int_t));
1213 if (top) fTop = top;
1233 fMustResume =
kTRUE;
1241 next = GetNode(fLevel-1);
1243 if (fArray[fLevel]<nd-1) {
1255 next = GetNode(fLevel-1);
1257 if (fArray[fLevel]<nd-1) {
Statefull info for the current geometry level.
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
virtual void ls(Option_t *option="") const
Print the path (A/B/C/...) to this node on stdout.
virtual const char * GetName() const
Returns name of object.
A node containing local transformation.
void ModifiedPad() const
Send "Modified" signal to painter.
double dist(Rotation3D const &r1, Rotation3D const &r2)
TGeoPatternFinder * fFinder
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
Convert a vector from local reference system to mother reference.
void Print(Option_t *option="") const
print the matrix in 4x4 format
void GetPath(TString &path) const
Returns the path for the current node.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Bool_t TestAttBit(UInt_t f) const
The manager class for any TGeo geometry.
void DrawOnly(Option_t *option="")
draw only this node independently of its vis options
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
TGeoNode()
Default constructor.
void SetUserPlugin(TGeoIteratorPlugin *plugin)
Set a plugin.
virtual void ExecuteVolumeEvent(TGeoVolume *volume, Int_t event, Int_t px, Int_t py)=0
Bool_t IsOverlapping() const
Geometrical transformation package.
Visualization and tracking attributes for volumes and nodes.
virtual TGeoNode * FindNode(Double_t *, const Double_t *=0)
virtual Int_t * GetCheckList(const Double_t *point, Int_t &nelem, TGeoStateInfo &td)
get the list of daughter indices for which point is inside their bbox
TGeoStateInfo * GetInfo()
Get next state info pointer.
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
void CdUp()
Go one level up in geometry.
TVirtualGeoPainter * GetPainter() const
virtual ~TGeoIterator()
Destructor.
virtual void SetVisibility(Bool_t vis=kTRUE)
Set visibility for this object.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
Convert a vector from mother reference to local reference system.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
void Skip()
Stop iterating the current branch.
virtual void Draw(Option_t *option="")
draw top volume according to option
virtual void Print(Option_t *option="") const
Print volume info.
Int_t FindNode(const TGeoNode *node, Int_t level)
Search for a node within the branch of this one.
TGeoNode * Next()
Returns next node.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Get node info for the browser.
TGeoNode * operator()()
Returns next node.
Matrix class used for computing global transformations Should NOT be used for node definition...
void MasterToLocal(const Double_t *master, Double_t *local) const
virtual void DrawOnly(Option_t *option="")
draw only this volume
void ToLower()
Change string to lower-case.
TGeoNodeCache * GetCache() const
TGeoNode * GetNode(Int_t level) const
Returns current node at a given level.
virtual void Paint(Option_t *option="")
Paint this node and its content according to visualization settings.
void Reset(TGeoVolume *top=0)
Resets the iterator for volume TOP.
TObject * At(Int_t idx) const
void IncreaseArray()
Increase by 30 the size of the array.
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
void VisibleDaughters(Bool_t vis=kTRUE)
Set visibility of the daughters (obsolete).
virtual TGeoPatternFinder * GetFinder() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void PaintNode(TGeoNode *node, Option_t *option="", TGeoMatrix *global=0)=0
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse actions on this volume.
Int_t GetNdaughters() const
virtual void Clear(Option_t *option="")
Set name and title to empty strings ("").
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the node.
TGeoExtension * fUserExtension
TGeoPatternFinder * GetFinder() const
void PrintVoxelLimits(const Double_t *point) const
print the voxel containing point
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
void PrintOverlaps() const
print possible overlapping nodes
virtual Int_t GetOptimalVoxels() const
Returns type of optimal voxelization for this node.
void SetCurrentPoint(Double_t *point)
TObjArray * GetListOfNodes()
The TNamed class is the base class for all named ROOT classes.
virtual TGeoNode * MakeCopyNode() const
Make a copy of this node.
void SetVisStreamed(Bool_t vis=kTRUE)
Mark attributes as "streamed to file".
void InspectNode() const
Inspect this node.
void SortOverlaps()
Sort overlaps by decreasing overlap distance. Extrusions comes first.
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the node.
Bool_t IsOnScreen() const
check if this node is drawn. Assumes that this node is current
const TGeoMatrix * GetCurrentMatrix() const
Returns global matrix for current node.
void SetTopName(const char *name)
Set the top name for path.
virtual Bool_t IsVisible() const
virtual TGeoMatrix * GetMatrix() const =0
virtual ~TGeoNodeOffset()
Destructor.
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector by multiplying its column vector (x, y, z, 1) to matrix inverse
TGeoIteratorPlugin * fPlugin
virtual Int_t DistanceToPrimitiveVol(TGeoVolume *vol, Int_t px, Int_t py)=0
void Browse(TBrowser *b)
How-to-browse for a node.
virtual Int_t GetIndex() const
Get the index of this offset.
void ReleaseInfo()
Release last used state info pointer.
Base finder class for patterns.
Using a TBrowser one can browse all ROOT objects.
virtual void Release() const =0
Int_t GetIndex(Int_t i) const
void DrawOverlaps()
Method drawing the overlap candidates with this node.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="")
Check overlaps bigger than OVLP hierarchically, starting with this node.
void SetMotherVolume(TGeoVolume *mother)
TGeoNode * GetDaughter(Int_t ind) const
void SaveAttributes(std::ostream &out)
save attributes for this node
Bool_t IsVisStreamed() const
void Draw(Option_t *option="")
draw current node according to option
ABC for user objects attached to TGeoVolume or TGeoNode.
void PrintCandidates() const
print daughters candidates for containing current point
TGeoExtension * fFWExtension
Transient user-defined extension to volumes.
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const =0
void SetMatrix(const TGeoMatrix *matrix)
Matrix setter.
TGeoVolume * GetCurrentVolume() const
virtual Int_t GetByteCount() const
return the total size in bytes of this node
Int_t GetEntriesFast() const
Bool_t IsVisDaughters() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
TGeoNodeMatrix()
Default constructor.
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="") const
Overlap checking tool.
void SetIterator(const TGeoIterator *iter)
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
Int_t CountDaughters(Bool_t unique_volumes=kFALSE)
Returns the number of daughters.
TGeoNode * FindNode(Bool_t safe_start=kTRUE)
Returns deepest node containing current point.
Bool_t Contains(const Double_t *point) const
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
Convert the point coordinates from mother reference to local reference system.
void SetFinder(TGeoPatternFinder *finder)
void SetCloned(Bool_t flag=kTRUE)
void SetOverlapping(Bool_t flag=kTRUE)
R__EXTERN TGeoManager * gGeoManager
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of this volume
TGeoExtension * GrabFWExtension() const
Get a copy of the framework extension pointer.
TGeoNodeMatrix & operator=(const TGeoNodeMatrix &gnm)
Assignment.
virtual const char * GetVolumeInfo(const TGeoVolume *volume, Int_t px, Int_t py) const =0
Node containing an offset.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void FillIdArray(Int_t &ifree, Int_t &nodeid, Int_t *array) const
Fill array with node id. Recursive on node branch.
Finder class handling voxels.
void SetCheckingOverlaps(Bool_t flag=kTRUE)
Binding & operator=(OUT(*fun)(void))
Bool_t IsSelected() const
TGeoNode & operator=(const TGeoNode &)
assignment operator
virtual ~TGeoNode()
Destructor.
Class providing navigation API for TGeo geometries.
Bool_t MayOverlap(Int_t iother) const
Check the overlab between the bounding box of the node overlaps with the one the brother with index I...
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 CheckShapes()
check for wrong parameters in shapes
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
compute the closest distance of approach from point px,py to this node
virtual TGeoExtension * Grab()=0
TGeoNodeOffset()
Default constructor.
R__EXTERN TGeoIdentity * gGeoIdentity
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
Bool_t IsVisDaughters() const
TGeoNavigator * GetCurrentNavigator() const
Returns current navigator for the calling thread.
Bool_t IsVisTouched() const
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const
computes the closest distance from given point to this shape
void SetVisDaughters(Bool_t vis=kTRUE)
Set visibility for the daughters.
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
Convert the point coordinates from local reference system to mother reference.
const Double_t * GetCurrentPoint() 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
Int_t GetNdaughters() const
virtual TGeoNode * MakeCopyNode() const
Make a copy of this node.
TGeoManager * GetGeoManager() const
virtual ~TGeoNodeMatrix()
Destructor.
void SetVisibility(Bool_t vis=kTRUE)
Set visibility of the node (obsolete).
TObjArray * GetListOfOverlaps()
TGeoShape * GetShape() const
virtual void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=0, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="")=0
void SetVisTouched(Bool_t vis=kTRUE)
Mark visualization attributes as "modified".
void CheckShapes()
check for negative parameters in shapes.
TGeoNodeOffset & operator=(const TGeoNodeOffset &)
Assignment operator.
virtual const Double_t * GetTranslation() const =0
virtual Bool_t IsCylType() const =0
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.
TGeoVolume * GetVolume() const
Bool_t IsRotAboutZ() const
Returns true if no rotation or the rotation is about Z axis.
TGeoIterator & operator=(const TGeoIterator &iter)
Assignment.
void SetOverlaps(Int_t *ovlp, Int_t novlp)
set the list of overlaps for this node (ovlp must be created with operator new)
void SetNumber(Int_t number)
TGeoVolume * GetTopVolume() const
const char * Data() const