Commit 4b627187 authored by Jeannie Backer's avatar Jeannie Backer
Browse files

Changed name of BundleResults to BundleSolutionInfo.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@6060 41f8697f-d340-4b68-9986-7bafba869bb8
parent 30b72c90
Loading
Loading
Loading
Loading
+2754 −0

File added.

Preview size limit exceeded, changes collapsed.

+146 −0
Original line number Diff line number Diff line
#ifndef BundleSolutionInfo_h
#define BundleSolutionInfo_h

/**
 * @file
 * $Revision: 1.20 $
 * $Date: 2009/10/15 01:35:17 $
 *
 *   Unless noted otherwise, the portions of Isis written by the USGS are
 *   public domain. See individual third-party library and package descriptions
 *   for intellectual property information, user agreements, and related
 *   information.
 *
 *   Although Isis has been used by the USGS, no warranty, expressed or
 *   implied, is made by the USGS as to the accuracy and functioning of such
 *   software and related material nor shall the fact of distribution
 *   constitute any such warranty, and no responsibility is assumed by the
 *   USGS in connection therewith.
 *
 *   For additional information, launch
 *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html
 *   in a browser or see the Privacy & Disclaimers page on the Isis website,
 *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
 *   http://www.usgs.gov/privacy.html.
 */

#include <QList>
#include <QObject>
#include <QString>

#include "XmlStackedHandler.h"

class QDataStream;
class QUuid;
class QXmlStreamWriter;

namespace Isis {
  class BundleSettings;
  class BundleResults;
  class FileName;
  class ImageList;
  class Project;  // TODO: does xml stuff need project???
  class PvlObject;
  class XmlStackedHandlerReader;

  /**
   * @brief Container class for BundleAdjustment results. 
   * This class includes the settings used to run the bundle adjustment, the resulting statistics 
   * values, and the name of the control network used.
   *  
   * @ingroup ControlNetworks
   *
   * @author 2014-07-08 Jeannie Backer
   *
   * @internal
   *   @history 2014-07-08 Jeannie Backer - Original version.
   *   @history 2014-07-23 Jeannie Backer - Added implementation for the QDataStream << and >>
   *                           operators and the read/write methods.
   *   @history 2014-12-04 Jeannie Backer - Renamed from BundleResults to BundleSolutionInfo.
   *  
   */
  class BundleSolutionInfo : public QObject {
    Q_OBJECT
    public:
      BundleSolutionInfo(BundleSettings inputSettings, 
                    FileName controlNetworkFileName, 
                    BundleResults outputStatistics, 
                    QObject *parent = 0);
      BundleSolutionInfo(Project *project, 
                    XmlStackedHandlerReader *xmlReader, 
                    QObject *parent = 0);  // TODO: does xml stuff need project???
      BundleSolutionInfo(const BundleSolutionInfo &src);
      ~BundleSolutionInfo();
      BundleSolutionInfo &operator=(const BundleSolutionInfo &src);

      void setOutputStatistics(BundleResults statisticsResults);
      void setRunTime(QString runTime);

      QString id() const;
      QString controlNetworkFileName() const;
      BundleSettings *bundleSettings();     // TODO: change return value to const reference or copy... unsafe to return pointers to member data???
      BundleResults *bundleResults(); // TODO: change return value to const reference or copy... unsafe to return pointers to member data???
      // ??? const BundleSettings *bundleSettings() const;
      // ??? const BundleResults *bundleResults() const;
      QString runTime() const;

      PvlObject pvlObject(QString resultsName = "BundleSolutionInfo",
                          QString settingsName = "InputSettings",
                          QString statisticsName = "StatisticsResults");

      void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;  // TODO: does xml stuff need project and newRoot???
      void save(QXmlStreamWriter &stream, const Project *project) const;  // TODO: does xml stuff need project???

      QDataStream &write(QDataStream &stream) const;
      QDataStream &read(QDataStream &stream);

      void savehdf5(FileName outputfilename) const;

    private:
      /**
       *
       * @author 2014-07-21 Ken Edmundson
       *
       * @internal
       */
      class XmlHandler : public XmlStackedHandler {
        public:
          XmlHandler(BundleSolutionInfo *bundleSolutionInfo, Project *project);  // TODO: does xml stuff need project???
          ~XmlHandler();

          virtual bool startElement(const QString &namespaceURI, const QString &localName,
                                    const QString &qName, const QXmlAttributes &atts);
          virtual bool characters(const QString &ch);
          virtual bool endElement(const QString &namespaceURI, const QString &localName,
                                    const QString &qName);

        private:
          Q_DISABLE_COPY(XmlHandler);

