3#include "NumericalApproximation.h"
7#define MIN(x,y) (((x) < (y)) ? (x) : (y))
8#define MAX(x,y) (((x) > (y)) ? (x) : (y))
25 PvlGroup &algo = pvl.findObject(
"NormalizationModel")
33 if(algo.hasKeyword(
"Incref")) {
37 if(algo.hasKeyword(
"Pharef")) {
43 if(algo.hasKeyword(
"Emaref")) {
87 double demincidence,
double dememission,
double dn,
88 double &albedo,
double &mult,
double &base) {
90 static double ahInterp;
106 static double old_phase = -9999;
107 static double old_incidence = -9999;
108 static double old_emission = -9999;
109 static double old_demincidence = -9999;
110 static double old_dememission = -9999;
112 if (old_phase != phase || old_incidence != incidence || old_emission != emission ||
113 old_demincidence != demincidence || old_dememission != dememission) {
120 munot = cos(incidence * (
PI / 180.0));
123 old_incidence = incidence;
124 old_emission = emission;
125 old_demincidence = demincidence;
126 old_dememission = dememission;
134 dpm = (psurf - ahInterp * munot) * trans0;
135 q = ahInterp * munot * trans + GetAtmosModel()->
AtmosAb() *
p_normSbar * dpo + dpm;
137 if(dpo <= 0.0 && GetAtmosModel()->AtmosNulneg()) {
142 secondterm = dpo * dpm;
143 thirdterm = firsterm * secondterm;
144 fourthterm = pow(q, 2.0) - 4.0 * thirdterm;
146 if(fourthterm < 0.0) {
147 QString msg =
"Square root of negative (math) encountered";
151 fifthterm = q + sqrt(fourthterm);
154 rho = 2 * dpo / fifthterm;
158 if((1.0 - rho * GetAtmosModel()->AtmosAb()*
p_normSbar) <= 0.0) {
159 QString msg =
"Divide by zero (math) encountered";
180 if(pharef < 0.0 || pharef >= 180.0) {
181 QString msg =
"Invalid value of normalization pharef [" +
199 if(incref < 0.0 || incref >= 90.0) {
200 QString msg =
"Invalid value of normalization incref [" +
218 if(emaref < 0.0 || emaref >= 90.0) {
219 QString msg =
"Invalid value of normalization emaref [" +
Albedo normalization with atmosphere.
void SetNormIncref(const double incref)
Set the normalization function parameter.
double p_normTrans0ref
???
double p_normPharef
The reference phase angle.
void SetNormPharef(const double pharef)
Set parameters needed for albedo normalization.
void SetNormEmaref(const double emaref)
Set the normalization function parameter.
double p_normEmaref
The reference emission angle.
AlbedoAtm(Pvl &pvl, PhotoModel &pmodel, AtmosModel &amodel)
Constructs AlbedoAtm object using a Pvl, PhotoModel, and AtmosModel.
virtual void NormModelAlgorithm(double pha, double inc, double ema, double dn, double &albedo, double &mult, double &base)
Performs the normalization.
double p_normIncref
The reference incidence angle.
Isotropic atmos scattering model.
NumericalApproximation AtmosAhSpline()
If GenerateAhTable() has been called this returns a clamped cubic spline of the data set (p_atmosIncT...
double AtmosAb() const
Return atmospheric Ab value.
void GenerateAhTable()
This method computes the values of the atmospheric Ah table and sets the properties of the atmospheri...
virtual void SetStandardConditions(bool standard)
Used to calculate atmosphere at standard conditions.
void CalcAtmEffect(double pha, double inc, double ema, double *pstd, double *trans, double *trans0, double *sbar, double *transs)
Calculate the atmospheric scattering effect using photometric angle information.
@ Unknown
A type of error that cannot be classified as any of the other error types.
@ User
A type of error that could only have occurred due to a mistake on the user's part (e....
@ Extrapolate
Evaluate() attempts to extrapolate if a is outside of the domain. This is only valid for NumericalApp...
double CalcSurfAlbedo(double pha, double inc, double ema)
Calculate the surface brightness using photometric angle information.
virtual void SetStandardConditions(bool standard)
Sets whether standard conditions will be used.
Contains multiple PvlContainers.
Container for cube-like labels.
@ Traverse
Search child objects.
This is free and unencumbered software released into the public domain.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
const double PI
The mathematical constant PI.