CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
BesGeometry Class Reference

#include <BesGeometry.h>

+ Inheritance diagram for BesGeometry:

Public Member Functions

 BesGeometry ()
 
virtual ~BesGeometry ()
 
virtual void InitFromGDML (const TString fPath, bool mrpc=false, bool cgem=false)
 
virtual void InitFromROOT (TGeoVolume *volBes)
 
virtual void InitGeometry ()
 
const char * GetFilename (const char *RunPeriod)
 
virtual void SetDefaultVis ()
 
virtual void SetPhysicalDefaultVis ()
 
virtual void Draw (Option_t *option="3D")
 
virtual void Draw3D ()
 
virtual void Draw2DXY ()
 
virtual void Draw2DZR ()
 
virtual void DrawCgemUF (int layer)
 
Float_t GetBesR ()
 
Float_t GetBesZ ()
 
TGeoVolume * GetVolBes ()
 
TGeoVolume * GetVolumeBeamPipe ()
 
CgemROOTGeoGetCgemROOTGeo ()
 
MdcROOTGeoGetMdcROOTGeo ()
 
TofROOTGeoGetTofROOTGeo ()
 
EmcROOTGeoGetEmcROOTGeo ()
 
MucROOTGeoGetMucROOTGeo ()
 
TGeoVolume * GetVolumeCgem ()
 
TGeoVolume * GetVolumeMdc ()
 
TGeoVolume * GetVolumeMdcSegment (int segment)
 
TGeoVolume * GetVolumeMdcLayer (int layer)
 
TGeoVolume * GetVolumeMdcReplica (int layer)
 
TGeoPhysicalNode * GetPhysicalMdcReplica (int layer, int replica)
 
TGeoVolume * GetVolumeTof ()
 
TGeoPhysicalNode * GetPhysicalTofScin (int part, int layer, int scin)
 
TGeoVolume * GetVolumeEmc ()
 
TGeoVolume * GetVolumeEmcPart (int part)
 
TGeoVolume * GetVolumeEmcPhi (int part, int phi)
 
TGeoVolume * GetVolumeEmcTheta (int part, int phi, int theta)
 
TGeoVolume * GetVolumeEmcCrystal (int part, int phi, int theta)
 
TGeoPhysicalNode * GetPhysicalEmcCrystal (int part, int phi, int theta)
 
TGeoVolume * GetVolumeMuc ()
 
TGeoVolume * GetVolumeMucAbsorber (int part, int seg, int absorber)
 
TGeoVolume * GetVolumeMucAbsorberPanel (int part, int seg, int absorber, int panel)
 
TGeoVolume * GetVolumeMucGap (int part, int seg, int gap)
 
TGeoVolume * GetVolumeMucStripPlane (int part, int seg, int gap)
 
TGeoVolume * GetVolumeMucStrip (int part, int seg, int gap, int strip)
 
TGeoVolume * GetVolumeMucGasChamber (int part, int seg, int gap, int panel, int gasChamber)
 
TGeoVolume * GetVolumeMucBakelite (int part, int seg, int gap, int RpcUpDown, int panel, int bakelite)
 
TGeoPhysicalNode * GetPhysicalMucGap (int part, int seg, int gap)
 
TGeoPhysicalNode * GetPhysicalMucStrip (int part, int seg, int gap, int strip)
 

Detailed Description

Definition at line 19 of file BesGeometry.h.

Constructor & Destructor Documentation

◆ BesGeometry()

BesGeometry::BesGeometry ( )

◆ ~BesGeometry()

BesGeometry::~BesGeometry ( )
virtual

Definition at line 55 of file BesGeometry.cxx.

56{
57 delete m_Bes;
58 delete m_BeamPipe;
59
60 delete m_CgemROOTGeo; //Long Peixun's update: for CGEM
61 delete m_MdcROOTGeo;
62 delete m_TofROOTGeo;
63 delete m_EmcROOTGeo;
64 delete m_MucROOTGeo;
65}

Member Function Documentation

◆ Draw()

void BesGeometry::Draw ( Option_t *  option = "3D")
virtual

Definition at line 341 of file BesGeometry.cxx.

342{
343 //
344 // BesGeometry draw function
345 TString opt = option;
346 opt.ToUpper();
347
348 if ( opt.Contains("3D") ) {
349 Draw3D();
350 }
351 else if ( opt.Contains("XY") ) {
352 Draw2DXY();
353 }
354 else if ( opt.Contains("ZR") ) {
355 Draw2DZR();
356 }
357}
virtual void Draw2DXY()
virtual void Draw2DZR()
virtual void Draw3D()

Referenced by BesVisDisplay::DrawView(), and BesView::SetViewType().

◆ Draw2DXY()

void BesGeometry::Draw2DXY ( )
virtual

Definition at line 420 of file BesGeometry.cxx.

421{
422 BesView *view = dynamic_cast<BesView*>(gPad->GetView());
423 //Long Peixun's update: Judge view before draw
424 if (view)
425 {
426 if (view->GetVisBeamPipe()) m_BeamPipeXY->Draw();
427 if (m_MdcROOTGeo) m_MdcROOTGeo->Draw("XY");
428 if (m_TofROOTGeo) m_TofROOTGeo->Draw("XY");
429 if (m_EmcROOTGeo) m_EmcROOTGeo->Draw("XY");
430 if (m_MucROOTGeo) m_MucROOTGeo->Draw("XY");
431 if (m_CgemROOTGeo) m_CgemROOTGeo->Draw("XY"); //Long Peixun's update: for CGEM
432 if (view->GetVisZRPlaneOnXY()) m_ZRPlaneOnXY->Draw();
433 if (view->GetVisAxis()) view->ShowAxis();
434 }
435}
virtual void Draw(Option_t *option="")
virtual void Draw(Option_t *option="")
virtual void ShowAxis()
Definition: BesTView.h:178
Bool_t GetVisAxis()
Definition: BesView.h:194
Bool_t GetVisBeamPipe()
Definition: BesView.h:192
Bool_t GetVisZRPlaneOnXY()
Definition: BesView.h:193
void Draw(Option_t *option)

Referenced by Draw().

◆ Draw2DZR()

void BesGeometry::Draw2DZR ( )
virtual

Definition at line 437 of file BesGeometry.cxx.

438{
439 BesView *view = dynamic_cast<BesView*>(gPad->GetView());
440 //Long Peixun's update: Judge view before draw
441 if (view)
442 {
443 if (view->GetVisBeamPipe()) m_BeamPipeZR->Draw();
444 if (m_CgemROOTGeo) m_CgemROOTGeo->Draw("ZR"); //Long Peixun's update: for CGEM
445 if (m_MdcROOTGeo) m_MdcROOTGeo->Draw("ZR");
446 if (m_TofROOTGeo) m_TofROOTGeo->Draw("ZR");
447 if (m_EmcROOTGeo) m_EmcROOTGeo->Draw("ZR");
448 if (m_MucROOTGeo) m_MucROOTGeo->Draw("ZR");
449 if (view->GetVisAxis()) view->ShowAxis();
450 }
451}

Referenced by Draw().

◆ Draw3D()

void BesGeometry::Draw3D ( )
virtual

Definition at line 359 of file BesGeometry.cxx.

360{
361 BesView *view = dynamic_cast<BesView*>(gPad->GetView());
362
363 if (view && view->GetViewType() == k3DView)
364 {
365 //Long Peixun's update: Draw Detector 3D
366 m_BeamPipe->AppendPad();
367
368 //Long Peixun's update: Set BeamPipe 3D visibility
369 if (view->GetVisBeamPipe()) m_phyBeamPipe->SetVisibility(1);
370 else m_phyBeamPipe->SetVisibility(0);
371
372 //Long Peixun's update: for CGEM
373 if (m_CgemROOTGeo)
374 {
375 //m_CgemROOTGeo->SetVisCgemDetector();
376 //m_CgemROOTGeo->SetVisCgemHits();
377 }
378
379 if (m_MdcROOTGeo) {
380 m_MdcROOTGeo->SetVisMdcDetector();
381 m_MdcROOTGeo->SetPhysicalDefaultVis(); //Long Peixun's update: Reset Color
382 m_MdcROOTGeo->SetVisMdcHits();
383 }
384
385 if (m_TofROOTGeo) {
386 m_TofROOTGeo->SetVisTofDetector();
387 m_TofROOTGeo->SetPhysicalDefaultVis(); //Long Peixun's update: Reset Color
388 m_TofROOTGeo->SetVisTofHits();
389 }
390
391 if (m_EmcROOTGeo) {
392 m_EmcROOTGeo->SetVisEmcDetector();
393 m_EmcROOTGeo->SetPhysicalDefaultVis(); //Long Peixun's update: Reset Color
394 m_EmcROOTGeo->SetVisEmcHits();
395 }
396
397 if (m_MucROOTGeo) {
398 m_MucROOTGeo->SetVisMucDetector();
399 m_MucROOTGeo->SetPhysicalDefaultVis(); //Long Peixun's update: Reset Color
400 m_MucROOTGeo->SetVisMucHits();
401 }
402 }
403
404 //if (gGeoManager) {
405 // cout << "gGeoManager exit" << endl;
406 //}
407 //else {
408 // cout << "gGeoManager do not exit" << endl;
409 //}
410
411 //if (m_Bes){
412 // cout << "m_Bes address:" << m_Bes << endl;
413 //}
414
415
416 //if (m_Bes) m_Bes->Draw();
417 //if (view && view->GetVisAxis()) view->ShowAxis();
418}
@ k3DView
Definition: BesStatus.h:14
EBESViewType GetViewType()
Definition: BesView.h:74
void SetVisEmcDetector()
Set Emc detector visibility;.
void SetPhysicalDefaultVis()
Set default physical node attributes;.
void SetVisMdcDetector()
Set Mdc default detector visibility;.
void SetPhysicalDefaultVis()
Set default physical node attributes;.
void SetVisMucDetector()
Set Muc detector visibility;.
void SetVisTofDetector()
Set Tof detector visibility;.