          BundleSolutionInfo *m_xmlHandlerBundleSolutionInfo;
          Project *m_xmlHandlerProject;  // TODO: does xml stuff need project???
          QString m_xmlHandlerCharacters;
          QList<ImageList *> *m_xmlHandlerImages;
          BundleSettings *m_xmlHandlerBundleSettings;
          BundleResults *m_xmlHandlerBundleResults;
      };

    private:
      BundleSolutionInfo();

      /**
       * A unique ID for this BundleSolutionInfo object (useful for others to reference this object
       *   when saving to disk).
       */
      QUuid              *m_id;
      QString             m_runTime;
      FileName           *m_controlNetworkFileName;
      BundleSettings     *m_settings;
      BundleResults   *m_statisticsResults;
      QList<ImageList *> *m_images;
  };
  // operators to read/write BundleSolutionInfo to/from binary data
  QDataStream &operator<<(QDataStream &stream, const BundleSolutionInfo &bundleSolutionInfo);
  QDataStream &operator>>(QDataStream &stream, BundleSolutionInfo &bundleSolutionInfo);
};
#endif // BundleSolutionInfo_h
+417 −0
Original line number Diff line number Diff line
Unit test for BundleSolutionInfo... 
Printing PVL group with results from the settings/cnet/statistics constructor... 
Object = DefaultSolutionInfoObject
  RunTime              = Null
  OutputControlNetwork = cnetfile.net

  Object = InputSettings
    NetworkValidated                     = Yes
    SolveMethod                          = Sparse
    SolveObservationMode                 = No
    SolveRadius                          = No
    UpdateCubeLabel                      = No
    ErrorPropagation                     = No
    OutlierRejection                     = No
    GlobalLatitudeAprioriSigma           = None
    GlobalLongitudeAprioriSigma          = None
    ConvergenceCriteria                  = Sigma0
    ConvergenceCriteriaThreshold         = 1.0e-10
    ConvergenceCriteriaMaximumIterations = 50
    CreateBundleOutputFile               = Yes
    CreateCSVFiles                       = Yes
    CreateResidualsFile                  = Yes
    FilePrefix                           = Null
    NumberObservationSolveSettings       = 1

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
      InstrumentPositionSolveOption       = None
      NumberPositionCoefficientsSolved    = N/A
      SPKDegree                           = N/A
      SPKSolveDegree                      = N/A
      SolvePositionOverHermiteSpline      = N/A
      PositionAprioriSigmas               = N/A
      InstrumentPositionInterpolationType = N/A
    End_Object
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
    RMSResidualX                     = 0.0
    RMSResidualY                     = 0.0
    RMSResidualXY                    = 0.0
    RejectionLimit                   = 0.0
    NumberRejectedObservations       = 0
    NumberObservations               = 0
    NumberImageParameters            = 0
    NumberConstrainedPointParameters = 0
    NumberConstrainedImageParameters = 0
    NumberUnknownParameters          = 0
    DegreesOfFreedom                 = -1
    Sigma0                           = 0.0
    ElapsedTime                      = 0.0
    ElapsedTimeErrorProp             = 0.0
    Converged                        = No
    MinSigmaLatitude                 = 1000000000000.0
    MinSigmaLatitudePointId          = Null
    MaxSigmaLatitude                 = 0.0
    MaxSigmaLatitudePointId          = Null
    MinSigmaLongitude                = 1000000000000.0
    MinSigmaLongitudePointId         = Null
    MaxSigmaLongitude                = 0.0
    MaxSigmaLongitudePointId         = Null
    MinSigmaRadius                   = 1000000000000.0
    MinSigmaRadiusPointId            = Null
    MaxSigmaRadius                   = 0.0
    MaxSigmaRadiusPointId            = Null
    RmsSigmaLat                      = 0.0
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0
  End_Object
End_Object

