Isis 3 Programmer Reference
BundleSettings.h
1#ifndef BundleSettings_h
2#define BundleSettings_h
3
10/* SPDX-License-Identifier: CC0-1.0 */
11
12// Qt library
13#include <QList>
14#include <QPair>
15#include <QSharedPointer>
16#include <QString>
17
18
19
20// ISIS library
21#include "BundleTargetBody.h"
22#include "BundleObservationSolveSettings.h"
23#include "MaximumLikelihoodWFunctions.h"
24#include "SpecialPixel.h"
25#include "SurfacePoint.h"
26#include "XmlStackedHandler.h"
27
28class QDataStream;
29class QUuid;
30class QXmlStreamWriter;
31
32
33using namespace Isis;
34
35namespace Isis {
36 class FileName;
37 class Project;
38 class PvlObject;
40
126 public:
127
128 //=====================================================================//
129 //================ constructors, destructor, operators ================//
130 //=====================================================================//
132 BundleSettings(const BundleSettings &other);
133 BundleSettings(Project *project,
134 XmlStackedHandlerReader *xmlReader);
135#if 0
136 BundleSettings(FileName xmlFile,
137 Project *project,
138 XmlStackedHandlerReader *xmlReader,
139 QObject *parent = NULL);
141 QObject *parent = NULL);
142#endif
145
146 void setValidateNetwork(bool validate);
147 bool validateNetwork() const;
148
149
150 //=====================================================================//
151 //============================ Solve options ==========================//
152 //=====================================================================//
153
154 // mutators
155 void setSolveOptions(bool solveObservationMode = false,
156 bool updateCubeLabel = false,
157 bool errorPropagation = false,
158 bool solveRadius = false,
165 double multiplier = 1.0);
166 void setObservationSolveOptions(QList<BundleObservationSolveSettings> obsSolveSettingsList);
167 void setCreateInverseMatrix(bool createMatrix);
168
169 // accessors
172 bool createInverseMatrix() const;
173 bool solveObservationMode() const;
174 bool solveRadius() const;
175 bool updateCubeLabel() const;
176 bool errorPropagation() const;
177 bool outlierRejection() const;
178 double outlierRejectionMultiplier() const;
179// These sigmas are either for planetocentric lat/lon/radius or body-fixed x/y/z
180 double globalPointCoord1AprioriSigma() const;
181 double globalPointCoord2AprioriSigma() const;
182 double globalPointCoord3AprioriSigma() const;
183
184 int numberSolveSettings() const;
187 QList<BundleObservationSolveSettings> observationSolveSettings() const;
188
189
190 //=====================================================================//
191 //======================- Convergence Criteria ========================//
192 //=====================================================================//
193
203
204
205 static ConvergenceCriteria stringToConvergenceCriteria(QString criteria);
206 static QString convergenceCriteriaToString(ConvergenceCriteria criteria);
207 void setConvergenceCriteria(ConvergenceCriteria criteria,
208 double threshold,
209 int maximumIterations);
210 ConvergenceCriteria convergenceCriteria() const;
211 double convergenceCriteriaThreshold() const;
213
214 //=====================================================================//
215 //================ Parameter Uncertainties (Weighting) ================//
216 //=====================================================================//
217 // mutators
218// void setGlobalLatitudeAprioriSigma(double sigma);
219// void setGlobalLongitudeAprioriSigma(double sigma);
220// void setGlobalRadiiAprioriSigma(double sigma);
221
222
223 //=====================================================================//
224 //=============== Maximum Likelihood Estimation Options ===============//
225 //=====================================================================//
226
245
246
248 double cQuantile);
249 QList< QPair< MaximumLikelihoodWFunctions::Model, double > >
251
252 //=====================================================================//
253 //========================= Self Calibration ==========================//
254 //=====================================================================//
255
256
257 //=====================================================================//
258 //============================== Target Body ==========================//
259 //=====================================================================//
260 // Note targeBody information is not currently serialized.
263// bool solveTargetBodyPolePosition() const;
264// static TargetRadiiSolveMethod stringToTargetRadiiOption(QString option);
265// static QString targetRadiiOptionToString(TargetRadiiSolveMethod targetRadiiSolveMethod);
266 int numberTargetBodyParameters() const;
267 bool solveTargetBody() const;
268 bool solvePoleRA() const;
269 bool solvePoleRAVelocity() const;
270 bool solvePoleDec() const;
271 bool solvePoleDecVelocity() const;
272 bool solvePM() const;
273 bool solvePMVelocity() const;
274 bool solvePMAcceleration() const;
275 bool solveTriaxialRadii() const;
276 bool solveMeanRadius() const;
277// void BundleSettings::setTargetBodySolveOptions(bool solveTargetBodyPolePosition,
278
279
280 //=====================================================================//
281 //================== Output Options ??? (from Jigsaw only)=============//
282 //=====================================================================//
284 void setSCPVLFilename(QString SCParamFilename);
285 QString outputFilePrefix() const;
286 void setCubeList(QString fileName);
287 QString cubeList() const;
288 QString SCPVLFilename() const;
289
290 void save(QXmlStreamWriter &stream, const Project *project) const;
291
292 private:
293 void init();
294
295 //=====================================================================//
296 //============= Saving/Restoring a BundleSettings object ==============//
297 //=====================================================================//
298
309 public:
310 XmlHandler(BundleSettings *bundleSettings,
311 Project *project);
312 XmlHandler(BundleSettings *bundleSettings);
313 ~XmlHandler();
314
315 virtual bool startElement(const QString &namespaceURI,
316 const QString &localName,
317 const QString &qName,
318 const QXmlAttributes &atts);
319 virtual bool characters(const QString &ch);
320 virtual bool endElement(const QString &namespaceURI,
321 const QString &localName,
322 const QString &qName);
323 bool fatalError(const QXmlParseException &exception);
324
325 private:
326 Q_DISABLE_COPY(XmlHandler);
327
328 BundleSettings *m_xmlHandlerBundleSettings ;
329 Project *m_xmlHandlerProject; // TODO: does xml stuff need project???
330 QString m_xmlHandlerCharacters;
331 QList<BundleObservationSolveSettings *> m_xmlHandlerObservationSettings;
332 };
333
334
345
347 QString m_cubeList;
358 // Parameter Uncertainties (Weighting)
362
363 // QList of observation solve settings
364 QList<BundleObservationSolveSettings> m_observationSolveSettings;
365
366 // Convergence Criteria
376 // Maximum Likelihood Estimation Options
384 QList< QPair< MaximumLikelihoodWFunctions::Model, double > > m_maximumLikelihood;
385
386 // Self Calibration
387
388 // Target Body
392 // Control Points
397 // Output Options
401 };
402 // typedefs
404 typedef QSharedPointer<BundleSettings> BundleSettingsQsp;
405
406
407};
408
409Q_DECLARE_METATYPE(Isis::BundleSettingsQsp);
410
411#endif
This class is used to modify and manage solve settings for 1 to many BundleObservations.
This class is needed to read/write BundleSettings from/to an XML formateed file.
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
Handle an XML start element.
XmlHandler(BundleSettings *bundleSettings, Project *project)
Create an XML Handler (reader) that can populate the BundleSettings class data.
~XmlHandler()
Destroys BundleSettings::XmlHandler object.
virtual bool characters(const QString &ch)
Add a character from an XML element to the content handler.
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
Handle end tags for the BundleSettings serialized XML.
bool fatalError(const QXmlParseException &exception)
Format an error message indicating a problem with BundleSettings.
Container class for BundleAdjustment settings.
bool m_createInverseMatrix
Indicates whether to create the inverse matrix file.
double globalPointCoord2AprioriSigma() const
Retrieves the global a priori sigma for 2nd coordinate of points for this bundle.
bool validateNetwork() const
This method is used to determine whether to validate the network before the bundle adjustment.
int convergenceCriteriaMaximumIterations() const
Retrieves the maximum number of iterations allowed to solve the bundle adjustment.
MaximumLikelihoodModel
This enum defines the options for maximum likelihood estimation.
@ Chen
Use a Chen maximum likelihood model.
@ Welsch
Use a Welsch maximum likelihood model.
@ NoMaximumLikelihoodEstimator
Do not use a maximum likelihood model.
@ Huber
Use a Huber maximum likelihood model.
@ ModifiedHuber
Use a modified Huber maximum likelihood model.
bool m_solveRadius
Indicates whether to solve for point radii.
BundleSettings & operator=(const BundleSettings &other)
Assignment operator to allow proper copying of the 'other' BundleSettings object to this one.
double globalPointCoord3AprioriSigma() const
Retrieves the global a priori sigma 3rd coordinate of points for this bundle.
void addMaximumLikelihoodEstimatorModel(MaximumLikelihoodWFunctions::Model model, double cQuantile)
Add a maximum likelihood estimator (MLE) model to the bundle adjustment.
BundleSettings()
Constructs a BundleSettings object.
QString m_outputFilePrefix
The prefix for all output files.
bool m_solveObservationMode
Indicates whether to solve for observation mode.
SurfacePoint::CoordinateType controlPointCoordTypeBundle() const
Indicates the control point coordinate type for the actual bundle adjust.
bool errorPropagation() const
This method is used to determine whether this bundle adjustment will perform error propagation.
void setConvergenceCriteria(ConvergenceCriteria criteria, double threshold, int maximumIterations)
Set the convergence criteria options for the bundle adjustment.
bool solvePMVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
double m_globalPointCoord2AprioriSigma
The global a priori sigma for longitude or Y.
void save(QXmlStreamWriter &stream, const Project *project) const
This method is used to write a BundleSettings object in an XML format.
ConvergenceCriteria
This enum defines the options for the bundle adjustment's convergence.
@ Sigma0
The value of sigma0 will be used to determine that the bundle adjustment has converged.
@ ParameterCorrections
All parameter corrections will be used to determine that the bundle adjustment has converged.
BundleTargetBodyQsp bundleTargetBody() const
Retrieves a pointer to target body information for the bundle adjustment.
void setCreateInverseMatrix(bool createMatrix)
Turn the creation of the inverse correlation matrix file on or off.
bool solveMeanRadius() const
This method is used to determine whether the bundle adjustment will solve for target body mean radius...
bool solveRadius() const
This method is used to determine whether this bundle adjustment will solve for radius.
void init()
Set Default vales for a BundleSettings object.
bool solveTriaxialRadii() const
This method is used to determine whether the bundle adjustment will solve for target body triaxial ra...
BundleTargetBodyQsp m_bundleTargetBody
A pointer to the target body settings and information.
ConvergenceCriteria m_convergenceCriteria
Enumeration used to indicate what criteria to use to determine bundle adjustment convergence.
double m_globalPointCoord3AprioriSigma
The global a priori sigma for radius or Z.
bool solvePMAcceleration() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
QList< BundleObservationSolveSettings > observationSolveSettings() const
Retrieves solve settings for the observation corresponding to the given index.
void setBundleTargetBody(BundleTargetBodyQsp bundleTargetBody)
Sets the target body for the bundle adjustment.
int numberTargetBodyParameters() const
This method is used to determine whether the bundle adjustment will solve for target body pole positi...
QString outputFilePrefix() const
Retrieve the output file prefix.
double globalPointCoord1AprioriSigma() const
Retrieves global a priori sigma for 1st coordinate of points for this bundle.
bool updateCubeLabel() const
This method is used to determine whether this bundle adjustment will update the cube labels.
double m_convergenceCriteriaThreshold
Tolerance value corresponding to the selected convergence criteria.
double m_outlierRejectionMultiplier
The multiplier value for outlier rejection.
bool outlierRejection() const
This method is used to determine whether outlier rejection will be performed on this bundle adjustmen...
void setOutputFilePrefix(QString outputFilePrefix)
Set the output file prefix for the bundle adjustment.
bool solvePoleRA() const
This method is used to determine whether the bundle adjustment will solve for target body pole right ...
bool solvePoleDecVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body pole declin...
static QString convergenceCriteriaToString(ConvergenceCriteria criteria)
Converts the given BundleSettings::ConvergenceCriteria enumeration to a string.
void setValidateNetwork(bool validate)
Sets the internal flag to indicate whether to validate the network before the bundle adjustment.
~BundleSettings()
Destroys the BundleSettings object.
static ConvergenceCriteria stringToConvergenceCriteria(QString criteria)
Converts the given string value to a BundleSettings::ConvergenceCriteria enumeration.
SurfacePoint::CoordinateType m_cpCoordTypeReports
Indicates the coordinate type for outputting control points in reports.
bool m_outlierRejection
Indicates whether to perform automatic outlier detection/rejection.
bool m_errorPropagation
Indicates whether to perform error propagation.
bool createInverseMatrix() const
Indicates if the settings will allow the inverse correlation matrix to be created.
bool solvePoleRAVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body pole right ...
QString cubeList() const
BundleSettings::cubeList.
QList< QPair< MaximumLikelihoodWFunctions::Model, double > > m_maximumLikelihood
Model and C-Quantile for each of the three maximum likelihood estimations.
void setOutlierRejection(bool outlierRejection, double multiplier=1.0)
Set the outlier rejection options for the bundle adjustment.
ConvergenceCriteria convergenceCriteria() const
Retrieves the convergence criteria to be used to solve the bundle adjustment.
QList< QPair< MaximumLikelihoodWFunctions::Model, double > > maximumLikelihoodEstimatorModels() const
Retrieves the list of maximum likelihood estimator (MLE) models with their corresponding C-Quantiles.
bool solvePoleDec() const
This method is used to determine whether the bundle adjustment will solve for target body pole declin...
bool m_validateNetwork
Indicates whether the network should be validated.
double m_globalPointCoord1AprioriSigma
The global a priori sigma for latitude or X.
int numberSolveSettings() const
Retrieves the number of observation solve settings.
void setSolveOptions(bool solveObservationMode=false, bool updateCubeLabel=false, bool errorPropagation=false, bool solveRadius=false, SurfacePoint::CoordinateType coordTypeBundle=SurfacePoint::Latitudinal, SurfacePoint::CoordinateType coordTypeReports=SurfacePoint::Latitudinal, double globalPointCoord1AprioriSigma=Isis::Null, double globalPointCoord2AprioriSigma=Isis::Null, double globalPointCoord3AprioriSigma=Isis::Null)
Set the solve options for the bundle adjustment.
SurfacePoint::CoordinateType controlPointCoordTypeReports() const
Indicates the control point coordinate type for reports.
bool solvePM() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
void setCubeList(QString fileName)
BundleSettings::setCubeList.
bool m_updateCubeLabel
Indicates whether to update cubes.
double convergenceCriteriaThreshold() const
Retrieves the convergence threshold to be used to solve the bundle adjustment.
void setObservationSolveOptions(QList< BundleObservationSolveSettings > obsSolveSettingsList)
Add the list of solve options for each observation.
bool solveObservationMode() const
This method is used to determine whether this bundle adjustment will solve for observation mode.
int m_convergenceCriteriaMaximumIterations
Maximum number of iterations before quitting the bundle adjustment if it has not yet converged to the...
bool solveTargetBody() const
This method is used to determine whether the bundle adjustment will solve for target body.
double outlierRejectionMultiplier() const
Retrieves the outlier rejection multiplier for the bundle adjustment.
bool m_solveTargetBody
Indicates whether to solve for target body.
SurfacePoint::CoordinateType m_cpCoordTypeBundle
Indicates the coordinate type used for control points in the bundle adjustment.
File name manipulation and expansion.
Definition FileName.h:100
Model
The supported maximum likelihood estimation models.
The main project for ipce.
Definition Project.h:289
Contains Pvl Groups and Pvl Objects.
Definition PvlObject.h:61
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
@ Latitudinal
Planetocentric latitudinal (lat/lon/rad) coordinates.
XML Handler that parses XMLs in a stack-oriented way.
Manage a stack of content handlers for reading XML files.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
QSharedPointer< BundleSettings > BundleSettingsQsp
Definition for a BundleSettingsQsp, a shared pointer to a BundleSettings object.
const double Null
Value for an Isis Null pixel.
bool validate(const NaifVertex &v)
Verifies that the given NaifVector or NaifVertex is 3 dimensional.
This struct is needed to write the m_maximumLikelihood variable as an HDF5 table.
unsigned int indexFieldValue
The index of the TableRecord.???
QString nameFieldValue
The model name of the TableRecord.???
double quantileFieldValue
The quantile of the TableRecord.???