5 #include "G4Material.hh"
6 #include "G4Element.hh"
8 #include "G4LogicalVolume.hh"
9 #include "G4VPhysicalVolume.hh"
10 #include "G4PVPlacement.hh"
11 #include "G4ThreeVector.hh"
13 #include "G4VisAttributes.hh"
15 #include "G4RunManager.hh"
16 #include "G4PhysicalVolumeStore.hh"
17 #include "G4LogicalVolumeStore.hh"
18 #include "G4SolidStore.hh"
20 #include "G4PhysicalConstants.hh"
21 #include "G4SystemOfUnits.hh"
91 #include "G4GeometryManager.hh"
92 #include "G4LogicalBorderSurface.hh"
93 #include "G4LogicalSkinSurface.hh"
99 G4bool geomChanged =
true;
100 G4RunManager::GetRunManager()->DefineWorldVolume(
Construct(), geomChanged);
107 for (
unsigned int i=0;i<
fpmts.size();i++){
111 for (
unsigned int i=0;i<
fODpmts.size();i++){
119 G4GeometryManager::GetInstance()->OpenGeometry();
121 G4PhysicalVolumeStore::GetInstance()->Clean();
122 G4LogicalVolumeStore::GetInstance()->Clean();
123 G4SolidStore::GetInstance()->Clean();
124 G4LogicalBorderSurface::CleanSurfaceTable();
125 G4LogicalSkinSurface::CleanSurfaceTable();
140 G4LogicalVolume* logicWCBox;
145 G4cout <<
" WCLength = " <<
WCLength/m <<
" m"<< G4endl;
152 G4double expHallLength = 3.*
WCLength;
154 G4cout <<
" expHallLength = " << expHallLength / m << G4endl;
155 G4double expHallHalfLength = 0.5*expHallLength;
157 G4Box* solidExpHall =
new G4Box(
"expHall",
162 G4LogicalVolume* logicExpHall =
163 new G4LogicalVolume(solidExpHall,
164 G4Material::GetMaterial(
"Vacuum"),
171 logicExpHall->SetVisAttributes(G4VisAttributes::Invisible);
178 G4VPhysicalVolume* physiExpHall =
179 new G4PVPlacement(0,G4ThreeVector(),
191 G4ThreeVector genPosition = G4ThreeVector(0., 0.,
WCPosition);
192 G4VPhysicalVolume* physiWCBox =
228 if (PMTType ==
"PMT20inch"){
233 else if (PMTType ==
"PMT8inch"){
238 else if (PMTType ==
"PMT10inch"){
243 else if (PMTType ==
"PMT10inchHQE"){
248 else if (PMTType ==
"PMT12inchHQE"){
253 else if (PMTType ==
"HPD20inchHQE"){
258 else if (PMTType ==
"HPD12inchHQE"){
263 else if (PMTType ==
"BoxandLine20inchHQE"){
268 else if (PMTType ==
"BoxandLine12inchHQE"){
273 else if (PMTType ==
"PMT5inch"){
278 else if (PMTType ==
"PMT3inch"){
284 else { G4cout << PMTType <<
" is not a recognized PMT Type. Exiting WCSim." << G4endl; exit(1);}
void ConstructMaterials()
std::vector< WCSimPmtInfo * > fpmts
void SetSavePi0(bool iSavePi0)
void DescribeAndRegisterPMT(G4VPhysicalVolume *, int, int, const G4Transform3D &)
G4LogicalVolume * ConstructCylinder()
void SetGeomHasOD(bool iGeomHasOD)
void SaveOptionsToOutput(WCSimRootOptions *wcopt)
void SetDetectorName(string iDetectorName)
WCSimDetectorConstruction(G4int DetConfig, WCSimTuningParameters *WCSimTuningPars)
static PMTMap_t PMTLogicalVolumes
G4double WCPMTExposeHeight
void SetPMTQEMethod(bool iPMTQEMethod)
void SetPMTPointer(WCSimPMTObject *PMT, G4String CollectionName)
void SetPMT_Coll_Eff(G4int choice)
G4LogicalVolume * ConstructEggShapedHyperK()
void DumpGeometryTableToFile()
WCSimPMTObject * CreatePMTObject(G4String, G4String)
~WCSimDetectorConstruction()
static hash_map< std::string, int, hash< std::string > > ODtubeLocationMap
void GetWCGeom(G4VPhysicalVolume *, int, int, const G4Transform3D &)
void TraverseReplicas(G4VPhysicalVolume *, int, const G4Transform3D &, DescriptionFcnPtr)
void SetPMT_QE_Method(G4int choice)
static std::map< int, G4Transform3D > ODtubeIDMap
G4VPhysicalVolume * Construct()
std::vector< WCSimPmtInfo * > fODpmts
void SetVis_Choice(G4String choice)
static std::map< int, G4Transform3D > tubeIDMap
void SetPMTCollEff(bool iPMTCollEff)
WCSimDetectorMessenger * messenger
static hash_map< std::string, int, hash< std::string > > tubeLocationMap