Isis 3 Programmer Reference
CubeCalculator.h
1
6/* SPDX-License-Identifier: CC0-1.0 */
7
8// Calculator.h
9#ifndef CUBE_CALCULATOR_H_
10#define CUBE_CALCULATOR_H_
11
12#include "Calculator.h"
13#include "Cube.h"
14
15class QString;
16template<class T> class QVector;
17
18namespace Isis {
19 class DataValue;
20 class CameraBuffers;
21
58 public:
61
66 void Clear();
67
68 void prepareCalculations(QString equation,
69 QVector<Cube *> &inCubes,
70 Cube *outCube);
71
72 QVector<double> runCalculations(QVector<Buffer *> &cubeData,
73 int line, int band);
74
75 private:
87
88 void addMethodCall(void (Calculator::*method)(void));
89
90 int lastPushToCubeStats(QVector<Cube *> &inCubes);
91
92 int lastPushToCubeCameras(QVector<Cube *> &inCubes);
93
99 QVector<Calculations> *m_calculations;
100
102 QVector<void (Calculator:: *)(void)> *m_methods;
103
105 QVector<DataValue> *m_dataDefinitions;
106
108 QVector<Statistics *> *m_cubeStats;
109
114 QVector<Camera *> *m_cubeCameras;
115
120 QVector<CameraBuffers *> *m_cameraBuffers;
121
123 };
124
125
132 class DataValue {
133 public:
155
156 DataValue();
157 DataValue(DataValueType type);
158 DataValue(DataValueType type, int cubeIndex);
159 DataValue(DataValueType type, double value);
160
161 DataValueType type();
162 int cubeIndex();
163 double constant();
164
165 private:
168
170 };
171
172
188 public:
189 CameraBuffers(Camera *camera);
191
192 void enablePhaBuffer();
193 void enableInaBuffer();
194 void enableEmaBuffer();
195 void enableLatBuffer();
196 void enableLonBuffer();
197 void enableResBuffer();
198 void enableRadiusBuffer();
199 void enablePhalBuffer();
200 void enableInalBuffer();
201 void enableEmalBuffer();
202 void enablePhacBuffer();
203 void enableInacBuffer();
204 void enableEmacBuffer();
205
206 // Accessors
207 QVector<double> *phaBuffer(int currentLine, int ns, int currentBand);
208 QVector<double> *inaBuffer(int currentLine, int ns, int currentBand);
209 QVector<double> *emaBuffer(int currentLine, int ns, int currentBand);
210 QVector<double> *latBuffer(int currentLine, int ns, int currentBand);
211 QVector<double> *lonBuffer(int currentLine, int ns, int currentBand);
212 QVector<double> *resBuffer(int currentLine, int ns, int currentBand);
213 QVector<double> *radiusBuffer(int currentLine, int ns, int currentBand);
214 QVector<double> *phalBuffer(int currentLine, int ns, int currentBand);
215 QVector<double> *inalBuffer(int currentLine, int ns, int currentBand);
216 QVector<double> *emalBuffer(int currentLine, int ns, int currentBand);
217 QVector<double> *phacBuffer(int currentLine, int ns, int currentBand);
218 QVector<double> *inacBuffer(int currentLine, int ns, int currentBand);
219 QVector<double> *emacBuffer(int currentLine, int ns, int currentBand);
220
221
222 private:
223 void loadBuffers(int currentLine, int ns, int currentBand);
224
227
228 QVector<double> *m_phaBuffer;
229 QVector<double> *m_inaBuffer;
230 QVector<double> *m_emaBuffer;
231 QVector<double> *m_phalBuffer;
232 QVector<double> *m_inalBuffer;
233 QVector<double> *m_emalBuffer;
234 QVector<double> *m_phacBuffer;
235 QVector<double> *m_inacBuffer;
236 QVector<double> *m_emacBuffer;
237 QVector<double> *m_resBuffer;
238 QVector<double> *m_latBuffer;
239 QVector<double> *m_lonBuffer;
240 QVector<double> *m_radiusBuffer;
241 };
242}
243#endif
Calculator for arrays.
Definition Calculator.h:55
This class is used to manage buffers for calculating camera related information, such as angles,...
QVector< double > * m_phacBuffer
Center phase angle buffer.
void enableLonBuffer()
Enables the longitude buffer for use.
void enableLatBuffer()
Enables the latitude buffer for use.
void enablePhalBuffer()
Enables the local phase angle buffer for use.
void enableResBuffer()
Enables the resolution buffer for use.
void enablePhaBuffer()
Enables the phase angle buffer for use.
void enableRadiusBuffer()
Enables the radius buffer for use.
CameraBuffers(Camera *camera)
Constructs a CameraBuffers object.
QVector< double > * m_inaBuffer
Incidence angle buffer.
QVector< double > * m_inalBuffer
Local incidence angle buffer.
QVector< double > * m_emacBuffer
Center emission angle buffer.
QVector< double > * m_emalBuffer
Local emission angle buffer.
void enableInalBuffer()
Enables the local incidence angle buffer for use.
int m_lastLine
The number of the last line loaded into the enabled camera buffers.
QVector< double > * m_inacBuffer
Center incidence angle buffer.
QVector< double > * m_phaBuffer
Phase angle buffer.
void enableInaBuffer()
Enables the incidence angle buffer for use.
void enableEmalBuffer()
Enables the local emission angle buffer for use.
Camera * m_camera
Camera to obtain camera-related information from.
QVector< double > * m_latBuffer
Latitude buffer.
QVector< double > * m_emaBuffer
Emission angle buffer.
QVector< double > * m_phalBuffer
Local phase angle buffer.
QVector< double > * m_radiusBuffer
Radius buffer.
~CameraBuffers()
Destroys the CameraBuffers.
void enableEmacBuffer()
Enables the center emission angle buffer for use.
void enableInacBuffer()
Enables the center incidence angle buffer for use.
void enableEmaBuffer()
Enables the emission angle buffer for use.
QVector< double > * m_resBuffer
Resolution buffer.
QVector< double > * m_lonBuffer
Longitude buffer.
void enablePhacBuffer()
Enables the center phase angle buffer for use.
Calculator for arrays.
int lastPushToCubeCameras(QVector< Cube * > &inCubes)
Creates internal camera for the last pushed cube data.
int m_outputSamples
Number of samples in the output cube.
void addMethodCall(void(Calculator::*method)(void))
This is a conveinience method for PrepareCalculations(...).
~CubeCalculator()
Destroys the CubeCalculator object.
int lastPushToCubeStats(QVector< Cube * > &inCubes)
Creates statistics internally for the last cube data pushed to the data definitions.
CubeCalculator()
Constructs a CubeCalculator.
QVector< Camera * > * m_cubeCameras
Stores the cameras for the input cubes.
Calculations
This is used to define the overall action to perform in RunCalculations(..).
@ CallNextMethod
The calculation requires calling one of the methods.
@ PushNextData
The calculation requires input data.
QVector< void(Calculator::*)(void)> * m_methods
This stores the addresses to the methods RunCalculations(...) will call.
void Clear()
This method completely resets the calculator.
QVector< double > runCalculations(QVector< Buffer * > &cubeData, int line, int band)
This method will execute the calculations built up when PrepareCalculations was called.
QVector< Calculations > * m_calculations
This is what RunCalculations(...) will loop over.
QVector< CameraBuffers * > * m_cameraBuffers
Stores the camera buffers that are enabled for camera related calculations.
void prepareCalculations(QString equation, QVector< Cube * > &inCubes, Cube *outCube)
This method builds a list of actions to perform based on the postfix expression.
QVector< DataValue > * m_dataDefinitions
This defines what kind of data RunCalculations(...) will push onto the calculator.
QVector< Statistics * > * m_cubeStats
Stores the cube statistics for the input cubes.
IO Handler for Isis Cubes.
Definition Cube.h:168
This class is used to define what kind of data is being pushed onto the cube calculator.
int cubeIndex()
Accesses the cube index of the DataValue.
double constant()
Accesses the constant value of the DataValue.
DataValue()
Constructs a default DataValue.
int m_cubeIndex
The index of the associated cube.
double m_constantValue
Stored constant value.
DataValueType
This is used to tell what kind of data to push onto the RPN calculator.
@ InaData
Incidence camera data.
@ PhacData
Center phase camera data.
@ EmalData
Local emission camera data.
@ PhaData
Phase camera data.
@ InalData
Local incidence camera data.
@ EmaData
Emission camera data.
@ LatData
Latitude camera data.
@ Sample
Current sample number.
@ Band
Current band number.
@ ResData
Pixel resolution camera data.
@ Constant
A single constant value.
@ InacData
Center incidence camera data.
@ PhalData
Local phase camera data.
@ Line
Current line number.
@ RadiusData
DEM radius.
@ LonData
Longitude camera data.
@ CubeData
A brick of cube data.
@ EmacData
Center emission camera data.
DataValueType m_type
Type of data stored.
DataValueType type()
Accesses the type of the DataValue.
This is free and unencumbered software released into the public domain.
Definition Calculator.h:18
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16