File indexing completed on 2026-04-09 07:50:04
0001 #pragma once
0002
0003 #include <string>
0004 #include <vector>
0005 class G4LogicalVolume ;
0006 class G4VPhysicalVolume ;
0007 class G4Material ;
0008
0009 struct NP ;
0010
0011 #include "G4ThreeVector.hh"
0012 #include "U4_API_EXPORT.hh"
0013 #include "plog/Severity.h"
0014
0015 struct U4_API U4VolumeMaker
0016 {
0017 static const plog::Severity LEVEL ;
0018 static const char* GEOM ;
0019 static const char* METH ;
0020
0021 static std::string Desc();
0022 static std::string Desc( const G4ThreeVector& tla );
0023
0024
0025
0026 static const G4VPhysicalVolume* PV();
0027 static const G4VPhysicalVolume* PV( const char* name);
0028
0029 static const char* PVG_WriteNames ;
0030 static const char* PVG_WriteNames_Sub ;
0031
0032 static const G4VPhysicalVolume* PVG_(const char* name);
0033 static const G4VPhysicalVolume* PVP_(const char* name);
0034
0035 static const G4VPhysicalVolume* PVS_(const char* name);
0036 static const G4VPhysicalVolume* PVL_(const char* name);
0037 static const G4VPhysicalVolume* PV1_(const char* name);
0038
0039
0040
0041
0042 static G4LogicalVolume* LV(const char* name, const char* matname_ );
0043 static void LV(std::vector<G4LogicalVolume*>& lvs , const char* names_, char delim=',' ) ;
0044
0045
0046
0047
0048 static constexpr const char* U4VolumeMaker_WrapRockWater_Rock_HALFSIDE = "U4VolumeMaker_WrapRockWater_Rock_HALFSIDE" ;
0049 static constexpr const char* U4VolumeMaker_WrapRockWater_Water_HALFSIDE = "U4VolumeMaker_WrapRockWater_Water_HALFSIDE" ;
0050 static constexpr const char* U4VolumeMaker_WrapRockWater_BOXSCALE = "U4VolumeMaker_WrapRockWater_BOXSCALE" ;
0051 static constexpr const char* U4VolumeMaker_WrapRockWater_BS1 = "U4VolumeMaker_WrapRockWater_BS1" ;
0052
0053 static const G4VPhysicalVolume* Wrap( const char* name, std::vector<G4LogicalVolume*>& items_lv );
0054 static const G4VPhysicalVolume* WrapRockWater( std::vector<G4LogicalVolume*>& items_lv );
0055
0056 static constexpr const char* U4VolumeMaker_WrapAroundItem_Rock_HALFSIDE = "U4VolumeMaker_WrapAroundItem_Rock_HALFSIDE" ;
0057 static constexpr const char* U4VolumeMaker_WrapAroundItem_Water_HALFSIDE = "U4VolumeMaker_WrapAroundItem_Water_HALFSIDE" ;
0058 static constexpr const char* U4VolumeMaker_WrapAroundItem_Rock_BOXSCALE = "U4VolumeMaker_WrapAroundItem_Rock_BOXSCALE" ;
0059 static constexpr const char* U4VolumeMaker_WrapAroundItem_Water_BOXSCALE = "U4VolumeMaker_WrapAroundItem_Water_BOXSCALE" ;
0060
0061 static NP* TRS ;
0062 static const G4VPhysicalVolume* WrapAroundItem( const char* name, std::vector<G4LogicalVolume*>& items_lv, const char* prefix );
0063 static NP* GetTransforms() ;
0064 static void SaveTransforms( const char* savedir );
0065
0066
0067 static constexpr const char* U4VolumeMaker_WrapVacuum_HALFSIDE = "U4VolumeMaker_WrapVacuum_HALFSIDE" ;
0068 static const G4VPhysicalVolume* WrapVacuum( G4LogicalVolume* lv );
0069
0070 static constexpr const char* U4VolumeMaker_WrapLVSimple_HALFSIDE = "U4VolumeMaker_WrapLVSimple_HALFSIDE" ;
0071 static const G4VPhysicalVolume* WrapLVSimple( G4LogicalVolume* lv );
0072
0073 static const G4VPhysicalVolume* WrapLVGrid( G4LogicalVolume* lv, int nx, int ny, int nz );
0074 static const G4VPhysicalVolume* WrapLVGrid( std::vector<G4LogicalVolume*>& lvs, int nx, int ny, int nz );
0075 static const G4VPhysicalVolume* WrapLVOffset( G4LogicalVolume* lv, double tx, double ty, double tz );
0076 static const G4VPhysicalVolume* WrapLVCube( G4LogicalVolume* lv, double tx, double ty, double tz );
0077 static const G4VPhysicalVolume* AddPlacement( G4LogicalVolume* mother, G4LogicalVolume* lv, double tx, double ty, double tz );
0078 static const G4VPhysicalVolume* AddPlacement( G4LogicalVolume* mother, const char* name , double tx, double ty, double tz );
0079 static const char* GridName(const char* prefix, int ix, int iy, int iz, const char* suffix);
0080 static const char* PlaceName(const char* prefix, int ix, const char* suffix);
0081
0082
0083
0084 static const G4VPhysicalVolume* WorldBox( double halfside, const char* mat=nullptr );
0085 static const G4VPhysicalVolume* BoxOfScintillator( double halfside );
0086
0087
0088
0089 static const G4VPhysicalVolume* BoxOfScintillator( double halfside, const char* prefix, G4LogicalVolume* mother_lv );
0090 static const G4VPhysicalVolume* Box(double halfside, const char* mat, const char* prefix, G4LogicalVolume* mother_lv );
0091 static const G4VPhysicalVolume* Place( G4LogicalVolume* lv, G4LogicalVolume* mother_lv, const char* flip_axes=nullptr );
0092
0093
0094 static const G4VPhysicalVolume* LocalFastenerAcrylicConstruction(const char* name);
0095 static const G4VPhysicalVolume* Local(const char* name);
0096
0097
0098 static constexpr const char* U4VolumeMaker_RaindropRockAirWater_MATS = "U4VolumeMaker_RaindropRockAirWater_MATS" ;
0099 static constexpr const char* U4VolumeMaker_RaindropRockAirWater_RINDEX = "U4VolumeMaker_RaindropRockAirWater_RINDEX" ;
0100 static constexpr const char* U4VolumeMaker_RaindropRockAirWater_HALFSIDE = "U4VolumeMaker_RaindropRockAirWater_HALFSIDE" ;
0101 static constexpr const char* U4VolumeMaker_RaindropRockAirWater_FACTOR = "U4VolumeMaker_RaindropRockAirWater_FACTOR" ;
0102 static constexpr const char* U4VolumeMaker_RaindropRockAirWater_DROPSHAPE = "U4VolumeMaker_RaindropRockAirWater_DROPSHAPE" ;
0103 static void RaindropRockAirWater_Configure(
0104 std::vector<std::string>& mats,
0105 std::vector<double>& rindex,
0106 double& universe_halfside,
0107 double& container_halfside,
0108 double& medium_halfside,
0109 double& drop_radius,
0110 std::string& dropshape );
0111 static const G4VPhysicalVolume* RaindropRockAirWater(bool sd);
0112 static const G4VPhysicalVolume* BigWaterPool();
0113
0114 static G4Material* GetMaterial(const char* mat);
0115
0116 static G4LogicalVolume* Orb_( double radius, const char* mat, const char* prefix=nullptr );
0117 static G4LogicalVolume* Orb_( double radius, G4Material* mat, const char* prefix=nullptr );
0118 static G4LogicalVolume* Box_( double halfside, const char* mat, const char* prefix=nullptr, const double* boxscale=nullptr );
0119 static G4LogicalVolume* Box_( double halfside, G4Material* mat, const char* prefix=nullptr, const double* boxscale=nullptr );
0120
0121
0122
0123 static constexpr const char* U4VolumeMaker_MakeTransforms_AroundCircle_radius = "U4VolumeMaker_MakeTransforms_AroundCircle_radius" ;
0124 static constexpr const char* U4VolumeMaker_MakeTransforms_AroundCircle_numInRing = "U4VolumeMaker_MakeTransforms_AroundCircle_numInRing" ;
0125 static constexpr const char* U4VolumeMaker_MakeTransforms_AroundCircle_fracPhase = "U4VolumeMaker_MakeTransforms_AroundCircle_fracPhase" ;
0126 static NP* MakeTransforms( const char* name, const char* prefix );
0127 static void WrapAround( const char* prefix, const NP* trs, std::vector<G4LogicalVolume*>& lvs, G4LogicalVolume* mother_lv );
0128
0129 };
0130
0131