Referenced by Draw().

◆ DrawCgemUF()

void BesGeometry::DrawCgemUF ( int  layer)
virtual

Definition at line 455 of file BesGeometry.cxx.

456{
457 BesView *view = dynamic_cast<BesView*>(gPad->GetView());
458 if (view && m_CgemROOTGeo)
459 {
460 m_CgemROOTGeo->DrawUF(layer);
461 // if (view->GetVisAxis())
462 // {
463 // view->ShowAxis();
464 // }
465 }
466}
void DrawUF(int layer, Option_t *option="")

Referenced by BesView::SetViewType().

◆ GetBesR()

Float_t BesGeometry::GetBesR ( )
inline

Definition at line 41 of file BesGeometry.h.

41{ return m_BesR; }

Referenced by ClassImp().

◆ GetBesZ()

Float_t BesGeometry::GetBesZ ( )
inline

Definition at line 42 of file BesGeometry.h.

42{ return m_BesZ; }

Referenced by ClassImp().

◆ GetCgemROOTGeo()

◆ GetEmcROOTGeo()

◆ GetFilename()

const char * BesGeometry::GetFilename ( const char *  RunPeriod)

Definition at line 310 of file BesGeometry.cxx.

311{
312 return RunPeriod;
313}

◆ GetMdcROOTGeo()

◆ GetMucROOTGeo()

◆ GetPhysicalEmcCrystal()

TGeoPhysicalNode * BesGeometry::GetPhysicalEmcCrystal ( int  part,
int  phi,
int  theta 
)
inline

Definition at line 73 of file BesGeometry.h.

73{ return m_EmcROOTGeo->GetPhysicalCrystal(part, phi, theta); }
TGeoPhysicalNode * GetPhysicalCrystal(int part, int phi, int theta)
Get crystal physical node;.

◆ GetPhysicalMdcReplica()

TGeoPhysicalNode * BesGeometry::GetPhysicalMdcReplica ( int  layer,
int  replica 
)
inline

Definition at line 60 of file BesGeometry.h.

60{ return m_MdcROOTGeo->GetPhysicalReplica(layer, replica); }
TGeoPhysicalNode * GetPhysicalReplica(int layer, int replica)
Get replica physical node;.

◆ GetPhysicalMucGap()

TGeoPhysicalNode * BesGeometry::GetPhysicalMucGap ( int  part,
int  seg,
int  gap 
)
inline

Definition at line 83 of file BesGeometry.h.

83{ return m_MucROOTGeo->GetPhysicalGap(part, seg, gap); }
TGeoPhysicalNode * GetPhysicalGap(int part, int seg, int gap)
Get rpc gas chamber node;

◆ GetPhysicalMucStrip()

TGeoPhysicalNode * BesGeometry::GetPhysicalMucStrip ( int  part,
int  seg,
int  gap,
int  strip 
)
inline

Definition at line 84 of file BesGeometry.h.

84{ return m_MucROOTGeo->GetPhysicalStrip(part, seg, gap, strip); }
TGeoPhysicalNode * GetPhysicalStrip(int part, int seg, int gap, int strip)
Get strip physical node;.

◆ GetPhysicalTofScin()

TGeoPhysicalNode * BesGeometry::GetPhysicalTofScin ( int  part,
int  layer,
int  scin 
)
inline

Definition at line 66 of file BesGeometry.h.

66{ return m_TofROOTGeo->GetPhysicalScin(part, layer, scin); }
TGeoPhysicalNode * GetPhysicalScin(int part, int scin)
Get scintillator physical node;.

◆ GetTofROOTGeo()

◆ GetVolBes()

TGeoVolume * BesGeometry::GetVolBes ( )
inline

Definition at line 44 of file BesGeometry.h.

44{ return m_Bes; }

Referenced by BesClient::SaveGeoAs().

◆ GetVolumeBeamPipe()

TGeoVolume * BesGeometry::GetVolumeBeamPipe ( )
inline

Definition at line 45 of file BesGeometry.h.

45{ return m_BeamPipe; }

◆ GetVolumeCgem()

TGeoVolume * BesGeometry::GetVolumeCgem ( )
inline

Definition at line 54 of file BesGeometry.h.

54{ return m_CgemROOTGeo->GetVolumeCgem(); }
TGeoVolume * GetVolumeCgem() const
Definition: CgemROOTGeo.h:70

◆ GetVolumeEmc()

TGeoVolume * BesGeometry::GetVolumeEmc ( )
inline

