///////////////////////////////////////////////////////////////////////////////
/// \class RAT::geo::HoldDownRope
///
/// \brief Builds a holdDownRope
///
/// \author Phil G Jones
/// \author Aksel Hallin -- contact person
///
/// REVISION HISTORY:\n
/// 2013-11-21 : P G Jones - New file. \n
///
/// \details HoldDownRope solid factory.
///
///////////////////////////////////////////////////////////////////////////////
#ifndef __RAT_geo_HoldDownRope_hh__
#define __RAT_geo_HoldDownRope_hh__
#include
#include
namespace RAT
{
namespace geo
{
class HoldDownRope : public GeoSolid
{
public:
/// Construct a HoldDownRope, name the factory holdDownRope
HoldDownRope() : GeoSolid( "holdDownRope" ) { }
/// 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 hold down rope
/// @return The geant4 solid for the hold down rope
virtual G4VSolid* Construct( const std::string& name,
DBLinkPtr table ) const;
protected:
/// Build the HoldDownRope shape
///
/// The points correspond to the locus of going from the base on one side
/// to the base on another. The sling is the equivalent of a knot point
/// on another rope.
///
/// @param[in] name the prefix for the solid name
/// @param[in] base1 the start anchor point
/// @param[in] equator1 first point where rope meets av equator
/// @param[in] knot1 first point where the rope is knotted to the sling
/// @param[in] knot2 second point (opposite side) where rope knotes with the sling
/// @param[in] equator2 second point where the rope meets av equator
/// @param[in] base2 the end anchor point
/// @param[in] sling the position of the far end of the sling
/// @param[in] radialThickness rope thickness
/// @param[in] avRadius radius of the av the rope passed over
/// @return The geant4 solid for the hold down rope
G4VSolid* ConstructHoldDownRope( const std::string& name,
const G4ThreeVector base1,
const G4ThreeVector equator1,
const G4ThreeVector knot1,
const G4ThreeVector knot2,
const G4ThreeVector equator2,
const G4ThreeVector base2,
const G4ThreeVector sling,
const double radialThickness,
const double avRadius ) const;
};
} //::geo
} //::RAT
#endif