9#include "SpecialPixel.h" 
   10#include "IException.h" 
   14    PvlGroup &algorithm = pvl.findObject(
"NormalizationModel").findGroup(
"Algorithm", Pvl::Traverse);
 
   27    if(algorithm.hasKeyword(
"Pharef")) {
 
   28      SetNormPharef(algorithm[
"Pharef"]);
 
   31    if(algorithm.hasKeyword(
"Incref")) {
 
   32      SetNormIncref(algorithm[
"Incref"]);
 
   35    if(algorithm.hasKeyword(
"Emaref")) {
 
   36      SetNormEmaref(algorithm[
"Emaref"]);
 
   39    if(algorithm.hasKeyword(
"Incmat")) {
 
   40      SetNormIncmat(algorithm[
"Incmat"]);
 
   43    if(algorithm.hasKeyword(
"Phamat")) {
 
   44      SetNormPhamat(algorithm[
"Phamat"]);
 
   46      p_normPhamat = p_normIncmat;
 
   49    if(algorithm.hasKeyword(
"Emamat")) {
 
   50      SetNormEmamat(algorithm[
"Emamat"]);
 
   53    if(algorithm.hasKeyword(
"Thresh")) {
 
   54      SetNormThresh(algorithm[
"Thresh"]);
 
   57    if(algorithm.hasKeyword(
"Albedo")) {
 
   58      SetNormAlbedo(algorithm[
"Albedo"]);
 
   64    GetPhotoModel()->SetStandardConditions(
true);
 
   65    p_psurfref = GetPhotoModel()->CalcSurfAlbedo(p_normPharef, p_normIncref, p_normEmaref);
 
   66    double pprimeref = GetPhotoModel()->PhtTopder(p_normPharef, p_normIncref, p_normEmaref);
 
   68    if(p_psurfref == 0.0) {
 
   69      std::string err = 
"Divide by zero error";
 
   70      throw IException(IException::Unknown, err, _FILEINFO_);
 
   73      p_rhobar = p_normAlbedo / p_psurfref;
 
   77    p_psurfmatch = GetPhotoModel()->CalcSurfAlbedo(p_normPhamat, p_normIncmat, p_normEmamat);
 
   78    p_pprimematch = GetPhotoModel()->PhtTopder(p_normPhamat, p_normIncmat, p_normEmamat);
 
   82    double arg = pow(p_psurfref, 2.0) + pow(p_psurfmatch * pprimeref / std::max(1.0e-30, p_pprimematch), 2.0);
 
   83    if((arg < 1.0e-10) || (arg > 1.0e10)) {
 
   84      std::string err = 
"Bad reference state encountered";
 
   85      throw IException(IException::Unknown, err, _FILEINFO_);
 
   89    GetPhotoModel()->SetStandardConditions(
false);
 
   92  void Mixed::NormModelAlgorithm(
double phase, 
double incidence, 
double emission,
 
   93                                 double demincidence, 
double dememission, 
double dn,
 
   94                                 double &albedo, 
double &mult, 
double &base) {
 
   99    static double old_phase = -9999;
 
  100    static double old_incidence = -9999;
 
  101    static double old_emission = -9999;
 
  102    static double old_demincidence = -9999;
 
  103    static double old_dememission = -9999;
 
  105    if (old_phase != phase || old_incidence != incidence || old_emission != emission ||
 
  106        old_demincidence != demincidence || old_dememission != dememission) {
 
  109      psurf = GetPhotoModel()->CalcSurfAlbedo(phase, demincidence, dememission);
 
  110      pprime = GetPhotoModel()->PhtTopder(phase, demincidence, dememission);
 
  111      double arg = pow(psurf, 2.0) + pow(p_psurfmatch * pprime / std::max(1.0e-30, p_pprimematch), 2.0);
 
  112      aden = sqrt(std::max(1.0e-30, arg));
 
  115      old_incidence = incidence;
 
  116      old_emission = emission;
 
  117      old_demincidence = demincidence;
 
  118      old_dememission = dememission;
 
  125    if(aden > p_anum * p_normThresh) {
 
  129      albedo = dn * p_anum / aden + p_rhobar * (p_psurfref - p_anum / aden * psurf);
 
  143    if(pharef < 0.0 || pharef >= 180.0) {
 
  144      std::string msg = 
"Invalid value of normalization pharef [" +
 
  149    p_normPharef = pharef;
 
 
  162    if(incref < 0.0 || incref >= 90.0) {
 
  163      std::string msg = 
"Invalid value of normalization incref [" +
 
  168    p_normIncref = incref;
 
 
  181    if(emaref < 0.0 || emaref >= 90.0) {
 
  182      std::string msg = 
"Invalid value of normalization emaref [" +
 
  187    p_normEmaref = emaref;
 
 
  201    if(phamat < 0.0 || phamat >= 180.0) {
 
  202      std::string msg = 
"Invalid value of normalization phamat [" +
 
  207    p_normPhamat = phamat;
 
 
  221    if(incmat < 0.0 || incmat >= 90.0) {
 
  222      std::string msg = 
"Invalid value of normalization incmat [" +
 
  227    p_normIncmat = incmat;
 
 
  241    if(emamat < 0.0 || emamat >= 90.0) {
 
  242      std::string msg = 
"Invalid value of normalization emamat [" +
 
  247    p_normEmamat = emamat;
 
 
  257    p_normAlbedo = albedo;
 
 
  275    p_normThresh = thresh;
 
 
@ User
A type of error that could only have occurred due to a mistake on the user's part (e....
 
Adds specific functionality to C++ strings.
 
Mixed albedo/topo normalization without atmosphere.
 
void SetNormEmamat(const double emamat)
Set the normalization function parameter.
 
void SetNormEmaref(const double emaref)
Set the normalization function parameter.
 
void SetNormIncref(const double incref)
Set the normalization function parameter.
 
void SetNormAlbedo(const double albedo)
Set the normalization function parameter.
 
void SetNormThresh(const double thresh)
Set the normalization function parameter.
 
void SetNormIncmat(const double incmat)
Set the normalization function parameter.
 
void SetNormPharef(const double pharef)
Set parameters needed for albedo normalization.
 
void SetNormPhamat(const double phamat)
Set the normalization function parameter.
 
Container for cube-like labels.
 
This is free and unencumbered software released into the public domain.