Beispiel #1
0
void
testExtrudedPgon::matched_g4_and_dd( void )
{
  std::vector<double> x = { -300, -300, 300, 300, 150, 150, -150, -150 };
  std::vector<double> y = { -300, 300, 300, -300, -300, 150, 150, -300 };
  std::vector<double> z = { -600, -150, 100, 600 };
  std::vector<double> zx = { 0, 0, 0, 0 };
  std::vector<double> zy = { 300, -300, 0, 300 }; 
  std::vector<double> zscale = { 8, 10, 6, 12 };
  std::string name( "fred1" );

  std::vector<G4TwoVector> polygon;
  std::vector<G4ExtrudedSolid::ZSection> zsections;
  for( unsigned int it = 0; it < x.size(); ++it )
    polygon.emplace_back( x[it], y[it] );
  for( unsigned int it = 0; it < z.size(); ++it )
    zsections.emplace_back( z[it], G4TwoVector(zx[it], zy[it]), zscale[it] );
  G4ExtrudedSolid g4( name, polygon, zsections );
  DDI::ExtrudedPolygon dd( x, y, z, zx, zy, zscale );
  DDExtrudedPolygon dds = DDSolidFactory::extrudedpolygon( name,  x, y, z, zx, zy, zscale );

  dd.stream(std::cout);
  std::cout << std::endl;
  std::cout << "\tg4 volume = " << g4.GetCubicVolume()/cm3 <<" cm3" << std::endl;
  std::cout << "\tdd volume = " << dd.volume()/cm3 << " cm3"<<  std::endl;
  std::cout << "\tDD Information: " << dds << " vol= " << dds.volume() << std::endl;
  
  // FIXME: dd voulme is not implemented yet!
  // CPPUNIT_ASSERT( g4.GetCubicVolume()/cm3 == dd.volume()/cm3 );
}
Beispiel #2
0
//
// 25. Extruded Polygon:
//
// The extrusion of an arbitrary polygon (extruded solid)
// with fixed outline in the defined Z sections can be defined as follows
// (in a general way, or as special construct with two Z sections):
//
//    G4ExtrudedSolid(const G4String& pName,
//                    std::vector<G4TwoVector> polygon,
//                    std::vector<ZSection> zsections)
//
void doExtrudedPgon(const std::string &name,
                    const std::vector<double> x,
                    const std::vector<double> y,
                    const std::vector<double> z,
                    const std::vector<double> zx,
                    const std::vector<double> zy,
                    const std::vector<double> zscale) {
  std::vector<G4TwoVector> polygon;
  std::vector<G4ExtrudedSolid::ZSection> zsections;
  for (unsigned int it = 0; it < x.size(); ++it)
    polygon.emplace_back(x[it], y[it]);
  for (unsigned int it = 0; it < z.size(); ++it)
    zsections.emplace_back(z[it], G4TwoVector(zx[it], zy[it]), zscale[it]);
  G4ExtrudedSolid g4(name, polygon, zsections);
  DDI::ExtrudedPolygon dd(x, y, z, zx, zy, zscale);
  DDExtrudedPolygon dds = DDSolidFactory::extrudedpolygon(name, x, y, z, zx, zy, zscale);

  dd.stream(std::cout);
  std::cout << std::endl;
  std::cout << "\tg4 volume = " << g4.GetCubicVolume() / cm3 << " cm3" << std::endl;
  std::cout << "\tdd volume = " << dd.volume() / cm3 << " cm3" << std::endl;
  std::cout << "\tDD Information: " << dds << " vol= " << dds.volume() << std::endl;
}