00001 #ifndef __BDSTUNNELCAVITY_H 00002 #define __BDSTUNNELCAVITY_H 00003 00004 #include "BDSTunnelCavitySectionGenerator.hh" 00005 #include "BDSTunnelCavitySectionBuilder.hh" 00006 #include "BDSStraightTunnelCavitySectionBuilder.hh" 00007 #include "BDSAngleTunnelCavitySectionBuilder.hh" 00008 #include "BDSTunnelCavitySection.hh" 00009 #include "BDSAcceleratorComponent.hh" 00010 #include "G4LogicalVolume.hh" 00011 #include "G4VPhysicalVolume.hh" 00012 #include "G4ThreeVector.hh" 00013 00014 class BDSTunnelCavity{ 00015 public: 00016 static BDSTunnelCavity* Instance(); 00017 ~BDSTunnelCavity(); 00018 00019 void build(); 00020 00021 G4ThreeVector* widthMax(); 00022 00023 00024 private: 00025 BDSTunnelCavity(); 00026 static BDSTunnelCavity* _instance; 00027 00028 00029 G4VSolid* _solidVolume; 00030 G4LogicalVolume* _logicalVolume; 00031 G4VPhysicalVolume* _physicalVolume; 00032 00033 BDSTunnelCavitySectionGenerator _sectionGenerator; 00034 BDSTunnelCavitySectionBuilder* _straightSectionBuilder; 00035 BDSTunnelCavitySectionBuilder* _angleSectionBuilder; 00036 00037 BDSAcceleratorComponent* _acceleratorComponent; 00038 00039 void inspectBeamline(); 00040 void constructSection(); 00041 void calcWidthMax(); 00042 void appendSection(); 00043 void constructLogical(); 00044 00045 G4ThreeVector* _widthMax; 00046 00047 G4bool _first; 00048 00049 }; 00050 00051 #endif