9#include "SpecialPixel.h" 
   10#include "IException.h" 
   15    PvlGroup &algo = pvl.findObject(
"NormalizationModel")
 
   16                     .findGroup(
"Algorithm", Pvl::Traverse);
 
   23    SetNormWl(p_normWavelength);
 
   30    if(algo.hasKeyword(
"D")) {
 
   34    if(algo.hasKeyword(
"Wl")) {
 
   35      SetNormWl(algo[
"Wl"]);
 
   38    if(algo.hasKeyword(
"E")) {
 
   43        p_normE = -0.3575 * p_normWl - 0.0607;
 
   50    if(algo.hasKeyword(
"F")) {
 
   54    if(algo.hasKeyword(
"G2")) {
 
   55      SetNormG2(algo[
"G2"]);
 
   59        p_normG2 = -0.9585 * p_normWl + 0.98;
 
   66    if(algo.hasKeyword(
"Xmul")) {
 
   67      SetNormXmul(algo[
"Xmul"]);
 
   70    if(algo.hasKeyword(
"H")) {
 
   74    if(algo.hasKeyword(
"Bsh1")) {
 
   75      SetNormBsh1(algo[
"Bsh1"]);
 
   78      p_normBsh1 = 19.89 - 59.58 * p_normWl + 59.86 * pow(p_normWl, 2) -
 
   79                   20.09 * pow(p_normWl, 3);
 
   80      if(p_normBsh1 < 0.0) {
 
   85    if(algo.hasKeyword(
"Xb1")) {
 
   86      SetNormXb1(algo[
"Xb1"]);
 
   89    if(algo.hasKeyword(
"Xb2")) {
 
   90      SetNormXb2(algo[
"Xb2"]);
 
   95    p_normF1 = 1.0 - p_normF;
 
   96    double g1 = p_normD * 0.1 + p_normE;
 
   97    double g1sq = g1 * g1;
 
   98    p_normG2sq = p_normG2 * p_normG2;
 
   99    double c30 = cos(30.0 * 
Isis::PI / 180.0);
 
  100    if(1.0 + g1sq + 2.0 * g1 *c30 <= 0.0) {
 
  101      std::string msg = 
"Error while initializing Buratti function";
 
  102      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  104    double pg130 = p_normF1 * (1.0 - g1sq) / (pow((1.0 + g1sq + 2.0 * g1 * c30), 1.5));
 
  105    if(1.0 + p_normG2sq + 2.0 * p_normG2 *c30 <= 0.0) {
 
  106      std::string msg = 
"Error while initializing Buratti function";
 
  107      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  109    double pg230 = p_normF * (1.0 - p_normG2sq) / (pow((1.0 + p_normG2sq + 2.0 * p_normG2 * c30), 1.5));
 
  110    if(p_normBsh1 < 0.0) p_normBsh1 = 0.0;
 
  111    if(1.0 + tan(15.0 * 
Isis::PI / 180.0) / p_normH == 0.0) {
 
  112      std::string msg = 
"Error while initializing Buratti function";
 
  113      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  115    double bshad30 = 1.0 + p_normBsh1 / (1.0 + tan(15.0 * 
Isis::PI / 180.0) / p_normH);
 
  116    p_normPg30 = (pg130 + pg230) * bshad30;
 
  117    p_normBc1 = p_normXb1 + p_normXb2 * p_normWl;
 
  118    p_normFbc3 = 1.0 + p_normBc1 * 2.0;
 
  119    if(p_normFbc3 == 0.0) {
 
  120      std::string msg = 
"Error while initializing Buratti function";
 
  121      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  123    p_normC3 = cos(2.0 * 
Isis::PI / 180.0);
 
  124    if(1.0 + p_normG2sq + 2.0 * p_normG2 *p_normC3 <= 0.0) {
 
  125      std::string msg = 
"Error while initializing Buratti function";
 
  126      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  128    p_normPg32 = p_normF * (1.0 - p_normG2sq) / (pow((1.0 + p_normG2sq + 2.0 * p_normG2 * p_normC3), 1.5));
 
  129    if(1.0 + tan(
Isis::PI / 180.0) / p_normH == 0.0) {
 
  130      std::string msg = 
"Error while initializing Buratti function";
 
  131      throw IException(IException::Unknown, msg, _FILEINFO_);
 
  133    p_normBshad3 = 1.0 + p_normBsh1 / (1.0 + tan(
Isis::PI / 180.0) / p_normH);
 
  136  void MoonAlbedo::NormModelAlgorithm(
double phase, 
double incidence, 
double emission,
 
  137                                      double demincidence, 
double dememission, 
double dn,
 
  138                                      double &albedo, 
double &mult, 
double &base) {
 
  152    a = GetPhotoModel()->CalcSurfAlbedo(phase, demincidence, dememission);
 
  155      cosa = cos(phase * 
Isis::PI / 180.0);
 
  156      if(1.0 + p_normG2sq + 2.0 * p_normG2 *cosa <= 0.0) {
 
  160      pg2 = p_normF * (1.0 - p_normG2sq) / (pow((1.0 + p_normG2sq + 2.0 * p_normG2 * cosa), 1.5));
 
  161      if(1.0 + tan(phase * .5 * 
Isis::PI / 180.0) / p_normH == 0.0) {
 
  165      bshad = 1.0 + p_normBsh1 / (1.0 + tan(phase * .5 * 
Isis::PI / 180.0) / p_normH);
 
  169      for(
int i = 0; i < 6; i++) {
 
  170        g1 = p_normD * albedo + p_normE;
 
  172        if(1.0 + g1sq + 2.0 * g1 *cosa <= 0.0) {
 
  176        pg1 = p_normF1 * (1.0 - g1sq) / (pow((1.0 + g1sq + 2.0 * g1 * cosa), 1.5));
 
  177        pg = (pg1 + pg2) * bshad;
 
  179          fbc = 1.0 + p_normBc1 * phase;
 
  180          if(1.0 + g1sq + 2.0 * g1 *p_normC3 <= 0.0) {
 
  184          pg31 = p_normF1 * (1.0 - g1sq) / (pow((1.0 + g1sq + 2.0 * g1 * p_normC3), 1.5));
 
  185          pg3 = (pg31 + p_normPg32) * p_normBshad3;
 
  186          pg = fbc * (pg3 / p_normFbc3);
 
  192        albedo = r * a * p_normPg30 / pg;
 
  277      std::string msg = 
"Invalid value of normalization h [" +
 
 
  294      std::string msg = 
"Invalid value of normalization bsh1 [" +
 
 
@ 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.
 
Albedo dependent phase function normalization for the Moon.
 
void SetNormBsh1(const double bsh1)
Set the albedo dependent phase function normalization parameter.
 
void SetNormXmul(const double xmul)
Set the albedo dependent phase function normalization parameter.
 
void SetNormF(const double f)
Set the albedo dependent phase function normalization parameter.
 
void SetNormH(const double h)
Set the albedo dependent phase function normalization parameter.
 
void SetNormXb1(const double xb1)
Set the albedo dependent phase function normalization parameter.
 
void SetNormWl(const double wl)
Set the albedo dependent phase function normalization parameter.
 
void SetNormD(const double d)
Set parameters needed for albedo dependent phase function normalization for the Moon.
 
void SetNormXb2(const double xb2)
Set the albedo dependent phase function normalization parameter.
 
void SetNormG2(const double g2)
Set the albedo dependent phase function normalization parameter.
 
void SetNormE(const double e)
Set the albedo dependent phase function normalization parameter.
 
Container for cube-like labels.
 
This is free and unencumbered software released into the public domain.
 
const double PI
The mathematical constant PI.