Testing copy constructor... 
Object = CopySolutionInfoObject
  RunTime              = Null
  OutputControlNetwork = cnetfile.net

  Object = InputSettings
    NetworkValidated                     = Yes
    SolveMethod                          = Sparse
    SolveObservationMode                 = No
    SolveRadius                          = No
    UpdateCubeLabel                      = No
    ErrorPropagation                     = No
    OutlierRejection                     = No
    GlobalLatitudeAprioriSigma           = None
    GlobalLongitudeAprioriSigma          = None
    ConvergenceCriteria                  = Sigma0
    ConvergenceCriteriaThreshold         = 1.0e-10
    ConvergenceCriteriaMaximumIterations = 50
    CreateBundleOutputFile               = Yes
    CreateCSVFiles                       = Yes
    CreateResidualsFile                  = Yes
    FilePrefix                           = Null
    NumberObservationSolveSettings       = 1

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
      InstrumentPositionSolveOption       = None
      NumberPositionCoefficientsSolved    = N/A
      SPKDegree                           = N/A
      SPKSolveDegree                      = N/A
      SolvePositionOverHermiteSpline      = N/A
      PositionAprioriSigmas               = N/A
      InstrumentPositionInterpolationType = N/A
    End_Object
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
    RMSResidualX                     = 0.0
    RMSResidualY                     = 0.0
    RMSResidualXY                    = 0.0
    RejectionLimit                   = 0.0
    NumberRejectedObservations       = 0
    NumberObservations               = 0
    NumberImageParameters            = 0
    NumberConstrainedPointParameters = 0
    NumberConstrainedImageParameters = 0
    NumberUnknownParameters          = 0
    DegreesOfFreedom                 = -1
    Sigma0                           = 0.0
    ElapsedTime                      = 0.0
    ElapsedTimeErrorProp             = 0.0
    Converged                        = No
    MinSigmaLatitude                 = 1000000000000.0
    MinSigmaLatitudePointId          = Null
    MaxSigmaLatitude                 = 0.0
    MaxSigmaLatitudePointId          = Null
    MinSigmaLongitude                = 1000000000000.0
    MinSigmaLongitudePointId         = Null
    MaxSigmaLongitude                = 0.0
    MaxSigmaLongitudePointId         = Null
    MinSigmaRadius                   = 1000000000000.0
    MinSigmaRadiusPointId            = Null
    MaxSigmaRadius                   = 0.0
    MaxSigmaRadiusPointId            = Null
    RmsSigmaLat                      = 0.0
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0
  End_Object
End_Object

Testing assignment operator to set this equal to itself... 
Object = SelfAssignedSolutionInfoObject
  RunTime              = Null
  OutputControlNetwork = cnetfile.net

  Object = InputSettings
    NetworkValidated                     = Yes
    SolveMethod                          = Sparse
    SolveObservationMode                 = No
    SolveRadius                          = No
    UpdateCubeLabel                      = No
    ErrorPropagation                     = No
    OutlierRejection                     = No
    GlobalLatitudeAprioriSigma           = None
    GlobalLongitudeAprioriSigma          = None
    ConvergenceCriteria                  = Sigma0
    ConvergenceCriteriaThreshold         = 1.0e-10
    ConvergenceCriteriaMaximumIterations = 50
    CreateBundleOutputFile               = Yes
    CreateCSVFiles                       = Yes
    CreateResidualsFile                  = Yes
    FilePrefix                           = Null
    NumberObservationSolveSettings       = 1

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
      InstrumentPositionSolveOption       = None
      NumberPositionCoefficientsSolved    = N/A
      SPKDegree                           = N/A
      SPKSolveDegree                      = N/A
      SolvePositionOverHermiteSpline      = N/A
      PositionAprioriSigmas               = N/A
      InstrumentPositionInterpolationType = N/A
    End_Object
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
    RMSResidualX                     = 0.0
    RMSResidualY                     = 0.0
    RMSResidualXY                    = 0.0
    RejectionLimit                   = 0.0
    NumberRejectedObservations       = 0
    NumberObservations               = 0
    NumberImageParameters            = 0
    NumberConstrainedPointParameters = 0
    NumberConstrainedImageParameters = 0
    NumberUnknownParameters          = 0
    DegreesOfFreedom                 = -1
    Sigma0                           = 0.0
    ElapsedTime                      = 0.0
    ElapsedTimeErrorProp             = 0.0
    Converged                        = No
    MinSigmaLatitude                 = 1000000000000.0
    MinSigmaLatitudePointId          = Null
    MaxSigmaLatitude                 = 0.0
    MaxSigmaLatitudePointId          = Null
    MinSigmaLongitude                = 1000000000000.0
    MinSigmaLongitudePointId         = Null
    MaxSigmaLongitude                = 0.0
    MaxSigmaLongitudePointId         = Null
    MinSigmaRadius                   = 1000000000000.0
    MinSigmaRadiusPointId            = Null
    MaxSigmaRadius                   = 0.0
    MaxSigmaRadiusPointId            = Null
    RmsSigmaLat                      = 0.0
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0
  End_Object
End_Object

