File indexing completed on 2026-04-10 07:50:27
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <cmath>
0014 #include <cstdlib>
0015
0016 #include "G4Polyhedron.hh"
0017 #include "G4Torus.hh"
0018 #include "G4Orb.hh"
0019 #include "G4Box.hh"
0020 #include "G4Tet.hh"
0021 #include "G4Cons.hh"
0022 #include "G4Tubs.hh"
0023
0024 #include "sstr.h"
0025 #include "U4Mesh.h"
0026
0027
0028 G4VSolid* MakeSolid(const char* ekey)
0029 {
0030 char* SOLID = getenv(ekey);
0031 if(!SOLID) return 0 ;
0032
0033 double extent = 100. ;
0034
0035
0036
0037 G4VSolid* solid = nullptr ;
0038 if(sstr::StartsWith(SOLID,"Orb"))
0039 {
0040 solid = new G4Orb(SOLID, extent) ;
0041 }
0042 else if(sstr::StartsWith(SOLID,"Box"))
0043 {
0044 solid = new G4Box(SOLID, extent, extent, extent ) ;
0045 }
0046 else if(sstr::StartsWith(SOLID,"Cons"))
0047 {
0048 double rmin1 = 0. ;
0049 double rmax1 = extent*0.5 ;
0050 double rmin2 = 0. ;
0051 double rmax2 = extent ;
0052 double dz = extent ;
0053 double sphi = 0. ;
0054 double dphi = 2.*M_PI ;
0055
0056 solid = new G4Cons(SOLID,rmin1, rmax1, rmin2, rmax2, dz, sphi, dphi );
0057 }
0058 else if(sstr::StartsWith(SOLID,"Tubs"))
0059 {
0060 double rmin = 0. ;
0061 double rmax = extent ;
0062 double dz = extent ;
0063 double sphi = 0. ;
0064 double dphi = 2.*M_PI ;
0065
0066 solid = new G4Tubs(SOLID,rmin, rmax, dz, sphi, dphi );
0067 }
0068 else if(sstr::StartsWith(SOLID,"Torus"))
0069 {
0070 double rmin = 0. ;
0071 double rmax = extent/2. ;
0072 double rtor = extent ;
0073 double sphi = 0. ;
0074 double dphi = 2.*M_PI ;
0075 solid = new G4Torus(SOLID, rmin, rmax, rtor, sphi, dphi) ;
0076 }
0077 else if(sstr::StartsWith(SOLID,"Tet"))
0078 {
0079 double e = extent ;
0080 G4ThreeVector p1(e, e, e);
0081 G4ThreeVector p2(e, -e, -e);
0082 G4ThreeVector p3(-e, e, -e);
0083 G4ThreeVector p4(-e, -e, e);
0084 G4bool degenerate = false ;
0085 solid = new G4Tet(SOLID, p1, p2, p3, p4, °enerate ) ;
0086 assert( !degenerate );
0087 }
0088 return solid ;
0089 }
0090
0091
0092
0093 int main()
0094 {
0095 G4VSolid* solid = MakeSolid("SOLID");
0096
0097 if(!solid) return 0 ;
0098
0099 U4Mesh::Save(solid, "$FOLD/$SOLID") ;
0100
0101 return 0 ;
0102 };