///////////////////////////////////////////////////////////////////////////////
/// \class RAT::geo::InternalRope
///
/// \brief Builds an interal/calibration rope
///
/// \author Phil G Jones
/// \author Aksel Hallin -- contact person
///
/// REVISION HISTORY:\n
/// 2013-11-25 : P G Jones - New file. \n
///
/// \details Internal Rope or calibration ropesolid factory.
///
///////////////////////////////////////////////////////////////////////////////
#ifndef __RAT_geo_InternalRope_hh__
#define __RAT_geo_InternalRope_hh__
#include
#include
namespace RAT
{
namespace geo
{
class InternalRope : public GeoSolid
{
public:
/// Construct an InternalRope, name the factory internalRope
InternalRope() : GeoSolid( "internalRope" ) { }
/// Return the solid shape, as defined in the table
///
/// @param[in] name the prefix for the solid name
/// @param[in] table is the ratdb table defining the internal rope
/// @return The geant4 solid for the internal rope
virtual G4VSolid* Construct( const std::string& name,
DBLinkPtr table ) const;
protected:
/// Construct a segment of the rope
///
/// @param[in] name the prefix for the solid name
/// @param[in] start segment start position
/// @param[in] end segment end position
/// @param[in] radius rope radius
/// @return The geant4 solid for the internal rope
G4VSolid* ConstructRope( const std::string& name,
const G4ThreeVector start,
const G4ThreeVector end,
const double radius ) const;
};
} //::geo
} //::RAT
#endif