Testing assignment operator to create a new results object... 
Object = AssignedSolutionInfoObject
  RunTime              = Null
  OutputControlNetwork = cnetfile.net

  Object = InputSettings
    NetworkValidated                     = Yes
    SolveMethod                          = Sparse
    SolveObservationMode                 = No
    SolveRadius                          = No
    UpdateCubeLabel                      = No
    ErrorPropagation                     = No
    OutlierRejection                     = No
    GlobalLatitudeAprioriSigma           = None
    GlobalLongitudeAprioriSigma          = None
    ConvergenceCriteria                  = Sigma0
    ConvergenceCriteriaThreshold         = 1.0e-10
    ConvergenceCriteriaMaximumIterations = 50
    CreateBundleOutputFile               = Yes
    CreateCSVFiles                       = Yes
    CreateResidualsFile                  = Yes
    FilePrefix                           = Null
    NumberObservationSolveSettings       = 1

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
      InstrumentPositionSolveOption       = None
      NumberPositionCoefficientsSolved    = N/A
      SPKDegree                           = N/A
      SPKSolveDegree                      = N/A
      SolvePositionOverHermiteSpline      = N/A
      PositionAprioriSigmas               = N/A
      InstrumentPositionInterpolationType = N/A
    End_Object
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
    RMSResidualX                     = 0.0
    RMSResidualY                     = 0.0
    RMSResidualXY                    = 0.0
    RejectionLimit                   = 0.0
    NumberRejectedObservations       = 0
    NumberObservations               = 0
    NumberImageParameters            = 0
    NumberConstrainedPointParameters = 0
    NumberConstrainedImageParameters = 0
    NumberUnknownParameters          = 0
    DegreesOfFreedom                 = -1
    Sigma0                           = 0.0
    ElapsedTime                      = 0.0
    ElapsedTimeErrorProp             = 0.0
    Converged                        = No
    MinSigmaLatitude                 = 1000000000000.0
    MinSigmaLatitudePointId          = Null
    MaxSigmaLatitude                 = 0.0
    MaxSigmaLatitudePointId          = Null
    MinSigmaLongitude                = 1000000000000.0
    MinSigmaLongitudePointId         = Null
    MaxSigmaLongitude                = 0.0
    MaxSigmaLongitudePointId         = Null
    MinSigmaRadius                   = 1000000000000.0
    MinSigmaRadiusPointId            = Null
    MaxSigmaRadius                   = 0.0
    MaxSigmaRadiusPointId            = Null
    RmsSigmaLat                      = 0.0
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0
  End_Object
End_Object

Testing mutator methods... 
Object = MutatorTest
  RunTime              = xxx
  OutputControlNetwork = cnetfile.net

  Object = InputSettings
    NetworkValidated                     = Yes
    SolveMethod                          = Sparse
    SolveObservationMode                 = No
    SolveRadius                          = No
    UpdateCubeLabel                      = No
    ErrorPropagation                     = No
    OutlierRejection                     = No
    GlobalLatitudeAprioriSigma           = None
    GlobalLongitudeAprioriSigma          = None
    ConvergenceCriteria                  = Sigma0
    ConvergenceCriteriaThreshold         = 1.0e-10
    ConvergenceCriteriaMaximumIterations = 50
    CreateBundleOutputFile               = Yes
    CreateCSVFiles                       = Yes
    CreateResidualsFile                  = Yes
    FilePrefix                           = Null
    NumberObservationSolveSettings       = 1

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
      InstrumentPositionSolveOption       = None
      NumberPositionCoefficientsSolved    = N/A
      SPKDegree                           = N/A
      SPKSolveDegree                      = N/A
      SolvePositionOverHermiteSpline      = N/A
      PositionAprioriSigmas               = N/A
      InstrumentPositionInterpolationType = N/A
    End_Object
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
    RMSResidualX                     = 0.0
    RMSResidualY                     = 0.0
    RMSResidualXY                    = 0.0
    RejectionLimit                   = 0.5
    NumberRejectedObservations       = 0
    NumberObservations               = 0
    NumberImageParameters            = 0
    NumberConstrainedPointParameters = 0
    NumberConstrainedImageParameters = 0
    NumberUnknownParameters          = 0
    DegreesOfFreedom                 = -1
    Sigma0                           = 0.0
    ElapsedTime                      = 0.0
    ElapsedTimeErrorProp             = 0.0
    Converged                        = No
    MinSigmaLatitude                 = 1000000000000.0
    MinSigmaLatitudePointId          = Null
    MaxSigmaLatitude                 = 0.0
    MaxSigmaLatitudePointId          = Null
    MinSigmaLongitude                = 1000000000000.0
    MinSigmaLongitudePointId         = Null
    MaxSigmaLongitude                = 0.0
    MaxSigmaLongitudePointId         = Null
    MinSigmaRadius                   = 1000000000000.0
    MinSigmaRadiusPointId            = Null
    MaxSigmaRadius                   = 0.0
    MaxSigmaRadiusPointId            = Null
    RmsSigmaLat                      = 0.0
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0
  End_Object
End_Object

Testing accessor methods... 
runTime =  "xxx" 

Testing error throws... 

Testing XML write/read... 
+7 −0
Original line number Diff line number Diff line
ifeq ($(ISISROOT), $(BLANK))
.SILENT:
error:
	echo "Please set ISISROOT";
else
	include $(ISISROOT)/make/isismake.objs
endif
 No newline at end of file
+141 −0

File added.

Preview size limit exceeded, changes collapsed.