Isis 3 Programmer Reference
BundleSettings.h
Go to the documentation of this file.
1 #ifndef BundleSettings_h
2 #define BundleSettings_h
3 
25 // Qt library
26 #include <QList>
27 #include <QPair>
28 #include <QSharedPointer>
29 #include <QString>
30 
31 
32 
33 // ISIS library
34 #include "BundleTargetBody.h"
37 #include "SpecialPixel.h"
38 #include "SurfacePoint.h"
39 #include "XmlStackedHandler.h"
40 
41 class QDataStream;
42 class QUuid;
43 class QXmlStreamWriter;
44 
45 
46 using namespace Isis;
47 
48 namespace Isis {
49  class FileName;
50  class Project;
51  class PvlObject;
53 
139  public:
140 
141  //=====================================================================//
142  //================ constructors, destructor, operators ================//
143  //=====================================================================//
144  BundleSettings();
145  BundleSettings(const BundleSettings &other);
146  BundleSettings(Project *project,
147  XmlStackedHandlerReader *xmlReader);
148 #if 0
149  BundleSettings(FileName xmlFile,
150  Project *project,
151  XmlStackedHandlerReader *xmlReader,
152  QObject *parent = NULL);
154  QObject *parent = NULL);
155 #endif
156  ~BundleSettings();
157  BundleSettings &operator=(const BundleSettings &other);
158 
159  void setValidateNetwork(bool validate);
160  bool validateNetwork() const;
161 
162 
163  //=====================================================================//
164  //============================ Solve options ==========================//
165  //=====================================================================//
166 
167  // mutators
168  void setSolveOptions(bool solveObservationMode = false,
169  bool updateCubeLabel = false,
170  bool errorPropagation = false,
171  bool solveRadius = false,
178  double multiplier = 1.0);
180  void setCreateInverseMatrix(bool createMatrix);
181 
182  // accessors
185  bool createInverseMatrix() const;
186  bool solveObservationMode() const;
187  bool solveRadius() const;
188  bool updateCubeLabel() const;
189  bool errorPropagation() const;
190  bool outlierRejection() const;
191  double outlierRejectionMultiplier() const;
192 // These sigmas are either for planetocentric lat/lon/radius or body-fixed x/y/z
193  double globalPointCoord1AprioriSigma() const;
194  double globalPointCoord2AprioriSigma() const;
195  double globalPointCoord3AprioriSigma() const;
196 
197  int numberSolveSettings() const;
198  BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const;
201 
202 
203  //=====================================================================//
204  //======================- Convergence Criteria ========================//
205  //=====================================================================//
206 
215  };
216 
217 
218  static ConvergenceCriteria stringToConvergenceCriteria(QString criteria);
219  static QString convergenceCriteriaToString(ConvergenceCriteria criteria);
221  double threshold,
222  int maximumIterations);
224  double convergenceCriteriaThreshold() const;
226 
227  //=====================================================================//
228  //================ Parameter Uncertainties (Weighting) ================//
229  //=====================================================================//
230  // mutators
231 // void setGlobalLatitudeAprioriSigma(double sigma);
232 // void setGlobalLongitudeAprioriSigma(double sigma);
233 // void setGlobalRadiiAprioriSigma(double sigma);
234 
235 
236  //=====================================================================//
237  //=============== Maximum Likelihood Estimation Options ===============//
238  //=====================================================================//
239 
257  };
258 
259 
261  double cQuantile);
264 
265  //=====================================================================//
266  //========================= Self Calibration ==========================//
267  //=====================================================================//
268 
269 
270  //=====================================================================//
271  //============================== Target Body ==========================//
272  //=====================================================================//
273  // Note targeBody information is not currently serialized.
276 // bool solveTargetBodyPolePosition() const;
277 // static TargetRadiiSolveMethod stringToTargetRadiiOption(QString option);
278 // static QString targetRadiiOptionToString(TargetRadiiSolveMethod targetRadiiSolveMethod);
279  int numberTargetBodyParameters() const;
280  bool solveTargetBody() const;
281  bool solvePoleRA() const;
282  bool solvePoleRAVelocity() const;
283  bool solvePoleDec() const;
284  bool solvePoleDecVelocity() const;
285  bool solvePM() const;
286  bool solvePMVelocity() const;
287  bool solvePMAcceleration() const;
288  bool solveTriaxialRadii() const;
289  bool solveMeanRadius() const;
290 // void BundleSettings::setTargetBodySolveOptions(bool solveTargetBodyPolePosition,
291 
292 
293  //=====================================================================//
294  //================== Output Options ??? (from Jigsaw only)=============//
295  //=====================================================================//
297  void setSCPVLFilename(QString SCParamFilename);
298  QString outputFilePrefix() const;
299  void setCubeList(QString fileName);
300  QString cubeList() const;
301  QString SCPVLFilename() const;
302 
303  void save(QXmlStreamWriter &stream, const Project *project) const;
304 
305  private:
306  void init();
307 
308  //=====================================================================//
309  //============= Saving/Restoring a BundleSettings object ==============//
310  //=====================================================================//
311 
321  class XmlHandler : public XmlStackedHandler {
322  public:
323  XmlHandler(BundleSettings *bundleSettings,
324  Project *project);
325  XmlHandler(BundleSettings *bundleSettings);
326  ~XmlHandler();
327 
328  virtual bool startElement(const QString &namespaceURI,
329  const QString &localName,
330  const QString &qName,
331  const QXmlAttributes &atts);
332  virtual bool characters(const QString &ch);
333  virtual bool endElement(const QString &namespaceURI,
334  const QString &localName,
335  const QString &qName);
336  bool fatalError(const QXmlParseException &exception);
337 
338  private:
339  Q_DISABLE_COPY(XmlHandler);
340 
341  BundleSettings *m_xmlHandlerBundleSettings ;
342  Project *m_xmlHandlerProject; // TODO: does xml stuff need project???
343  QString m_xmlHandlerCharacters;
344  QList<BundleObservationSolveSettings *> m_xmlHandlerObservationSettings;
345  };
346 
347 
354  unsigned int indexFieldValue;
355  QString nameFieldValue;
357  };
358 
360  QString m_cubeList;
371  // Parameter Uncertainties (Weighting)
375 
376  // QList of observation solve settings
377  QList<BundleObservationSolveSettings> m_observationSolveSettings;
378 
379  // Convergence Criteria
389  // Maximum Likelihood Estimation Options
398 
399  // Self Calibration
400 
401  // Target Body
405  // Control Points
410  // Output Options
414  };
415  // typedefs
418 
419 
420 };
421 
423 
424 #endif
unsigned int indexFieldValue
The index of the TableRecord.???
bool m_createInverseMatrix
Indicates whether to create the inverse matrix file.
bool solveMeanRadius() const
This method is used to determine whether the bundle adjustment will solve for target body mean radius...
BundleTargetBodyQsp m_bundleTargetBody
A pointer to the target body settings and information.
Use a Huber maximum likelihood model.
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:110
The value of sigma0 will be used to determine that the bundle adjustment has converged.
The main project for ipce.
Definition: Project.h:289
SurfacePoint::CoordinateType m_cpCoordTypeBundle
Indicates the coordinate type used for control points in the bundle adjustment.
void setObservationSolveOptions(QList< BundleObservationSolveSettings > obsSolveSettingsList)
Add the list of solve options for each observation.
File name manipulation and expansion.
Definition: FileName.h:116
bool m_solveObservationMode
Indicates whether to solve for observation mode.
static QString convergenceCriteriaToString(ConvergenceCriteria criteria)
Converts the given BundleSettings::ConvergenceCriteria enumeration to a string.
double convergenceCriteriaThreshold() const
Retrieves the convergence threshold to be used to solve the bundle adjustment.
bool errorPropagation() const
This method is used to determine whether this bundle adjustment will perform error propagation...
QList< QPair< MaximumLikelihoodWFunctions::Model, double > > maximumLikelihoodEstimatorModels() const
Retrieves the list of maximum likelihood estimator (MLE) models with their corresponding C-Quantiles...
void setOutputFilePrefix(QString outputFilePrefix)
Set the output file prefix for the bundle adjustment.
ConvergenceCriteria m_convergenceCriteria
Enumeration used to indicate what criteria to use to determine bundle adjustment convergence.
void setConvergenceCriteria(ConvergenceCriteria criteria, double threshold, int maximumIterations)
Set the convergence criteria options for the bundle adjustment.
SurfacePoint::CoordinateType controlPointCoordTypeBundle() const
Indicates the control point coordinate type for the actual bundle adjust.
int numberTargetBodyParameters() const
This method is used to determine whether the bundle adjustment will solve for target body pole positi...
double m_outlierRejectionMultiplier
The multiplier value for outlier rejection.
bool validateNetwork() const
This method is used to determine whether to validate the network before the bundle adjustment...
QString outputFilePrefix() const
Retrieve the output file prefix.
bool solvePMAcceleration() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
Q_DECLARE_METATYPE(Isis::Cube *)
This allows Cube *&#39;s to be stored in a QVariant.
bool updateCubeLabel() const
This method is used to determine whether this bundle adjustment will update the cube labels...
virtual bool characters(const QString &ch)
Add a character from an XML element to the content handler.
SurfacePoint::CoordinateType m_cpCoordTypeReports
Indicates the coordinate type for outputting control points in reports.
bool solvePoleDecVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body pole declin...
QString m_outputFilePrefix
The prefix for all output files.
int numberSolveSettings() const
Retrieves the number of observation solve settings.
void setCubeList(QString fileName)
BundleSettings::setCubeList.
bool solvePoleDec() const
This method is used to determine whether the bundle adjustment will solve for target body pole declin...
void save(QXmlStreamWriter &stream, const Project *project) const
This method is used to write a BundleSettings object in an XML format.
Model
The supported maximum likelihood estimation models.
bool m_validateNetwork
Indicates whether the network should be validated.
ConvergenceCriteria convergenceCriteria() const
Retrieves the convergence criteria to be used to solve the bundle adjustment.
double m_globalPointCoord3AprioriSigma
The global a priori sigma for radius or Z.
Use a modified Huber maximum likelihood model.
bool fatalError(const QXmlParseException &exception)
Format an error message indicating a problem with BundleSettings.
double globalPointCoord2AprioriSigma() const
Retrieves the global a priori sigma for 2nd coordinate of points for this bundle. ...
void setCreateInverseMatrix(bool createMatrix)
Turn the creation of the inverse correlation matrix file on or off.
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
Handle end tags for the BundleSettings serialized XML.
Planetocentric latitudinal (lat/lon/rad) coordinates.
Definition: SurfacePoint.h:156
~BundleSettings()
Destroys the BundleSettings object.
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
Handle an XML start element.
bool outlierRejection() const
This method is used to determine whether outlier rejection will be performed on this bundle adjustmen...
Do not use a maximum likelihood model.
XmlHandler(BundleSettings *bundleSettings, Project *project)
Create an XML Handler (reader) that can populate the BundleSettings class data.
void setBundleTargetBody(BundleTargetBodyQsp bundleTargetBody)
Sets the target body for the bundle adjustment.
void init()
Set Default vales for a BundleSettings object.
void addMaximumLikelihoodEstimatorModel(MaximumLikelihoodWFunctions::Model model, double cQuantile)
Add a maximum likelihood estimator (MLE) model to the bundle adjustment.
bool m_updateCubeLabel
Indicates whether to update cubes.
BundleSettings()
Constructs a BundleSettings object.
QList< QPair< MaximumLikelihoodWFunctions::Model, double > > m_maximumLikelihood
Model and C-Quantile for each of the three maximum likelihood estimations.
All parameter corrections will be used to determine that the bundle adjustment has converged...
SurfacePoint::CoordinateType controlPointCoordTypeReports() const
Indicates the control point coordinate type for reports.
int convergenceCriteriaMaximumIterations() const
Retrieves the maximum number of iterations allowed to solve the bundle adjustment.
QSharedPointer< BundleSettings > BundleSettingsQsp
Definition for a BundleSettingsQsp, a shared pointer to a BundleSettings object.
Container class for BundleAdjustment settings.
XML Handler that parses XMLs in a stack-oriented way.
QList< BundleObservationSolveSettings > observationSolveSettings() const
Retrieves solve settings for the observation corresponding to the given index.
void setValidateNetwork(bool validate)
Sets the internal flag to indicate whether to validate the network before the bundle adjustment...
Use a Chen maximum likelihood model.
BundleSettings & operator=(const BundleSettings &other)
Assignment operator to allow proper copying of the &#39;other&#39; BundleSettings object to this one...
This class is needed to read/write BundleSettings from/to an XML formateed file.
Use a Welsch maximum likelihood model.
double m_convergenceCriteriaThreshold
Tolerance value corresponding to the selected convergence criteria.
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
Definition: SurfacePoint.h:155
This class is used to modify and manage solve settings for 1 to many BundleObservations.
bool validate(const NaifVertex &v)
Verifies that the given NaifVector or NaifVertex is 3 dimensional.
Definition: NaifDskApi.cpp:45
bool solveRadius() const
This method is used to determine whether this bundle adjustment will solve for radius.
bool solvePMVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
bool solveTriaxialRadii() const
This method is used to determine whether the bundle adjustment will solve for target body triaxial ra...
MaximumLikelihoodModel
This enum defines the options for maximum likelihood estimation.
static ConvergenceCriteria stringToConvergenceCriteria(QString criteria)
Converts the given string value to a BundleSettings::ConvergenceCriteria enumeration.
bool m_outlierRejection
Indicates whether to perform automatic outlier detection/rejection.
bool solveTargetBody() const
This method is used to determine whether the bundle adjustment will solve for target body...
~XmlHandler()
Destroys BundleSettings::XmlHandler object.
bool m_solveRadius
Indicates whether to solve for point radii.
int m_convergenceCriteriaMaximumIterations
Maximum number of iterations before quitting the bundle adjustment if it has not yet converged to the...
QString nameFieldValue
The model name of the TableRecord.???
double m_globalPointCoord1AprioriSigma
The global a priori sigma for latitude or X.
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
double outlierRejectionMultiplier() const
Retrieves the outlier rejection multiplier for the bundle adjustment.
double quantileFieldValue
The quantile of the TableRecord.???
bool solvePM() const
This method is used to determine whether the bundle adjustment will solve for target body prime merid...
This struct is needed to write the m_maximumLikelihood variable as an HDF5 table. ...
bool solvePoleRAVelocity() const
This method is used to determine whether the bundle adjustment will solve for target body pole right ...
double globalPointCoord3AprioriSigma() const
Retrieves the global a priori sigma 3rd coordinate of points for this bundle.
bool createInverseMatrix() const
Indicates if the settings will allow the inverse correlation matrix to be created.
bool m_solveTargetBody
Indicates whether to solve for target body.
double m_globalPointCoord2AprioriSigma
The global a priori sigma for longitude or Y.
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:74
void setOutlierRejection(bool outlierRejection, double multiplier=1.0)
Set the outlier rejection options for the bundle adjustment.
bool m_errorPropagation
Indicates whether to perform error propagation.
double globalPointCoord1AprioriSigma() const
Retrieves global a priori sigma for 1st coordinate of points for this bundle.
bool solveObservationMode() const
This method is used to determine whether this bundle adjustment will solve for observation mode...
Manage a stack of content handlers for reading XML files.
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.
BundleTargetBodyQsp bundleTargetBody() const
Retrieves a pointer to target body information for the bundle adjustment.
QString cubeList() const
BundleSettings::cubeList.
bool solvePoleRA() const
This method is used to determine whether the bundle adjustment will solve for target body pole right ...
ConvergenceCriteria
This enum defines the options for the bundle adjustment&#39;s convergence.