/** \file Declaration of ParametricMieModel \author Luis Prado \version $Id: ParametricXMLMieModel.h 20705 2012-03-28 16:20:59Z javierg $ \date 20 Sep 2003 */ #ifndef _atm_ParametricXMLMieModel_h_ #define _atm_ParametricXMLMieModel_h_ static const char CVSId_atm_ParametricXMLMieModel[] = "$Id: ParametricXMLMieModel.h 20705 2012-03-28 16:20:59Z javierg $"; #include #include namespace atm { class ParametricXMLMieModel : public atm::VMieModel { public: /// Destructor - should be virtual for base classes virtual ~ParametricXMLMieModel() { } atm::ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const std::vector& wLength) const; atm::ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const atm::AttenuationResult& mieAttenuation) const; atm::AttenuationResult EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const std::vector& wLength) const; double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double wLength) const; double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const double wLength, const double mieAttenuation) const; double EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const double wLength) const; double GetVerticalAerosolOpticalDepth(const unsigned int eyeId, const double altitude) const; double GetAttenuationLength(const utl::Point& p, const double wLength) const; //virtual utl::TabulatedFunctionErrors GetAttenuationLength(const utl::Point& p, //const std::vector& wLength) const = 0; double EvaluateScatteringAngle(const utl::Point& p, const double angle, const double wLength) const; void Init(); void SetHorizAttLength(const double lMix) { fLMix = lMix; } double GetHorizAttLength() const { return fLMix; } void SetMixHeight(const double hMix) { fHMix = hMix; } double GetMixHeight() const { return fHMix; } void SetScaleHeight(const double hScl) { fHScl = hScl; } double GetScaleHeight() const { return fHScl; } void SetAngstromCoeff(const double gamma) { fGamma = gamma; } double GetAngstromCoeff() const { return fGamma; } bool HasData() const { return true; } private: /// Mixing layer (i.e., ground-level) horizontal attenuation length. double fLMix; double fLMixError; /// Mixing layer height (w.r.t. prevailing ground level). double fHMix; double fHMixError; /// Scale height of the aerosol "entrainment layer" above the mixing layer. double fHScl; double fHSclError; /// Angstrom exponent of the aerosol scattering wavelength dependence. double fGamma; double fGammaError; /// Prevailing ground height used in the aerosol model. double fHGnd; /// Phase function table (modified Henyey-Greenstein function). typedef struct PFParameters { double f; double fError; double g; double gError; } PFParameters; PFParameters fPhaseFunction; REGISTER_MODEL(atm::VMieModel, "ParametricXML", ParametricXMLMieModel); }; } #endif // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. -k" // End: