39 class TGeoNode :
public TNamed,
43 TGeoVolume *fVolume =
nullptr;
44 TGeoVolume *fMother =
nullptr;
47 Int_t *fOverlaps =
nullptr;
48 TGeoExtension *fUserExtension =
nullptr;
49 TGeoExtension *fFWExtension =
nullptr;
51 void CopyOverlaps(Int_t *ovlp, Int_t novlp);
54 TGeoNode(
const TGeoNode&);
55 TGeoNode& operator=(
const TGeoNode&);
59 kGeoNodeMatrix = BIT(14),
60 kGeoNodeOffset = BIT(15),
62 kGeoNodeOverlap = BIT(17),
63 kGeoNodeCloned = BIT(18)
68 TGeoNode(
const TGeoVolume *vol);
72 void Browse(TBrowser *b);
73 virtual void cd()
const {;}
74 void CheckOverlaps(Double_t ovlp=0.1, Option_t *option=
"");
76 Int_t CountDaughters(Bool_t unique_volumes=kFALSE);
77 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
78 void Draw(Option_t *option=
"");
79 void DrawOnly(Option_t *option=
"");
81 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
82 void FillIdArray(Int_t &ifree, Int_t &nodeid, Int_t *array)
const;
83 Int_t FindNode(
const TGeoNode *node, Int_t level);
84 virtual Int_t GetByteCount()
const {
return 44;}
85 TGeoNode *GetDaughter(Int_t ind)
const {
return fVolume->GetNode(ind);}
86 virtual TGeoMatrix *GetMatrix()
const = 0;
88 Int_t GetColour()
const {
return fVolume->GetLineColor();}
89 virtual Int_t GetIndex()
const {
return 0;}
90 virtual TGeoPatternFinder *GetFinder()
const {
return 0;}
91 TGeoMedium *GetMedium()
const {
return fVolume->GetMedium();}
92 TGeoVolume *GetMotherVolume()
const {
return fMother;}
93 Int_t GetNdaughters()
const {
return fVolume->GetNdaughters();}
94 TObjArray *GetNodes()
const {
return fVolume->GetNodes();}
95 Int_t GetNumber()
const {
return fNumber;}
96 Int_t *GetOverlaps(Int_t &novlp)
const {novlp=fNovlp;
return fOverlaps;}
97 TGeoVolume *GetVolume()
const {
return fVolume;}
98 virtual char *GetObjectInfo(Int_t px, Int_t py)
const;
99 virtual Int_t GetOptimalVoxels()
const {
return 0;}
100 void InspectNode()
const;
101 Bool_t IsCloned()
const {
return TObject::TestBit(kGeoNodeCloned);}
102 virtual Bool_t IsFolder()
const {
return (GetNdaughters()?kTRUE:kFALSE);}
103 Bool_t IsOffset()
const {
return TObject::TestBit(kGeoNodeOffset);}
104 Bool_t IsOnScreen()
const;
105 Bool_t IsOverlapping()
const {
return TObject::TestBit(kGeoNodeOverlap);}
106 Bool_t IsVirtual()
const {
return TObject::TestBit(kGeoNodeVC);}
107 Bool_t IsVisible()
const {
return (TGeoAtt::IsVisible() && fVolume->IsVisible());}
108 Bool_t IsVisDaughters()
const {
return (TGeoAtt::IsVisDaughters() && fVolume->IsVisDaughters());}
109 Bool_t MayOverlap(Int_t iother)
const;
111 virtual TGeoNode *MakeCopyNode()
const {
return 0;}
112 Double_t Safety(
const Double_t *point, Bool_t in=kTRUE)
const;
113 void SaveAttributes(std::ostream &out);
114 void SetCurrentPoint(Double_t x, Double_t y, Double_t z) {fVolume->SetCurrentPoint(x,y,z);}
115 void SetVolume(TGeoVolume *volume) {fVolume = volume;}
116 void SetNumber(Int_t number) {fNumber=number;}
117 void SetCloned(Bool_t flag=kTRUE) {TObject::SetBit(kGeoNodeCloned, flag);}
118 void SetOverlapping(Bool_t flag=kTRUE) {TObject::SetBit(kGeoNodeOverlap, flag);}
119 void SetVirtual() {TObject::SetBit(kGeoNodeVC, kTRUE);}
120 void SetVisibility(Bool_t vis=kTRUE);
121 void SetInvisible() {SetVisibility(kFALSE);}
122 void SetAllInvisible() {VisibleDaughters(kFALSE);}
123 void SetMotherVolume(TGeoVolume *mother) {fMother = mother;}
124 void SetOverlaps(Int_t *ovlp, Int_t novlp);
125 void SetUserExtension(TGeoExtension *ext);
126 void SetFWExtension(TGeoExtension *ext);
127 TGeoExtension *GetUserExtension()
const {
return fUserExtension;}
128 TGeoExtension *GetFWExtension()
const {
return fFWExtension;}
129 TGeoExtension *GrabUserExtension()
const;
130 TGeoExtension *GrabFWExtension()
const;
132 virtual void MasterToLocal(
const Double_t *master, Double_t *local)
const;
133 virtual void MasterToLocalVect(
const Double_t *master, Double_t *local)
const;
134 virtual void LocalToMaster(
const Double_t *local, Double_t *master)
const;
135 virtual void LocalToMasterVect(
const Double_t *local, Double_t *master)
const;
137 virtual void ls(Option_t *option =
"")
const;
138 virtual void Paint(Option_t *option =
"");
139 void PrintCandidates()
const;
140 void PrintOverlaps()
const;
141 void VisibleDaughters(Bool_t vis=kTRUE);
143 ClassDef(TGeoNode, 2)
152 class TGeoNodeMatrix :
public TGeoNode
155 TGeoMatrix *fMatrix =
nullptr;
157 TGeoNodeMatrix(
const TGeoNodeMatrix& gnm);
158 TGeoNodeMatrix& operator=(
const TGeoNodeMatrix& gnm);
163 TGeoNodeMatrix(
const TGeoVolume *vol,
const TGeoMatrix *matrix);
165 virtual ~TGeoNodeMatrix();
167 virtual Int_t GetByteCount()
const;
168 virtual Int_t GetOptimalVoxels()
const;
169 virtual Bool_t IsFolder()
const {
return kTRUE;}
170 virtual TGeoMatrix *GetMatrix()
const {
return fMatrix;}
171 virtual TGeoNode *MakeCopyNode()
const;
172 void SetMatrix(
const TGeoMatrix *matrix);
174 ClassDef(TGeoNodeMatrix, 1)
183 class TGeoNodeOffset :
public TGeoNode
186 Double_t fOffset = 0.;
188 TGeoPatternFinder *fFinder =
nullptr;
190 TGeoNodeOffset(
const TGeoNodeOffset&);
191 TGeoNodeOffset& operator=(
const TGeoNodeOffset&);
196 TGeoNodeOffset(
const TGeoVolume *vol, Int_t index, Double_t offset);
198 virtual ~TGeoNodeOffset();
200 virtual void cd()
const {fFinder->cd(fIndex);}
201 Double_t GetOffset()
const {
return fOffset;}
202 virtual Int_t GetIndex()
const;
203 virtual TGeoPatternFinder *GetFinder()
const {
return fFinder;}
204 virtual TGeoMatrix *GetMatrix()
const {cd();
return fFinder->GetMatrix();}
205 virtual TGeoNode *MakeCopyNode()
const;
206 void SetFinder(TGeoPatternFinder *finder) {fFinder = finder;}
208 ClassDef(TGeoNodeOffset, 1)
220 class TGeoIteratorPlugin :
public TObject
223 const TGeoIterator *fIterator =
nullptr;
226 TGeoIteratorPlugin(
const TGeoIteratorPlugin &);
227 TGeoIteratorPlugin &operator=(
const TGeoIteratorPlugin &);
229 TGeoIteratorPlugin() : TObject(),fIterator(0) {}
230 virtual ~TGeoIteratorPlugin() {}
232 virtual void ProcessNode() = 0;
233 void SetIterator(
const TGeoIterator *iter) {fIterator = iter;}
235 ClassDef(TGeoIteratorPlugin, 0)
247 TGeoVolume *fTop =
nullptr;
248 Bool_t fMustResume = kFALSE;
249 Bool_t fMustStop = kFALSE;
252 Int_t *fArray =
nullptr;
253 TGeoHMatrix *fMatrix =
nullptr;
257 Bool_t fPluginAutoexec = kFALSE;
259 void IncreaseArray();
261 TGeoIterator() : fTop(0), fMustResume(0), fMustStop(0), fLevel(0), fType(0),
262 fArray(0), fMatrix(0), fTopName(), fPlugin(0), fPluginAutoexec(kFALSE) { }
265 TGeoIterator(TGeoVolume *top);
266 TGeoIterator(
const TGeoIterator &iter);
267 virtual ~TGeoIterator();
269 TGeoIterator &operator=(
const TGeoIterator &iter);
270 TGeoNode *operator()();
272 void Up() {
if (fLevel > 0) fLevel--; }
274 const TGeoMatrix *GetCurrentMatrix()
const;
275 Int_t GetIndex(Int_t i)
const {
return ((i<=fLevel)?fArray[i]:-1);}
276 Int_t GetLevel()
const {
return fLevel;}
277 TGeoNode *GetNode(Int_t level)
const;
278 void GetPath(TString &path)
const;
280 *GetUserPlugin()
const {
return fPlugin;}
282 TGeoVolume *GetTopVolume()
const {
return fTop;}
283 Int_t GetType()
const {
return fType;}
284 void Reset(TGeoVolume *top=0);
285 void SetUserPlugin(TGeoIteratorPlugin *plugin);
286 void SetPluginAutoexec(Bool_t mode) {fPluginAutoexec = mode;}
287 void SetType(Int_t type) {fType = type;}
288 void SetTopName(
const char* name);
291 ClassDef(TGeoIterator,0)