Isis 3 Programmer Reference
PhotometricFunction.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include <SpiceUsr.h>
10#include <SpiceZfc.h>
11#include <SpiceZmc.h>
12
13#include "Angle.h"
14#include "Camera.h"
15#include "DbProfile.h"
16#include "PhotometricFunction.h"
17#include "PvlObject.h"
18
19using namespace std;
20
21namespace Isis {
35 if (useCamera) {
36 m_camera = cube.camera();
37 }
38 }
39
40
45
46
53 m_camera = cam;
54 }
55
56
65 return pvl.findObject("PhotometricModel").findGroup("Algorithm", Pvl::Traverse).findKeyword("Name")[0];
66 }
67
68
85 double PhotometricFunction::compute( const double &line, const double &sample, int band, bool useDem) {
86 // Update band if necessary
87 if (m_camera->Band() != band) {
88 m_camera->SetBand(band);
89 }
90 // Return null if not able to set image
91 if (!m_camera->SetImage(sample, line)) {
92 return (Null);
93 }
94 // calculate photometric angles
95 double i = m_camera->IncidenceAngle();
96 double e = m_camera->EmissionAngle();
97 double g = m_camera->PhaseAngle();
98 bool success = true;
99
100 if (useDem) {
101 Angle phase, incidence, emission;
102 m_camera->LocalPhotometricAngles(phase, incidence, emission, success);
103
104 if (success) {
105 g = phase.degrees();
106 i = incidence.degrees();
107 e = emission.degrees();
108 }
109 }
110
111 if ( !success || i < minimumIncidenceAngle() || i > maximumIncidenceAngle() || e < minimumEmissionAngle() || e
113 return (Null);
114 }
115
116 return photometry(i, e, g, band);
117 }
118
119
132 m_minimumIncidenceAngle = angle;
133 }
134
135
148 m_maximumIncidenceAngle = angle;
149 }
150
151
164 m_minimumEmissionAngle = angle;
165 }
166
167
180 m_maximumEmissionAngle = angle;
181 }
182
183
196 m_minimumPhaseAngle = angle;
197 }
198
199
212 m_maximumPhaseAngle = angle;
213 }
214
215
228 return m_minimumIncidenceAngle;
229 }
230
231
244 return m_maximumIncidenceAngle;
245 }
246
247
260 return m_minimumEmissionAngle;
261 }
262
263
276 return m_maximumEmissionAngle;
277 }
278
279
292 return m_minimumPhaseAngle;
293 }
294
295
308 return m_maximumPhaseAngle;
309 }
310
311}
Defines an angle and provides unit conversions.
Definition Angle.h:45
double degrees() const
Get the angle in units of Degrees.
Definition Angle.h:232
virtual bool SetImage(const double sample, const double line)
Sets the sample/line values of the image to get the lat/lon values.
Definition Camera.cpp:156
virtual int Band() const
Returns the current band.
Definition Camera.cpp:2730
void LocalPhotometricAngles(Angle &phase, Angle &incidence, Angle &emission, bool &success)
Calculates LOCAL photometric angles using the DEM (not ellipsoid).
Definition Camera.cpp:1653
virtual void SetBand(const int band)
Virtual method that sets the band number.
Definition Camera.cpp:2710
IO Handler for Isis Cubes.
Definition Cube.h:168
Camera * camera()
Return a camera associated with the cube.
Definition Cube.cpp:1457
PhotometricFunction(PvlObject &pvl, Cube &cube, bool useCamera)
Construct Photometric function from Pvl and Cube file.
virtual void setMaximumIncidenceAngle(double angle)
Mutator function to set maximum incidence angle.
virtual void setMaximumEmissionAngle(double angle)
Mutator function to set maximum emission angle.
virtual double compute(const double &line, const double &sample, int band=1, bool useDem=false)
Computes Photometric function from cube attributes.
virtual ~PhotometricFunction()
Destructor.
virtual void setMinimumPhaseAngle(double angle)
Mutator function to set minimum phase angle.
virtual double maximumEmissionAngle()
Accessor method to access maximum emission angle.
static QString algorithmName(const PvlObject &pvl)
Finds the name of the algorithm defined in a PVL object.
virtual double maximumPhaseAngle()
Accessor method to access maximum phase angle.
virtual double minimumIncidenceAngle()
Accessor method to access minimum incidence angle.
virtual double minimumEmissionAngle()
Accessor method to access minimum emission angle.
virtual void setMaximumPhaseAngle(double angle)
Mutator function to set maximum phase angle.
virtual void setMinimumEmissionAngle(double angle)
Mutator function to set minimum emission angle.
virtual void setMinimumIncidenceAngle(double angle)
Mutator function to set minimum incidence angle.
virtual double minimumPhaseAngle()
Accessor method to access minimum phase angle.
virtual double maximumIncidenceAngle()
Accessor method to access maximum incidence angle.
void setCamera(Camera *cam)
Set the camera used to compute photometric angles.
Contains Pvl Groups and Pvl Objects.
Definition PvlObject.h:61
@ Traverse
Search child objects.
Definition PvlObject.h:158
virtual double PhaseAngle() const
Returns the phase angle in degrees.
Definition Sensor.cpp:314
virtual double IncidenceAngle() const
Returns the incidence angle in degrees.
Definition Sensor.cpp:339
virtual double EmissionAngle() const
Returns the emission angle in degrees.
Definition Sensor.cpp:328
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
const double Null
Value for an Isis Null pixel.
Namespace for the standard library.