////////////////////////////////////////////////////////////////////////
/// \class RAT::CylindricalPMTConstructor
///
/// \brief   Constructs a cylindrically shaped PMT
///
/// \author  Phil Jones <p.g.jones@qmul.ac.uk>
/// \author Aksel Hallin <aksel.hallin@ualberta.ca> -- contact person
///
/// REVISION HISTORY:\n
///     03/12 : P.Jones - First Revision, new file. \n
///
/// \details  Extends PMTConstructor to produce a cylindrically shaped PMT.
///
////////////////////////////////////////////////////////////////////////

#ifndef __RAT_CylindricalPMTConstructor__
#define __RAT_CylindricalPMTConstructor__

#include <RAT/PMTConstructorParams.hh>
#include <RAT/PMTConstructor.hh>

#include<string>

namespace RAT
{

class CylindricalPMTConstructor : public PMTConstructor
{
public:
  /// Constructor for the class, needs parameters and a name
  CylindricalPMTConstructor( const std::string &prefix, ///< Prefix string
                             const PMTConstructorParams &params ///< Parameters that define the pmt
                           );

  /// Construct the G4LogicalVolume that is a RAT PMT
  void ConstructLogical();
  /// Returns the Max height above the pmt equator of the bucket
  double GetMaxHeight();
  /// Returns the Max depth below the pmt equator of the bucket (note returns a -ive number)
  double GetMaxDepth();
  /// Returns the Max radius
  double GetHexRadius();
private:
  ///To prevent usage
  CylindricalPMTConstructor();
};

} //::RAT

#endif