/** \file Compute Mie scattering/attenuation using best available data source \author Tom Paul \version $Id$ \date 5 Mar 2006 */ #ifndef _atm_SuperMieModel_h_ #define _atm_SuperMieModel_h_ static const char CVSId_atm_SuperMieModel[] = "$Id$"; #include #include #include namespace utl{class TimeStamp;}; namespace utl{class TabulatedFunction;}; namespace atm{class MeasuredDBMieModel;}; namespace atm{class ParametricXMLMieModel;}; namespace atm { /** \class SuperMieModel SuperMieModel.h "atm/SuperMieModel.h" \brief Compute Mie scattering/attenuation using the best data source. This model attempts to find data, in order, by checking the following sources: - Aerosol database - Parametric Mie Model \author T. Paul \date 5 Mar 2006 \ingroup atm_models */ class SuperMieModel :public atm::VMieModel { public: SuperMieModel(); virtual ~SuperMieModel(); //! Compute scattering intensity at point at a particular angle and distance from track defined by two points for several wavelengths atm::ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const std::vector& wLength) const; //! Compute scattering intensity at point at a particular angle and distance from track defined by two points for several wavelengths (using precomputed attenuation) atm::ScatteringResult EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, const atm::AttenuationResult& mieAttenuation) const; //! Compute attenuation between two points for several wavelengths atm::AttenuationResult EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, const std::vector& wLength) const; //! Compute scattering intensity at point at a particular angle and distance from track defined by two points double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, double wLength) const; //! Compute scattering intensity at point at a particular angle and distance from track defined by two points (using precomputed attenuation) double EvaluateMieScattering(const utl::Point& xA, const utl::Point& xB, const double angle, const double distance, double wLength, const double mieAttenuation) const; //! Compute attenuation between two points double EvaluateMieAttenuation(const utl::Point& xInit, const utl::Point& xFinal, double wLength) const; //! Compute the aerosol optical depth at some height above a given eye. double GetVerticalAerosolOpticalDepth(const unsigned int eyeId, const double altitude) const; double GetAttenuationLength(const utl::Point& p, const double wLength) const; double EvaluateScatteringAngle(const utl::Point& p, const double angle, const double wLength) const; void Init(); // This model should, by design, always return a result bool HasData() const {return true;}; /// alter Model by nSigma standard deviations void SetUncertaintyBound(double nSigma) const; private: MeasuredDBMieModel* fMeasuredDBMieModel; ParametricXMLMieModel* fParametricXMLMieModel; REGISTER_MODEL(atm::VMieModel, "Super", SuperMieModel); }; } // atm #endif // _atm_SuperMieModel_h_ // Configure (x)emacs for this file ... // Local Variables: // mode:c++ // compile-command: "make -C .. -k" // End: