00001 00007 //============================================================== 00008 00009 #ifndef BDSDetectorConstruction_h 00010 #define BDSDetectorConstruction_h 00011 00012 #include "BDSGlobalConstants.hh" 00013 #include "G4VUserDetectorConstruction.hh" 00014 #include "globals.hh" 00015 00016 #include "BDSWorld.hh" 00017 #include "BDSMaterials.hh" 00018 #include "BDSBeamline.hh" 00019 00020 #include "G4Region.hh" 00021 00022 #include "G4IStore.hh" 00023 #include "G4GeometrySampler.hh" 00024 00025 //GFlash parameterisation 00026 #include "GFlashHomoShowerParameterisation.hh" 00027 #include "G4FastSimulationManager.hh" 00028 #include "BDSShowerModel.hh" 00029 #include "GFlashHitMaker.hh" 00030 #include "GFlashParticleBounds.hh" 00031 00032 00033 class G4Box; 00034 class G4Tubs; 00035 class G4LogicalVolume; 00036 class G4VPhysicalVolume; 00037 class G4Material; 00038 class G4UniformMagField; 00039 class BDSCalorimeterSD; 00040 class G4UserLimits; 00041 class G4VSensitiveDetector; 00042 00043 class G4Navigator; 00044 00045 //============================================================== 00046 00047 class BDSDetectorConstruction : public G4VUserDetectorConstruction 00048 { 00049 public: 00050 00051 BDSDetectorConstruction(); 00052 ~BDSDetectorConstruction(); 00053 00054 public: 00055 00056 G4VPhysicalVolume* Construct(); 00057 void SetMagField(const G4double afield); 00058 void UpdateGeometry(); 00059 00060 G4VIStore* CreateImportanceStore(); 00061 // inline G4IStore* GetIStore(){ 00062 // return itsIStore; 00063 // } 00064 00065 inline G4VPhysicalVolume* GetWorldVolume(){ 00066 return physiWorld; 00067 } 00068 00069 // inline G4GeometrySampler* GetGeometrySampler(){ 00070 // return itsGeometrySampler; 00071 // } 00072 00073 public: 00074 00075 G4double* GetWorldSize(); 00076 G4double GetWorldSizeX(); 00077 G4double GetWorldSizeY(); 00078 G4double GetWorldSizeZ(); 00079 00080 private: 00081 G4bool verbose; 00082 G4bool outline; 00083 00084 void SetWorldSize(G4double*); 00085 void SetWorldSizeX(G4double); 00086 void SetWorldSizeY(G4double); 00087 void SetWorldSizeZ(G4double); 00088 00089 00090 G4int gflash; 00091 G4double gflashemax; 00092 G4double gflashemin; 00093 00094 G4GeometrySampler* itsGeometrySampler; 00095 00096 G4Region* precisionRegion; 00097 G4Region* gasRegion; 00098 00099 // BDSWorld* _world; 00100 00101 G4Box* solidWorld; //pointer to the solid World 00102 G4LogicalVolume* logicWorld; //pointer to the logical World 00103 G4VPhysicalVolume* physiWorld; //pointer to the physical World 00104 std::vector<G4double> itsWorldSize; 00105 std::vector< G4VPhysicalVolume * > fPhysicalVolumeVector; //a vector with all the physical volumes 00106 00107 void DefineMaterials(); 00108 00109 G4VPhysicalVolume* ConstructBDS(std::list<struct Element>& beamline_list); 00110 G4UniformMagField* magField; //pointer to the magnetic field 00111 G4UserLimits* BDSUserLimits; 00112 00113 G4VSensitiveDetector * BDSSensitiveDetector; 00114 00115 G4IStore* itsIStore; 00116 00117 // Gflash members 00118 std::vector<GFlashHomoShowerParameterisation*> theParameterisation; 00119 GFlashHitMaker *theHitMaker; 00120 GFlashParticleBounds *theParticleBounds; 00121 GFlashParticleBounds *theParticleBoundsVac; 00122 std::vector<BDSShowerModel*> theFastShowerModel; 00123 std::vector<G4Region*> gFlashRegion; 00124 00125 }; 00126 00127 #endif 00128