Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 07:50:27

0001 /**
0002 U4Mesh_test.cc
0003 ===============
0004 
0005 ::
0006 
0007    ~/o/u4/tests/U4Mesh_test.sh
0008    ~/o/u4/tests/U4Mesh_test.sh build_all
0009    ~/o/u4/tests/U4Mesh_test.sh info
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     //G4Polyhedron::SetNumberOfRotationSteps(24);
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, &degenerate ) ;
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 };