/** \file Declaration of class VRayleighModel \author Luis Prado Jr \version $Id: VRayleighModel.h 20705 2012-03-28 16:20:59Z javierg $ \date 18 Jun 2003 */ #ifndef _atm_VRayleighModel_h_ #define _atm_VRayleighModel_h_ static const char CVSId_atm_VRayleighModel[] = "$Id: VRayleighModel.h 20705 2012-03-28 16:20:59Z javierg $"; #include #include namespace utl { class VRandomSampler; class Point; } namespace atm { class ScatteringResult; class AttenuationResult; /** \class VRayleighModel \brief Base class for an Rayleigh Model \author Luis Prado Jr \date 23 Sep 2003 \ingroup atm_models */ class VRayleighModel : public VModel { public: VRayleighModel(); virtual ~VRayleighModel(); virtual AttenuationResult EvaluateRayleighAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const std::vector& wLength) const = 0; virtual ScatteringResult EvaluateRayleighScattering(const utl::Point& x1, const utl::Point& x2, const double angle, const double distance, const std::vector& wLength) const = 0; /** Additionally takes a precomputed Rayleigh AttenuationResult. * Warning: Make sure it's compatible with the other parameters! */ virtual ScatteringResult EvaluateRayleighScattering(const utl::Point& x1, const utl::Point& x2, const double angle, const double distance, const AttenuationResult& raylAtten) const = 0; /** Additionally takes a precomputed Rayleigh attenuation. * Warning: Make sure it's compatible with the other parameters! */ virtual double EvaluateRayleighScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double wLength, const double raylAtten) const = 0; virtual double EvaluateRayleighScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double wLength) const = 0; virtual double EvaluateRayleighAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const double wLength) const = 0; virtual double GetAttenuationLength(const utl::Point& p, const double wLength) const = 0; virtual double EvaluateScatteringAngle(const utl::Point& p, const double angle, const double wLength) const = 0; virtual const utl::VRandomSampler& EvaluateScatteringAngleDistribution(const utl::Point& p, const double wLength) const; private: mutable utl::VRandomSampler* fAngularDistribution; }; typedef utl::ObjectFactory VRayleighModelFactory; } #endif