BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EventDisplay/BesVisLib/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 <TGeoArb8.h>
21#include <TGeoBBox.h>
22#include <TGeoBoolNode.h>
23#include <TGeoManager.h>
24#include <TGeoTube.h>
25#include <TMath.h>
26
27#include "BesVisLib/BesEvent.h"
28#include "BesVisLib/BesView.h"
29#include "BesVisLib/MucROOTGeo.h"
30#include "Identifier/MucID.h"
31
32const int MucROOTGeo::m_kSeg[m_kPart] = { 4, 8, 4 };
33const int MucROOTGeo::m_kAbsorber[m_kPart] = { 9, 9, 9 };
34const int MucROOTGeo::m_kGap[m_kPart] = { 8, 9, 8 };
35const int MucROOTGeo::m_kPanel[m_kPart] = { 3, 4, 3 };
36const int MucROOTGeo::m_kBakelitePanel[m_kPart][m_kUpDown] = { 3, 5, 4, 4, 3, 5 };
37
39 // Default constructor.
40 for ( int part = 0; part < m_kPart; part++ )
41 {
42 for ( int seg = 0; seg < m_kSegMax; seg++ )
43 {
44 m_MucXY[part][seg] = 0;
45 m_MucZR[part][seg] = 0;
46
47 for ( int gap = 0; gap < m_kGapMax; gap++ )
48 {
49 m_NodeGap[part][seg][gap] = 0;
50 m_PhysicalGap[part][seg][gap] = 0;
51 m_MucXYGap[part][seg][gap] = 0;
52 m_MucZRGap[part][seg][gap] = 0;
53
54 for ( int strip = 0; strip < m_kStripMax; strip++ )
55 {
56 m_NodeStrip[part][seg][gap][strip] = 0;
57 m_PhysicalStrip[part][seg][gap][strip] = 0;
58 // m_Muc2DStrip[part][seg][gap][strip] = 0;
59 }
60 }
61 for ( int absorber = 0; absorber < m_kAbsorberMax; absorber++ )
62 {
63 m_NodeAbsorber[part][seg][absorber] = 0;
64 for ( int panel = 0; panel < m_kPanelMax; panel++ )
65 {
66 m_NodeAbsorberPanel[part][seg][absorber][panel] = 0;
67 m_PhysicalAbsorber[part][seg][absorber][panel] = 0;
68 }
69 }
70 }
71 }
72
73 m_MucColor = 2;
74 m_absorberColor = 2; // 1006
75 m_gapColor = 16; // 1
76 m_gasChamberColor = 8;
77 m_bakeliteColor = 8;
78 m_stripColor = 2; // kWhite;
79}
80
82 // Long Peixun's update: Add destructor
83 cout << "delete old MucROOTGeo" << endl;
84 for ( int part = 0; part < GetPartNb(); part++ )
85 {
86 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
87 {
88 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
89 {
90 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
91 { delete m_Muc2DStrip[part][seg][gap][strip]; }
92 delete m_MucXYGap[part][seg][gap];
93 delete m_MucZRGap[part][seg][gap];
94 }
95 delete m_MucXY[part][seg];
96 delete m_MucZR[part][seg];
97 }
98 }
99}
100
101void MucROOTGeo::InitFromGDML( const char* gdmlFile, const char* setupName ) {
102 m_ROOTGeoInit = 2;
103
104 ReadGdml( gdmlFile, setupName );
105 SetNode();
106}
107
108void MucROOTGeo::InitFromROOT( TGeoVolume* vol ) {
109 m_ROOTGeoInit = 1;
110
111 SetVolumeMuc( vol );
112 SetNode();
113}
114
116 if ( m_ROOTGeoInit != 1 && m_ROOTGeoInit != 2 )
117 {
118 cout << "MucROOTGeo::Init2DGeometry, ROOT Geometry not Initialized yet!" << endl;
119 return;
120 }
121 m_2DGeoInit = 1;
122
123 Int_t mucColor = 9002;
124 Int_t mucLineColor = 15; // 15;
125 Int_t mucXYStyle = 1001; // 3001;
126 Int_t mucZRStyle = 1001; // 3007;
127
128 Int_t mucGapColor = 10; // 1002
129 Int_t mucGapStyle = 1001; // 1001;
130 Int_t mucGapXYECStyle = 4000; // 1001;
131 Int_t mucGapLineColor = 15;
132
133 Double_t x = 0.0, y = 0.0, z = 0.0;
134 Double_t r = 0.0, phi = 0.0;
135 Double_t local[3] = { 0.0, 0.0, 0.0 };
136 Double_t master[3] = { 0.0, 0.0, 0.0 };
137 // Int_t nPoints = 4;
138 Double_t P[300] = { 0.0 };
139 // Double_t center[3] = {0.0, 0.0, 0.0};
140 TString name;
141
142 Int_t part = 0, seg = 0, gap = 0, strip = 0;
143
144 //----------XY-----------
145 // Muc
146 TGeoCompositeShape* mucShape = (TGeoCompositeShape*)GetVolumeMuc()->GetShape();
147 // if (mucShape) ;
148
149 // Update by Huang Shuhui: Muc's geometry has changed.
150 TGeoBoolNode* mucBoolNode = mucShape->GetBoolNode();
151 TGeoCompositeShape* mucWithHoleShape = (TGeoCompositeShape*)mucBoolNode->GetLeftShape();
152 TGeoBoolNode* mucWithHoleBoolNode = mucWithHoleShape->GetBoolNode();
153
154 TGeoBBox* mucOuterShape = (TGeoBBox*)mucWithHoleBoolNode->GetLeftShape();
155 TGeoTube* mucInnerShape = (TGeoTube*)mucWithHoleBoolNode->GetRightShape();
156
157 // if (mucOuterShape) ;
158 // if (mucInnerShape) cout << "mucInnerShape name : " << mucInnerShape->GetName() << endl;
159 // else cout << "MucROOTGeo:Init2DGeoometry, mucInnerShape not found" << endl;
160
161 Double_t mucOuterR = mucOuterShape->GetDX();
162 Double_t mucInnerR = mucInnerShape->GetRmax() + 40.0; // 40.0 is the height of first gap
163
164 // Barrel
165 // barrel segment XY view
166
167 part = 1;
168 Int_t xySegPointSeq[4] = { 0, 1, 1, 0 }; // point 0,1,2,3 -> 0,1,1,0
169 for ( seg = 0; seg < GetSegNb( part ); seg++ )
170 {
171 name = TString( "MucBarrelSeg" );
172 name += seg;
173 for ( Int_t iPoint = 0; iPoint < 4; iPoint++ )
174 {
175 if ( iPoint < 2 ) r = mucInnerR / TMath::Cos( TMath::Pi() / 8.0 );
176 else r = mucOuterR / TMath::Cos( TMath::Pi() / 8.0 );
177 phi = TMath::Pi() / 8.0 * ( 2 * seg - 1 + 2 * xySegPointSeq[iPoint] );
178 x = r * TMath::Cos( phi );
179 y = r * TMath::Sin( phi );
180 z = 0.0;
181 P[3 * iPoint] = x;
182 P[3 * iPoint + 1] = y;
183 P[3 * iPoint + 2] = z;
184 }
185 m_MucXY[part][seg] = new BesPolygon2D( name, name, 4, &P[0] );
186 m_MucXY[part][seg]->SetFillColor( mucColor );
187 m_MucXY[part][seg]->SetFillStyle( mucXYStyle );
188 m_MucXY[part][seg]->SetLineColor( mucLineColor );
189 }
190
191 // barrel segment ZR view
192
193 part = 1;
194 for ( seg = 0; seg < GetSegNb( part ); seg++ )
195 {
196 for ( Int_t iPoint = 0; iPoint < 4; iPoint++ )
197 {
198 if ( iPoint == 0 || iPoint == 3 ) r = mucInnerR;
199 else r = mucOuterR;
200 phi = TMath::Pi() / 4.0 * seg;
201
202 x = r * TMath::Cos( phi );
203 y = r * TMath::Sin( phi );
204
205 TGeoVolume* volAbsorber = 0;
206 volAbsorber = GetAbsorber( part, seg, 0 )->GetVolume();
207 TGeoBBox* absorberShape = (TGeoBBox*)volAbsorber->GetShape();
208 if ( seg == 2 )
209 cout << "in MucROOTGeo::Init2DGeometry() x,y,z = " << absorberShape->GetDX() << " "
210 << absorberShape->GetDY() << " " << absorberShape->GetDZ() << endl;
211 Double_t dy = absorberShape->GetDY();
212 z = dy;
213 if ( iPoint < 2 ) z = -dy;
214
215 P[3 * iPoint] = x;
216 P[3 * iPoint + 1] = y;
217 P[3 * iPoint + 2] = z;
218 }
219
220 if ( seg == 2 || seg == 6 )
221 {
222 if ( seg == 2 ) name = TString( "MucBarrelUpSeg" );
223 if ( seg == 6 ) name = TString( "MucBarrelDownSeg" );
224
225 m_MucZR[part][seg] = new BesPolygon2D( name, name, 4, &P[0] );
226 m_MucZR[part][seg]->SetFillColor( mucColor );
227 m_MucZR[part][seg]->SetFillStyle( mucZRStyle );
228 m_MucZR[part][seg]->SetLineColor( mucLineColor );
229 }
230 }
231
232 // barrel gap
233
234 part = 1;
235 for ( seg = 0; seg < GetSegNb( part ); seg++ )
236 {
237 for ( gap = 0; gap < GetGapNb( part ); gap++ )
238 {
239
240 TGeoPhysicalNode* phyNode = 0;
241 phyNode = GetPhysicalGap( part, seg, gap );
242
243 TGeoBBox* gapShape = (TGeoBBox*)phyNode->GetShape();
244 Double_t dx = gapShape->GetDX();
245 Double_t dy = gapShape->GetDY();
246 Double_t dz = gapShape->GetDZ();
247
248 // barrel gap XY view
249 for ( Int_t i = 0; i < 4; i++ )
250 {
251 local[1] = 0.0; // y
252 switch ( i )
253 {
254 case 0:
255 local[0] = -dx;
256 local[2] = -dz;
257 break;
258 case 1:
259 local[0] = dx;
260 local[2] = -dz;
261 break;
262 case 2:
263 local[0] = dx;
264 local[2] = dz;
265 break;
266 case 3:
267 local[0] = -dx;
268 local[2] = dz;
269 break;
270 }
271 phyNode->GetMatrix( -1 * phyNode->GetLevel() )
272 ->LocalToMaster( local, &master[0] ); // transform to top
273 for ( Int_t j = 0; j < 3; j++ ) P[3 * i + j] = master[j];
274 }
275
276 name = TString( "MucBarrelSeg" );
277 name += seg;
278 name += TString( "Gap" );
279 name += gap;
280
281 m_MucXYGap[part][seg][gap] = new BesPolygon2D( name, name, 4, &P[0] );
282 m_MucXYGap[part][seg][gap]->SetFillColor( mucGapColor );
283 m_MucXYGap[part][seg][gap]->SetFillStyle( mucGapStyle );
284 m_MucXYGap[part][seg][gap]->SetLineColor( mucGapLineColor );
285
286 // barrel gap ZR view
287 for ( Int_t i = 0; i < 4; i++ )
288 {
289 local[0] = 0.0; // x
290 switch ( i )
291 {
292 case 0:
293 local[1] = -dy;
294 local[2] = -dz;
295 break;
296 case 1:
297 local[1] = -dy;
298 local[2] = dz;
299 break;
300 case 2:
301 local[1] = dy;
302 local[2] = dz;
303 break;
304 case 3:
305 local[1] = dy;
306 local[2] = -dz;
307 break;
308 }
309 phyNode->GetMatrix( -1 * phyNode->GetLevel() )
310 ->LocalToMaster( local, &master[0] ); // transform to top
311 for ( Int_t j = 0; j < 3; j++ ) P[3 * i + j] = master[j];
312 }
313
314 if ( seg == 2 || seg == 6 )
315 {
316 if ( seg == 2 )
317 {
318 name = TString( "MucBarrelUpSegGap" );
319 name += gap;
320 }
321 else if ( seg == 6 )
322 {
323 name = TString( "MucBarrelDownSegGap" );
324 name += gap;
325 }
326
327 m_MucZRGap[part][seg][gap] = new BesPolygon2D( name, name, 4, &P[0] );
328 m_MucZRGap[part][seg][gap]->SetFillColor( mucGapColor );
329 m_MucZRGap[part][seg][gap]->SetFillStyle( mucGapStyle );
330 m_MucZRGap[part][seg][gap]->SetLineColor( mucGapLineColor );
331 }
332 }
333 }
334 // End cap
335 for ( part = 0; part < GetPartNb(); part++ )
336 {
337 if ( part == 1 ) continue;
338 for ( seg = 0; seg < GetSegNb( part ); seg++ )
339 {
340 Double_t segP[100];
341 Int_t iSegPoint = 0;
342
343 for ( gap = 0; gap < GetGapNb( part ); gap++ )
344 {
345 TGeoPhysicalNode* phyNode = 0;
346 phyNode = GetPhysicalGap( part, seg, gap );
347
348 Int_t ixyPoint = 0, izrPoint = 0;
349 Int_t nPanel = 3; // 4
350 // TGeoCompositeShape *addPanelShape[nPanel];
351 // TGeoTrap *panelShape[nPanel];
352 TGeoCompositeShape* addPanelShape[4];
353 TGeoTrap* panelShape[4];
354
355 for ( Int_t panel = nPanel - 1; panel >= 0; panel-- )
356 {
357 if ( panel == nPanel - 1 )
358 addPanelShape[panel] =
359 (TGeoCompositeShape*)GetGap( part, seg, gap )->GetVolume()->GetShape();
360 else
361 addPanelShape[panel] =
362 (TGeoCompositeShape*)addPanelShape[panel + 1]->GetBoolNode()->GetLeftShape();
363
364 panelShape[panel] = (TGeoTrap*)addPanelShape[panel]->GetBoolNode()->GetRightShape();
365
366 Double_t *localArb8Point, masterArb8Point[3 * 8];
367 localArb8Point = panelShape[panel]->GetVertices();
368 for ( Int_t i = 0; i < 8; i++ )
369 {
370 local[0] = localArb8Point[2 * i];
371 local[1] = localArb8Point[2 * i + 1];
372 if ( i < 4 ) local[2] = panelShape[panel]->GetDz() * ( -1.0 );
373 else local[2] = panelShape[panel]->GetDz();
374
375 addPanelShape[panel]->GetBoolNode()->GetRightMatrix()->LocalToMaster(
376 local, &master[0] ); // transform to gap coordinate
377
378 for ( Int_t j = 0; j < 3; j++ ) local[j] = master[j];
379 phyNode->GetMatrix( -1 * phyNode->GetLevel() )
380 ->LocalToMaster( local, &master[0] ); // transform to top
381 for ( Int_t j = 0; j < 3; j++ ) { masterArb8Point[3 * i + j] = master[j]; }
382 }
383
384 // xy, add point on panel 3 and panel 0 //panel 3 -> panel 2(new geom)
385 if ( panel == 2 )
386 {
387 Int_t xyPanelPointSeq[4] = { 0, 3, 7, 4 };
388 for ( Int_t i = 0; i < 4; i++ )
389 {
390 for ( Int_t j = 0; j < 3; j++ )
391 { P[3 * ixyPoint + j] = masterArb8Point[3 * xyPanelPointSeq[i] + j]; }
392 ixyPoint++;
393 }
394 }
395 if ( panel == 0 )
396 {
397 Int_t xyPanelPointSeq[4] = { 7, 4, 0, 3 };
398 for ( Int_t i = 0; i < 4; i++ )
399 {
400 for ( Int_t j = 0; j < 3; j++ )
401 { P[3 * ixyPoint + j] = masterArb8Point[3 * xyPanelPointSeq[i] + j]; }
402 ixyPoint++;
403 }
404 }
405
406 // zr, add point on panel 3 and panel 0, use P from P[100] //panel 3 -> panel
407 // 2(new geom)
408 if ( panel == 2 )
409 {
410 Int_t zrPanelPointSeq[4] = { 4, 7, 6, 5 };
411 for ( Int_t i = 0; i < 4; i++ )
412 {
413 for ( Int_t j = 0; j < 3; j++ )
414 { P[100 + 3 * izrPoint + j] = masterArb8Point[3 * zrPanelPointSeq[i] + j]; }
415 izrPoint++;
416 }
417 }
418 if ( panel == 0 )
419 {
420 Int_t zrPanelPointSeq[4] = { 6, 5, 4, 7 };
421 for ( Int_t i = 0; i < 4; i++ )
422 {
423 for ( Int_t j = 0; j < 3; j++ )
424 { P[100 + 3 * izrPoint + j] = masterArb8Point[3 * zrPanelPointSeq[i] + j]; }
425 izrPoint++;
426 }
427 }
428 }
429
430 if ( part == 0 ) name = TString( "MucEastEc" );
431 else if ( part == 2 ) name = TString( "MucWestEc" );
432 name += TString( "Seg" );
433 name += seg;
434 name += TString( "Gap" );
435 name += gap;
436
437 // cout << name << endl;
438 m_MucXYGap[part][seg][gap] =
439 new BesPolygon2D( name, name, ixyPoint, &P[0] ); // ixyPoint = 8
440 m_MucXYGap[part][seg][gap]->SetFillColor( mucGapColor );
441 m_MucXYGap[part][seg][gap]->SetFillStyle( mucGapXYECStyle );
442 m_MucXYGap[part][seg][gap]->SetLineColor( mucGapLineColor );
443
444 m_MucZRGap[part][seg][gap] =
445 new BesPolygon2D( name, name, izrPoint, &P[100] ); // izrPoint = 8
446 m_MucZRGap[part][seg][gap]->SetFillColor( mucGapColor );
447 m_MucZRGap[part][seg][gap]->SetFillStyle( mucGapStyle );
448 m_MucZRGap[part][seg][gap]->SetLineColor( mucGapLineColor );
449
450 // end cap segment ZR view
451
452 if ( gap == 0 )
453 {
454 Double_t zrFirstAbsorberHeight =
455 ( (TGeoBBox*)GetAbsorber( part, seg, 0 )->GetVolume()->GetShape() )->GetDZ() *
456 2.0;
457 for ( Int_t i = 0; i < 4; i++ )
458 {
459 for ( Int_t j = 0; j < 3; j++ )
460 {
461 if ( ( part == 0 && ( seg == 0 || seg == 2 ) ) ||
462 ( part == 2 && ( seg == 1 || seg == 3 ) ) )
463 {
464 Int_t zrSegPointSeq[4] = { 6, 7, 0, 1 };
465 segP[3 * iSegPoint + j] = P[100 + 3 * zrSegPointSeq[i] + j];
466 }
467 else
468 {
469 Int_t zrSegPointSeq[4] = { 5, 4, 3, 2 };
470 segP[3 * iSegPoint + j] = P[100 + 3 * zrSegPointSeq[i] + j];
471 }
472
473 if ( j == 2 )
474 {
475 if ( part == 0 ) segP[3 * iSegPoint + j] -= zrFirstAbsorberHeight;
476 else if ( part == 2 ) segP[3 * iSegPoint + j] += zrFirstAbsorberHeight;
477 }
478 }
479 iSegPoint++;
480 }
481 }
482 else if ( gap == 7 )
483 {
484 Double_t zrLastAbsorberHeight =
485 ( (TGeoBBox*)GetAbsorber( part, seg, 8 )->GetVolume()->GetShape() )->GetDZ() *
486 2.0;
487 for ( Int_t i = 0; i < 4; i++ )
488 {
489 for ( Int_t j = 0; j < 3; j++ )
490 {
491 if ( ( part == 0 && ( seg == 0 || seg == 2 ) ) ||
492 ( part == 2 && ( seg == 1 || seg == 3 ) ) )
493 {
494 Int_t zrSegPointSeq[4] = { 2, 3, 4, 5 };
495 segP[3 * iSegPoint + j] = P[100 + 3 * zrSegPointSeq[i] + j];
496 }
497 else
498 {
499 Int_t zrSegPointSeq[4] = { 1, 0, 7, 6 };
500 segP[3 * iSegPoint + j] = P[100 + 3 * zrSegPointSeq[i] + j];
501 }
502
503 if ( j == 2 )
504 {
505 if ( part == 0 ) segP[3 * iSegPoint + j] += zrLastAbsorberHeight;
506 else if ( part == 2 ) segP[3 * iSegPoint + j] -= zrLastAbsorberHeight;
507 }
508 }
509 iSegPoint++;
510 }
511 }
512 }
513 if ( part == 0 ) name = TString( "MucEastEc" );
514 else if ( part == 2 ) name = TString( "MucWestEc" );
515 name += TString( "Seg" );
516 name += seg;
517 m_MucZR[part][seg] = new BesPolygon2D( name, name, iSegPoint, &segP[0] ); // izrPoint = 8
518 m_MucZR[part][seg]->SetFillColor( mucColor );
519 m_MucZR[part][seg]->SetFillStyle( mucZRStyle );
520 m_MucZR[part][seg]->SetLineColor( mucLineColor );
521 }
522 }
523
524 for ( part = 0; part < GetPartNb(); part++ )
525 {
526 for ( seg = 0; seg < GetSegNb( part ); seg++ )
527 {
528 for ( gap = 0; gap < GetGapNb( part ); gap++ )
529 {
530 for ( strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
531 {
532 TGeoPhysicalNode* phyNode = 0;
533 phyNode = GetPhysicalStrip( part, seg, gap, strip );
534 TGeoBBox* stripShape = (TGeoBBox*)phyNode->GetShape();
535 Double_t dx = stripShape->GetDX();
536 Double_t dy = stripShape->GetDY();
537 Double_t dz = stripShape->GetDZ();
538 dz *= m_kStripZMuliple;
539
540 for ( Int_t i = 0; i < 8; i++ )
541 {
542 switch ( i )
543 {
544 case 0:
545 local[0] = -dx;
546 local[1] = -dy;
547 local[2] = -dz;
548 break;
549 case 1:
550 local[0] = dx;
551 local[1] = -dy;
552 local[2] = -dz;
553 break;
554 case 2:
555 local[0] = dx;
556 local[1] = dy;
557 local[2] = -dz;
558 break;
559 case 3:
560 local[0] = -dx;
561 local[1] = dy;
562 local[2] = -dz;
563 break;
564 case 4:
565 local[0] = -dx;
566 local[1] = -dy;
567 local[2] = dz;
568 break;
569 case 5:
570 local[0] = dx;
571 local[1] = -dy;
572 local[2] = dz;
573 break;
574 case 6:
575 local[0] = dx;
576 local[1] = dy;
577 local[2] = dz;
578 break;
579 case 7:
580 local[0] = -dx;
581 local[1] = dy;
582 local[2] = dz;
583 break;
584 }
585
586 phyNode->GetMatrix( -1 * phyNode->GetLevel() )
587 ->LocalToMaster( local, &master[0] ); // transform to top
588 for ( Int_t j = 0; j < 3; j++ ) P[3 * i + j] = master[j];
589 }
590
591 name = TString( "Muc Part" );
592 name += part;
593 name += TString( " Seg" );
594 name += seg;
595 name += TString( " Gap" );
596 name += gap;
597 name += TString( " Strip" );
598 name += strip;
599
600 m_Muc2DStrip[part][seg][gap][strip] =
601 new Muc2DStrip( name, name, 8, &P[0], part, seg, gap, strip );
602 }
603 }
604 }
605 }
606}
607
608void MucROOTGeo::SetNode() {
609 if ( m_ROOTGeoInit == 2 )
610 { // from GDML
611
612 m_Muc = GetTopVolume();
613 if ( !m_Muc ) std::cout << "m_Muc = 0" << std::endl;
614
615 int gapCount = 0;
616 for ( int part = 0; part < GetPartNb(); part++ )
617 {
618 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
619 {
620 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
621 {
622 m_StripNum[part][seg][gap] = GetVolumeStripPlane( part, seg, gap )->GetNdaughters();
623
624 std::stringstream osnameGap;
625 osnameGap << "pv_"
626 << "l"
627 << "Muc"
628 << "P" << part << "S" << seg << "G" << gap << "_" << gapCount;
629 m_NodeGap[part][seg][gap] = GetNode( osnameGap.str() );
630 gapCount++;
631
632 int segment = 0;
633 if ( part == 1 && seg == 2 ) segment = 2;
634 std::stringstream osnameStripPlane;
635 osnameStripPlane << "pv_"
636 << "l"
637 << "Muc"
638 << "P" << part << "S" << segment << "G" << gap << "SP"
639 << "_"
640 << "0";
641 m_NodeStripPlane[part][seg][gap] = GetNode( osnameStripPlane.str() );
642 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
643 {
644 std::stringstream osnameStrip;
645 if ( strip < 10 )
646 {
647 osnameStrip << "pv_"
648 << "l"
649 << "Muc"
650 << "P" << part << "S" << segment << "G" << gap << "s"
651 << "00" << strip << "_" << strip;
652 }
653 else if ( strip < 100 )
654 {
655 osnameStrip << "pv_"
656 << "l"
657 << "Muc"
658 << "P" << part << "S" << segment << "G" << gap << "s"
659 << "0" << strip << "_" << strip;
660 }
661 else
662 {
663 osnameStrip << "pv_"
664 << "l"
665 << "Muc"
666 << "P" << part << "S" << segment << "G" << gap << "s" << strip << "_"
667 << strip;
668 }
669
670 m_NodeStrip[part][seg][gap][strip] = GetNode( osnameStrip.str() );
671 }
672 }
673 }
674 }
675
676 int absorberCount = gapCount;
677 for ( int part = 0; part < GetPartNb(); part++ )
678 {
679 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
680 {
681 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
682 {
683 std::stringstream osnameAbsorber;
684 osnameAbsorber << "pv_"
685 << "l"
686 << "Muc"
687 << "P" << part << "S" << seg << "Ab" << absorber << "_"
688 << absorberCount;
689 m_NodeAbsorber[part][seg][absorber] = GetNode( osnameAbsorber.str() );
690 absorberCount++;
691 // if (part != 1) {
692 // for (int panel = 0; panel < m_kPanelMax; panel++) { // end cap is the
693 // absorber panel, to be modified to an absorber std::stringstream osnamePanel;
694 // osnamePanel << "pv_" << "logical" << "Muc" << "Part" << part << "Seg" <<
695 // seg << "Absorber" << absorber << "Panel" << panel << "_" << panel;
696 // m_NodeAbsorberPanel[part][seg][absorber][panel] = GetNode(
697 // osnamePanel.str() );
698 // }
699 // }
700 }
701 }
702 }
703 }
704 else if ( m_ROOTGeoInit == 1 )
705 { // from ROOT object
706 int gapCount = 0;
707 for ( int part = 0; part < GetPartNb(); part++ )
708 {
709 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
710 {
711 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
712 {
713 m_NodeGap[part][seg][gap] = m_Muc->GetNode( gapCount );
714 gapCount++;
715
716 m_NodeStripPlane[part][seg][gap] =
717 GetGap( part, seg, gap )
718 ->GetDaughter( 0 )
719 ->GetDaughter( 0 ); // new geom: gap->box->stripplane
720 m_StripNum[part][seg][gap] = GetStripPlane( part, seg, gap )->GetNdaughters();
721
722 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
723 {
724 m_NodeStrip[part][seg][gap][strip] =
725 GetStripPlane( part, seg, gap )->GetVolume()->GetNode( strip );
726 }
727 }
728 }
729 }
730
731 int absorberCount = gapCount;
732 for ( int part = 0; part < GetPartNb(); part++ )
733 {
734 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
735 {
736 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
737 {
738 m_NodeAbsorber[part][seg][absorber] = m_Muc->GetNode( absorberCount );
739 absorberCount++;
740
741 // if (part != 1) {
742 // for (int panel = 0; panel < m_kPanelMax; panel++) { // end cap is the
743 // absorber panel, to be modified to an absorber
744 // m_NodeAbsorberPanel[part][seg][absorber][panel] =
745 // m_NodeAbsorber[part][seg][absorber]->GetVolume()->GetNode(panel);
746 // }
747 // }
748 }
749 }
750 }
751 }
752}
753
755 m_Muc->SetLineColor( m_MucColor );
756 m_Muc->SetVisibility( 0 );
757
758 for ( int part = 0; part < GetPartNb(); part++ )
759 {
760 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
761 {
762 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
763 {
764 GetVolumeAbsorber( part, seg, absorber )->SetLineColor( m_absorberColor );
765 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
766 // if (part != 1) {
767 // for (int panel = 0; panel < m_kPanel[part]; panel++) {
768 // GetVolumeAbsorberPanel(part, seg, absorber,
769 // panel)->SetLineColor(m_absorberColor); GetVolumeAbsorberPanel(part, seg, absorber,
770 // panel)->SetVisibility(0);
771 // }
772 // }
773 }
774
775 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
776 {
777 GetVolumeGap( part, seg, gap )->SetLineColor( m_gapColor );
778 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
779
780 GetVolumeBox( part, seg, gap )->SetLineColor( m_gapColor );
781 GetVolumeBox( part, seg, gap )->SetVisibility( 0 );
782
783 if ( part == 1 )
784 {
785 for ( int sb = 0; sb < m_kSmallBlockMax; sb++ )
786 {
787 GetVolumeAbsorberSmallBlock( gap, sb )->SetLineColor( m_absorberColor );
788 GetVolumeAbsorberSmallBlock( gap, sb )->SetVisibility( 0 );
789 }
790 }
791
792 GetVolumeStripPlane( part, seg, gap )->SetLineColor( m_gapColor );
793 GetVolumeStripPlane( part, seg, gap )->SetVisibility( 0 );
794
795 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
796 {
797 GetVolumeStrip( part, seg, gap, strip )->SetLineColor( m_stripColor );
798 GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 0 );
799 }
800
801 for ( int up = 0; up < 2; up++ )
802 {
803 GetVolumeBoxSurface( part, seg, gap, up )->SetLineColor( m_bakeliteColor ); // need
804 // change
805 GetVolumeBoxSurface( part, seg, gap, up )->SetVisibility( 0 );
806 int seg_shift = 0;
807 if ( part == 1 && seg == 2 ) seg_shift = 1;
808 for ( int panel = 0; panel < m_kPanel[part] + seg_shift; panel++ )
809 {
810 GetVolumeGasChamber( part, seg, gap, up, panel )
811 ->SetLineColor( m_gasChamberColor );
812 GetVolumeGasChamber( part, seg, gap, up, panel )->SetVisibility( 0 );
813
814 GetVolumeGasBorder( part, seg, gap, up, panel )->SetLineColor( m_bakeliteColor );
815 GetVolumeGasBorder( part, seg, gap, up, panel )->SetVisibility( 0 );
816 }
817 for ( int panel = 0; panel < m_kBakelitePanel[part][up] + seg_shift; panel++ )
818 {
819 for ( int bakelite = 0; bakelite < m_kBakelite; bakelite++ )
820 {
821 GetVolumeBakelite( part, seg, gap, up, panel, bakelite )
822 ->SetLineColor( m_bakeliteColor );
823 GetVolumeBakelite( part, seg, gap, up, panel, bakelite )->SetVisibility( 0 );
824 }
825 }
826 }
827
828 // for (int panel = 0; panel < m_kPanel[part]; panel++) { //comment out
829 // 2007.1.2 for(int bakelite = 0; bakelite < m_kBakelite; bakelite++) {
830 // GetVolumeBakelite(part, seg, gap, panel,
831 // bakelite)->SetLineColor(m_bakeliteColor); GetVolumeBakelite(part, seg, gap, panel,
832 // bakelite)->SetVisibility(0);
833 // }
834 // for (int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++) {
835 // GetVolumeGasChamber(part, seg, gap, panel,
836 // gasChamber)->SetLineColor(m_gasChamberColor); GetVolumeGasChamber(part, seg, gap,
837 // panel, gasChamber)->SetVisibility(0);
838 // }
839 // }
840 }
841 }
842 }
843
844 for ( int part = 0; part < GetPartNb(); part++ )
845 {
846 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
847 {
848 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
849 {
850 GetGap( part, seg, gap )->SetVisibility( 0 );
851 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
852 { GetStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
853 }
854 }
855 }
856}
857
858// Long Peixun's update: Set default 3D color
860 for ( int part = 0; part < GetPartNb(); part++ )
861 {
862 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
863 {
864 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
865 {
866 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
867 // Long Peixun's update: gray -> more deep gray
868 GetPhysicalStrip( part, seg, gap, strip )->SetLineColor( 922 );
869 }
870 }
871 }
872}
873
875 m_Muc->SetLineColor( m_MucColor );
876 m_Muc->SetVisibility( 0 );
877
878 for ( int part = 0; part < GetPartNb(); part++ )
879 {
880 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
881 {
882 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
883 {
884 GetVolumeAbsorber( part, seg, absorber )->SetLineColor( m_absorberColor );
885 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 );
886 // if (part != 1) {
887 // for (int panel = 0; panel < m_kPanel[part]; panel++) {
888 // GetVolumeAbsorberPanel(part, seg, absorber,
889 // panel)->SetLineColor(m_absorberColor); GetVolumeAbsorberPanel(part, seg, absorber,
890 // panel)->SetVisibility(0);
891 // }
892 // }
893 }
894
895 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
896 {
897 GetVolumeGap( part, seg, gap )->SetLineColor( m_gapColor );
898 GetVolumeGap( part, seg, gap )->SetVisibility( 1 );
899
900 GetVolumeBox( part, seg, gap )->SetLineColor( m_stripColor );
901 GetVolumeBox( part, seg, gap )->SetVisibility( 1 );
902
903 if ( part == 1 )
904 {
905 for ( int sb = 0; sb < m_kSmallBlockMax; sb++ )
906 {
907 GetVolumeAbsorberSmallBlock( gap, sb )->SetLineColor( m_absorberColor );
908 GetVolumeAbsorberSmallBlock( gap, sb )->SetVisibility( 1 );
909 }
910 }
911
912 GetVolumeStripPlane( part, seg, gap )->SetLineColor( m_gapColor );
913 GetVolumeStripPlane( part, seg, gap )->SetVisibility( 1 );
914
915 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
916 {
917 GetVolumeStrip( part, seg, gap, strip )->SetLineColor( m_stripColor );
918 GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 1 );
919 }
920
921 for ( int up = 0; up < 2; up++ )
922 {
923 GetVolumeBoxSurface( part, seg, gap, up )->SetLineColor( m_gapColor ); // need change
924 GetVolumeBoxSurface( part, seg, gap, up )->SetVisibility( 1 );
925 int seg_shift = 0;
926 if ( part == 1 && seg == 2 ) seg_shift = 1;
927 for ( int panel = 0; panel < m_kPanel[part] + seg_shift; panel++ )
928 {
929 GetVolumeGasChamber( part, seg, gap, up, panel )
930 ->SetLineColor( m_gasChamberColor );
931 GetVolumeGasChamber( part, seg, gap, up, panel )->SetVisibility( 1 );
932
933 GetVolumeGasBorder( part, seg, gap, up, panel )->SetLineColor( m_bakeliteColor );
934 GetVolumeGasBorder( part, seg, gap, up, panel )->SetVisibility( 1 );
935 }
936 for ( int panel = 0; panel < m_kBakelitePanel[part][up] + seg_shift; panel++ )
937 {
938 for ( int bakelite = 0; bakelite < m_kBakelite; bakelite++ )
939 {
940 GetVolumeBakelite( part, seg, gap, up, panel, bakelite )
941 ->SetLineColor( m_bakeliteColor );
942 GetVolumeBakelite( part, seg, gap, up, panel, bakelite )->SetVisibility( 1 );
943 }
944 }
945 }
946
947 // for (int panel = 0; panel < m_kPanel[part]; panel++) { //comment out
948 // 2007.1.2 for(int bakelite = 0; bakelite < m_kBakelite; bakelite++) {
949 // GetVolumeBakelite(part, seg, gap, panel,
950 // bakelite)->SetLineColor(m_bakeliteColor); GetVolumeBakelite(part, seg, gap, panel,
951 // bakelite)->SetVisibility(0);
952 // }
953 // for (int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++) {
954 // GetVolumeGasChamber(part, seg, gap, panel,
955 // gasChamber)->SetLineColor(m_gasChamberColor); GetVolumeGasChamber(part, seg, gap,
956 // panel, gasChamber)->SetVisibility(0);
957 // }
958 // }
959 }
960 }
961 }
962
963 for ( int part = 0; part < GetPartNb(); part++ )
964 {
965 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
966 {
967 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
968 {
969 GetGap( part, seg, gap )->SetVisibility( 0 );
970 for ( int strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
971 { GetStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
972 }
973 }
974 }
975}
976
978 for ( int part = 0; part < m_kPart; part++ )
979 {
980 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
981 {
982 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
983 {
984 if ( part == 1 )
985 {
986 if ( seg > 2 ) GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 );
987 }
988 else
989 {
990 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
991 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
992 {
993 if ( seg > 0 && seg < 3 )
994 GetVolumeAbsorberPanel( part, seg, absorber, panel )->SetVisibility( 1 );
995 }
996 }
997 }
998
999 for ( int gap = 0; gap < m_kGap[part]; gap++ )
1000 {
1001 if ( part == 1 && seg > 2 )
1002 {
1003 GetVolumeGap( part, seg, gap )->SetVisibility( 1 );
1004 GetGap( part, seg, gap )->SetVisibility( 1 );
1005 }
1006 else
1007 {
1008 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
1009 GetGap( part, seg, gap )->SetVisibility( 0 );
1010 }
1011 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
1012 { GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
1013
1014 // for (int panel = 0; panel < m_kPanel[part]; panel++) {
1015 // for (int bakelite = 0; bakelite < m_kBakelite; bakelite++) {
1016 // if ((part != 1 && seg > 0 && seg < 3) || (part == 1 && seg > 2))
1017 // GetVolumeBakelite(part, seg, gap, panel, bakelite)->SetVisibility(1);
1018 // }
1019 // for (int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++) {
1020 // if ((part != 1 && seg > 0 && seg < 3) || (part == 1 && seg > 2))
1021 // GetVolumeGasChamber(part, seg, gap, panel, gasChamber)->SetVisibility(1);
1022 // }
1023 // }
1024 }
1025 }
1026 }
1027}
1028
1030 for ( int part = 0; part < m_kPart; part++ )
1031 {
1032 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
1033 {
1034 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
1035 {
1036 if ( part == 1 )
1037 {
1038 if ( seg < 3 || seg > 5 )
1039 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 );
1040 }
1041 else
1042 {
1043 GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 0 );
1044 for ( int panel = 0; panel < m_kPanel[part]; panel++ )
1045 {
1046 if ( seg == 0 || seg == 3 )
1047 GetVolumeAbsorberPanel( part, seg, absorber, panel )->SetVisibility( 1 );
1048 }
1049 }
1050 }
1051
1052 for ( int gap = 0; gap < m_kGap[part]; gap++ )
1053 {
1054 if ( part == 1 && ( seg < 3 || seg > 5 ) )
1055 {
1056 GetVolumeGap( part, seg, gap )->SetVisibility( 1 );
1057 GetGap( part, seg, gap )->SetVisibility( 1 );
1058 }
1059 else
1060 {
1061 GetVolumeGap( part, seg, gap )->SetVisibility( 0 );
1062 GetGap( part, seg, gap )->SetVisibility( 0 );
1063 }
1064 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
1065 { GetVolumeStrip( part, seg, gap, strip )->SetVisibility( 0 ); }
1066
1067 // for (int panel = 0; panel < m_kPanel[part]; panel++) {
1068 // for (int bakelite = 0; bakelite < m_kBakelite; bakelite++) {
1069 // if (part != 1 && (seg == 0 || seg == 3)) GetVolumeBakelite(part, seg, gap,
1070 // panel, bakelite)->SetVisibility(1);
1071 // }
1072 // for (int gasChamber = 0; gasChamber < m_kGasChamber; gasChamber++) {
1073 // if (part != 1 && (seg == 0 || seg == 3)) GetVolumeGasChamber(part, seg,
1074 // gap, panel, gasChamber)->SetVisibility(1);
1075 // }
1076 // }
1077 }
1078 }
1079 }
1080}
1081
1083 int part = 1;
1084 for ( int seg = 0; seg < m_kSeg[part]; seg++ )
1085 {
1086 for ( int absorber = 0; absorber < m_kAbsorber[part]; absorber++ )
1087 { GetVolumeAbsorber( part, seg, absorber )->SetVisibility( 1 ); }
1088
1089 for ( int gap = 0; gap < m_kGap[part]; gap++ )
1090 {
1091 GetVolumeGap( part, seg, gap )->SetVisibility( 1 );
1092 GetGap( part, seg, gap )->SetVisibility( 1 );
1093 }
1094 }
1095}
1096
1098
1099 if ( gGeoManager == 0 ) std::cout << "Create gGeoManager first" << std::endl;
1100 TGeoNode* bes = gGeoManager->GetTopNode();
1101 TGeoNode* muc = bes->GetDaughter( 3 ); // 3->0
1102
1103 for ( int part = 0; part < GetPartNb(); part++ )
1104 {
1105 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
1106 {
1107 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
1108 {
1109 TGeoNode* nodeGap = GetGap( part, seg, gap );
1110 m_PhysicalGap[part][seg][gap] = gGeoManager->MakePhysicalNode(
1111 TString( "/" ) + bes->GetName() + TString( "/" ) + muc->GetName() +
1112 TString( "/" ) + nodeGap->GetName() + TString( "/" ) +
1113 nodeGap->GetDaughter( 0 )->GetName() );
1114
1115 m_PhysicalGap[part][seg][gap]->SetVisibility( 0 );
1116 m_PhysicalGap[part][seg][gap]->SetIsVolAtt( kFALSE );
1117 m_PhysicalGap[part][seg][gap]->SetLineColor( m_gapColor );
1118
1119 TGeoNode* nodeStripPlane = GetStripPlane( part, seg, gap );
1120
1121 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
1122 {
1123 TGeoNode* nodeStrip = GetStrip( part, seg, gap, strip );
1124 m_PhysicalStrip[part][seg][gap][strip] = gGeoManager->MakePhysicalNode(
1125 TString( "/" ) + bes->GetName() + TString( "/" ) + muc->GetName() +
1126 TString( "/" ) + nodeGap->GetName() + TString( "/" ) +
1127 nodeGap->GetDaughter( 0 )->GetName() + TString( "/" ) +
1128 nodeStripPlane->GetName() + TString( "/" ) + nodeStrip->GetName() );
1129 m_PhysicalStrip[part][seg][gap][strip]->SetVisibility( 0 );
1130 m_PhysicalStrip[part][seg][gap][strip]->SetIsVolAtt( kFALSE );
1131 m_PhysicalStrip[part][seg][gap][strip]->SetLineColor( m_stripColor );
1132 }
1133 }
1134 }
1135 }
1136
1137 for ( int part = 0; part < GetPartNb(); part++ )
1138 {
1139 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
1140 {
1141 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
1142 {
1143 TGeoNode* nodeAbsorber = GetAbsorber( part, seg, absorber );
1144 // if (part == 1) {
1145 m_PhysicalAbsorber[part][seg][absorber][0] = gGeoManager->MakePhysicalNode(
1146 TString( "/" ) + bes->GetName() + TString( "/" ) + muc->GetName() +
1147 TString( "/" ) + nodeAbsorber->GetName() );
1148 m_PhysicalAbsorber[part][seg][absorber][0]->SetVisibility( 0 );
1149 m_PhysicalAbsorber[part][seg][absorber][0]->SetIsVolAtt( kFALSE );
1150 m_PhysicalAbsorber[part][seg][absorber][0]->SetLineColor( m_absorberColor );
1151 // }
1152 // else {
1153 // for (int panel = 0; panel < m_kPanelMax; panel++) {
1154 // TGeoNode *nodeAbsorberPanel = GetAbsorberPanel(part, seg, absorber, panel);
1155 // m_PhysicalAbsorber[part][seg][absorber][panel] =
1156 // gGeoManager->MakePhysicalNode( TString("/") + bes->GetName() + TString("/") +
1157 // muc->GetName() + TString("/") + nodeAbsorber->GetName() + TString("/") +
1158 // nodeAbsorberPanel->GetName() );
1159 // m_PhysicalAbsorber[part][seg][absorber][panel]->SetVisibility(0);
1160 // m_PhysicalAbsorber[part][seg][absorber][panel]->SetIsVolAtt(kFALSE);
1161 // m_PhysicalAbsorber[part][seg][absorber][panel]->SetLineColor(m_absorberColor);
1162 // }
1163 // }
1164 }
1165 }
1166 }
1167
1168 SetDetector();
1169}
1170
1172 BesView* view = 0;
1173 if ( gPad ) view = dynamic_cast<BesView*>( gPad->GetView() );
1174
1175 m_DetectorsArray->Clear();
1176 for ( int part = 0; part < GetPartNb(); part++ )
1177 {
1178 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
1179 {
1180 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
1181 {
1182 TGeoPhysicalNode* phyNode = 0;
1183 phyNode = GetPhysicalGap( part, seg, gap );
1184 if ( phyNode )
1185 {
1186 phyNode->SetVisibility( 0 ); // set all invisible before set any visible
1187 if ( ( part == 1 && seg <= 8 ) || ( part == 0 && seg <= 3 ) ||
1188 ( part == 2 && seg <= 3 ) )
1189 { m_DetectorsArray->Add( phyNode ); }
1190 else if ( view && view->GetVisFull3DMuc() ) { m_DetectorsArray->Add( phyNode ); }
1191 }
1192 }
1193 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
1194 {
1195 for ( int panel = 0; panel < m_kPanelMax; panel++ )
1196 {
1197 TGeoPhysicalNode* phyNode = 0;
1198 phyNode = GetPhysicalAbsorber( part, seg, absorber, panel );
1199 if ( phyNode )
1200 {
1201 phyNode->SetVisibility( 0 );
1202 if ( ( part == 1 && seg <= 8 ) || ( part == 0 && seg <= 3 ) ||
1203 ( part == 2 && seg <= 3 ) )
1204 { m_DetectorsArray->Add( phyNode ); }
1205 else if ( view && view->GetVisFull3DMuc() ) { m_DetectorsArray->Add( phyNode ); }
1206 }
1207 }
1208 }
1209 }
1210 }
1211}
1212
1214 // set previous event hits to default vis
1215 for ( int i = 0; i < m_HitsArray->GetEntries(); i++ )
1216 {
1217 TGeoPhysicalNode* phyNode = (TGeoPhysicalNode*)m_HitsArray->At( i );
1218 phyNode->SetLineColor( m_stripColor );
1219 phyNode->SetVisibility( 0 );
1220 }
1221 m_HitsArray->Clear( "C" );
1222
1223 // set previous event 2D hits info to default
1224 for ( int i = 0; i < m_2DHitsArray->GetEntries(); i++ )
1225 {
1226 Muc2DStrip* aStrip = (Muc2DStrip*)m_2DHitsArray->At( i );
1227 aStrip->ClearInfo();
1228 aStrip->AddInfo( aStrip->GetTitle() );
1229 aStrip->CloseInfo();
1230 }
1231 m_2DHitsArray->Clear( "C" );
1232
1233 // Long Peixun's update: Consider gEvent == NULL
1234 int NDigiCol = 0;
1235 if ( gEvent )
1236 {
1237 m_MucDigiCol = gEvent->GetMucDigiCol();
1238 // Long Peixun's update: Consider m_MucDigiCol == NULL
1239 if ( m_MucDigiCol ) NDigiCol = m_MucDigiCol->GetEntries();
1240 else NDigiCol = 0;
1241 }
1242
1243 for ( int i = 0; i < NDigiCol; i++ )
1244 {
1245 Identifier aMucID( ( (TMucDigi*)m_MucDigiCol->At( i ) )->getIntId() );
1246 int part = MucID::part( aMucID );
1247 int seg = MucID::seg( aMucID );
1248 int gap = MucID::gap( aMucID );
1249 int strip = MucID::strip( aMucID );
1250
1251 TGeoPhysicalNode* phyNode =
1252 GetPhysicalStrip( part, seg, gap, strip ); // Long Peixun's update: code optimization
1253 if ( phyNode ) m_HitsArray->Add( phyNode );
1254
1255 Muc2DStrip* aStrip = 0;
1256 aStrip = m_Muc2DStrip[part][seg][gap][strip];
1257 if ( aStrip )
1258 {
1259 aStrip->ClearInfo();
1260 aStrip->AddInfo( aStrip->GetTitle() );
1261
1262 char data[100];
1263 sprintf( data, "Fired" );
1264 aStrip->AddInfo( TString( data ) );
1265
1266 aStrip->CloseInfo();
1267
1268 m_2DHitsArray->Add( aStrip );
1269 }
1270 }
1271}
1272
1274 BesView* view = 0;
1275 if ( gPad ) view = dynamic_cast<BesView*>( gPad->GetView() );
1276
1277 for ( int i = 0; i < m_DetectorsArray->GetEntries(); i++ )
1278 {
1279 TGeoPhysicalNode* phyNode = (TGeoPhysicalNode*)m_DetectorsArray->At( i );
1280 phyNode->SetVisibility( 0 );
1281
1282 if ( view && view->GetVisMucGlobal() )
1283 {
1284 int part = GetPart( phyNode );
1285 if ( part == 0 && view->GetVisMucEast() || part == 1 && view->GetVisMucBarrel() ||
1286 part == 2 && view->GetVisMucWest() )
1287 phyNode->SetVisibility( 1 );
1288 }
1289 }
1290}
1291
1293 BesView* view = 0;
1294 if ( gPad ) view = dynamic_cast<BesView*>( gPad->GetView() );
1295
1296 for ( int i = 0; i < m_HitsArray->GetEntries(); i++ )
1297 {
1298 TGeoPhysicalNode* phyNode = (TGeoPhysicalNode*)m_HitsArray->At( i );
1299 if ( view && view->GetVisMucHitsGlobal() )
1300 {
1301 int part = GetPart( phyNode );
1302 if ( part == 0 && view->GetVisMucHitsEast() ||
1303 part == 1 && view->GetVisMucHitsBarrel() || part == 2 && view->GetVisMucHitsWest() )
1304 {
1305 phyNode->SetVisibility( 1 );
1306 continue;
1307 }
1308 phyNode->SetLineColor( 922 ); // Long Peixun's update: Set color despite of visibility
1309 }
1310 phyNode->SetVisibility( 0 );
1311 }
1312}
1313
1315 return m_kPart; // Long Peixun's update: code optimization
1316}
1317
1318int MucROOTGeo::GetSegNb( int part ) {
1319 return m_kSeg[part]; // Long Peixun's update: code optimization
1320}
1321
1322int MucROOTGeo::GetGapNb( int part ) {
1323 return m_kGap[part]; // Long Peixun's update: code optimization
1324}
1325
1326int MucROOTGeo::GetStripNb( int part, int seg, int gap ) {
1327 return m_StripNum[part][seg][gap]; // Long Peixun's update: code optimization
1328}
1329
1331 return m_kAbsorber[part]; // Long Peixun's update: code optimization
1332}
1333
1334TGeoVolume* MucROOTGeo::GetVolumeAbsorber( int part, int seg, int absorber ) {
1335 std::stringstream osname;
1336 osname << "l"
1337 << "Muc"
1338 << "P" << part << "S" << seg << "Ab" << absorber;
1339
1340 return GetLogicalVolume( osname.str() );
1341}
1342
1343TGeoVolume* MucROOTGeo::GetVolumeAbsorberSmallBlock( int gap, int sb ) {
1344 std::stringstream osname;
1345 osname << "VolumeSmallBlock"
1346 << "Gap" << gap << "SB" << sb;
1347
1348 return GetLogicalVolume( osname.str() );
1349}
1350
1351TGeoVolume* MucROOTGeo::GetVolumeAbsorberPanel( int part, int seg, int absorber, int panel ) {
1352 std::stringstream osname; // useless now 2007.1.2
1353 osname << "logical"
1354 << "Muc"
1355 << "Part" << part << "Seg" << seg << "Absorber" << absorber << "Panel" << panel;
1356
1357 return GetLogicalVolume( osname.str() );
1358}
1359
1360TGeoVolume* MucROOTGeo::GetVolumeGap( int part, int seg, int gap ) {
1361 std::stringstream osname;
1362 osname << "l"
1363 << "Muc"
1364 << "P" << part << "S" << seg << "G" << gap;
1365
1366 return GetLogicalVolume( osname.str() );
1367}
1368
1369TGeoVolume* MucROOTGeo::GetVolumeBox( int part, int seg, int gap ) {
1370 std::stringstream osname;
1371 osname << "l"
1372 << "Muc"
1373 << "P" << part << "S" << seg << "G" << gap << "Al";
1374
1375 return GetLogicalVolume( osname.str() );
1376}
1377
1378TGeoVolume* MucROOTGeo::GetVolumeBoxSurface( int part, int seg, int gap, int up ) {
1379 std::stringstream osname;
1380 int segment = 0;
1381 if ( part == 1 && seg == 2 ) segment = 2;
1382 osname << "l"
1383 << "Muc"
1384 << "P" << part << "S" << segment << "G" << gap << "AlSf" << up;
1385
1386 return GetLogicalVolume( osname.str() );
1387}
1388
1389TGeoVolume* MucROOTGeo::GetVolumeStripPlane( int part, int seg, int gap ) {
1390 int segment = 0;
1391 if ( part == 1 && seg == 2 ) segment = 2;
1392 std::stringstream osname;
1393 osname << "l"
1394 << "Muc"
1395 << "P" << part << "S" << segment << "G" << gap << "SP";
1396
1397 return GetLogicalVolume( osname.str() );
1398}
1399
1400TGeoVolume* MucROOTGeo::GetVolumeStrip( int part, int seg, int gap, int strip ) {
1401 std::stringstream osname;
1402 int segment = 0;
1403 if ( part == 1 && seg == 2 ) segment = 2;
1404 if ( strip < 10 )
1405 {
1406 osname << "l"
1407 << "Muc"
1408 << "P" << part << "S" << segment << "G" << gap << "s"
1409 << "00" << strip;
1410 }
1411 else if ( strip < 100 )
1412 {
1413 osname << "l"
1414 << "Muc"
1415 << "P" << part << "S" << segment << "G" << gap << "s"
1416 << "0" << strip;
1417 }
1418 else
1419 {
1420 osname << "l"
1421 << "Muc"
1422 << "P" << part << "S" << segment << "G" << gap << "s" << strip;
1423 }
1424
1425 return GetLogicalVolume( osname.str() );
1426}
1427
1428TGeoVolume* MucROOTGeo::GetVolumeGasChamber( int part, int seg, int gap, int rpcUpDown,
1429 int panel ) {
1430 std::stringstream osname;
1431 int segment = 0;
1432 if ( part == 1 && seg == 2 ) segment = 2;
1433 osname << "l"
1434 << "Muc"
1435 << "P" << part << "S" << segment << "G" << gap << "R" << rpcUpDown << "Pn" << panel
1436 << "C";
1437
1438 return GetLogicalVolume( osname.str() );
1439}
1440
1441TGeoVolume* MucROOTGeo::GetVolumeGasBorder( int part, int seg, int gap, int rpcUpDown,
1442 int panel ) {
1443 std::stringstream osname;
1444 int segment = 0;
1445 if ( part == 1 && seg == 2 ) segment = 2;
1446 osname << "l"
1447 << "Muc"
1448 << "P" << part % 2 << "S" << segment << "G" << gap << "R" << rpcUpDown << "Pn"
1449 << panel << "GB";
1450
1451 return GetLogicalVolume( osname.str() );
1452}
1453
1454TGeoVolume* MucROOTGeo::GetVolumeBakelite( int part, int seg, int gap, int RpcUpDown,
1455 int panel, int bakelite ) {
1456 std::stringstream osname;
1457 int segment = 0;
1458 if ( part == 1 && seg == 2 ) segment = 2;
1459 osname << "l"
1460 << "Muc"
1461 << "P" << part << "S" << segment << "G" << gap << "R" << RpcUpDown << "Pn" << panel
1462 << "B" << bakelite;
1463
1464 return GetLogicalVolume( osname.str() );
1465}
1466
1467TGeoNode* MucROOTGeo::GetAbsorber( int part, int seg, int absorber ) {
1468 if ( m_NodeAbsorber[part][seg][absorber] != 0 )
1469 { return m_NodeAbsorber[part][seg][absorber]; }
1470 else { return 0; }
1471}
1472
1473TGeoNode* MucROOTGeo::GetAbsorberPanel( int part, int seg, int absorber, int panel ) {
1474 if ( m_NodeAbsorberPanel[part][seg][absorber][panel] != 0 )
1475 { return m_NodeAbsorberPanel[part][seg][absorber][panel]; }
1476 else { return 0; }
1477}
1478
1479TGeoNode* MucROOTGeo::GetGap( int part, int seg, int gap ) {
1480 if ( m_NodeGap[part][seg][gap] != 0 ) { return m_NodeGap[part][seg][gap]; }
1481 else { return 0; }
1482}
1483
1484TGeoNode* MucROOTGeo::GetStripPlane( int part, int seg, int gap ) {
1485 if ( m_NodeStripPlane[part][seg][gap] != 0 ) { return m_NodeStripPlane[part][seg][gap]; }
1486 else { return 0; }
1487}
1488
1489TGeoNode* MucROOTGeo::GetStrip( int part, int seg, int gap, int strip ) {
1490 if ( m_NodeStrip[part][seg][gap][strip] != 0 ) { return m_NodeStrip[part][seg][gap][strip]; }
1491 else { return 0; }
1492}
1493
1494TGeoPhysicalNode* MucROOTGeo::GetPhysicalAbsorber( int part, int seg, int absorber,
1495 int panel ) {
1496 return m_PhysicalAbsorber[part][seg][absorber][panel];
1497}
1498
1499TGeoPhysicalNode* MucROOTGeo::GetPhysicalGap( int part, int seg, int gap ) {
1500 if ( m_PhysicalGap[part][seg][gap] != 0 ) { return m_PhysicalGap[part][seg][gap]; }
1501 else { return 0; }
1502}
1503
1504TGeoPhysicalNode* MucROOTGeo::GetPhysicalStrip( int part, int seg, int gap, int strip ) {
1505 if ( m_PhysicalStrip[part][seg][gap][strip] != 0 )
1506 { return m_PhysicalStrip[part][seg][gap][strip]; }
1507 else { return 0; }
1508}
1509
1510Muc2DStrip* MucROOTGeo::Get2DStrip( int part, int seg, int gap, int strip ) {
1511 if ( m_Muc2DStrip[part][seg][gap][strip] ) return m_Muc2DStrip[part][seg][gap][strip];
1512 else return 0;
1513}
1514
1515int MucROOTGeo::GetPart( TGeoPhysicalNode* phyNode ) {
1516 for ( int part = 0; part < GetPartNb(); part++ )
1517 {
1518 for ( int seg = 0; seg < GetSegNb( part ); seg++ )
1519 {
1520 for ( int gap = 0; gap < GetGapNb( part ); gap++ )
1521 {
1522 if ( phyNode == GetPhysicalGap( part, seg, gap ) ) { return part; }
1523 for ( int strip = 0; strip < m_StripNum[part][seg][gap]; strip++ )
1524 {
1525 if ( phyNode == GetPhysicalStrip( part, seg, gap, strip ) ) { return part; }
1526 }
1527 }
1528 for ( int absorber = 0; absorber < GetAbsorberNb( part ); absorber++ )
1529 {
1530 for ( int panel = 0; panel < m_kPanelMax; panel++ )
1531 {
1532 if ( phyNode == GetPhysicalAbsorber( part, seg, absorber, panel ) ) { return part; }
1533 }
1534 }
1535 }
1536 }
1537
1538 return -1;
1539}
1540
1541Bool_t MucROOTGeo::IsZRVisible( int part, int seg ) {
1542 if ( part != 1 ) return true;
1543
1544 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
1545 Double_t viewPhi = view->GetLongitude();
1546 viewPhi = Range360( viewPhi );
1547
1548 Int_t viewSeg = Int_t( viewPhi / 45.0 + 0.5 );
1549 Int_t upSeg = viewSeg + 2;
1550 Int_t downSeg = viewSeg - 2;
1551 if ( upSeg < 0 ) upSeg += 8;
1552 else if ( upSeg >= 8 ) upSeg -= 8;
1553 if ( downSeg < 0 ) downSeg += 8;
1554 else if ( downSeg >= 8 ) downSeg -= 8;
1555
1556 if ( seg == upSeg || seg == downSeg ) return true;
1557 else return false;
1558}
1559
1560Double_t MucROOTGeo::Range360( Double_t input ) {
1561 if ( input >= 360.0 )
1562 {
1563 do {
1564 input -= 360.0;
1565 } while ( input >= 360.0 );
1566 }
1567 else if ( input < 0.0 )
1568 {
1569 do {
1570 input += 360.0;
1571 } while ( input < 0.0 );
1572 }
1573
1574 return input;
1575}
1576
1577void MucROOTGeo::Draw( Option_t* option ) {
1578 TString opt = option;
1579 opt.ToUpper();
1580
1581 if ( !m_2DGeoInit ) cout << "MucROOTGeo::Draw2D(), 2D Geometry not initialized!" << endl;
1582 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
1583 if ( !view ) cout << "MucROOTGeo::Draw(), BesView not found" << endl;
1584
1585 if ( view->GetVisMucGlobal() )
1586 { // MucVisGlobal
1587 // seg and gap
1588 for ( Int_t part = GetPartNb() - 1; part >= 0; part-- )
1589 { // draw west first
1590 if ( ( part == 0 && view->GetVisMucEast() ) ||
1591 ( part == 1 && view->GetVisMucBarrel() ) || ( part == 2 && view->GetVisMucWest() ) )
1592 {
1593 for ( Int_t seg = 0; seg < GetSegNb( part ); seg++ )
1594 {
1595 if ( opt.Contains( "XY" ) )
1596 {
1597 if ( m_MucXY[part][seg] ) m_MucXY[part][seg]->Draw( "" );
1598 for ( Int_t gap = 0; gap < GetGapNb( part ); gap++ )
1599 {
1600 if ( m_MucXYGap[part][seg][gap] ) m_MucXYGap[part][seg][gap]->Draw( "" );
1601 }
1602 }
1603 if ( opt.Contains( "ZR" ) )
1604 {
1605 if ( m_MucZR[part][seg] )
1606 { // && IsZRVisible(part, seg) ) {
1607 if ( part == 1 ) m_MucZR[part][seg]->SetRotatable( true );
1608 m_MucZR[part][seg]->Draw( "" );
1609 }
1610 for ( Int_t gap = 0; gap < GetGapNb( part ); gap++ )
1611 {
1612 if ( m_MucZRGap[part][seg][gap] )
1613 {
1614 if ( part == 1 ) m_MucZRGap[part][seg][gap]->SetRotatable( true );
1615 m_MucZRGap[part][seg][gap]->Draw( "" );
1616 }
1617 }
1618 }
1619 }
1620 }
1621 }
1622
1623 // strips, should be drawn after all segs and gaps have been drawn
1624 for ( Int_t part = GetPartNb() - 1; part >= 0; part-- )
1625 { // draw west first
1626 for ( Int_t seg = 0; seg < GetSegNb( part ); seg++ )
1627 {
1628 for ( Int_t gap = 0; gap < GetGapNb( part ); gap++ )
1629 {
1630 for ( Int_t strip = 0; strip < GetStripNb( part, seg, gap ); strip++ )
1631 {
1632 if ( m_Muc2DStrip[part][seg][gap][strip] )
1633 {
1634 m_Muc2DStrip[part][seg][gap][strip]->SetFired( false );
1635 if ( ( part == 0 && view->GetVisMucEast() ) ||
1636 ( part == 1 && view->GetVisMucBarrel() ) ||
1637 ( part == 2 && view->GetVisMucWest() ) )
1638 { m_Muc2DStrip[part][seg][gap][strip]->Draw( "" ); }
1639 }
1640 }
1641 }
1642 }
1643 }
1644 }
1645}
1646
1647void MucROOTGeo::DrawHits( Option_t* option ) {
1648 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
1649 if ( !view ) cout << "MucROOTGeo::DrawHits(), BesView not found" << endl;
1650
1651 if ( view->GetVisMucHitsGlobal() )
1652 {
1653
1654 /*
1655 for (Int_t part = GetPartNb()-1; part >= 0; part--) { // draw west first
1656 for (Int_t seg = 0; seg < GetSegNb(part); seg++) {
1657 for (Int_t gap = 0; gap < GetGapNb(part); gap++) {
1658 for (Int_t strip = 0; strip < GetStripNb(part, seg, gap); strip++) {
1659 if (m_Muc2DStrip[part][seg][gap][strip])
1660 m_Muc2DStrip[part][seg][gap][strip]->ClearInfo();
1661 }
1662 }
1663 }
1664 }*/
1665
1666 // Long Peixun's update: Use m_2DHitsArray which contains ready hits rather than rebuild
1667 // hits
1668 for ( int i = 0; i < m_2DHitsArray->GetEntries(); ++i )
1669 {
1670 Muc2DStrip* aStrip = (Muc2DStrip*)m_2DHitsArray->At( i );
1671 if ( aStrip )
1672 {
1673 if ( ( aStrip->GetPart() == 0 && view->GetVisMucHitsEast() ) ||
1674 ( aStrip->GetPart() == 1 && view->GetVisMucHitsBarrel() ) ||
1675 ( aStrip->GetPart() == 2 && view->GetVisMucHitsWest() ) )
1676 {
1677 aStrip->SetFired( true );
1678 aStrip->Draw();
1679 }
1680 }
1681 }
1682
1683 /* if (m_MucDigiCol) {
1684 for (int i = 0; i < m_MucDigiCol->GetEntries(); i++) {
1685 TMucDigi *aMucDigi = (TMucDigi*)m_MucDigiCol->At(i);
1686
1687 //cout << aMucDigi->getIntId() << endl;
1688 Identifier aMucID( aMucDigi->getIntId() );
1689 int part = MucID::part( aMucID );
1690 int seg = MucID::seg( aMucID );
1691 int gap = MucID::gap( aMucID );
1692 int strip = MucID::strip( aMucID );
1693
1694 Muc2DStrip *aStrip = 0;
1695 aStrip = m_Muc2DStrip[part][seg][gap][strip];
1696 if (aStrip) {
1697 if ( (part == 0 && view->GetVisMucHitsEast()) ||
1698 (part == 1 && view->GetVisMucHitsBarrel()) ||
1699 (part == 2 && view->GetVisMucHitsWest()) ) {
1700 aStrip->SetFired(true);
1701 aStrip->Draw();
1702 }
1703 }
1704 }
1705 } */
1706 }
1707}
double P(RecMdcKalTrack *trk)
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
TTree * data
virtual void Draw(Option_t *option="")
virtual void ClearInfo()
virtual void CloseInfo()
static int part(const Identifier &id)
Definition MucID.cxx:43
static int gap(const Identifier &id)
Definition MucID.cxx:63
static int seg(const Identifier &id)
Definition MucID.cxx:53
static int strip(const Identifier &id)
Definition MucID.cxx:73
void SetQuarterVisible()
Set quater visible;.
TGeoVolume * GetVolumeStripPlane(int part, int seg, int gap)
Get strip plane volume;.
void Draw(Option_t *option)
Draw function.
void SetPhysicalNode()
Set the pointers to the physical nodes;.
int GetGapNb(int part)
Get number of gap on part;.
void SetDetector()
Set Detecor (what is detector depends on you).
void SetVolumeDefaultVis()
Set default visual attributes;.
TGeoVolume * GetVolumeGasChamber(int part, int seg, int gap, int panel, int gasChamber)
Get rpc gas chamber volume;.
void SetHalfVisible()
Set half visible;.
int GetAbsorberNb(int part)
Get number of absorber on part;.
TGeoPhysicalNode * GetPhysicalStrip(int part, int seg, int gap, int strip)
Get strip physical node;.
TGeoVolume * GetVolumeBox(int part, int seg, int gap)
Get box volume;.
TGeoVolume * GetVolumeBakelite(int part, int seg, int gap, int panel, int bakelite)
Get rpc bakelite volume;.
TGeoVolume * GetVolumeGasBorder(int part, int seg, int gap, int panel, int gasChamber)
Get rpc gas border volume;.
Double_t Range360(Double_t input)
Get input value 0~360.
void SetNode()
Set the pointers to theirs nodes;.
void SetVolumeMuc(TGeoVolume *vol)
Set Muc volume, while initializing from ROOT;.
TGeoVolume * GetVolumeAbsorberPanel(int part, int seg, int absorber, int panel)
Get absorber panel volume;.
TGeoNode * GetAbsorber(int part, int seg, int absorber)
Get absorber node;.
Bool_t IsZRVisible(int part, int seg)
Is a segment visible in ZR view.
void SetVisMucDetector()
Set Muc detector visibility;.
Int_t GetPart(TGeoPhysicalNode *phyNode)
Get part no of a physcial node.
int GetSegNb(int part)
Get number of segment on part;.
TGeoVolume * GetVolumeGap(int part, int seg, int gap)
Get gap volume;.
int GetPartNb()
Get number of part;.
void SetHits()
Set all physicalNodes corresponding to digiCol;.
void SetNoEndVisible()
Set noend visible;.
TGeoVolume * GetVolumeBoxSurface(int part, int seg, int gap, int up)
Get box surface volume;.
TGeoNode * GetGap(int part, int seg, int gap)
Get absorber node;.
TGeoNode * GetStripPlane(int part, int seg, int gap)
Get box node;.
TGeoVolume * GetVolumeStrip(int part, int seg, int gap, int strip)
Get strip volume;.
void SetVisMucHits()
Set Muc hits visibility;.
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;.
TGeoPhysicalNode * GetPhysicalAbsorber(int part, int seg, int gap, int panel)
Get rpc gas chamber node;.
void Init2DGeometry()
Initialize 2D Geometry.
void DrawHits(Option_t *option)
Draw 2D hits.
int GetStripNb(int part, int seg, int gap)
Get number of strip on gap;.
Muc2DStrip * Get2DStrip(int part, int seg, int gap, int strip)
Get Muc2DStrip;.
TGeoVolume * GetVolumeAbsorberSmallBlock(int gap, int sb)
Get absorber small block;.
TGeoNode * GetAbsorberPanel(int part, int seg, int absorber, int panel)
Get absorber panel node;.
void InitFromGDML(const char *gdmlFile, const char *setupName)
Initialize ROOTGeo from GDML.
void InitFromROOT(TGeoVolume *vol)
Initialize ROOTGeo from TGeoVolume logicalMuc.
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.