Definition at line 68 of file BesGeometry.h.

68{ return m_EmcROOTGeo->GetVolumeEmc(); }

◆ GetVolumeEmcCrystal()

TGeoVolume * BesGeometry::GetVolumeEmcCrystal ( int  part,
int  phi,
int  theta 
)
inline

Definition at line 72 of file BesGeometry.h.

72{ return m_EmcROOTGeo->GetVolumeCrystal(part, phi, theta); }
TGeoVolume * GetVolumeCrystal(int part, int phi, int theta)
Get crystal volume;.

◆ GetVolumeEmcPart()

TGeoVolume * BesGeometry::GetVolumeEmcPart ( int  part)
inline

Definition at line 69 of file BesGeometry.h.

69{ return m_EmcROOTGeo->GetVolumePart(part); }
TGeoVolume * GetVolumePart(int part)
Get part volume;.

◆ GetVolumeEmcPhi()

TGeoVolume * BesGeometry::GetVolumeEmcPhi ( int  part,
int  phi 
)
inline

Definition at line 70 of file BesGeometry.h.

70{ return m_EmcROOTGeo->GetVolumePhi(part, phi); }
TGeoVolume * GetVolumePhi(int part, int phi)
Get phi volume;

◆ GetVolumeEmcTheta()

TGeoVolume * BesGeometry::GetVolumeEmcTheta ( int  part,
int  phi,
int  theta 
)
inline

Definition at line 71 of file BesGeometry.h.

71{ return m_EmcROOTGeo->GetVolumeTheta(part, phi, theta); }
TGeoVolume * GetVolumeTheta(int part, int phi, int theta)
Get theta volume;.

◆ GetVolumeMdc()

TGeoVolume * BesGeometry::GetVolumeMdc ( )
inline

Definition at line 56 of file BesGeometry.h.

56{ return m_MdcROOTGeo->GetVolumeMdc(); }

◆ GetVolumeMdcLayer()

TGeoVolume * BesGeometry::GetVolumeMdcLayer ( int  layer)
inline

Definition at line 58 of file BesGeometry.h.

58{ return m_MdcROOTGeo->GetVolumeLayer(layer); }
TGeoVolume * GetVolumeLayer(int layer)
Get layer volume;

◆ GetVolumeMdcReplica()

TGeoVolume * BesGeometry::GetVolumeMdcReplica ( int  layer)
inline

Definition at line 59 of file BesGeometry.h.

59{ return m_MdcROOTGeo->GetVolumeReplica(layer); }
TGeoVolume * GetVolumeReplica(int layer)
Get replica volume;.

◆ GetVolumeMdcSegment()

TGeoVolume * BesGeometry::GetVolumeMdcSegment ( int  segment)
inline

Definition at line 57 of file BesGeometry.h.

57{ return m_MdcROOTGeo->GetVolumeSegment(segment); }
TGeoVolume * GetVolumeSegment(int segment)
Get segment volume;.

◆ GetVolumeMuc()

TGeoVolume * BesGeometry::GetVolumeMuc ( )
inline

Definition at line 75 of file BesGeometry.h.

75{ return m_MucROOTGeo->GetVolumeMuc(); }

◆ GetVolumeMucAbsorber()

TGeoVolume * BesGeometry::GetVolumeMucAbsorber ( int  part,
int  seg,
int  absorber 
)
inline

Definition at line 76 of file BesGeometry.h.

76{ return m_MucROOTGeo->GetVolumeAbsorber(part, seg, absorber); }
TGeoVolume * GetVolumeAbsorber(int part, int seg, int absorber)
Get absorber volume;

◆ GetVolumeMucAbsorberPanel()

TGeoVolume * BesGeometry::GetVolumeMucAbsorberPanel ( int  part,
int  seg,
int  absorber,
int  panel 
)
inline

Definition at line 77 of file BesGeometry.h.

77{ return m_MucROOTGeo->GetVolumeAbsorberPanel(part, seg, absorber, panel); }
TGeoVolume * GetVolumeAbsorberPanel(int part, int seg, int absorber, int panel)
Get absorber panel volume;

◆ GetVolumeMucBakelite()

TGeoVolume * BesGeometry::GetVolumeMucBakelite ( int  part,
int  seg,
int  gap,
int  RpcUpDown,
int  panel,
int  bakelite 
)
inline

Definition at line 82 of file BesGeometry.h.

82{ return m_MucROOTGeo->GetVolumeBakelite(part, seg, gap, RpcUpDown, panel, bakelite); }
TGeoVolume * GetVolumeBakelite(int part, int seg, int gap, int panel, int bakelite)
Get rpc bakelite volume;

◆ GetVolumeMucGap()

TGeoVolume * BesGeometry::GetVolumeMucGap ( int  part,
int  seg,
int  gap 
)
inline

Definition at line 78 of file BesGeometry.h.

