///////////////////////////////////////////////////////////////////////////////
/// \class RAT::geo::SNOMANBellyPlate
///
/// \brief  Builds a SNOMAN belly plate
///
/// \author Phil G Jones <p.g.jones@qmul.ac.uk>
/// \author Aksel Hallin <aksel.hallin@ualberta.ca> -- contact person
///
/// REVISION HISTORY:\n
///     2013-08-07 : P G Jones - New file. \n
///
/// \details Builds a belly plate solid at the origin, to the SNOMAN model.
/// The SNOMAN model differs from the RAT model, see RAT::geo::BellyPlate.
///
///////////////////////////////////////////////////////////////////////////////

#ifndef __RAT_geo_SNOMANBellyPlate_hh__
#define __RAT_geo_SNOMANBellyPlate_hh__

#include <RAT/GeoSolid.hh>

#include <string>

namespace RAT
{
namespace geo
{

class SNOMANBellyPlate : public GeoSolid
{
public:
  /// Construct a SNOMANBellyPlate, set the factory name to bellyPlate
  SNOMANBellyPlate() : GeoSolid( "snomanBellyPlate" ) { }

  /// 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 plate
  ///
  /// @param[in] name the prefix for the solid name
  /// @param[in] octahedronBase the half length of the base
  /// @param[in] octahedronHeight the half height of the octahedron
  /// @param[in] thickness thickness of the spherical tile
  /// @param[in] rSphere radius of the spherical tile (at centre)
  /// @param[in] arc length in radians of the spherical tile
  /// @param[in] rOctahedron offset of the octahedron from origin in the spherical tile coord system
  /// @return the geant4 solid
  G4VSolid* ConstructBellyPlate( const std::string& name,
                                 const double octahedronBase,
                                 const double octahedronHeight,
                                 const double thickness,
                                 const double rSphere,
                                 const double arc,
                                 const double rOctahedron ) const;
};

} //::geo

} //::RAT

#endif