#include #include #include using namespace RAT; using namespace RAT::geo; #include #include #include #include using namespace CLHEP; using namespace std; G4VSolid* Polycone::Construct( const std::string& name, DBLinkPtr table ) const { vector zArray = table->GetDArray( "z" ); vector rInArray = table->GetDArray( "r_inner" ); vector rOutArray = table->GetDArray( "r_outer" ); Log::Assert( zArray.size() == rInArray.size() && zArray.size() == rOutArray.size(), "Polycone::Construct: array size mismatch." ); for( size_t index = 0; index < zArray.size(); index++ ) { zArray[index] *= mm; rInArray[index] *= mm; rOutArray[index] *= mm; } /// Optional parameters double phiStart = 0.0; try { phiStart = table->GetD( "phi_start" ) * deg; } catch (DBNotFoundError &e) { }; double phiDelta = twopi; try { phiDelta = table->GetD( "phi_delta" ) * deg; } catch (DBNotFoundError &e) { }; return new G4Polycone( name + "_solid", phiStart, phiDelta, zArray.size(), &zArray[0], &rInArray[0], &rOutArray[0] ); }