/** \file Declaration of class VMieModel \author Luis Prado Jr \version $Id$ \date 18 Jun 2003 */ #ifndef _atm_VMieModel_h_ #define _atm_VMieModel_h_ static const char CVSId_atm_VMieModel[] = "$Id$"; #include #include namespace utl { class VRandomSampler; class Point; } namespace atm { class ScatteringResult; class AttenuationResult; /** \class VMieModel \brief Base class for a Mie Model \author Luis Prado Jr \date 18 Jun 2003 \ingroup atm_models */ class VMieModel : public VModel { public: VMieModel(); virtual ~VMieModel(); virtual ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const std::vector& xLength) const = 0; /** Additionally takes a precomputed Mie AttenuationResult. * Warning: Make sure it's compatible with the other parameters! */ virtual ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const AttenuationResult& mieAttenuation) const = 0; virtual AttenuationResult EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const std::vector& wLength) const = 0; virtual double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double xLength) const = 0; virtual double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double xLength, const double mieAttenuation) const = 0; virtual double EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const double wLength) const = 0; virtual double GetVerticalAerosolOpticalDepth(const unsigned int eyeId, const double altitude) 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 VMieModelFactory; } #endif // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. -k" // End: