////////////////////////////////////////////////////////////////////////
/// \class RAT::PDFs::PDF
///
/// \brief  All pdf classes derive from this
///
/// \author name Phil G Jones <p.jones22@physics.ox.ac.uk>
/// \author Matt Mottram < m.mottram@qmul.ac.uk> -- contact person
///
/// REVISION HISTORY:\n
///     26/04/2011 : P G Jones - New file \n
///     24/01/2013 : P G Jones - Changed to derive from the FitterComponent
///                              class. Allows variable setting.\n
///     2014-03-29 : P G Jones - Updated lifetime, added BeginOfRun method\n
///
/// \details Base class for PDFs
///
////////////////////////////////////////////////////////////////////////

#ifndef __RAT_PDF_PDF_
#define __RAT_PDF_PDF_

#include <RAT/FitterComponent.hh>

#include <string>

namespace RAT
{
  class FitterPMT;

namespace DS
{
  class FitVertex;
}

namespace PDFs
{

class PDF : public FitterComponent
{
public:
  /// Primary PDF function
  ///
  /// @param[in] pmt Observed PMT hit
  /// @param[in] vertex  The proposed vertex
  virtual double GetProbability( const FitterPMT& pmt, const DS::FitVertex& vertex ) = 0;

  /// Initialise the PDF, using a init stream
  virtual void Initialise( const std::string& param ) = 0;
};

} //::PDFs

} //::RAT

#endif