///////////////////////////////////////////////////////////////////////////////
/// \class RAT::geo::BellyGroove
///
/// \brief Builds a belly plate
///
/// \author Phil G Jones
/// \author Aksel Hallin -- contact person
///
/// REVISION HISTORY:\n
/// 2014-02-21 : P G Jones - New file. \n
///
/// \details Builds a belly groove solid at the origin.
///////////////////////////////////////////////////////////////////////////////
#ifndef __RAT_geo_BellyGroove_hh__
#define __RAT_geo_BellyGroove_hh__
#include
#include
namespace RAT
{
namespace geo
{
class BellyGroove : public GeoSolid
{
public:
/// Construct a BellyGroove, set the factory name to bellyGroove
BellyGroove() : GeoSolid( "bellyGroove" ) { }
/// 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 belly plate
/// @return The geant4 solid for the belly plate
virtual G4VSolid* Construct( const std::string& name,
DBLinkPtr table ) const;
protected:
/// Construct a belly groove
///
/// @param[in] name the prefix for the solid name
/// @param[in] rGrooveX x half-width of the groove
/// @param[in] rGrooveY y half-width of the groove
/// @param[in] rTorus radius of the torus groove section
/// @param[in] grooveHeight z height of the groove
/// @param[in] openingX x width of the opening
/// @param[in] openingY y width of the opening
/// @param[in] offset offset between the groove and plate
/// @return the geant4 solid
G4VSolid* ConstructBellyGroove( const std::string& name,
const double rGrooveX,
const double rGrooveY,
const double rTorus,
const double grooveHeight,
const double openingX,
const double openingY,
const double offset ) const;
};
} //::geo
} //::RAT
#endif