78{ return m_MucROOTGeo->GetVolumeGap(part, seg, gap); }
TGeoVolume * GetVolumeGap(int part, int seg, int gap)
Get gap volume;

◆ GetVolumeMucGasChamber()

TGeoVolume * BesGeometry::GetVolumeMucGasChamber ( int  part,
int  seg,
int  gap,
int  panel,
int  gasChamber 
)
inline

Definition at line 81 of file BesGeometry.h.

81{ return m_MucROOTGeo->GetVolumeGasChamber(part, seg, gap, panel, gasChamber); }
TGeoVolume * GetVolumeGasChamber(int part, int seg, int gap, int panel, int gasChamber)
Get rpc gas chamber volume;

◆ GetVolumeMucStrip()

TGeoVolume * BesGeometry::GetVolumeMucStrip ( int  part,
int  seg,
int  gap,
int  strip 
)
inline

Definition at line 80 of file BesGeometry.h.

80{ return m_MucROOTGeo->GetVolumeStripPlane(part, seg, gap); }
TGeoVolume * GetVolumeStripPlane(int part, int seg, int gap)
Get strip plane volume;.

◆ GetVolumeMucStripPlane()

TGeoVolume * BesGeometry::GetVolumeMucStripPlane ( int  part,
int  seg,
int  gap 
)
inline

Definition at line 79 of file BesGeometry.h.

79{ return m_MucROOTGeo->GetVolumeStripPlane(part, seg, gap); }

◆ GetVolumeTof()

TGeoVolume * BesGeometry::GetVolumeTof ( )
inline

Definition at line 62 of file BesGeometry.h.

62{ return m_TofROOTGeo->GetVolumeTof(); }

◆ InitFromGDML()

void BesGeometry::InitFromGDML ( const TString  fPath,
bool  mrpc = false,
bool  cgem = false 
)
virtual

Definition at line 67 of file BesGeometry.cxx.

68{
69 gGeoManager->SetVisOption(0); // to show all visible volumes.
70 gGeoManager->SetVisLevel(5);
71
72 TGeoIdentity *identity = new TGeoIdentity();
73
74 TGeoMaterial *mat = new TGeoMaterial("VOID",0,0,0);
75 mat->SetTransparency(20);
76 TGeoMedium *med = new TGeoMedium("MED",1,mat);
77 m_Bes = gGeoManager->MakeBox("volBes", med, m_BesR, m_BesR, 0.5*m_BesZ);
78
79 TGeoVolume *topVolume = new TGeoVolume(); // temp top volume for load geometry more than once
80 gGeoManager->SetTopVolume(topVolume);
81 gGeoManager->SetTopVolume(m_Bes);
82
83 //Long Peixun's update: add loading CGEM gdml file code
84 if (cgem)
85 {
86 m_CgemROOTGeo = new CgemROOTGeo();
87 m_CgemROOTGeo->InitFromGDML((fPath + TString("Cgem.gdml")).Data(), "Default");
88 m_Cgem = m_CgemROOTGeo->GetVolumeCgem();
89 }
90
91 Int_t iChildNo = 0;
92 m_MdcROOTGeo = new MdcROOTGeo(Bool_t(m_Cgem)); //Long Peixun's update: Consider CGEM when loading Mdc
93 m_MdcROOTGeo->InitFromGDML( (fPath + TString("Mdc.gdml")).Data(), "Default" ); //Long Peixun's update: "Mdc"->"Default"
94 cout<<"in BesGeometry construct mdc1"<<endl;
95 m_Mdc = m_MdcROOTGeo->GetVolumeMdc();
96 if (m_Mdc) cout << "Construct Mdc" << endl;
97 else cout << "Volume Mdc not found " << endl;
98 m_Bes->AddNode(m_Mdc, iChildNo, identity);
99 m_MdcROOTGeo->SetChildNo(iChildNo);//Connect bes with mdc, form physcialnode path. m_Bes->GetNdaughters()-1
100
101 iChildNo++;
102 m_TofROOTGeo = new TofROOTGeo();
103
104 //Long Peixun's update: Judge MRPC flag and load relevant Tof GDML
105 if (mrpc)
106 m_TofROOTGeo->InitFromGDML( (fPath + TString("Tof_mrpc.gdml")).Data(), "Default" ); //Huang Shuhui's update: for Tof_mrpc
107 else
108 m_TofROOTGeo->InitFromGDML( (fPath + TString("Tof.gdml")).Data(), "Default" ); //Long Peixun's update: "Tof"->"Default"
109
110 cout<<"construct tof"<<endl;
111 m_Tof = m_TofROOTGeo->GetVolumeTof();
112 if (m_Tof) cout << "Construct Tof" << endl;
113 else cout << "Volume Tof not found " << endl;
114 m_Bes->AddNode(m_Tof, iChildNo, identity);
115 m_TofROOTGeo->SetChildNo(iChildNo);
116
117 iChildNo++;
118 m_EmcROOTGeo = new EmcROOTGeo();
119 m_EmcROOTGeo->InitFromGDML( (fPath + TString("Emc.gdml")).Data(), "Default" ); //Long Peixun's update: "Emc"->"Default"
120 m_Emc = m_EmcROOTGeo->GetVolumeEmc();
121 if (m_Emc) cout << "Construct Emc" << endl;
122 else cout << "Volume Emc not found " << endl;
123 m_Bes->AddNode(m_Emc, iChildNo, identity);
124 m_EmcROOTGeo->SetChildNo(iChildNo);
125
126 iChildNo++;
127 m_MucROOTGeo = new MucROOTGeo();
128 m_MucROOTGeo->InitFromGDML( (fPath + TString("Muc.gdml")).Data(), "Default" ); //Long Peixun's update: "Muc"->"Default"
129 m_Muc = m_MucROOTGeo->GetVolumeMuc();
130 if (m_Muc) cout << "Construct Muc" << endl;
131 else cout << "Volume Muc not found " << endl;
132 m_Bes->AddNode(m_Muc, iChildNo, identity);
133 m_MucROOTGeo->SetChildNo(iChildNo);
134
135 iChildNo++;
136 Int_t beamPipeColor = m_BeamPipeColor; //Long Peixun's update: Blue -> m_BeamPipeColor
137 m_BeamPipe = gGeoManager->MakeTube("volBeamPipe", med, m_BeamPipeRMin, m_BeamPipeRMax, m_BeamPipeZ);
138 m_BeamPipe->SetLineColor(beamPipeColor);
139 m_Bes->AddNode(m_BeamPipe, iChildNo, identity);
140
141 //Long Peixun's update: Add CGEM node into detector geometry
142 if (m_Cgem)
143 {
144 iChildNo++;
145 m_Bes->AddNode(m_Cgem, iChildNo, identity);
146 }
147 else
148 {
149 delete m_CgemROOTGeo;
150 m_CgemROOTGeo = 0;
151 }
152
153 Int_t nDaughters = m_Bes->GetNodes()->GetEntries();
154 cout << "volBes contains " << nDaughters << " nodes : " << endl;
155 for (Int_t i = 0; i < nDaughters; i++) {
156 cout << i << " : " << m_Bes->GetNode(i)->GetName() << endl;
157 }
158
159 InitGeometry();
160}
virtual void InitGeometry()
void InitFromGDML(const char *gdmlFile, const char *setupName)
Definition: CgemROOTGeo.cxx:81
void InitFromGDML(const char *gdmlFile, const char *setupName)
Initialize ROOTGeo from GDML.
void InitFromGDML(const char *gdmlFile, const char *setupName)
Initialize ROOTGeo from GDML.
void InitFromGDML(const char *gdmlFile, const char *setupName)
Initialize ROOTGeo from GDML.
void InitFromGDML(const char *gdmlFile, const char *setupName)
Initialize ROOTGeo from GDML.

