1 #ifndef WCSimDetectorConstruction_H
2 #define WCSimDetectorConstruction_H 1
8 #include "G4Transform3D.hh"
9 #include "G4VUserDetectorConstruction.hh"
10 #include "G4LogicalVolume.hh"
11 #include "G4VPhysicalVolume.hh"
12 #include "G4OpticalSurface.hh"
20 #include <ext/hash_map>
23 using __gnu_cxx::hash;
24 using __gnu_cxx::hashtable;
25 using __gnu_cxx::hash_map;
26 using __gnu_cxx::hash_multimap;
34 class G4LogicalVolume;
35 class G4AssemblyVolume;
36 class G4VPhysicalVolume;
42 template<>
struct hash< std::string >
46 return hash< const char* >()( x.c_str() );
51 void ComputeWCODPMT(G4int NPMT, G4double *NPMTHorizontal, G4double *NPMTVertical);
100 G4double
GetPMTQE(G4String,G4double, G4int, G4double, G4double, G4double);
114 if (
PMTptr == NULL) {G4cout << CollectionName <<
" is not a recognized hit collection. Exiting WCSim." << G4endl; exit(1);}
191 G4LogicalVolume*
ConstructPMT(G4String,G4String,G4String detectorElement=
"tank");
215 (G4VPhysicalVolume*, int, int,
const G4Transform3D&);
230 const G4Transform3D&);
232 const G4Transform3D&);
233 void GetWCGeom(G4VPhysicalVolume*,
int,
int,
234 const G4Transform3D&);
280 typedef std::map<PMTKey_t, G4LogicalVolume*>
PMTMap_t;
void SuperK_20inchBandL_14perCent()
G4double WCPMTODperCellHorizontal
virtual G4double GetCollectionEfficiency(double)
G4LogicalVolume * ConstructPMT(G4String, G4String, G4String detectorElement="tank")
void Cylinder_60x74_20inchBandL_14perCent()
void ConstructMaterials()
G4LogicalVolume * logicWCTowerODWLSPlate
std::vector< WCSimPmtInfo * > fpmts
G4LogicalVolume * logicWCBarrelCellBlackSheet
G4double GetWaterTubePosition()
size_t operator()(const std::string &x) const
G4int GetTotalNumODPmts()
G4double GetPMTQE(G4String, G4double, G4int, G4double, G4double, G4double)
G4String WCODCollectionName
G4double WCBlackSheetThickness
G4double GetwaterTank_Length()
G4VSolid * ConstructHalf(G4double, G4double)
void SetHyperKGeometry_20perCent()
void DescribeAndRegisterPMT(G4VPhysicalVolume *, int, int, const G4Transform3D &)
G4double CaveTyvekSheetThickness
G4LogicalVolume * ConstructCylinder()
G4double WCBarrelRingdPhi
void SetHyperKWithODGeometry()
G4bool GetIsEggShapedHyperK()
G4double capAssemblyHeight
void SaveOptionsToOutput(WCSimRootOptions *wcopt)
G4LogicalVolume * ConstructEndWallPMT()
G4double WCODTyvekSheetThickness
G4double waterTank_Height
G4double WCODLateralWaterDepth
G4double outerPMT_TopRpitch
void SavePi0Info(G4bool choice)
G4double GetWaterTubeLength()
G4double WCPMTperCellVertical
static G4Transform3D GetODTubeTransform(int tubeNo)
static G4int GetODTubeID(std::string tubeTag)
G4double waterTank_LowerB
void MatchWCSimAndEggShapedHyperK()
WCSimDetectorConstruction(G4int DetConfig, WCSimTuningParameters *WCSimTuningPars)
void DescribeAndDescendGeometry(G4VPhysicalVolume *, int, int, const G4Transform3D &, DescriptionFcnPtr)
void PrintGeometryTree(G4VPhysicalVolume *, int, int, const G4Transform3D &)
static G4int GetTubeID(std::string tubeTag)
static PMTMap_t PMTLogicalVolumes
void SetIsEggShapedHyperK(G4bool choice)
WCSimPMTObject * GetPMTPointer(G4String CollectionName)
WCSimTuningParameters * WCSimTuningParams
G4double GetPMTCollectionEfficiency(G4double theta_angle, G4String CollectionName)
G4double WCBarrelNumPMTODHorizontal
G4double outerAnnulusRadius
G4LogicalVolume * logicWCBarrelCellODTyvek
G4LogicalVolume * logicWCBarrelCellODWLSPlate
G4double WCBarrelRingRadius
G4double WCPMTExposeHeight
G4LogicalVolume * ConstructCaps(G4int zflip)
void ComputeWCODPMT(G4int NPMT, G4double *NPMTHorizontal, G4double *NPMTVertical)
G4double WCPMTODExposeHeight
G4Material * FindMaterial(G4String)
std::map< G4String, WCSimPMTObject * > CollectionNameMap
void SetPMTPointer(WCSimPMTObject *PMT, G4String CollectionName)
G4String GetIDCollectionName()
static G4Transform3D GetTubeTransform(int tubeNo)
G4OpticalSurface * OpGlassCathodeSurface
void SetPMT_Coll_Eff(G4int choice)
G4double WCBarrelCellLength
G4LogicalVolume * waterTankLV
G4double WCODCapEdgeLimit
G4double barrelCellHeight
G4double WCODHeightWaterDepth
G4LogicalVolume * ConstructEggShapedHyperK()
void DumpGeometryTableToFile()
std::map< PMTKey_t, G4LogicalVolume * > PMTMap_t
G4double WCPMTperCellHorizontal
void SetwaterTank_Length(G4double length)
void(WCSimDetectorConstruction::* DescriptionFcnPtr)(G4VPhysicalVolume *, int, int, const G4Transform3D &)
WCSimPMTObject * CreatePMTObject(G4String, G4String)
~WCSimDetectorConstruction()
void SetLCType(G4int LightCollectorType)
static hash_map< std::string, int, hash< std::string > > ODtubeLocationMap
void GetWCGeom(G4VPhysicalVolume *, int, int, const G4Transform3D &)
G4LogicalVolume * logicWCTowerODTyvek
G4double WCPMTODperCellVertical
G4double WCODCapPMTSpacing
void TraverseReplicas(G4VPhysicalVolume *, int, const G4Transform3D &, DescriptionFcnPtr)
G4String WCIDCollectionName
G4LogicalVolume * ConstructRadialPMT(G4bool, G4double, G4double, G4double, G4double, G4double, G4double)
void SetPMT_QE_Method(G4int choice)
G4double waterTank_Length
G4double innerAnnulusRadius
G4double waterTank_UpperA
G4int GetMyConfiguration()
G4String GetDetectorName()
G4OpticalSurface * OpWaterBSSurface
G4double WCBarrelPMTRadius
void SetWaterTubeLength(G4double length)
void SetEggShapedHyperKGeometry()
G4OpticalSurface * OpWaterTySurface
void SuperK_20inchBandL_20perCent()
G4double WCBarrelPMTOffset
void Cylinder_12inchHPD_15perCent()
G4double blackSheetThickness
static std::map< int, G4Transform3D > ODtubeIDMap
G4VPhysicalVolume * Construct()
G4String GetODCollectionName()
std::vector< WCSimPmtInfo * > fODpmts
bool GetIsODConstructed()
std::vector< WCSimPmtInfo * > * Get_Pmts()
void SetVis_Choice(G4String choice)
G4double WCBarrelNumPMTHorizontal
G4double mainAnnulusHeight
G4double GetGeo_Dm(G4int)
std::vector< WCSimPmtInfo * > * Get_ODPmts()
static std::map< int, G4Transform3D > tubeIDMap
void SetEggShapedHyperKGeometry_withHPD()
G4ThreeVector GetWCOffset()
void SetIsUpright(G4bool choice)
G4LogicalVolume * ConstructCeilingPMT(G4bool, G4double, G4double, G4double, G4double)
void DescribeAndRegisterPMT_1KT(G4VPhysicalVolume *, int, int, const G4Transform3D &)
G4double WCBarrelRingNPhi
G4LogicalVolume * logicWCTowerBlackSheet
G4double WCPMTODPercentCoverage
void SuperK_12inchBandL_15perCent()
void Cylinder_60x74_20inchBandL_40perCent()
std::pair< G4String, G4String > PMTKey_t
G4double WCPMTPercentCoverage
WCSimDetectorMessenger * messenger
G4double outerPMT_BotRpitch
static hash_map< std::string, int, hash< std::string > > tubeLocationMap
void SuperK_20inchPMT_20perCent()