Commit 52c3f433 authored by Jeannie Backer's avatar Jeannie Backer
Browse files

Changed BundleSettings a priori sigma defaults from -1 to Isis::Null for...

Changed BundleSettings a priori sigma defaults from -1 to Isis::Null for consistency with the rest of the Bundle defaults for these values. Commented out xml read/write tests in BundleSolutionInfo until we determine the output file type for serialization.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@6343 41f8697f-d340-4b68-9986-7bafba869bb8
parent b04c2bfa
Loading
Loading
Loading
Loading
+75 −34
Original line number Diff line number Diff line
@@ -261,14 +261,28 @@ namespace Isis {
    m_solveRadius = solveRadius;
    m_updateCubeLabel = updateCubeLabel;
    m_errorPropagation = errorPropagation;

    if (globalLatitudeAprioriSigma > 0.0) { // otherwise, we leave as default Isis::Null
      m_globalLatitudeAprioriSigma = globalLatitudeAprioriSigma;
    }
    else {
      m_globalLatitudeAprioriSigma = Isis::Null;
    }

    if (globalLongitudeAprioriSigma > 0.0) {
      m_globalLongitudeAprioriSigma = globalLongitudeAprioriSigma;
    if (m_solveRadius) {
    }
    else {
      m_globalLongitudeAprioriSigma = Isis::Null;
    }

    if (m_solveRadius && globalRadiusAprioriSigma > 0.0) {
      m_globalRadiusAprioriSigma = globalRadiusAprioriSigma;
    }
    else {
      m_globalRadiusAprioriSigma = Isis::Null;
    }

  }


@@ -548,21 +562,26 @@ namespace Isis {
    if (m_outlierRejection) {
      pvl += PvlKeyword("OutlierMultiplier", toString(outlierRejectionMultiplier()));
    }
    if (globalLatitudeAprioriSigma() >= 0) {
    if ( !IsNullPixel(globalLatitudeAprioriSigma()) ) {
      pvl += PvlKeyword("GlobalLatitudeAprioriSigma", toString(globalLatitudeAprioriSigma()));
    }
    else {
      pvl += PvlKeyword("GlobalLatitudeAprioriSigma", "None");
    }
    if (globalLongitudeAprioriSigma() >= 0) {
    if (!IsNullPixel(globalLongitudeAprioriSigma())) {
      pvl += PvlKeyword("GlobalLongitudeAprioriSigma", toString(globalLongitudeAprioriSigma()));
    }
    else {
      pvl += PvlKeyword("GlobalLongitudeAprioriSigma", "None");
    }
    if (m_solveRadius) {
      if ( !IsNullPixel(globalLongitudeAprioriSigma()) ) {
      pvl += PvlKeyword("GlobalRadiiAprioriSigma", toString(globalRadiusAprioriSigma()));
      }
      else {
        pvl += PvlKeyword("GlobalRadiiAprioriSigma", "None");
      }
    }

    // Convergence Criteria
    pvl += PvlKeyword("ConvergenceCriteria", convergenceCriteriaToString(convergenceCriteria()));
@@ -638,14 +657,24 @@ namespace Isis {
    stream.writeEndElement();

    stream.writeStartElement("aprioriSigmas");
    if (IsNullPixel(globalLatitudeAprioriSigma())) {
      stream.writeAttribute("latitude", "N/A");
    }
    else {
      stream.writeAttribute("latitude", toString(globalLatitudeAprioriSigma()));
    stream.writeAttribute("longitude", toString(globalLongitudeAprioriSigma()));
    if (solveRadius()) {
      stream.writeAttribute("radius", toString(globalRadiusAprioriSigma()));
    }
    if (IsNullPixel(globalLongitudeAprioriSigma())) {
      stream.writeAttribute("longitude", "N/A");
    }
    else {
      stream.writeAttribute("longitude", toString(globalLongitudeAprioriSigma()));
    }
    if (IsNullPixel(globalRadiusAprioriSigma())) {
      stream.writeAttribute("radius", "N/A");
    }
    else {
      stream.writeAttribute("radius", toString(globalRadiusAprioriSigma()));
    }
    stream.writeEndElement();
    
    stream.writeStartElement("outlierRejectionOptions");
@@ -823,72 +852,84 @@ namespace Isis {
   * handle the read when the startElement with the name localName has been found.
   * 
   * @param qName The qualified name of the tag.
   * @param atts The list of attributes for the tag.
   * @param attributes The list of attributes for the tag.
   * @return If we should continue reading the XML (usually true).
   */
  bool BundleSettings::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
                                       const QString &qName, const QXmlAttributes &atts) {
                                                const QString &qName, const QXmlAttributes &attributes) {
    m_xmlHandlerCharacters = "";

    if (XmlStackedHandler::startElement(namespaceURI, localName, qName, atts)) {
    if (XmlStackedHandler::startElement(namespaceURI, localName, qName, attributes)) {

      if (localName == "solveOptions") {

        QString solveMethodStr = atts.value("solveMethod");
        QString solveMethodStr = attributes.value("solveMethod");
        if (!solveMethodStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_solveMethod = stringToSolveMethod(solveMethodStr);
        }

        QString solveObservationModeStr = atts.value("solveObservationMode");
        QString solveObservationModeStr = attributes.value("solveObservationMode");
        if (!solveObservationModeStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_solveObservationMode = toBool(solveObservationModeStr);
        }

        QString solveRadiusStr = atts.value("solveRadius");
        QString solveRadiusStr = attributes.value("solveRadius");
        if (!solveRadiusStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_solveRadius = toBool(solveRadiusStr);
        }

        QString updateCubeLabelStr = atts.value("updateCubeLabel");
        QString updateCubeLabelStr = attributes.value("updateCubeLabel");
        if (!updateCubeLabelStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_updateCubeLabel = toBool(updateCubeLabelStr);
        }

        QString errorPropagationStr = atts.value("errorPropagation");
        QString errorPropagationStr = attributes.value("errorPropagation");
        if (!errorPropagationStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_errorPropagation = toBool(errorPropagationStr);
        }
      }
      else if (localName == "aprioriSigmas") {

        QString globalLatitudeAprioriSigmaStr = atts.value("latitude");
        QString globalLatitudeAprioriSigmaStr = attributes.value("latitude");
        if (!globalLatitudeAprioriSigmaStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma = toDouble(globalLatitudeAprioriSigmaStr);
          if (globalLatitudeAprioriSigmaStr == "N/A") {
            m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma = Isis::Null;
          }
          else {
            m_xmlHandlerBundleSettings->m_globalLatitudeAprioriSigma
                = toDouble(globalLatitudeAprioriSigmaStr);
          }
        }

        QString globalLongitudeAprioriSigmaStr = atts.value("longitude");
        QString globalLongitudeAprioriSigmaStr = attributes.value("longitude");
        if (!globalLongitudeAprioriSigmaStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_globalLongitudeAprioriSigma =
              toDouble(globalLongitudeAprioriSigmaStr);
          if (globalLongitudeAprioriSigmaStr == "N/A") {
            m_xmlHandlerBundleSettings->m_globalLongitudeAprioriSigma = Isis::Null;
          }
          else {
            m_xmlHandlerBundleSettings->m_globalLongitudeAprioriSigma
                = toDouble(globalLongitudeAprioriSigmaStr);
          }
        }

        QString globalRadiusAprioriSigmaStr = atts.value("radius");
        QString globalRadiusAprioriSigmaStr = attributes.value("radius");
        if (!globalRadiusAprioriSigmaStr.isEmpty()) {
          if (globalRadiusAprioriSigmaStr != "N/A") {
            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma = toDouble(globalRadiusAprioriSigmaStr);
          if (globalRadiusAprioriSigmaStr == "N/A") {
            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma = Isis::Null;
          }
          else {
            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma = Isis::Null;
            m_xmlHandlerBundleSettings->m_globalRadiusAprioriSigma
                = toDouble(globalRadiusAprioriSigmaStr);
          }
        }
      }
      else if (localName == "outlierRejectionOptions") {
        QString outlierRejectionStr = atts.value("rejection");
        QString outlierRejectionStr = attributes.value("rejection");
        if (!outlierRejectionStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_outlierRejection = toBool(outlierRejectionStr);
        }

        QString outlierRejectionMultiplierStr = atts.value("multiplier");
        QString outlierRejectionMultiplierStr = attributes.value("multiplier");
        if (!outlierRejectionMultiplierStr.isEmpty()) {
          if (outlierRejectionMultiplierStr != "N/A") {
            m_xmlHandlerBundleSettings->m_outlierRejectionMultiplier = toDouble(outlierRejectionMultiplierStr);
@@ -900,24 +941,24 @@ namespace Isis {
      }
      else if (localName == "convergenceCriteriaOptions") {

        QString convergenceCriteriaStr = atts.value("convergenceCriteria");
        QString convergenceCriteriaStr = attributes.value("convergenceCriteria");
        if (!convergenceCriteriaStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_convergenceCriteria = stringToConvergenceCriteria(convergenceCriteriaStr);
        }

        QString convergenceCriteriaThresholdStr = atts.value("threshold");
        QString convergenceCriteriaThresholdStr = attributes.value("threshold");
        if (!convergenceCriteriaThresholdStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_convergenceCriteriaThreshold = toDouble(convergenceCriteriaThresholdStr);
        }

        QString convergenceCriteriaMaximumIterationsStr = atts.value("maximumIterations");
        QString convergenceCriteriaMaximumIterationsStr = attributes.value("maximumIterations");
        if (!convergenceCriteriaMaximumIterationsStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_convergenceCriteriaMaximumIterations = toInt(convergenceCriteriaMaximumIterationsStr);
        }
      }
      else if (localName == "model") {
        QString type = atts.value("type");
        QString quantile = atts.value("quantile");
        QString type = attributes.value("type");
        QString quantile = attributes.value("quantile");
        if (!type.isEmpty() && !quantile.isEmpty()) {
          m_xmlHandlerBundleSettings->m_maximumLikelihood.append(
              qMakePair(MaximumLikelihoodWFunctions::stringToModel(type),
@@ -925,22 +966,22 @@ namespace Isis {
        }
      }
      else if (localName == "outputFileOptions") {
        QString outputFilePrefixStr = atts.value("fileNamePrefix");
        QString outputFilePrefixStr = attributes.value("fileNamePrefix");
        if (!outputFilePrefixStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_outputFilePrefix = outputFilePrefixStr;
        }

        QString createBundleOutputFileStr = atts.value("createBundleOutputFile");
        QString createBundleOutputFileStr = attributes.value("createBundleOutputFile");
        if (!createBundleOutputFileStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_createBundleOutputFile = toBool(createBundleOutputFileStr);
        }

        QString createCSVFilesStr = atts.value("createCSVFiles");
        QString createCSVFilesStr = attributes.value("createCSVFiles");
        if (!createCSVFilesStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_createCSVFiles = toBool(createCSVFilesStr);
        }

        QString createResidualsFileStr = atts.value("createResidualsFile");
        QString createResidualsFileStr = attributes.value("createResidualsFile");
        if (!createResidualsFileStr.isEmpty()) {
          m_xmlHandlerBundleSettings->m_createResidualsFile = toBool(createResidualsFileStr);
        }
+13 −8
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include "BundleObservationSolveSettings.h"
#include "MaximumLikelihoodWFunctions.h" // why not forward declare???
#include "PvlObject.h"
#include "SpecialPixel.h"
#include "XmlStackedHandler.h"

class QDataStream;
@@ -73,8 +74,7 @@ namespace Isis {
   *   @history 2014-11-17 Jeannie Backer - Added xml read/write capabilities. XmlHandler
   *                           constructor/destructor is not shown as covered by unitTest. Current
   *                           test code coverage is (scope 98.79%, line 98.698%, function 96.0%).
   *   @history 2015-02-20 Jeannie Backer - Changed apriori sigma defaults from -1.0 to Isis::Null.
   *                           Updated xml methods. Added hdf5 includes.
   *   @history 2015-09-03 Jeannie Backer - Changed a priori sigma defaults from -1.0 to Isis::Null.
   *  
   *   @todo Determine whether xml stuff needs a Project pointer
   *   @todo Determine which XmlStackedHandlerReader constructor is preferred
@@ -120,9 +120,9 @@ namespace Isis {
                           bool updateCubeLabel = false, 
                           bool errorPropagation = false,
                           bool solveRadius = false, 
                           double globalLatitudeAprioriSigma = -1.0, 
                           double globalLongitudeAprioriSigma = -1.0, 
                           double globalRadiusAprioriSigma = -1.0);
                           double globalLatitudeAprioriSigma = Isis::Null, 
                           double globalLongitudeAprioriSigma = Isis::Null, 
                           double globalRadiusAprioriSigma = Isis::Null);
      void setOutlierRejection(bool outlierRejection, double multiplier = 1.0);
      void setObservationSolveOptions(QList<BundleObservationSolveSettings> observationSolveSettings);

@@ -270,8 +270,13 @@ namespace Isis {
      int m_convergenceCriteriaMaximumIterations;

      // Maximum Likelihood Estimation Options
      // model and maxModelCQuantile for each of the three maximum likelihood estimations.
      // Note that Welsch and Chen can not be used for the first model.
      /**
       * Model and C-Quantile for each of the three maximum likelihood 
       * estimations. The C-Quantile is the quantile of the residual used 
       * to compute the tweaking constant. Note that this is an ordered 
       * list and that the Welsch and Chen models can not be used for the 
       * first model.
       */
      QList< QPair< MaximumLikelihoodWFunctions::Model, double > > m_maximumLikelihood; // TODO: pointer???

      // Self Calibration ??? (from cnetsuite only)
@@ -279,7 +284,7 @@ namespace Isis {
      // Target Body ??? (from cnetsuite only)

      // Output Options ??? (from Jigsaw only)
      QString m_outputFilePrefix; //!< output file prefix  // TODO: pointer???
      QString m_outputFilePrefix; //!< output file prefix
      bool m_createBundleOutputFile; //!< to print standard bundle output file (bundleout.txt)
      bool m_createCSVFiles; //!< to output points and image station data in csv format
      bool m_createResidualsFile; //!< to output residuals in csv format
+46 −10
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@ Object = DefaultSolutionInfoObject
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
@@ -43,7 +43,6 @@ Object = DefaultSolutionInfoObject
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
@@ -78,6 +77,14 @@ Object = DefaultSolutionInfoObject
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0

    Object = CorrelationMatrixData
      CovarianceMatrixFileName  = Null
      CorrelationMatrixFileName = Null

      Group = ImagesAndParameters
      End_Group
    End_Object
  End_Object
End_Object

@@ -109,8 +116,8 @@ Object = CopySolutionInfoObject
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
@@ -125,7 +132,6 @@ Object = CopySolutionInfoObject
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
@@ -160,6 +166,14 @@ Object = CopySolutionInfoObject
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0

    Object = CorrelationMatrixData
      CovarianceMatrixFileName  = Null
      CorrelationMatrixFileName = Null

      Group = ImagesAndParameters
      End_Group
    End_Object
  End_Object
End_Object

@@ -191,8 +205,8 @@ Object = SelfAssignedSolutionInfoObject
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
@@ -207,7 +221,6 @@ Object = SelfAssignedSolutionInfoObject
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
@@ -242,6 +255,14 @@ Object = SelfAssignedSolutionInfoObject
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0

    Object = CorrelationMatrixData
      CovarianceMatrixFileName  = Null
      CorrelationMatrixFileName = Null

      Group = ImagesAndParameters
      End_Group
    End_Object
  End_Object
End_Object

@@ -273,8 +294,8 @@ Object = AssignedSolutionInfoObject
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
@@ -289,7 +310,6 @@ Object = AssignedSolutionInfoObject
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
@@ -324,6 +344,14 @@ Object = AssignedSolutionInfoObject
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0

    Object = CorrelationMatrixData
      CovarianceMatrixFileName  = Null
      CorrelationMatrixFileName = Null

      Group = ImagesAndParameters
      End_Group
    End_Object
  End_Object
End_Object

@@ -353,10 +381,10 @@ Object = MutatorTest

    Object = Null
      InstrumentPointingSolveOption       = AnglesOnly
      NumberAngleCoefficientsSolved       = 1
      CKDegree                            = 2
      CKSolveDegree                       = 2
      SolveTwist                          = Yes
      CKSolveDegree                       = 0
      SolvePointingPolynomialOverExisting = No
      AngleAprioriSigmas                  = N/A
      InstrumentPointingInterpolationType = 3
@@ -371,7 +399,6 @@ Object = MutatorTest
  End_Object

  Object = StatisticsResults
    CorrelationMatrix                = Yes
    NumberFixedPoints                = 0
    NumberIgnoredPoints              = 0
    NumberHeldImages                 = 0
@@ -406,6 +433,14 @@ Object = MutatorTest
    RmsSigmaLon                      = 0.0
    RmsSigmaRad                      = 0.0
    NumberMaximumLikelihoodModels    = 0

    Object = CorrelationMatrixData
      CovarianceMatrixFileName  = Null
      CorrelationMatrixFileName = Null

      Group = ImagesAndParameters
      End_Group
    End_Object
  End_Object
End_Object

@@ -415,3 +450,4 @@ runTime = "xxx"
Testing error throws... 

Testing XML write/read... 
+22 −0
Original line number Diff line number Diff line
@@ -22,6 +22,14 @@
using namespace std;
using namespace Isis;


/**
 * This class is needed to test the xml read/write methods.
 * @author 2015-??-?? Jeannie Backer
 *
 * @internal
 *   @history 2015-??-?? Jeannie Backer - Original version.
 */
namespace Isis {
  class BundleSolutionInfoXmlHandlerTester : public BundleSolutionInfo {
    public:
@@ -54,6 +62,13 @@ namespace Isis {
}


/**
 * Unit Test for BundleSolutionInfo class.
 *
 * @internal
 *   @history 2015-09-03 Jeannie Backer - Commented out xml code test until we determine whether
 *                           we will keep this code.
 */
int main(int argc, char *argv[]) {
  Preference::Preferences(true);

@@ -62,10 +77,12 @@ int main(int argc, char *argv[]) {
  try {
    qDebug() << "Unit test for BundleSolutionInfo...";
    qDebug() << "Printing PVL group with results from the settings/cnet/statistics constructor...";

    // create default settings and statistics objects to pass into results object
    BundleSettings settings;
    FileName cnetFile("cnetfile.net");
    BundleResults statistics;

    QObject *parent = NULL;
    BundleSolutionInfo results(settings, cnetFile, statistics, parent);

@@ -73,6 +90,7 @@ int main(int argc, char *argv[]) {
    cout << pvl << endl << endl;

    qDebug() << "Testing copy constructor...";

    BundleSolutionInfo copySolutionInfo(results);
    pvl = copySolutionInfo.pvlObject("CopySolutionInfoObject");
    cout << pvl << endl << endl;
@@ -83,6 +101,7 @@ int main(int argc, char *argv[]) {
    cout << pvl << endl << endl;

    qDebug() << "Testing assignment operator to create a new results object...";

    BundleSolutionInfo assignmentOpSolutionInfo = results;
    assignmentOpSolutionInfo = results;
    pvl = assignmentOpSolutionInfo.pvlObject("AssignedSolutionInfoObject");
@@ -113,6 +132,7 @@ int main(int argc, char *argv[]) {

    qDebug() << "Testing XML write/read...";
    // write xml
#if 0
    FileName xmlFile("./BundleSolutionInfo.xml");
    QString xmlPath = xmlFile.expanded();
    QFile qXmlFile(xmlPath);
@@ -133,6 +153,8 @@ int main(int argc, char *argv[]) {
// ???     BundleSolutionInfoXmlHandlerTester brToFill(project, &reader, xmlFile);
// ???     pvl = bsToFill.pvlObject("BundleSolutionInfoFromXml");
// ???     cout << pvl << endl << endl;
#endif
    qDebug();

  }
  catch (IException &e) {