|
Isis 3.0 Object Programmers' Reference |
Home |
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