#ifndef __JPHYSICS__JABSTRACTMEDIUM__
#define __JPHYSICS__JABSTRACTMEDIUM__


/**
 * \author mdejong
 */

namespace JPHYSICS {}
namespace JPP { using namespace JPHYSICS; }

namespace JPHYSICS {

  /**
   * Medium interface.
   */
  class JAbstractMedium {
  public:
    /**
     * Virtual destructor.
     */
    virtual ~JAbstractMedium()
    {}


    /**
     * Absorption length.
     *
     * \param  lambda     wavelenth [nm]
     * \return            absorption length [m]
     */ 
    virtual double getAbsorptionLength(const double lambda) const = 0;


    /**
     * Scattering length.
     *
     * \param  lambda     wavelenth [nm]
     * \return            scattering length [m]
     */ 
    virtual double getScatteringLength(const double lambda) const = 0;


    /**
     * Model specific function to describe light scattering in water 
     * (integral over full solid angle normalised to unity).
     *
     * \param  ct         cosine scattering angle
     * \return            probability
     */
    virtual double getScatteringProbability(const double ct) const = 0;
  };
}

#endif