Referenced by BesVisDisplay::InitGeometryFromGDML().

◆ InitFromROOT()

void BesGeometry::InitFromROOT ( TGeoVolume *  volBes)
virtual

Definition at line 162 of file BesGeometry.cxx.

163{
164 gGeoManager->SetVisOption(0); // to show all visible volumes.
165 gGeoManager->SetVisLevel(5);
166
167 m_Bes = volBes;
168 m_BesR = ((TGeoBBox*)m_Bes->GetShape())->GetDX();
169 m_BesZ = ((TGeoBBox*)m_Bes->GetShape())->GetDZ()*2.0;
170
171 TGeoVolume *topVolume = new TGeoVolume();
172 gGeoManager->SetTopVolume(topVolume);
173 gGeoManager->SetTopVolume(m_Bes);
174
175 Int_t nDaughters = m_Bes->GetNodes()->GetEntries();
176
177 //cout << "volBes contains " << nDaughters << " nodes : " << endl;
178 //for (Int_t i = 0; i < nDaughters; i++) {
179 // cout << i << " : " << m_Bes->GetNode(i)->GetName() << endl;
180 //}
181
182 //Long Peixun's update: Add loading CGEM geometry from ROOT code.
183 TGeoNode* nodeCgem = m_Bes->GetNode(5);
184 if (nodeCgem)
185 {
186 m_CgemROOTGeo = new CgemROOTGeo();
187 m_Cgem = nodeCgem->GetVolume();
188 m_CgemROOTGeo->InitFromROOT(m_Cgem);
189 }
190
191 Int_t iChildNo = 0;
192 m_MdcROOTGeo = new MdcROOTGeo(Bool_t(nodeCgem));
193 TGeoNode *nodeMdc = m_Bes->GetNode(iChildNo);
194 if (nodeMdc) m_Mdc = nodeMdc->GetVolume();
195 //else cout << "Node logicalMdc not found" << endl;
196 //if (m_Mdc) cout << "Set Mdc" << endl;
197 //else cout << "Volume Mdc not found " << endl;
198 m_MdcROOTGeo->InitFromROOT( m_Mdc );
199 m_MdcROOTGeo->SetChildNo(iChildNo);//Connect bes with mdc, form physcialnode path. m_Bes->GetNdaughters()-1
200
201 iChildNo++;
202 m_TofROOTGeo = new TofROOTGeo();
203 TGeoNode *nodeTof = m_Bes->GetNode(iChildNo);
204 if (nodeTof) m_Tof = nodeTof->GetVolume();
205 //else cout << "Node logicalTof not found" << endl;
206 //if (m_Tof) cout << "Set Tof" << endl;
207 //else cout << "Volume Tof not found " << endl;
208 m_TofROOTGeo->InitFromROOT( m_Tof );
209 m_TofROOTGeo->SetChildNo(iChildNo);
210
211 iChildNo++;
212 m_EmcROOTGeo = new EmcROOTGeo();
213 TGeoNode *nodeEmc = m_Bes->GetNode(iChildNo);
214 if (nodeEmc) m_Emc = nodeEmc->GetVolume();
215 //else cout << "Node logicalEmc not found" << endl;
216 //if (m_Emc) cout << "Set Emc" << endl;
217 //else cout << "Volume Emc not found " << endl;
218 m_EmcROOTGeo->InitFromROOT( m_Emc );
219 m_EmcROOTGeo->SetChildNo(iChildNo);
220
221 iChildNo++;
222 m_MucROOTGeo = new MucROOTGeo();
223 TGeoNode *nodeMuc = m_Bes->GetNode(iChildNo);
224 if (nodeMuc) m_Muc = nodeMuc->GetVolume();
225 //else cout << "Node logicalMuc not found" << endl;
226 //if (m_Muc) cout << "Set Muc" << endl;
227 //else cout << "Volume Muc not found " << endl;
228 m_MucROOTGeo->InitFromROOT( m_Muc );
229 m_MucROOTGeo->SetChildNo(iChildNo);
230
231 iChildNo++;
232 TGeoNode *nodeBeamPipe = m_Bes->GetNode(iChildNo);
233 if (nodeBeamPipe) {
234 m_BeamPipe = nodeBeamPipe->GetVolume();
235 m_BeamPipe->SetLineColor(m_BeamPipeColor); //Long Peixun's update: Blue -> m_BeamPipeColor
236 }
237 //else cout << "Node volBeamPipe not found " << endl;
238 //cout << "Set beanmpi complete" << endl;
239
240 InitGeometry();
241 //cout << "init root ok" << endl;
242}
void InitFromROOT(TGeoVolume *vol)
Definition: CgemROOTGeo.cxx:89
void InitFromROOT(TGeoVolume *vol)
Initialize ROOTGeo from TGeoVolume logicalEmc.
void InitFromROOT(TGeoVolume *vol)
Initialize ROOTGeo from TGeoVolume logicalMdc.
void InitFromROOT(TGeoVolume *vol)
Initialize ROOTGeo from TGeoVolume logicalMuc.
void InitFromROOT(TGeoVolume *vol)
Initialize ROOTGeo from TGeoVolume logicalTof.

