|
Isis 3.0 Application Source Code Reference |
Home |
00001 #ifndef HapkeExponential_h 00002 #define HapkeExponential_h 00003 /** 00004 * @file 00005 * $Revision$ 00006 * $Date$ 00007 * 00008 * Unless noted otherwise, the portions of Isis written by the USGS are 00009 * public domain. See individual third-party library and package descriptions 00010 * for intellectual property information, user agreements, and related 00011 * information. 00012 * 00013 * Although Isis has been used by the USGS, no warranty, expressed or 00014 * implied, is made by the USGS as to the accuracy and functioning of such 00015 * software and related material nor shall the fact of distribution 00016 * constitute any such warranty, and no responsibility is assumed by the 00017 * USGS in connection therewith. 00018 * 00019 * For additional information, launch 00020 * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html 00021 * in a browser or see the Privacy & Disclaimers page on the Isis website, 00022 * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on 00023 * http://www.usgs.gov/privacy.html. 00024 */ 00025 00026 #include <iostream> 00027 #include <sstream> 00028 #include <iomanip> 00029 #include <vector> 00030 00031 #include "PhotometricFunction.h" 00032 #include "IString.h" 00033 #include "Camera.h" 00034 #include "DbProfile.h" 00035 #include "SpecialPixel.h" 00036 00037 namespace Isis { 00038 class PvlObject; 00039 class Camera; 00040 00041 /** 00042 * @brief An implementation of the HapkeExponential photometric function 00043 * 00044 * This class implements the Exponential-Buratti-Hill photometric 00045 * equation as outline in thier paper "Multispectral Photometry 00046 * of the Moon and Absolute Calibration of the Clementine UV/VIS 00047 * Camera", published in Icaris v141, pg. 205-255 (1999). 00048 * 00049 * @author 2010-02-15 Kris Becker 00050 * 00051 * @internal 00052 */ 00053 class HapkeExponential : public PhotometricFunction { 00054 public: 00055 /** 00056 * @brief Create Hilier photometric object 00057 * 00058 */ 00059 HapkeExponential (PvlObject &pvl, Cube &cube, bool useCamera) : PhotometricFunction(pvl, cube, useCamera) {init(pvl, cube);} 00060 00061 //! Destructor 00062 virtual ~HapkeExponential () {} 00063 00064 double photometry ( double i, double e, double g, int band = 1 ) const; 00065 void Report ( PvlContainer &pvl ); 00066 00067 private: 00068 /** 00069 * @brief Container for band photometric correction parameters 00070 * 00071 * @author Kris Becker - 2/21/2010 00072 */ 00073 struct Parameters { 00074 Parameters () : 00075 aTerms(), bTerms(), wavelength(0.0), tolerance(0.0), units("Degrees"), phaUnit(1.0), band(0), phoStd( 00076 0.0), iProfile(-1) { 00077 } 00078 ~Parameters () { 00079 } 00080 bool IsValid () const { 00081 return (iProfile != -1); 00082 } 00083 std::vector<double> aTerms; //<! a-terms for exponential in form a*e^(b*x) 00084 std::vector<double> bTerms; //<! b-terms for exponential in form a*e^(b*x) 00085 double wavelength; //<! Wavelength for correction 00086 double tolerance; //<! Wavelength Range/Tolerance 00087 QString units; //<! Phase units of Hiller eq. 00088 double phaUnit; // 1 for degrees, Pi/180 for radians 00089 int band; //<! Cube band parameters 00090 double phoStd; //<! Computed photometric std. 00091 int iProfile; //<! Profile index of this data 00092 }; 00093 00094 std::vector<DbProfile> _profiles; 00095 std::vector<Parameters> _bandpho; 00096 00097 void init(PvlObject &pvl, Cube &cube); 00098 00099 double photometry ( const Parameters &parms, double i, double e, double g ) const; 00100 00101 Parameters findParameters ( const double wavelength ) const; 00102 Parameters extract ( const DbProfile &profile ) const; 00103 }; 00104 00105 } 00106 ; 00107 00108 #endif 00109