00001 #ifndef BDSDetectorConstruction_h 00002 #define BDSDetectorConstruction_h 00003 00004 #include "BDSGlobalConstants.hh" 00005 #include "G4VUserDetectorConstruction.hh" 00006 #include "globals.hh" 00007 00008 #include "G4Region.hh" 00009 #include "G4GeometrySampler.hh" 00010 00011 //GFlash parameterisation 00012 #include "GFlashHomoShowerParameterisation.hh" 00013 #include "BDSShowerModel.hh" 00014 #include "GFlashHitMaker.hh" 00015 #include "GFlashParticleBounds.hh" 00016 00017 00018 class G4Box; 00019 class G4LogicalVolume; 00020 class G4VPhysicalVolume; 00021 class G4UniformMagField; 00022 class G4UserLimits; 00023 class G4VSensitiveDetector; 00024 00025 class BDSBeamline; 00026 class ElementList; 00027 00028 class BDSDetectorConstruction : public G4VUserDetectorConstruction 00029 { 00030 public: 00031 BDSDetectorConstruction(); 00032 ~BDSDetectorConstruction(); 00033 00034 virtual G4VPhysicalVolume* Construct(); 00035 00036 inline G4VPhysicalVolume* GetWorldVolume() 00037 {return physiWorld;} 00038 00039 private: 00041 BDSDetectorConstruction& operator=(const BDSDetectorConstruction&); 00042 BDSDetectorConstruction(BDSDetectorConstruction&); 00043 00044 G4VPhysicalVolume* ConstructBDS(ElementList& beamline_list); 00045 00046 void SetMagField(const G4double afield); 00047 00050 void BuildBeamline(); 00051 00054 void BuildWorld(); 00055 00057 void ComponentPlacement(); 00058 00060 void SetGFlashOnVolume(G4LogicalVolume* volume); 00061 00062 G4bool verbose; 00063 00064 G4GeometrySampler* itsGeometrySampler; 00065 00066 G4Region* precisionRegion; 00067 G4Region* gasRegion; 00068 00069 G4Box* solidWorld; //pointer to the solid World 00070 G4LogicalVolume* logicWorld; //pointer to the logical World 00071 G4VPhysicalVolume* physiWorld; //pointer to the physical World 00072 std::vector<G4double> itsWorldSize; 00073 std::vector<G4VPhysicalVolume*> fPhysicalVolumeVector; //a vector with all the physical volumes 00074 00075 G4UniformMagField* magField; //pointer to the magnetic field 00076 G4UserLimits* BDSUserLimits; 00077 00078 G4VSensitiveDetector* BDSSensitiveDetector; 00079 00080 // Gflash members 00081 std::vector<GFlashHomoShowerParameterisation*> theParameterisation; 00082 GFlashHitMaker *theHitMaker; 00083 GFlashParticleBounds *theParticleBounds; 00084 // GFlashParticleBounds *theParticleBoundsVac; 00085 std::vector<BDSShowerModel*> theFastShowerModel; 00086 std::vector<G4Region*> gFlashRegion; 00087 00088 G4RotationMatrix* _globalRotation; 00089 }; 00090 00091 #endif 00092