Referenced by BesVisDisplay::InitGeometryFromROOT().

◆ InitGeometry()

void BesGeometry::InitGeometry ( )
virtual

Definition at line 244 of file BesGeometry.cxx.

245{
246 gGeoManager->SetDrawExtraPaths(); // draw physical node or not;
247 gGeoManager->CloseGeometry();
248 gGeoManager->SetNsegments(20); // devide a circle to 20 slides
249
250 // PhysicalNode necessary for fast setting node visible or not in an event
251 // Should be set after gGeoManager closed
252 if (m_CgemROOTGeo) m_CgemROOTGeo->SetPhysicalNode(); //Long Peixun's update
253 m_MdcROOTGeo->SetPhysicalNode(); //here liang
254 m_TofROOTGeo->SetPhysicalNode(); //here liang
255 m_EmcROOTGeo->SetPhysicalNode(); //here liang
256 m_MucROOTGeo->SetPhysicalNode();
257
258 //Long Peixun's update: Build BeamPipe's PhysicalNode to display 3D view
259 m_phyBeamPipe = gGeoManager->MakePhysicalNode(TString("/") + m_Bes->GetName() + TString("_1/") + m_BeamPipe->GetName() + TString("_4"));
260 m_phyBeamPipe->SetVisibility(0);
261 m_phyBeamPipe->SetIsVolAtt(kFALSE);
262 m_phyBeamPipe->SetLineColor(m_BeamPipeColor); //Long Peixun's update: Blue -> m_BeamPipeColor
263
264 // 2D Geometry initialization should be after SetPhysicalNode();
265 if (m_CgemROOTGeo) m_CgemROOTGeo->InitGeometry(); //Long Peixun's update
266 //Long Peixun's update: Change initialization order of subdetectors can avoid a strange bug in Mdc2DWire::DistancetoPrimitive()
267 //Mdc, Tof, Emu, Muc -> Tof, Mdc, Emc, Muc
268 m_TofROOTGeo->Init2DGeometry(); //here liang
269 m_MdcROOTGeo->Init2DGeometry(); //here liang
270 m_EmcROOTGeo->Init2DGeometry(); //here liang
271 m_MucROOTGeo->Init2DGeometry();
272
273 Double_t P[3*4] = {0.0};
274
275 // BeamPipe
276 Double_t beamPipeCenter[3] = {0.0, 0.0, 0.0};
277 m_BeamPipeXY =
278 new BesCircle2D("BeamPipe", "BeamPipe", m_BeamPipeRMin, m_BeamPipeRMax, &beamPipeCenter[0]);
279
280 for (Int_t i = 0; i < 4; i++) {
281 P[3*i] = 0.0;
282 if (i == 0 || i == 3) P[3*i+1] = -1.0*m_BeamPipeRMax;
283 else P[3*i+1] = m_BeamPipeRMax;
284 if (i == 0 || i == 1) P[3*i+2] = -1.0*m_BeamPipeZ;
285 else P[3*i+2] = m_BeamPipeZ;
286 }
287 m_BeamPipeZR = new BesPolygon2D("BeamPipe", "BeamPipe", 4, &P[0]);
288 m_BeamPipeZR->SetRotatable(true); //Long Peixun's update: BeamPipe rectangle should not rotate when phi is changed
289
290 // Auxiliary line
291 if (!m_Bes) cout << "BesGeometry:InitGeometry, top volume m_Bes not found" << endl;
292 TGeoBBox *besShape = (TGeoBBox*)m_Bes->GetShape();
293 m_BesR = besShape->GetDX();
294 m_BesZ = besShape->GetDZ()*2.0;
295 for (Int_t i = 0; i < 4; i++) {
296 P[3*i] = 0.0;
297 if (i == 0 || i == 3) P[3*i+1] = -1.0*m_BesR;
298 else P[3*i+1] = m_BesR;
299 if (i == 0 || i == 1) P[3*i+2] = -1.0*m_BesZ;
300 else P[3*i+2] = m_BesZ;
301 }
302
303 m_ZRPlaneOnXY = new BesPolygon2D("ZRPlaneOnXY", "ZRPlaneOnXY", 4, &P[0]);
304 m_ZRPlaneOnXY->SetRotatable(true);
305 m_ZRPlaneOnXY->SetLineWidth(1);
306 m_ZRPlaneOnXY->SetLineStyle(3);
307 m_ZRPlaneOnXY->SetFillStyle(4000);
308}
double P(RecMdcKalTrack *trk)
void SetRotatable(Bool_t input)
Definition: BesPolygon2D.h:65
void SetPhysicalNode()
void InitGeometry()
Definition: CgemROOTGeo.cxx:97
void SetPhysicalNode()
Set the pointers to the physical nodes;.
void SetPhysicalNode()
Set the pointers to the physical nodes;.
void SetPhysicalNode()
Set the pointers to the physical nodes;.
void SetPhysicalNode()
Set the pointers to the physical nodes;.

