Isis Developer Reference
CubeCalculator.h
Go to the documentation of this file.
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:
81 enum Calculations {
83 CallNextMethod,
85 PushNextData
86 };
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
122 int m_outputSamples;
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:
166 int m_cubeIndex;
167 double m_constantValue;
168
169 DataValueType m_type;
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
225 Camera *m_camera;
226 int m_lastLine;
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,...
Definition CubeCalculator.h:187
void enableLonBuffer()
Enables the longitude buffer for use.
Definition CubeCalculator.cpp:1012
void enableLatBuffer()
Enables the latitude buffer for use.
Definition CubeCalculator.cpp:1006
QVector< double > * inalBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1113
void enablePhalBuffer()
Enables the local phase angle buffer for use.
Definition CubeCalculator.cpp:1030
void enableResBuffer()
Enables the resolution buffer for use.
Definition CubeCalculator.cpp:1018
QVector< double > * emalBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1119
QVector< double > * emaBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1077
void enablePhaBuffer()
Enables the phase angle buffer for use.
Definition CubeCalculator.cpp:988
void enableRadiusBuffer()
Enables the radius buffer for use.
Definition CubeCalculator.cpp:1024
CameraBuffers(Camera *camera)
Constructs a CameraBuffers object.
Definition CubeCalculator.cpp:933
QVector< double > * phacBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1125
void enableInalBuffer()
Enables the local incidence angle buffer for use.
Definition CubeCalculator.cpp:1036
QVector< double > * emacBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1137
QVector< double > * latBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1083
void enableInaBuffer()
Enables the incidence angle buffer for use.
Definition CubeCalculator.cpp:994
void enableEmalBuffer()
Enables the local emission angle buffer for use.
Definition CubeCalculator.cpp:1042
QVector< double > * inacBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1131
QVector< double > * inaBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1071
~CameraBuffers()
Destroys the CameraBuffers.
Definition CubeCalculator.cpp:956
void enableEmacBuffer()
Enables the center emission angle buffer for use.
Definition CubeCalculator.cpp:1060
void enableInacBuffer()
Enables the center incidence angle buffer for use.
Definition CubeCalculator.cpp:1054
void enableEmaBuffer()
Enables the emission angle buffer for use.
Definition CubeCalculator.cpp:1000
QVector< double > * radiusBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1101
QVector< double > * resBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1095
QVector< double > * phaBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1065
QVector< double > * lonBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1089
QVector< double > * phalBuffer(int currentLine, int ns, int currentBand)
Definition CubeCalculator.cpp:1107
void enablePhacBuffer()
Enables the center phase angle buffer for use.
Definition CubeCalculator.cpp:1048
Definition Camera.h:236
Calculator for arrays.
Definition CubeCalculator.h:57
~CubeCalculator()
Destroys the CubeCalculator object.
Definition CubeCalculator.cpp:42
CubeCalculator()
Constructs a CubeCalculator.
Definition CubeCalculator.cpp:22
void Clear()
This method completely resets the calculator.
Definition CubeCalculator.cpp:64
QVector< double > runCalculations(QVector< Buffer * > &cubeData, int line, int band)
This method will execute the calculations built up when PrepareCalculations was called.
Definition CubeCalculator.cpp:114
void prepareCalculations(QString equation, QVector< Cube * > &inCubes, Cube *outCube)
This method builds a list of actions to perform based on the postfix expression.
Definition CubeCalculator.cpp:249
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.
Definition CubeCalculator.h:132
int cubeIndex()
Accesses the cube index of the DataValue.
Definition CubeCalculator.cpp:913
double constant()
Accesses the constant value of the DataValue.
Definition CubeCalculator.cpp:923
DataValue()
Constructs a default DataValue.
Definition CubeCalculator.cpp:840
DataValueType
This is used to tell what kind of data to push onto the RPN calculator.
Definition CubeCalculator.h:135
@ InaData
Incidence camera data.
Definition CubeCalculator.h:141
@ PhacData
Center phase camera data.
Definition CubeCalculator.h:153
@ EmalData
Local emission camera data.
Definition CubeCalculator.h:149
@ PhaData
Phase camera data.
Definition CubeCalculator.h:143
@ InalData
Local incidence camera data.
Definition CubeCalculator.h:148
@ EmaData
Emission camera data.
Definition CubeCalculator.h:142
@ LatData
Latitude camera data.
Definition CubeCalculator.h:144
@ Sample
Current sample number.
Definition CubeCalculator.h:137
@ Band
Current band number.
Definition CubeCalculator.h:139
@ ResData
Pixel resolution camera data.
Definition CubeCalculator.h:146
@ Constant
A single constant value.
Definition CubeCalculator.h:136
@ InacData
Center incidence camera data.
Definition CubeCalculator.h:151
@ PhalData
Local phase camera data.
Definition CubeCalculator.h:150
@ Line
Current line number.
Definition CubeCalculator.h:138
@ RadiusData
DEM radius.
Definition CubeCalculator.h:147
@ LonData
Longitude camera data.
Definition CubeCalculator.h:145
@ CubeData
A brick of cube data.
Definition CubeCalculator.h:140
@ EmacData
Center emission camera data.
Definition CubeCalculator.h:152
DataValueType type()
Accesses the type of the DataValue.
Definition CubeCalculator.cpp:903
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