Loading [MathJax]/jax/output/NativeMML/config.js
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 
19 using namespace std;
20 
21 namespace Isis {
34  PhotometricFunction::PhotometricFunction( PvlObject &pvl, Cube &cube , bool useCamera ) {
35  if (useCamera) {
36  m_camera = cube.camera();
37  }
38  }
39 
40 
44  PhotometricFunction::~PhotometricFunction() {}
45 
46 
52  void PhotometricFunction::setCamera(Camera *cam) {
53  m_camera = cam;
54  }
55 
56 
64  QString PhotometricFunction::algorithmName( const PvlObject &pvl ) {
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
112  > maximumEmissionAngle() || g < minimumPhaseAngle() || g > maximumPhaseAngle()) {
113  return (Null);
114  }
115 
116  return photometry(i, e, g, band);
117  }
118 
119 
131  void PhotometricFunction::setMinimumIncidenceAngle(double angle) {
132  m_minimumIncidenceAngle = angle;
133  }
134 
135 
147  void PhotometricFunction::setMaximumIncidenceAngle(double angle) {
148  m_maximumIncidenceAngle = angle;
149  }
150 
151 
163  void PhotometricFunction::setMinimumEmissionAngle(double angle) {
164  m_minimumEmissionAngle = angle;
165  }
166 
167 
179  void PhotometricFunction::setMaximumEmissionAngle(double angle) {
180  m_maximumEmissionAngle = angle;
181  }
182 
183 
195  void PhotometricFunction::setMinimumPhaseAngle(double angle) {
196  m_minimumPhaseAngle = angle;
197  }
198 
199 
211  void PhotometricFunction::setMaximumPhaseAngle(double angle) {
212  m_maximumPhaseAngle = angle;
213  }
214 
215 
227  double PhotometricFunction::minimumIncidenceAngle() {
228  return m_minimumIncidenceAngle;
229  }
230 
231 
243  double PhotometricFunction::maximumIncidenceAngle() {
244  return m_maximumIncidenceAngle;
245  }
246 
247 
259  double PhotometricFunction::minimumEmissionAngle() {
260  return m_minimumEmissionAngle;
261  }
262 
263 
275  double PhotometricFunction::maximumEmissionAngle() {
276  return m_maximumEmissionAngle;
277  }
278 
279 
291  double PhotometricFunction::minimumPhaseAngle() {
292  return m_minimumPhaseAngle;
293  }
294 
295 
307  double PhotometricFunction::maximumPhaseAngle() {
308  return m_maximumPhaseAngle;
309  }
310 
311 }
Isis::PvlObject
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:61
Isis::Camera
Definition: Camera.h:236
Isis::PvlObject::findObject
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes.
Definition: PvlObject.h:274
Isis::Cube
IO Handler for Isis Cubes.
Definition: Cube.h:167
Isis::Angle
Defines an angle and provides unit conversions.
Definition: Angle.h:45
Isis::Null
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:95
Isis::Cube::camera
Camera * camera()
Return a camera associated with the cube.
Definition: Cube.cpp:1451
std
Namespace for the standard library.
Isis::Angle::degrees
double degrees() const
Get the angle in units of Degrees.
Definition: Angle.h:232
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the USGS Astrogeology Discussion Board
To report a bug, or suggest a feature go to: ISIS Github
File Modified: 07/13/2023 15:16:59