Referenced by InitFromGDML(), and InitFromROOT().

◆ SetDefaultVis()

void BesGeometry::SetDefaultVis ( )
virtual

Definition at line 315 of file BesGeometry.cxx.

316{
317 m_Bes->SetLineColor(2);
318 m_Bes->SetVisibility(0);
319
320 m_BeamPipe->SetLineColor(m_BeamPipeColor); //Long Peixun's update: Blue -> m_BeamPipeColor
321 m_BeamPipe->SetVisibility(0);
322
323 //Long Peixun's update: Annotate useless code
324 // m_CgemROOTGeo->SetAllVisible();
325 // m_MdcROOTGeo->SetAllVisible();
326 // m_TofROOTGeo->SetAllVisible();
327 // m_EmcROOTGeo->SetAllVisible();
328 // m_MucROOTGeo->SetAllVisible();
329}

Referenced by BesVisDisplay::InitGeometryFromGDML().

◆ SetPhysicalDefaultVis()

void BesGeometry::SetPhysicalDefaultVis ( )
virtual

Definition at line 332 of file BesGeometry.cxx.

333{
334 m_CgemROOTGeo->SetPhysicalDefaultVis();
335 m_MdcROOTGeo->SetPhysicalDefaultVis();
336 m_TofROOTGeo->SetPhysicalDefaultVis();
337 m_EmcROOTGeo->SetPhysicalDefaultVis();
338 m_MucROOTGeo->SetPhysicalDefaultVis();
339}
void SetPhysicalDefaultVis()

Referenced by BesClient::GetEvent().


The documentation for this class was generated from the following files: