include/BDSDetectorConstruction.hh

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 

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7