Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoCache.cxx
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 18/03/02
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include "TGeoCache.h"
13
14#include "TGeoManager.h"
15#include "TGeoStateInfo.h"
16#include "TGeoMatrix.h"
17#include "TGeoVolume.h"
18#include "TObject.h"
19
20// const Int_t kN3 = 3*sizeof(Double_t);
21
22
23/** \class TGeoNodeCache
24\ingroup Geometry_classes
25
26Special pool of reusable nodes
27
28*/
29
30////////////////////////////////////////////////////////////////////////////////
31/// Dummy constructor
32
34{
38 fLevel = 0;
39 fStackLevel = 0;
40 fInfoLevel = 0;
41 fCurrentID = 0;
42 fIndex = 0;
43 fPath = "";
44 fTop = nullptr;
45 fNode = nullptr;
46 fMatrix = nullptr;
47 fStack = nullptr;
48 fMatrixBranch = nullptr;
49 fMPB = nullptr;
50 fNodeBranch = nullptr;
51 fInfoBranch = nullptr;
52 fPWInfo = nullptr;
53 fNodeIdArray = nullptr;
54 for (Int_t i = 0; i < 100; i++)
55 fIdBranch[i] = 0;
56}
57
58////////////////////////////////////////////////////////////////////////////////
59/// Default constructor
60
62{
63 fGeoCacheMaxLevels = capacity;
66 fLevel = 0;
67 fStackLevel = 0;
68 fInfoLevel = 0;
69 fCurrentID = 0;
70 fIndex = 0;
71 fPath = "";
72 fTop = top;
73 fNode = top;
75 for (Int_t ist = 0; ist < fGeoCacheStackSize; ist++)
76 fStack->Add(new TGeoCacheState(fGeoCacheMaxLevels)); // !obsolete 100
81 for (Int_t i = 0; i < fGeoCacheMaxLevels; i++) {
82 fMPB[i] = new TGeoHMatrix(TString::Format("global_%d", i));
83 fMatrixBranch[i] = nullptr;
84 fNodeBranch[i] = nullptr;
85 }
86 for (Int_t i = 0; i < fGeoInfoStackSize; i++) {
87 fInfoBranch[i] = nullptr;
88 }
89 fPWInfo = nullptr;
90 fMatrix = fMatrixBranch[0] = fMPB[0];
91 fNodeBranch[0] = top;
92 fNodeIdArray = nullptr;
93 for (Int_t i = 0; i < 100; i++)
94 fIdBranch[i] = 0;
95 if (nodeid)
97 CdTop();
98}
99
100////////////////////////////////////////////////////////////////////////////////
101/// Destructor
102
104{
105 if (fStack) {
106 fStack->Delete();
107 delete fStack;
108 }
109 if (fMatrixBranch)
110 delete[] fMatrixBranch;
111 if (fMPB) {
112 for (Int_t i = 0; i < fGeoCacheMaxLevels; i++)
113 delete fMPB[i];
114 delete[] fMPB;
115 }
116 delete[] fNodeBranch;
117 if (fInfoBranch) {
118 for (Int_t i = 0; i < fGeoInfoStackSize; i++)
119 delete fInfoBranch[i];
120 }
121 delete[] fInfoBranch;
122 if (fNodeIdArray)
123 delete[] fNodeIdArray;
124 delete fPWInfo;
125}
126
127////////////////////////////////////////////////////////////////////////////////
128/// Builds node id array.
129
131{
133 // if (nnodes>3E7) return;
134 if (fNodeIdArray)
135 delete[] fNodeIdArray;
136 Info("BuildIDArray", "--- node ID tracking enabled, size=%lu Bytes\n", ULong_t((2 * nnodes + 1) * sizeof(Int_t)));
137 fNodeIdArray = new Int_t[2 * nnodes + 1];
138 fNodeIdArray[0] = 0;
139 Int_t ifree = 1;
140 Int_t nodeid = 0;
143 fIdBranch[0] = 0;
144}
145
146////////////////////////////////////////////////////////////////////////////////
147/// Builds info branch. Navigation is possible only after this step.
148
150{
151 if (!fInfoBranch)
153 else if (fInfoBranch[0])
154 return;
155 for (Int_t i = 0; i < fGeoInfoStackSize; i++) {
156 fInfoBranch[i] = new TGeoStateInfo();
157 }
158}
159
160////////////////////////////////////////////////////////////////////////////////
161/// Get the PW info, if none create one
162
164{
165 if (fPWInfo)
166 return fPWInfo;
167 fPWInfo = new TGeoStateInfo(nd);
168 return fPWInfo;
169}
170
171////////////////////////////////////////////////////////////////////////////////
172/// Change current path to point to the node having this id.
173/// Node id has to be in range : 0 to fNNodes-1 (no check for performance reasons)
174
176{
177 if (!fNodeIdArray) {
178 Error("CdNode", "Navigation based on physical node unique id disabled.\n To enable, use: "
179 "gGeoManager->GetCache()->BuildIdArray()");
180 return;
181 }
183 if (nodeid == arr[fIndex])
184 return;
185 while (fLevel > 0) {
186 gGeoManager->CdUp();
187 if (nodeid == arr[fIndex])
188 return;
189 }
191 Int_t currentID = 0;
192 Int_t nd = GetNode()->GetNdaughters();
194 while (nodeid != currentID && nd) {
195 nabove = nd + 1;
196 nbelow = 0;
197 while (nabove - nbelow > 1) {
198 middle = (nabove + nbelow) >> 1;
200 if (nodeid == currentID) {
202 return;
203 }
204 if (nodeid < currentID)
205 nabove = middle;
206 else
207 nbelow = middle;
208 }
211 nd = GetNode()->GetNdaughters();
212 }
213}
214
215////////////////////////////////////////////////////////////////////////////////
216/// Make daughter INDEX of current node the active state. Compute global matrix.
217
219{
221 if (!newnode)
222 return kFALSE;
223 fLevel++;
224 if (fNodeIdArray) {
227 }
228 fNode = newnode;
230 TGeoMatrix *local = newnode->GetMatrix();
232 if (!local->IsIdentity()) {
233 newmat->CopyFrom(fMatrix);
234 newmat->Multiply(local);
235 fMatrix = newmat;
236 }
238 return kTRUE;
239}
240
241////////////////////////////////////////////////////////////////////////////////
242/// Make daughter INDEX of current node the active state. Compute global matrix.
243
245{
246 if (!newnode)
247 return kFALSE;
248 fLevel++;
249 if (fNodeIdArray) {
253 }
254 fNode = newnode;
256 TGeoMatrix *local = newnode->GetMatrix();
258 if (!local->IsIdentity()) {
259 newmat->CopyFrom(fMatrix);
260 newmat->Multiply(local);
261 fMatrix = newmat;
262 }
264 return kTRUE;
265}
266
267////////////////////////////////////////////////////////////////////////////////
268/// Make mother of current node the active state.
269
271{
272 if (!fLevel)
273 return;
274 fLevel--;
275 if (fNodeIdArray)
279}
280
281////////////////////////////////////////////////////////////////////////////////
282/// Returns a fixed ID for current physical node
283
285{
286 if (fNodeIdArray)
287 return fNodeIdArray[fIndex];
288 return GetNodeId();
289}
290
291////////////////////////////////////////////////////////////////////////////////
292/// Get unique node id.
293
295{
296 Longptr_t id = 0;
297 for (Int_t level = 0; level < fLevel + 1; level++)
298 id += (Longptr_t)fNodeBranch[level];
299 return (Int_t)id;
300}
301
302////////////////////////////////////////////////////////////////////////////////
303/// Fill names with current branch volume names (4 char - used by GEANT3 interface).
304
306{
307 const char *name;
308 for (Int_t i = 0; i < fLevel + 1; i++) {
310 memcpy(&names[i], name, sizeof(Int_t));
311 }
312}
313
314////////////////////////////////////////////////////////////////////////////////
315/// Fill copy numbers of current branch nodes.
316
318{
319 for (Int_t i = 0; i < fLevel + 1; i++) {
322 }
323}
324
325////////////////////////////////////////////////////////////////////////////////
326/// Fill copy numbers of current branch nodes.
327
329{
331 for (Int_t i = 0; i < fLevel + 1; i++) {
332 if (!fNodeBranch[i]->IsOffset())
334 isonly[i] = (ismany) ? 0 : 1;
335 }
336}
337
338////////////////////////////////////////////////////////////////////////////////
339/// Get next state info pointer.
340
354
355////////////////////////////////////////////////////////////////////////////////
356/// Release last used state info pointer.
357
362
363////////////////////////////////////////////////////////////////////////////////
364/// Returns the current geometry path.
365
367{
368 fPath = "";
369 for (Int_t level = 0; level < fLevel + 1; level++) {
370 fPath += "/";
371 fPath += fNodeBranch[level]->GetName();
372 }
373 return fPath.Data();
374}
375
376////////////////////////////////////////////////////////////////////////////////
377/// Push current state into heap.
378
388
389////////////////////////////////////////////////////////////////////////////////
390/// Pop next state/point from heap.
391
393{
394 if (!fStackLevel)
395 return false;
396 Bool_t ovlp = ((TGeoCacheState *)fStack->At(--fStackLevel))->GetState(fLevel, nmany, point);
397 Refresh();
398 // return (fStackLevel+1);
399 return ovlp;
400}
401
402////////////////////////////////////////////////////////////////////////////////
403/// Pop next state/point from heap and restore matrices starting from LEVEL.
404
406{
407 if (level <= 0)
408 return false;
409 Bool_t ovlp = ((TGeoCacheState *)fStack->At(level - 1))->GetState(fLevel, nmany, point);
410 Refresh();
411 return ovlp;
412}
413
414////////////////////////////////////////////////////////////////////////////////
415/// Pop next state/point from a backed-up state.
416
418{
419 Bool_t ovlp = state->GetState(fLevel, nmany, point);
420 Refresh();
421 return ovlp;
422}
423
424////////////////////////////////////////////////////////////////////////////////
425/// Local point converted to master frame defined by current matrix.
426
431
432////////////////////////////////////////////////////////////////////////////////
433/// Point in master frame defined by current matrix converted to local one.
434
439
440////////////////////////////////////////////////////////////////////////////////
441/// Local vector converted to master frame defined by current matrix.
442
447
448////////////////////////////////////////////////////////////////////////////////
449/// Vector in master frame defined by current matrix converted to local one.
450
455
456////////////////////////////////////////////////////////////////////////////////
457/// Local point converted to master frame defined by current matrix and rescaled with bomb factor.
458
463
464////////////////////////////////////////////////////////////////////////////////
465/// Point in master frame defined by current matrix converted to local one and rescaled with bomb factor.
466
471
472
473/** \class TGeoCacheState
474\ingroup Geometry_classes
475
476Class storing the state of the cache at a given moment
477
478*/
479
480////////////////////////////////////////////////////////////////////////////////
481/// Default ctor.
482
484{
485 fCapacity = 0;
486 fLevel = 0;
487 fNmany = 0;
488 fStart = 0;
489 memset(fIdBranch, 0, 30 * sizeof(Int_t));
490 memset(fPoint, 0, 3 * sizeof(Int_t));
492 fNodeBranch = nullptr;
493 fMatrixBranch = nullptr;
494 fMatPtr = nullptr;
495}
496
497////////////////////////////////////////////////////////////////////////////////
498/// Ctor.
499
501{
502 fCapacity = capacity;
503 fLevel = 0;
504 fNmany = 0;
505 fStart = 0;
506 memset(fIdBranch, 0, 30 * sizeof(Int_t));
507 memset(fPoint, 0, 3 * sizeof(Int_t));
509 fNodeBranch = new TGeoNode *[capacity];
510 fMatrixBranch = new TGeoHMatrix *[capacity];
511 fMatPtr = new TGeoHMatrix *[capacity];
512 for (Int_t i = 0; i < capacity; i++) {
513 fMatrixBranch[i] = new TGeoHMatrix("global");
514 fNodeBranch[i] = nullptr;
515 }
516}
517
518////////////////////////////////////////////////////////////////////////////////
519/// copy constructor
520
522 : TObject(gcs),
523 fCapacity(gcs.fCapacity),
524 fLevel(gcs.fLevel),
525 fNmany(gcs.fNmany),
526 fStart(gcs.fStart),
527 fOverlapping(gcs.fOverlapping)
528{
529 Int_t i;
530 for (i = 0; i < 3; i++)
531 fPoint[i] = gcs.fPoint[i];
532 for (i = 0; i < 30; i++)
533 fIdBranch[i] = gcs.fIdBranch[i];
537 for (i = 0; i < fCapacity; i++) {
538 fNodeBranch[i] = gcs.fNodeBranch[i];
539 fMatrixBranch[i] = new TGeoHMatrix(*gcs.fMatrixBranch[i]);
540 fMatPtr[i] = gcs.fMatPtr[i];
541 }
542}
543
544////////////////////////////////////////////////////////////////////////////////
545/// assignment operator
546
548{
549 Int_t i;
550 if (this != &gcs) {
552 fCapacity = gcs.fCapacity;
553 fLevel = gcs.fLevel;
554 fNmany = gcs.fNmany;
555 fStart = gcs.fStart;
556 for (i = 0; i < 30; i++)
557 fIdBranch[i] = gcs.fIdBranch[i];
558 for (i = 0; i < 3; i++)
559 fPoint[i] = gcs.fPoint[i];
560 fOverlapping = gcs.fOverlapping;
564 for (i = 0; i < fCapacity; i++) {
565 fNodeBranch[i] = gcs.fNodeBranch[i];
566 fMatrixBranch[i] = new TGeoHMatrix(*gcs.fMatrixBranch[i]);
567 fMatPtr[i] = gcs.fMatPtr[i];
568 }
569 }
570 return *this;
571}
572
573////////////////////////////////////////////////////////////////////////////////
574/// Dtor.
575
577{
578 if (fNodeBranch) {
579 for (Int_t i = 0; i < fCapacity; i++) {
580 delete fMatrixBranch[i];
581 }
582 delete[] fNodeBranch;
583 delete[] fMatrixBranch;
584 delete[] fMatPtr;
585 }
586}
587
588////////////////////////////////////////////////////////////////////////////////
589/// Fill current modeller state.
590
592{
593 fLevel = level;
595 fNmany = nmany;
597 if (cache->HasIdArray())
598 memcpy(fIdBranch, cache->GetIdBranch() + fStart, (level + 1 - fStart) * sizeof(Int_t));
599 TGeoNode **node_branch = (TGeoNode **)cache->GetBranch();
601 Int_t nelem = level + 1 - fStart;
604 TGeoHMatrix *last = nullptr;
605 TGeoHMatrix *current;
606 for (Int_t i = 0; i < nelem; i++) {
607 current = mat_branch[i + fStart];
608 if (current == last)
609 continue;
610 *fMatrixBranch[i] = current;
611 last = current;
612 }
614 if (point)
615 memcpy(fPoint, point, 3 * sizeof(Double_t));
616}
617
618////////////////////////////////////////////////////////////////////////////////
619/// Restore a modeler state.
620
622{
623 level = fLevel;
624 nmany = fNmany;
626 if (cache->HasIdArray())
628 TGeoNode **node_branch = (TGeoNode **)cache->GetBranch();
630 Int_t nelem = level + 1 - fStart;
632 memcpy(mat_branch + fStart, fMatPtr, (level + 1 - fStart) * sizeof(TGeoHMatrix *));
633 TGeoHMatrix *last = nullptr;
634 TGeoHMatrix *current;
635 for (Int_t i = 0; i < nelem; i++) {
636 current = mat_branch[i + fStart];
637 if (current == last)
638 continue;
639 *current = fMatrixBranch[i];
640 last = current;
641 }
642 if (point)
643 memcpy(point, fPoint, 3 * sizeof(Double_t));
644 return fOverlapping;
645}
long Longptr_t
Integer large enough to hold a pointer (platform-dependent)
Definition RtypesCore.h:89
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
Definition RtypesCore.h:69
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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
char name[80]
Definition TGX11.cxx:110
R__EXTERN TGeoManager * gGeoManager
Class storing the state of the cache at a given moment.
Definition TGeoCache.h:28
TGeoHMatrix ** fMatPtr
Definition TGeoCache.h:40
Bool_t GetState(Int_t &level, Int_t &nmany, Double_t *point) const
Restore a modeler state.
Int_t fIdBranch[30]
Definition TGeoCache.h:34
Bool_t fOverlapping
Definition TGeoCache.h:36
TGeoHMatrix ** fMatrixBranch
Definition TGeoCache.h:39
~TGeoCacheState() override
Dtor.
Int_t fCapacity
Definition TGeoCache.h:30
TGeoNode ** fNodeBranch
Definition TGeoCache.h:38
TGeoCacheState()
Default ctor.
void SetState(Int_t level, Int_t startlevel, Int_t nmany, Bool_t ovlp, Double_t *point=nullptr)
Fill current modeller state.
Double_t fPoint[3]
Definition TGeoCache.h:35
TGeoCacheState & operator=(const TGeoCacheState &)
assignment operator
Matrix class used for computing global transformations Should NOT be used for node definition.
Definition TGeoMatrix.h:458
void CdUp()
Go one level up in geometry.
TGeoNode * GetTopNode() const
Int_t GetNNodes()
TGeoNodeCache * GetCache() const
void CdTop()
Make top level node the current node.
void CdDown(Int_t index)
Make a daughter of current node current.
Geometrical transformation package.
Definition TGeoMatrix.h:38
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
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 MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
virtual void LocalToMasterBomb(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
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
virtual void MasterToLocalBomb(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
Special pool of reusable nodes.
Definition TGeoCache.h:56
void * GetMatrices() const
Definition TGeoCache.h:108
Int_t fGeoCacheStackSize
Definition TGeoCache.h:59
TGeoHMatrix ** fMPB
Definition TGeoCache.h:73
TGeoNode * GetNode() const
Definition TGeoCache.h:116
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
void * GetBranch() const
Definition TGeoCache.h:104
Bool_t PopState(Int_t &nmany, Double_t *point=nullptr)
Pop next state/point from heap.
TGeoNodeCache()
Dummy constructor.
Definition TGeoCache.cxx:33
void CdTop()
Definition TGeoCache.h:92
void GetBranchOnlys(Int_t *isonly) const
Fill copy numbers of current branch nodes.
const char * GetPath()
Returns the current geometry path.
void MasterToLocal(const Double_t *master, Double_t *local) const
Point in master frame defined by current matrix converted to local one.
TGeoStateInfo * fPWInfo
Definition TGeoCache.h:76
Int_t fIdBranch[100]
Definition TGeoCache.h:66
void BuildIdArray()
Builds node id array.
Int_t fInfoLevel
Definition TGeoCache.h:63
Int_t * fNodeIdArray
State info for the parallel world.
Definition TGeoCache.h:77
void BuildInfoBranch()
Builds info branch. Navigation is possible only after this step.
Int_t PushState(Bool_t ovlp, Int_t ntmany=0, Int_t startlevel=0, Double_t *point=nullptr)
Push current state into heap.
const Int_t * GetIdBranch() const
Definition TGeoCache.h:103
TGeoHMatrix ** fMatrixBranch
Definition TGeoCache.h:72
void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const
Fill copy numbers of current branch nodes.
TGeoStateInfo ** fInfoBranch
Definition TGeoCache.h:75
TObjArray * fStack
current matrix
Definition TGeoCache.h:71
Int_t GetNodeId() const
Get unique node id.
TGeoStateInfo * GetInfo()
Get next state info pointer.
TGeoStateInfo * GetMakePWInfo(Int_t nd)
Get the PW info, if none create one.
Int_t fStackLevel
Definition TGeoCache.h:62
void MasterToLocalVect(const Double_t *master, Double_t *local) const
Vector in master frame defined by current matrix converted to local one.
void MasterToLocalBomb(const Double_t *master, Double_t *local) const
Point in master frame defined by current matrix converted to local one and rescaled with bomb factor.
Int_t fCurrentID
Definition TGeoCache.h:64
Bool_t HasIdArray() const
Definition TGeoCache.h:125
TGeoHMatrix * fMatrix
current node
Definition TGeoCache.h:70
Bool_t CdDown(Int_t index)
Make daughter INDEX of current node the active state. Compute global matrix.
Bool_t RestoreState(Int_t &nmany, TGeoCacheState *state, Double_t *point=nullptr)
Pop next state/point from a backed-up state.
void LocalToMaster(const Double_t *local, Double_t *master) const
Local point converted to master frame defined by current matrix.
void LocalToMasterVect(const Double_t *local, Double_t *master) const
Local vector converted to master frame defined by current matrix.
Int_t GetCurrentNodeId() const
Returns a fixed ID for current physical node.
TGeoNode ** fNodeBranch
Definition TGeoCache.h:74
TGeoNode * fTop
Definition TGeoCache.h:68
TString fPath
Definition TGeoCache.h:67
TGeoNode * fNode
Definition TGeoCache.h:69
void LocalToMasterBomb(const Double_t *local, Double_t *master) const
Local point converted to master frame defined by current matrix and rescaled with bomb factor.
void CdUp()
Make mother of current node the active state.
void GetBranchNames(Int_t *names) const
Fill names with current branch volume names (4 char - used by GEANT3 interface).
void FillIdBranch(const Int_t *br, Int_t startlevel=0)
Definition TGeoCache.h:98
void ReleaseInfo()
Release last used state info pointer.
void Refresh()
Definition TGeoCache.h:138
Int_t fGeoCacheMaxLevels
Definition TGeoCache.h:58
~TGeoNodeCache() override
Destructor.
Int_t fGeoInfoStackSize
Definition TGeoCache.h:60
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Definition TGeoNode.h:39
Bool_t IsOverlapping() const
Definition TGeoNode.h:107
TGeoVolume * GetVolume() const
Definition TGeoNode.h:99
Int_t GetNdaughters() const
Definition TGeoNode.h:91
TGeoNode * GetDaughter(Int_t ind) const
Definition TGeoNode.h:83
Int_t GetNumber() const
Definition TGeoNode.h:93
void FillIdArray(Int_t &ifree, Int_t &nodeid, Int_t *array) const
Fill array with node id. Recursive on node branch.
Definition TGeoNode.cxx:392
Int_t GetIndex(const TGeoNode *node) const
get index number for a given daughter
Int_t GetNumber() const
Definition TGeoVolume.h:184
const char * GetName() const override
Returns name of object.
Definition TNamed.h:49
An array of TObjects.
Definition TObjArray.h:31
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
Definition TObjArray.h:164
void Add(TObject *obj) override
Definition TObjArray.h:68
Mother of all ROOT objects.
Definition TObject.h:41
TObject & operator=(const TObject &rhs) noexcept
TObject assignment operator.
Definition TObject.h:299
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition TObject.cxx:1071
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition TObject.cxx:1045
const char * Data() const
Definition TString.h:384
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2384
Statefull info for the current geometry level.