00001
00002
00003
00004
00005 #ifndef BES_GEOMETRY
00006 #define BES_GEOMETRY
00007
00008 #include <TGeometry.h>
00009
00010 #include "BesView.h"
00011 #include "MdcROOTGeo.h"
00012 #include "TofROOTGeo.h"
00013 #include "EmcROOTGeo.h"
00014 #include "MucROOTGeo.h"
00015 #include "BesCircle2D.h"
00016 #include "BesPolygon2D.h"
00017
00018 class BesGeometry : public TObject {
00019
00020 public:
00021 BesGeometry();
00022 virtual ~BesGeometry();
00023
00024 virtual void InitFromGDML(const TString fPath);
00025 virtual void InitFromROOT(TGeoVolume* volBes);
00026 virtual void InitGeometry();
00027
00028 const char* GetFilename(const char* RunPeriod);
00029 virtual void SetDefaultVis();
00030 virtual void Draw(Option_t *option = "3D");
00031 virtual void Draw3D();
00032 virtual void Draw2DXY();
00033 virtual void Draw2DZR();
00034
00035 Float_t GetBesR() { return m_BesR; }
00036 Float_t GetBesZ() { return m_BesZ; }
00037
00038 TGeoVolume *GetVolBes() { return m_Bes; }
00039 TGeoVolume *GetVolumeBeamPipe() { return m_BeamPipe; }
00040
00041 MdcROOTGeo *GetMdcROOTGeo() { return m_MdcROOTGeo; }
00042 TofROOTGeo *GetTofROOTGeo() { return m_TofROOTGeo; }
00043 EmcROOTGeo *GetEmcROOTGeo() { return m_EmcROOTGeo; }
00044 MucROOTGeo *GetMucROOTGeo() { return m_MucROOTGeo; }
00045
00046 TGeoVolume *GetVolumeMdc() { return m_MdcROOTGeo->GetVolumeMdc(); }
00047 TGeoVolume *GetVolumeMdcSegment(int segment) { return m_MdcROOTGeo->GetVolumeSegment(segment); }
00048 TGeoVolume *GetVolumeMdcLayer(int layer) { return m_MdcROOTGeo->GetVolumeLayer(layer); }
00049 TGeoVolume *GetVolumeMdcReplica(int layer) { return m_MdcROOTGeo->GetVolumeReplica(layer); }
00050 TGeoPhysicalNode *GetPhysicalMdcReplica(int layer, int replica) { return m_MdcROOTGeo->GetPhysicalReplica(layer, replica); }
00051
00052 TGeoVolume *GetVolumeTof() { return m_TofROOTGeo->GetVolumeTof(); }
00053
00054
00055
00056 TGeoPhysicalNode *GetPhysicalTofScin(int part, int layer, int scin) { return m_TofROOTGeo->GetPhysicalScin(part, layer, scin); }
00057
00058 TGeoVolume *GetVolumeEmc() { return m_EmcROOTGeo->GetVolumeEmc(); }
00059 TGeoVolume *GetVolumeEmcPart(int part) { return m_EmcROOTGeo->GetVolumePart(part); }
00060 TGeoVolume *GetVolumeEmcPhi(int part, int phi) { return m_EmcROOTGeo->GetVolumePhi(part, phi); }
00061 TGeoVolume *GetVolumeEmcTheta(int part, int phi, int theta) { return m_EmcROOTGeo->GetVolumeTheta(part, phi, theta); }
00062 TGeoVolume *GetVolumeEmcCrystal(int part, int phi, int theta) { return m_EmcROOTGeo->GetVolumeCrystal(part, phi, theta); }
00063 TGeoPhysicalNode *GetPhysicalEmcCrystal(int part, int phi, int theta) { return m_EmcROOTGeo->GetPhysicalCrystal(part, phi, theta); }
00064
00065 TGeoVolume *GetVolumeMuc() { return m_MucROOTGeo->GetVolumeMuc(); }
00066 TGeoVolume *GetVolumeMucAbsorber(int part, int seg, int absorber) { return m_MucROOTGeo->GetVolumeAbsorber(part, seg, absorber); }
00067 TGeoVolume *GetVolumeMucAbsorberPanel(int part, int seg, int absorber, int panel) { return m_MucROOTGeo->GetVolumeAbsorberPanel(part, seg, absorber, panel); }
00068 TGeoVolume *GetVolumeMucGap(int part, int seg, int gap) { return m_MucROOTGeo->GetVolumeGap(part, seg, gap); }
00069 TGeoVolume *GetVolumeMucStripPlane(int part, int seg, int gap) { return m_MucROOTGeo->GetVolumeStripPlane(part, seg, gap); }
00070 TGeoVolume *GetVolumeMucStrip(int part, int seg, int gap, int strip) { return m_MucROOTGeo->GetVolumeStripPlane(part, seg, gap); }
00071 TGeoVolume *GetVolumeMucGasChamber(int part, int seg, int gap, int panel, int gasChamber) { return m_MucROOTGeo->GetVolumeGasChamber(part, seg, gap, panel, gasChamber); }
00072 TGeoVolume *GetVolumeMucBakelite(int part, int seg, int gap, int RpcUpDown, int panel, int bakelite) { return m_MucROOTGeo->GetVolumeBakelite(part, seg, gap, RpcUpDown, panel, bakelite); }
00073 TGeoPhysicalNode *GetPhysicalMucGap(int part, int seg, int gap) { return m_MucROOTGeo->GetPhysicalGap(part, seg, gap); }
00074 TGeoPhysicalNode *GetPhysicalMucStrip(int part, int seg, int gap, int strip) { return m_MucROOTGeo->GetPhysicalStrip(part, seg, gap, strip); }
00075
00076 private:
00077 Double_t m_BesR;
00078 Double_t m_BesZ;
00079
00080 Double_t m_BeamPipeRMin;
00081 Double_t m_BeamPipeRMax;
00082 Double_t m_BeamPipeZ;
00083
00084 TGeoVolume *m_Bes;
00085 TGeoVolume *m_BeamPipe;
00086 TGeoVolume *m_Mdc;
00087 TGeoVolume *m_Tof;
00088 TGeoVolume *m_Emc;
00089 TGeoVolume *m_Muc;
00090
00091 MdcROOTGeo *m_MdcROOTGeo;
00092 TofROOTGeo *m_TofROOTGeo;
00093 EmcROOTGeo *m_EmcROOTGeo;
00094 MucROOTGeo *m_MucROOTGeo;
00095
00096 BesCircle2D *m_BeamPipeXY;
00097 BesPolygon2D *m_BeamPipeZR;
00098 BesPolygon2D *m_ZRPlaneOnXY;
00099
00100 ClassDef(BesGeometry, 1)
00101 };
00102
00103 R__EXTERN BesGeometry *gBesGeometry;
00104
00105 #endif