20   PhotoModel::PhotoModel(
Pvl &pvl) {
 
   21     PvlGroup &algorithm = pvl.
findObject(
"PhotometricModel").findGroup(
"Algorithm", Pvl::Traverse);
 
   26       p_photoAlgorithmName = algorithm[
"PhtName"][0];
 
   29       p_photoAlgorithmName = algorithm[
"Name"][0];
 
   32       IString msg = 
"Keyword [Name] or keyword [PhtName] must ";
 
   33       msg += 
"exist in [Group = Algorithm]";
 
   37     p_standardConditions = 
false;
 
   44   void PhotoModel::SetStandardConditions(
bool standard) {
 
   45     p_standardConditions = standard;
 
   58   double PhotoModel::PhtTopder(
double phase, 
double incidence,
 
   67     double inc1, inc2, inc3, inc4;
 
   69     double ema1, ema2, ema3, ema4;
 
   77     xi = sin((
Isis::PI / 180.0) * incidence);
 
   78     zi = cos((
Isis::PI / 180.0) * incidence);
 
   83     if((incidence == 0.0) || (emission == 0.0)) {
 
   87       cphi = (cos((
Isis::PI / 180.0) * phase) -
 
   88               cos((
Isis::PI / 180.0) * incidence) *
 
   89               cos((
Isis::PI / 180.0) * emission)) /
 
   90              (sin((
Isis::PI / 180.0) * incidence) *
 
   95     phi = PhtAcos(cphi) * (180.0 / 
Isis::PI);
 
   96     xe = cphi * sin((
Isis::PI / 180.0) * emission);
 
   98     ze = cos((
Isis::PI / 180.0) * emission);
 
  102     xy = sin((
Isis::PI / 180.0) * epsh);
 
  105     cinc = max(-1.0, min(xy * xi + z * zi, 1.0));
 
  106     inc1 = PhtAcos(cinc) * (180.0 / 
Isis::PI);
 
  107     cema = max(-1.0, min(xy * xe + z * ze, 1.0));
 
  108     ema1 = PhtAcos(cema) * (180.0 / 
Isis::PI);
 
  110     cinc = max(-1.0, min(-xy * xi + z * zi, 1.0));
 
  111     inc2 = PhtAcos(cinc) * (180.0 / 
Isis::PI);
 
  112     cema = max(-1.0, min(-xy * xe + z * ze, 1.0));
 
  113     ema2 = PhtAcos(cema) * (180.0 / 
Isis::PI);
 
  115     cinc = max(-1.0, min(z * zi, 1.0));
 
  116     inc3 = PhtAcos(cinc) * (180.0 / 
Isis::PI);
 
  117     cema = max(-1.0, min(xy * ye + z * ze, 1.0));
 
  118     ema3 = PhtAcos(cema) * (180.0 / 
Isis::PI);
 
  120     cinc = max(-1.0, min(z * zi, 1.0));
 
  121     inc4 = PhtAcos(cinc) * (180.0 / 
Isis::PI);
 
  122     cema = max(-1.0, min(-xy * ye + z * ze, 1.0));
 
  123     ema4 = PhtAcos(cema) * (180.0 / 
Isis::PI);
 
  125     d1 = (CalcSurfAlbedo(phase, inc1, ema1) - CalcSurfAlbedo(phase, inc2, ema2)) / eps;
 
  126     d2 = (CalcSurfAlbedo(phase, inc3, ema3) - CalcSurfAlbedo(phase, inc4, ema4)) / eps;
 
  129     result = sqrt(max(1.0e-30, d1 * d1 + d2 * d2));
 
  144   double PhotoModel::PhtAcos(
double cosang) {
 
  147     if(fabs(cosang) <= 1.0) {
 
  148       result = acos(cosang);
 
  171   double PhotoModel::CalcSurfAlbedo(
double pha, 
double inc, 
double ema) {
 
  181     double albedo = PhotoModelAlgorithm(pha, inc, ema);
 
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes. 
 
const double PI(3.14159265358979323846)
The mathematical constant PI. 
 
Contains multiple PvlContainers. 
 
#define _FILEINFO_
Macro for the filename and line number. 
 
Container for cube-like labels. 
 
Adds specific functionality to C++ strings. 
 
bool hasKeyword(const QString &name) const 
Check to see if a keyword exists.