Back to home page

EIC code displayed by LXR

 
 

    


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     // top level interface : pv maker
0025 
0026     static const G4VPhysicalVolume* PV(); // sensitive to GEOM envvar
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     // general LV maker using U4SolidMaker::Make, U4Material::FindMaterialName
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     // WorldBox wrappers : arranging lv variously and returning world pv
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 ); // prefix eg AroundCircle
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     // world box pv
0083 
0084     static const G4VPhysicalVolume* WorldBox( double halfside, const char* mat=nullptr );
0085     static const G4VPhysicalVolume* BoxOfScintillator( double halfside );
0086 
0087     // box pv
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     // specialist pv creators
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     // general lv creators
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     // instance wraps
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