USGS

Isis 3.0 Object Programmers' Reference

Home

AtmosModel.h

Go to the documentation of this file.
00001 #ifndef AtmosModel_h
00002 #define AtmosModel_h
00003 
00026 #include <string>
00027 #include <vector>
00028 #include "PhotoModel.h"
00029 #include "NumericalApproximation.h"
00030 #include "NumericalAtmosApprox.h"
00031 
00032 using namespace std;
00033 namespace Isis {
00034   class Pvl;
00035 
00065   class AtmosModel {
00066     public:
00067       AtmosModel (Pvl &pvl, PhotoModel &pmodel);
00069       virtual ~AtmosModel() {};
00070 
00071       // These methods were moved here from the NumericalMethods class
00072       static double G11Prime(double tau); 
00073       static double Ei(double x) throw (iException &);
00074       static double En(unsigned int n, double x) throw (iException &);
00075       // Calculate atmospheric scattering effect
00076       void CalcAtmEffect(double pha, double inc, double ema, double *pstd, 
00077                          double *trans, double *trans0, double *sbar);
00078       // Used to calculate atmosphere at standard conditions
00079       virtual void SetStandardConditions(bool standard);
00080       // Obtain hemispheric and bihemispheric albedo by integrating the photometric function
00081       void GenerateAhTable();
00082       // Perform integration for Hapke Henyey-Greenstein atmosphere correction
00083       void GenerateHahgTables();
00084       // Set parameters needed for atmospheric correction
00085       void SetAtmosAtmSwitch (const int atmswitch);
00086       void SetAtmosBha       (const double bha   );
00087       void SetAtmosBharef    (const double bharef);
00088       void SetAtmosHga       (const double hga   );
00089       void SetAtmosHgaref    (const double hgaref);
00090       void SetAtmosInc       (const double inc   );
00091       void SetAtmosNulneg    (const string nulneg);
00092       void SetAtmosPhi       (const double phi   );
00093       void SetAtmosTau       (const double tau   );
00094       void SetAtmosTauref    (const double tauref);
00095       void SetAtmosWha       (const double wha   );
00096       void SetAtmosWharef    (const double wharef);
00097       
00099       string AlgorithmName () const { return p_atmosAlgorithmName; };
00100 
00102       double AtmosBha () const { return p_atmosBha; };
00104       double AtmosTau () const { return p_atmosTau; };
00106       double AtmosWha () const { return p_atmosWha; };
00108       double AtmosHga () const { return p_atmosHga; };
00110       double AtmosBharef () const { return p_atmosBharef; };
00112       double AtmosHgaref () const { return p_atmosHgaref; };
00114       double AtmosTauref () const { return p_atmosTauref; };
00116       double AtmosWharef () const { return p_atmosWharef; };
00118       bool AtmosNulneg () const { return p_atmosNulneg; };
00120       double AtmosAb () const { return p_atmosAb; };
00122       double AtmosHahgsb () const { return p_atmosHahgsb; };
00124       int AtmosNinc () const { return p_atmosNinc; };
00125 
00127       vector <double> AtmosIncTable () { return p_atmosIncTable; };
00129       vector <double> AtmosAhTable () { return p_atmosAhTable; };
00131       vector <double> AtmosHahgtTable () { return p_atmosHahgtTable; };
00133       vector <double> AtmosHahgt0Table () { return p_atmosHahgt0Table; };
00134 
00146       NumericalApproximation AtmosAhSpline() {return p_atmosAhSpline;};
00158       NumericalApproximation AtmosHahgtSpline() {return p_atmosHahgtSpline;};
00170       NumericalApproximation AtmosHahgt0Spline() {return p_atmosHahgt0Spline;};
00171           
00172     protected:
00173       virtual void AtmosModelAlgorithm (double phase, double incidence, double emission) = 0;
00174       
00175       void SetAlgorithmName(string name) { p_atmosAlgorithmName = name; }
00176       void SetAtmosNulneg(bool nulneg) { p_atmosNulneg = nulneg; }
00177       void SetOldTau(double tau) { p_atmosTauold = tau; }
00178       void SetOldWha(double wha) { p_atmosWhaold = wha; }
00179 
00180       PhotoModel *GetPhotoModel() const { return p_atmosPM; }
00181       bool StandardConditions() const { return p_standardConditions; }
00182       bool TauOrWhaChanged() const;
00183       double Eulgam() const { return p_atmosEulgam; }
00184 
00185       int p_atmosAtmSwitch;
00186       int p_atmosNinc;
00187 
00188       double p_atmosBha;
00189       double p_atmosBharef;
00190       double p_atmosBhasave;
00191       double p_atmosHgaref;
00192       double p_atmosHgasave;
00193       double p_atmosTauref;
00194       double p_atmosTausave;
00195       double p_atmosWharef;
00196       double p_atmosWhasave;
00197 
00198       double p_pstd;   
00199       double p_trans;  
00200       double p_trans0; 
00201       double p_sbar;   
00202       double p_atmosHga;
00203       double p_atmosTau;
00204       double p_atmosWha;
00205       double p_atmosAb;
00206       vector <double> p_atmosIncTable;
00207       vector <double> p_atmosAhTable;
00208       double p_atmosHahgsb;
00209       vector <double> p_atmosHahgtTable;
00210       vector <double> p_atmosHahgt0Table;
00211       double p_atmosInc;
00212       double p_atmosPhi;
00213       double p_atmosMunot;
00214       double p_atmosSini;
00215       double p_atmosCosphi;
00216       double p_atmosEulgam;
00217 
00219       NumericalApproximation p_atmosAhSpline;
00221       NumericalApproximation p_atmosHahgtSpline;
00223       NumericalApproximation p_atmosHahgt0Spline;
00224 
00225     private:
00226       bool p_standardConditions;
00227     
00228       string p_atmosAlgorithmName;
00229  
00230       PhotoModel *p_atmosPM;
00231 
00232       bool p_atmosNulneg;
00233 
00234       double p_atmosTauold;
00235       double p_atmosWhaold;
00236     friend class NumericalAtmosApprox;
00237   };
00238 };
00239 
00240 #endif