BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
DetectorDescription/ROOTGeo/src/MucROOTGeo.cxx
Go to the documentation of this file.
1//$id$
2/*
3 * 2004/11/29 Zhengyun You Peking University
4 * Muc Geometry General for EventDisplay
5 *
6 * 2004/12/11 Zhengyun You Peking University
7 * named from MucGeo to MucROOTGeo
8 * inherit from class SubDetectorROOTGeo
9 */
10
11using namespace std;
12
13#include <fstream>
14#include <iomanip>
15#include <iostream>
16#include <sstream>
17#include <string>
18#include <vector>
19
20#include "TGeoManager.h"
21
22#include "ROOTGeo/MucROOTGeo.h"
23
24const int MucROOTGeo::m_kSeg[m_kPart] = { 4, 8, 4 };
25const int MucROOTGeo::m_kAbsorber[m_kPart] = { 9, 9, 9 };
26const int MucROOTGeo::m_kGap[m_kPart] = { 8, 9, 8 };
27const int MucROOTGeo::m_kPanel[m_kPart] = { 4, 3, 4 };
28
30 // Default constructor.
31 for ( int part = 0; part < m_kPart; part++ )
32 {
33 for ( int seg = 0; seg < m_kSegMax; seg++ )
34 {
35 for ( int gap = 0; gap < m_kGapMax; gap++ )
36 {
37 m_NodeGap[part][seg][gap] = 0;
38 m_PhysicalGap[part][seg][gap] = 0;
39 // m_NodeBox[part][seg][gap] = 0;
40 // m_PhysicalBox[part][seg][gap] = 0;
41 for ( int strip = 0; strip < m_kStripMax; strip++ )
42 {
43 m_NodeStrip[part][seg][gap][strip] = 0;
44 m_PhysicalStrip[part][seg][gap][strip] = 0;
45 }
46 }
47 }
48 }
49
50 string GdmlManagementPath = getenv( "GDMLMANAGEMENTDATAROOT" );
51 // cout << "MucGeoGeneral::InitFromXML(), GdmlManagementPath not found" << endl;
52 string GdmlFile = GdmlManagementPath + string( "/dat/Muc.gdml" );
53 // string GdmlFile = string("Muc.gdml");
54 cout << "GdmlFile " << GdmlFile << endl;
55 InitFromGdml( GdmlFile.c_str(), "Muc" );
56}
57
59
60void MucROOTGeo::InitFromGdml( const char* gdmlFile, const char* setupName ) {
61 ReadGdml( gdmlFile, setupName );
62 SetNode();
63 // SetDefaultVis();
64
65 m_ROOTGeoInit = 1;
66}
67
69 m_Muc = GetTopVolume();
70 if ( !m_Muc ) { m_Muc = GetLogicalVolume( "logicalMuc" ); }
71 if ( !m_Muc ) std::cout << "m_Muc = 0" << std::endl;
72
73 int gapCount = 0;
74 for ( int part = 0; part < m_kPart; part++ )
75 {
76 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
77 {
78 for ( int gap = 0; gap < m_kGap[part]; gap++ )
79 {
80 m_StripNum[part][seg][gap] = GetVolumeStripPlane( part, seg, gap )->GetNdaughters();
81 // std::cout << part << " " << seg << " " << gap << " " << m_StripNum[part][seg][gap]
82 // <<" "<<GetVolumeStripPlane(part, seg, gap)->GetName()<< std::endl;
83
84 std::stringstream osnameGap;
85 osnameGap << "pv_"
86 << "l"
87 << "Muc"
88 << "P" << part << "S" << seg << "G" << gap << "_" << gapCount;
89 m_NodeGap[part][seg][gap] = GetNode( osnameGap.str() );
90 gapCount++;
91
92 // cout<<"in MucROOTGeo "<<m_NodeGap[part][seg][gap]->GetName()<<"
93 // "<<m_NodeGap[part][seg][gap]->GetDaughter(0)->GetName()<<endl;
94
95 std::stringstream osnameBox;
96 osnameBox << "pv_"
97 << "l"
98 << "Muc"
99 << "P" << part << "S" << seg << "G" << gap << "Al"
100 << "_"
101 << "0";
102 // m_NodeAluminumBox[part][seg][gap] = GetNode( osnameBox.str() );
103 TGeoNode* temp = GetNode( osnameBox.str() );
104
105 int segment = 0;
106 if ( part == 1 && seg == 2 ) segment = 2;
107 std::stringstream osnameStripPlane;
108 osnameStripPlane << "pv_"
109 << "l"
110 << "Muc"
111 << "P" << part << "S" << segment << "G" << gap << "SP"
112 << "_"
113 << "0";
114 m_NodeStripPlane[part][seg][gap] = GetNode( osnameStripPlane.str() );
115
116 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
117 {
118 std::stringstream osnameStrip;
119 if ( strip < 10 )
120 {
121 osnameStrip << "pv_"
122 << "l"
123 << "Muc"
124 << "P" << part << "S" << segment << "G" << gap << "s"
125 << "00" << strip << "_" << strip;
126 }
127 else if ( strip < 100 )
128 {
129 osnameStrip << "pv_"
130 << "l"
131 << "Muc"
132 << "P" << part << "S" << segment << "G" << gap << "s"
133 << "0" << strip << "_" << strip;
134 }
135 else
136 {
137 osnameStrip << "pv_"
138 << "l"
139 << "Muc"
140 << "P" << part << "S" << segment << "G" << gap << "s" << strip << "_"
141 << strip;
142 }
143
144 m_NodeStrip[part][seg][gap][strip] = GetNode( osnameStrip.str() );
145 }
146 }
147 }
148 }
149}
150
152 // std::cout << "begin of set defaultvis" << std::endl;
153 int mucColor = 2;
154 int absorberColor = 2;
155 int gapColor = 8;
156 int gasChamberColor = 8;
157 int bakeliteColor = 8;
158 int stripColor = 6;
159
160 m_Muc->SetLineColor( mucColor );
161 m_Muc->SetVisibility( 0 );
162
163 for ( int part = 0; part < m_kPart; part++ )
164 {
165 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
166 {
167 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
168 {
169 GetVolumeAbsorber( part, seg, absorber )->SetLineColor( absorberColor );
170 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
171 if ( part != 1 )
172 {
173 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
174 {
175 GetVolumeAbsorberPanel( part, seg, absorber, panel )
176 ->SetLineColor( absorberColor );
177 GetVolumeAbsorberPanel( part, seg, absorber, panel )->SetVisibility( 0 );
178 }
179 }
180 }
181
182 for ( int gap = 0; gap < m_kGap[part]; gap++ )
183 {
184 GetVolumeGap( part, seg, gap )->SetLineColor( gapColor );
185 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
186 GetVolumeStripPlane( part, seg, gap )->SetLineColor( gapColor );
187 GetVolumeStripPlane( part, seg, gap )->SetVisibility( 0 );
188
189 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
190 {
191 GetVolumeStrip( part, seg, gap, strip )->SetLineColor( stripColor );
192 GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 1 );
193 }
194
195 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
196 {
197 for ( int bakelite = 0; bakelite < m_kBakelite; bakelite++ )
198 {
199 GetVolumeBakelite( part, seg, gap, panel, bakelite )
200 ->SetLineColor( bakeliteColor );
201 GetVolumeBakelite( part, seg, gap, panel, bakelite )->SetVisibility( 0 );
202 }
203 for ( int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++ )
204 {
205 GetVolumeGasChamber( part, seg, gap, panel, gasChamber )
206 ->SetLineColor( gasChamberColor );
207 GetVolumeGasChamber( part, seg, gap, panel, gasChamber )->SetVisibility( 0 );
208 }
209 }
210 }
211 }
212 }
213
214 for ( int part = 0; part < m_kPart; part++ )
215 {
216 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
217 {
218 for ( int gap = 0; gap < m_kGap[part]; gap++ )
219 {
220 GetGap( part, seg, gap )->SetVisibility( 0 );
221 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
222 { GetStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
223 }
224 }
225 }
226
227 // std::cout << "end of set defaultvis" << std::endl;
228}
229
231 for ( int part = 0; part < m_kPart; part++ )
232 {
233 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
234 {
235 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
236 {
237 if ( part == 1 ) { GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 ); }
238 else
239 {
240 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
241 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
242 { GetVolumeAbsorberPanel( part, seg, absorber, panel )->SetVisibility( 1 ); }
243 }
244 }
245
246 for ( int gap = 0; gap < m_kGap[part]; gap++ )
247 {
248 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
249 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
250 { GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
251
252 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
253 {
254 for ( int bakelite = 0; bakelite < m_kBakelite; bakelite++ )
255 { GetVolumeBakelite( part, seg, gap, panel, bakelite )->SetVisibility( 1 ); }
256 for ( int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++ )
257 { GetVolumeGasChamber( part, seg, gap, panel, gasChamber )->SetVisibility( 1 ); }
258 }
259 }
260 }
261 }
262
263 for ( int part = 0; part < m_kPart; part++ )
264 {
265 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
266 {
267 for ( int gap = 0; gap < m_kGap[part]; gap++ )
268 {
269 GetGap( part, seg, gap )->SetVisibility( 1 );
270 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
271 { GetStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
272 }
273 }
274 }
275}
276
278 for ( int part = 0; part < m_kPart; part++ )
279 {
280 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
281 {
282 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
283 {
284 if ( part == 1 )
285 {
286 if ( seg > 2 ) GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 );
287 }
288 else
289 {
290 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
291 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
292 {
293 if ( seg > 0 && seg < 3 )
294 GetVolumeAbsorberPanel( part, seg, absorber, panel )->SetVisibility( 1 );
295 }
296 }
297 }
298
299 for ( int gap = 0; gap < m_kGap[part]; gap++ )
300 {
301 if ( part == 1 && seg > 2 )
302 {
303 GetVolumeGap( part, seg, gap )->SetVisibility( 1 );
304 GetGap( part, seg, gap )->SetVisibility( 1 );
305 }
306 else
307 {
308 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
309 GetGap( part, seg, gap )->SetVisibility( 0 );
310 }
311 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
312 { GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
313
314 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
315 {
316 for ( int bakelite = 0; bakelite < m_kBakelite; bakelite++ )
317 {
318 if ( ( part != 1 && seg > 0 && seg < 3 ) || ( part == 1 && seg > 2 ) )
319 GetVolumeBakelite( part, seg, gap, panel, bakelite )->SetVisibility( 1 );
320 }
321 for ( int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++ )
322 {
323 if ( ( part != 1 && seg > 0 && seg < 3 ) || ( part == 1 && seg > 2 ) )
324 GetVolumeGasChamber( part, seg, gap, panel, gasChamber )->SetVisibility( 1 );
325 }
326 }
327 }
328 }
329 }
330}
331
333 int stripColor = 2;
334
335 if ( gGeoManager == 0 ) std::cout << "Create gGeoManager first" << std::endl;
336 TGeoNode* bes = gGeoManager->GetTopNode();
337 TGeoNode* muc = bes->GetDaughter( m_childNo );
338
339 for ( int part = 0; part < m_kPart; part++ )
340 {
341 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
342 {
343 for ( int gap = 0; gap < m_kGap[part]; gap++ )
344 {
345 TGeoNode* nodeGap = GetGap( part, seg, gap );
346 m_PhysicalGap[part][seg][gap] = gGeoManager->MakePhysicalNode(
347 TString( "/" ) + bes->GetName() + TString( "/" ) + muc->GetName() +
348 TString( "/" ) + nodeGap->GetName() + TString( "/" ) +
349 nodeGap->GetDaughter( 0 )->GetName() );
350 m_PhysicalGap[part][seg][gap]->SetVisibility( 0 );
351 m_PhysicalGap[part][seg][gap]->SetIsVolAtt( kFALSE );
352
353 TGeoNode* nodeStripPlane = GetStripPlane( part, seg, gap );
354 // std::cout << nodeGap->GetName() << " " << nodeStripPlane->GetName() << endl;
355
356 // TGeoNode *nodeBox = GetAluminumBox(part, seg, gap);
357 // m_PhysicalAluminumBox[part][seg][gap] = gGeoManager->MakePhysicalNode(
358 // TString("/") + bes->GetName() +
359 // TString("/") + muc->GetName() +
360 // TString("/") + nodeGap->GetName() +
361 // TString("/") + nodeGap->GetDaughter(0)->GetName() );
362
363 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
364 {
365 TGeoNode* nodeStrip = GetStrip( part, seg, gap, strip );
366 m_PhysicalStrip[part][seg][gap][strip] = gGeoManager->MakePhysicalNode(
367 TString( "/" ) + bes->GetName() + TString( "/" ) + muc->GetName() +
368 TString( "/" ) + nodeGap->GetName() + TString( "/" ) +
369 nodeGap->GetDaughter( 0 )->GetName() + TString( "/" ) +
370 nodeStripPlane->GetName() + TString( "/" ) + nodeStrip->GetName() );
371 m_PhysicalStrip[part][seg][gap][strip]->SetVisibility( 0 );
372 m_PhysicalStrip[part][seg][gap][strip]->SetIsVolAtt( kFALSE );
373 m_PhysicalStrip[part][seg][gap][strip]->SetLineColor( stripColor );
374 }
375 }
376 }
377 }
378}
379
381 int part = m_kPart;
382 return part;
383}
384
385int MucROOTGeo::GetSegNum( int part ) {
386 int seg = m_kSeg[part];
387 return seg;
388}
389
390int MucROOTGeo::GetGapNum( int part ) {
391 int gap = m_kGap[part];
392 return gap;
393}
394
395int MucROOTGeo::GetStripNum( int part, int seg, int gap ) {
396 int strip = m_StripNum[part][seg][gap];
397 return strip;
398}
399
400TGeoVolume* MucROOTGeo::GetVolumeAbsorber( int part, int seg, int absorber ) {
401 std::stringstream osname;
402 osname << "l"
403 << "Muc"
404 << "P" << part << "S" << seg << "Ab" << absorber;
405
406 return GetLogicalVolume( osname.str() );
407}
408
409float MucROOTGeo::GetAbsorberThickness( int part, int seg, int absorber ) {
410 float thickness = 0.0;
411 TGeoVolume* vol = GetVolumeAbsorber( part, seg, absorber );
412 if ( vol ) { thickness = 2.0 * ( (TGeoBBox*)vol->GetShape() )->GetDZ(); }
413
414 return thickness;
415}
416
417TGeoVolume* MucROOTGeo::GetVolumeAbsorberPanel( int part, int seg, int absorber, int panel ) {
418 std::stringstream osname;
419 osname << "l"
420 << "Muc"
421 << "P" << part << "S" << seg << "Ab" << absorber << "Pn" << panel;
422
423 return GetLogicalVolume( osname.str() );
424}
425
426TGeoVolume* MucROOTGeo::GetVolumeGap( int part, int seg, int gap ) {
427 std::stringstream osname;
428 osname << "l"
429 << "Muc"
430 << "P" << part << "S" << seg << "G" << gap;
431
432 return GetLogicalVolume( osname.str() );
433}
434
435TGeoVolume* MucROOTGeo::GetVolumeAluminumBox( int part, int seg, int gap ) {
436 std::stringstream osname;
437 osname << "l"
438 << "Muc"
439 << "P" << part << "S" << seg << "G" << gap << "Al";
440
441 return GetLogicalVolume( osname.str() );
442}
443
444TGeoVolume* MucROOTGeo::GetVolumeStripPlane( int part, int seg, int gap ) {
445 int segment = 0;
446 if ( part == 1 && seg == 2 ) segment = 2;
447 std::stringstream osname;
448 osname << "l"
449 << "Muc"
450 << "P" << part << "S" << segment << "G" << gap << "SP";
451
452 return GetLogicalVolume( osname.str() );
453}
454
455TGeoVolume* MucROOTGeo::GetVolumeStrip( int part, int seg, int gap, int strip ) {
456 std::stringstream osname;
457 if ( strip < 10 )
458 {
459 osname << "l"
460 << "Muc"
461 << "P" << part << "S"
462 << "0"
463 << "G" << gap << "s"
464 << "00" << strip;
465 }
466 else if ( strip < 100 )
467 {
468 osname << "l"
469 << "Muc"
470 << "P" << part << "S"
471 << "0"
472 << "G" << gap << "s"
473 << "0" << strip;
474 }
475 else
476 {
477 osname << "l"
478 << "Muc"
479 << "P" << part << "S"
480 << "0"
481 << "G" << gap << "s" << strip;
482 }
483
484 return GetLogicalVolume( osname.str() );
485}
486
487TGeoVolume* MucROOTGeo::GetVolumeGasChamber( int part, int seg, int gap, int panel,
488 int gasChamber ) {
489 std::stringstream osname;
490 osname << "l"
491 << "Muc"
492 << "P" << part << "S"
493 << "0"
494 << "G" << gap << "R" << gasChamber << "Pn" << panel << "C";
495
496 return GetLogicalVolume( osname.str() );
497}
498
499TGeoVolume* MucROOTGeo::GetVolumeBakelite( int part, int seg, int gap, int panel,
500 int bakelite ) {
501 std::stringstream osname;
502 osname << "l"
503 << "Muc"
504 << "P" << part << "S"
505 << "0"
506 << "G" << gap << "R" << panel << "B" << bakelite;
507
508 return GetLogicalVolume( osname.str() );
509}
510
511TGeoNode* MucROOTGeo::GetGap( int part, int seg, int gap ) {
512 if ( m_NodeGap[part][seg][gap] != 0 ) { return m_NodeGap[part][seg][gap]; }
513 else
514 {
515 std::cout << "Node: "
516 << "Part" << part << "Seg" << seg << "Gap" << gap << " not found" << std::endl;
517 return 0;
518 }
519}
520
521// TGeoNode*
522// MucROOTGeo::GetAluminumBox( int part, int seg, int gap )
523// {
524// if (m_NodeAluminumBox[part][seg][gap] != 0) {
525// return m_NodeAluminumBox[part][seg][gap];
526// }
527// else {
528// std::cout << "Node: " << "Part" << part << "Seg" << seg << "Gap" << gap << "AluminumBox"
529// << " not found" << std::endl; return 0;
530// }
531// }
532
533TGeoNode* MucROOTGeo::GetStripPlane( int part, int seg, int gap ) {
534 if ( m_NodeStripPlane[part][seg][gap] != 0 ) { return m_NodeStripPlane[part][seg][gap]; }
535 else
536 {
537 std::cout << "Node: "
538 << "Part" << part << "Seg" << seg << "Gap" << gap << "StripPlane"
539 << " not found" << std::endl;
540 return 0;
541 }
542}
543
544TGeoNode* MucROOTGeo::GetStrip( int part, int seg, int gap, int strip ) {
545 if ( m_NodeStrip[part][seg][gap][strip] != 0 ) { return m_NodeStrip[part][seg][gap][strip]; }
546 else
547 {
548 std::cout << "Node: "
549 << "Part" << part << "Seg"
550 << "0"
551 << "Gap" << gap << "Strip" << strip << " not found" << std::endl;
552 return 0;
553 }
554}
555
556TGeoPhysicalNode* MucROOTGeo::GetPhysicalGap( int part, int seg, int gap ) {
557 if ( m_PhysicalGap[part][seg][gap] != 0 ) { return m_PhysicalGap[part][seg][gap]; }
558 else
559 {
560 std::cout << "PhysicalNode: "
561 << "Part" << part << "Seg" << seg << "Gap" << gap << " not found" << std::endl;
562 return 0;
563 }
564}
565
566// TGeoPhysicalNode*
567// MucROOTGeo::GetPhysicalAluminumBox( int part, int seg, int gap )
568// {
569// if (m_PhysicalAluminumBox[part][seg][gap] != 0) {
570// return m_PhysicalAluminumBox[part][seg][gap];
571// }
572// else {
573// std::cout << "PhysicalNode: " << "Part" << part << "Seg" << seg << "Gap" << gap <<
574// "AluminumBox" << " not found" << std::endl; return 0;
575// }
576// }
577
578TGeoPhysicalNode* MucROOTGeo::GetPhysicalStrip( int part, int seg, int gap, int strip ) {
579 if ( m_PhysicalStrip[part][seg][gap][strip] != 0 )
580 { return m_PhysicalStrip[part][seg][gap][strip]; }
581 else
582 {
583 std::cout << "PhysicalNode: "
584 << "Part" << part << "Seg" << seg << "Gap" << gap << "Strip" << strip
585 << " not found" << std::endl;
586 return 0;
587 }
588}
void SetQuarterVisible()
Set quater visible;.
TGeoVolume * GetVolumeStripPlane(int part, int seg, int gap)
Get strip plane volume;.
void SetPhysicalNode()
Set the pointers to the physical nodes;.
float GetAbsorberThickness(int part, int seg, int absorber)
Get thickness of an absorber;.
TGeoVolume * GetVolumeAluminumBox(int part, int seg, int gap)
Get box volume;.
TGeoVolume * GetVolumeGasChamber(int part, int seg, int gap, int panel, int gasChamber)
Get rpc gas chamber volume;.
TGeoPhysicalNode * GetPhysicalStrip(int part, int seg, int gap, int strip)
Get strip physical node;.
TGeoVolume * GetVolumeBakelite(int part, int seg, int gap, int panel, int bakelite)
Get rpc bakelite volume;.
void SetNode()
Set the pointers to theirs nodes;.
TGeoVolume * GetVolumeAbsorberPanel(int part, int seg, int absorber, int panel)
Get absorber panel volume;.
TGeoVolume * GetVolumeGap(int part, int seg, int gap)
Get gap volume;.
int GetSegNum(int part)
Get number of segment on part;.
TGeoNode * GetGap(int part, int seg, int gap)
Get absorber node;.
TGeoNode * GetStripPlane(int part, int seg, int gap)
Get box node;.
void SetDefaultVis()
Set default visual attributes;.
TGeoVolume * GetVolumeStrip(int part, int seg, int gap, int strip)
Get strip volume;.
TGeoVolume * GetVolumeAbsorber(int part, int seg, int absorber)
Get absorber volume;.
TGeoPhysicalNode * GetPhysicalGap(int part, int seg, int gap)
Get rpc gas chamber node;.
TGeoNode * GetStrip(int part, int seg, int gap, int strip)
Get strip node;.
int GetStripNum(int part, int seg, int gap)
Get number of strip on gap;.
void InitFromGdml(const char *gdmlFile, const char *setupName)
Initialize the instance of ROOTGeo.
int GetGapNum(int part)
Get number of gap on part;.
TGeoNode * GetNode(const std::string &nn)
Get a node(physical volume) by name;.
TGeoVolume * GetLogicalVolume(const std::string &vn)
Get a logical volume by name;.
void ReadGdml(const char *gdmlFile, const char *setupName)
Initialize the instance of ROOTGeo.