Commit d0052e5f authored by Jeannie Backer's avatar Jeannie Backer
Browse files

Improved BundleSettings unitTest.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@5918 41f8697f-d340-4b68-9986-7bafba869bb8
parent af512bda
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

#include <QDataStream>
#include <QDebug>
#include <QUuid>
#include <QXmlStreamWriter>

#include "BundleSettings.h"
#include "BundleStatistics.h"
@@ -10,8 +12,6 @@
#include "PvlGroup.h"
#include "PvlKeyword.h"
#include "PvlObject.h"
#include <QUuid>
#include <QXmlStreamWriter>
#include "XmlStackedHandlerReader.h"

namespace Isis {
@@ -30,9 +30,6 @@ namespace Isis {

    m_runTime = "";

//     m_settings = inputSettings;
//     m_outputCNet = outputControlNet;

  }


@@ -40,10 +37,8 @@ namespace Isis {
  BundleResults::BundleResults(const BundleResults &other)
      : m_controlNetworkFileName(new FileName(*other.m_controlNetworkFileName)),
        m_settings(new BundleSettings(*other.m_settings)),
        m_statisticsResults(new BundleStatistics(*other.m_statisticsResults)) {

    delete m_id;
    m_id = new QUuid(other.m_id->toString());
        m_statisticsResults(new BundleStatistics(*other.m_statisticsResults)),
        m_id(new QUuid(other.m_id->toString())) {
  }


+10 −26
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
#include <QDebug>
#include <QList>
#include <QString>
#include <QUuid>
#include <QXmlStreamWriter>

#include "BundleObservationSolveSettings.h"
#include "IException.h"
@@ -10,8 +12,6 @@
#include "Project.h"
#include "PvlKeyword.h"
#include "PvlObject.h"
#include <QUuid>
#include <QXmlStreamWriter>
#include "XmlStackedHandlerReader.h"

namespace Isis {
@@ -23,6 +23,7 @@ namespace Isis {
    m_id = NULL;

    m_validateNetwork = true;

    m_solveMethod = Sparse;
    m_solveObservationMode = false;
    m_solveRadius          = false;
@@ -100,22 +101,16 @@ namespace Isis {
        m_globalLatitudeAprioriSigma(other.m_globalLatitudeAprioriSigma),
        m_globalLongitudeAprioriSigma(other.m_globalLongitudeAprioriSigma),
        m_globalRadiusAprioriSigma(other.m_globalRadiusAprioriSigma),
        m_observationSolveSettings(other.m_observationSolveSettings),
        m_convergenceCriteria(other.m_convergenceCriteria),
        m_convergenceCriteriaThreshold(other.m_convergenceCriteriaThreshold),
        m_convergenceCriteriaMaximumIterations(other.m_convergenceCriteriaMaximumIterations),
        m_maximumLikelihood(other.m_maximumLikelihood),
        m_outputFilePrefix(other.m_outputFilePrefix),
        m_createBundleOutputFile(other.m_createBundleOutputFile),
        m_createCSVFiles(other.m_createCSVFiles),
        m_createResidualsFile(other.m_createResidualsFile) {
    
    for (int i = 0; i < other.m_maximumLikelihood.size(); i++) {
      m_maximumLikelihood.append(other.m_maximumLikelihood[i]);
    }

    m_observationSolveSettings = other.m_observationSolveSettings;

//    delete m_id;
    m_id = new QUuid(other.m_id->toString());
        m_createResidualsFile(other.m_createResidualsFile),
        m_id(new QUuid(*other.m_id)) {
  }


@@ -123,14 +118,6 @@ namespace Isis {
  BundleSettings::~BundleSettings() {    
    delete m_id;
    m_id = NULL;

//    int nSolveSettings = m_observationSolveSettings.size();
//    for (int i = 0; i < nSolveSettings; i++) {
//      BundleObservationSolveSettings *settings = m_observationSolveSettings.at(i);
//      delete settings;
//    }
//    m_observationSolveSettings.clear();

  }


@@ -148,20 +135,16 @@ namespace Isis {
      m_globalLatitudeAprioriSigma = other.m_globalLatitudeAprioriSigma;
      m_globalLongitudeAprioriSigma = other.m_globalLongitudeAprioriSigma;
      m_globalRadiusAprioriSigma = other.m_globalRadiusAprioriSigma;
      m_observationSolveSettings = other.m_observationSolveSettings;
      m_convergenceCriteria = other.m_convergenceCriteria;
      m_convergenceCriteriaThreshold = other.m_convergenceCriteriaThreshold;
      m_convergenceCriteriaMaximumIterations = other.m_convergenceCriteriaMaximumIterations;
      m_maximumLikelihood = other.m_maximumLikelihood;
      m_outputFilePrefix = other.m_outputFilePrefix;
      m_createBundleOutputFile = other.m_createBundleOutputFile;
      m_createCSVFiles = other.m_createCSVFiles;
      m_createResidualsFile = other.m_createResidualsFile;

      for (int i = 0;i < other.m_maximumLikelihood.size();i++) {
        m_maximumLikelihood.append(other.m_maximumLikelihood[i]);
      }

      m_observationSolveSettings = other.m_observationSolveSettings;

      delete m_id;
      m_id = new QUuid(other.m_id->toString());
    }
@@ -571,6 +554,7 @@ namespace Isis {
      pvl += PvlKeyword("ObservationSolveSettingsInstrumentId", 
                        m_observationSolveSettings[i].instrumentId());
    }

    return pvl;
  }

+2 −2
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
 */

#include <QList>
#include <QVector>
#include <QPair>
#include <QString>

@@ -33,8 +32,8 @@
#include "PvlObject.h"
#include "XmlStackedHandler.h"

class QXmlStreamWriter;
class QUuid;
class QXmlStreamWriter;

namespace Isis {
  class FileName;
@@ -62,6 +61,7 @@ namespace Isis {
   *                           pvlObject().  Added unitTest.
   *   @history 2014-07-23 Jeannie Backer - Added QDataStream >> and << operators and read/write
   *                           methods. Created unitTest.
   *   @history 2014-07-25 Jeannie Backer - Improved unitTest coverage to 100% scope/line/function.
   *  
   */
 class BundleSettings : public QObject {
+87 −16
Original line number Diff line number Diff line
Unit test for BundleSettings... 
Printing PVL group with settings from the default constructor... 
Object = DefaultBundleSettingsObject
Object = DefaultSettingsObject
  NetworkValidated                     = Yes
  SolveMethod                          = Sparse
  SolveObservationMode                 = No
@@ -21,8 +21,30 @@ Object = DefaultBundleSettingsObject
  ObservationSolveSettingsInstrumentId = Null
End_Object

Testing assignment operator to create a new settings object... 
Object = AssignedBundleSettingsObject
Testing copy constructor... 
Object = CopySettingsObject
  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
  CreateCSVPointsFile                  = Yes
  CreateResidualsFile                  = Yes
  FilePrefix                           = Null
  NumberObservationSolveSettings       = 1
  ObservationSolveSettingsInstrumentId = Null
End_Object

Testing assignment operator to set this equal to itself... 
Object = SelfAssignedSettingsObject
  NetworkValidated                     = Yes
  SolveMethod                          = Sparse
  SolveObservationMode                 = No
@@ -43,8 +65,8 @@ Object = AssignedBundleSettingsObject
  ObservationSolveSettingsInstrumentId = Null
End_Object

Testing copy constructor to create a new settings object... 
Object = CopyBundleSettingsObject
Testing assignment operator to create a new settings object... 
Object = AssignedSettingsObject
  NetworkValidated                     = Yes
  SolveMethod                          = Sparse
  SolveObservationMode                 = No
@@ -66,7 +88,7 @@ Object = CopyBundleSettingsObject
End_Object

Testing mutator methods... 
Object = MutatedBundleSettingsObject
Object = ResetAllOptions
  NetworkValidated                     = Yes
  SolveMethod                          = SpecialK
  SolveObservationMode                 = Yes
@@ -82,6 +104,29 @@ Object = MutatedBundleSettingsObject
  ConvergenceCriteriaThreshold         = 0.25
  ConvergenceCriteriaMaximumIterations = 26
  CreateBundleOutputFile               = No
  CreateCSVPointsFile                  = No
  CreateResidualsFile                  = No
  MaximumLikelihoodModels              = (Huber, Welsch, HuberModified, Chen)
  MaximumLikelihoodQuantiles           = (0.27, 28.0, 29.0, 30.0)
  NumberObservationSolveSettings       = 2
  ObservationSolveSettingsInstrumentId = Instrument1
  ObservationSolveSettingsInstrumentId = Instrument2
End_Object

Object = ResetSolveOptions
  NetworkValidated                     = Yes
  SolveMethod                          = Sparse
  SolveObservationMode                 = Yes
  SolveRadius                          = No
  UpdateCubeLabel                      = Yes
  ErrorPropagation                     = Yes
  OutlierRejection                     = No
  GlobalLatitudeAprioriSigma           = None
  GlobalLongitudeAprioriSigma          = None
  ConvergenceCriteria                  = ParameterCorrections
  ConvergenceCriteriaThreshold         = 0.25
  ConvergenceCriteriaMaximumIterations = 26
  CreateBundleOutputFile               = No
  CreateCSVPointsFile                  = Yes
  CreateResidualsFile                  = No
  FilePrefix                           = TestFilePrefix
@@ -92,7 +137,33 @@ Object = MutatedBundleSettingsObject
  ObservationSolveSettingsInstrumentId = Instrument2
End_Object

Object = ResetOutputOptions
  NetworkValidated                     = Yes
  SolveMethod                          = Sparse
  SolveObservationMode                 = Yes
  SolveRadius                          = No
  UpdateCubeLabel                      = Yes
  ErrorPropagation                     = Yes
  OutlierRejection                     = No
  GlobalLatitudeAprioriSigma           = None
  GlobalLongitudeAprioriSigma          = None
  ConvergenceCriteria                  = ParameterCorrections
  ConvergenceCriteriaThreshold         = 0.25
  ConvergenceCriteriaMaximumIterations = 26
  CreateBundleOutputFile               = No
  CreateCSVPointsFile                  = No
  CreateResidualsFile                  = Yes
  FilePrefix                           = TestFilePrefix
  MaximumLikelihoodModels              = (Huber, Welsch, HuberModified, Chen)
  MaximumLikelihoodQuantiles           = (0.27, 28.0, 29.0, 30.0)
  NumberObservationSolveSettings       = 2
  ObservationSolveSettingsInstrumentId = Instrument1
  ObservationSolveSettingsInstrumentId = Instrument2
End_Object

Testing accessor methods... 
"Instrument1" 
"Instrument2" 
"Huber" "0.27" 
"Welsch" "28.0" 
"HuberModified" "29.0" 
@@ -107,22 +178,20 @@ Testing static enum-to-string and string-to-enum methods...
Testing serialization... 
Object = BundleSettings
  NetworkValidated                     = Yes
  SolveMethod                          = SpecialK
  SolveMethod                          = Sparse
  SolveObservationMode                 = Yes
  SolveRadius                          = Yes
  SolveRadius                          = No
  UpdateCubeLabel                      = Yes
  ErrorPropagation                     = Yes
  OutlierRejection                     = Yes
  OutlierMultiplier                    = 4.0
  GlobalLatitudeAprioriSigma           = 1000.0
  GlobalLongitudeAprioriSigma          = 2000.0
  GlobalRadiiAprioriSigma              = 3000.0
  OutlierRejection                     = No
  GlobalLatitudeAprioriSigma           = None
  GlobalLongitudeAprioriSigma          = None
  ConvergenceCriteria                  = ParameterCorrections
  ConvergenceCriteriaThreshold         = 0.25
  ConvergenceCriteriaMaximumIterations = 26
  CreateBundleOutputFile               = No
  CreateCSVPointsFile                  = Yes
  CreateResidualsFile                  = No
  CreateCSVPointsFile                  = No
  CreateResidualsFile                  = Yes
  FilePrefix                           = TestFilePrefix
  MaximumLikelihoodModels              = (Huber, Welsch, HuberModified, Chen)
  MaximumLikelihoodQuantiles           = (0.27, 28.0, 29.0, 30.0)
@@ -134,6 +203,8 @@ End_Object
Testing error throws... 
**PROGRAMMER ERROR** Unknown bundle solve method [Nonsense].
**PROGRAMMER ERROR** Unknown solve method enum [31].
**ERROR** Unable to find BundleObservationSolveSettings with InstrumentId = [NoSuchInstrumentId].
**ERROR** Unable to find BundleObservationSolveSettings with index = [32].
**PROGRAMMER ERROR** Unknown bundle convergence criteria [Pickles].
**PROGRAMMER ERROR** Unknown convergence criteria enum [32].
**PROGRAMMER ERROR** Unknown convergence criteria enum [33].
**PROGRAMMER ERROR** For bundle adjustments with multiple maximum likelihood estimators, the first model must be of type HUBER or HUBER_MODIFIED.
+57 −14
Original line number Diff line number Diff line
@@ -42,22 +42,27 @@ int main(int argc, char *argv[]) {
    //      bool createCSVPointsFile() const;
    //      bool createResidualsFile() const;
    //      QString outputFilePrefix() const;
    PvlObject pvl = settings.pvlObject("DefaultBundleSettingsObject");
    PvlObject pvl = settings.pvlObject("DefaultSettingsObject");
    cout << pvl << endl << endl;

    qDebug() << "Testing assignment operator to create a new settings object...";
    const BundleSettings constSettings = settings;
    //BundleSettings assignmentOpSettings = copySettings;
    pvl = constSettings.pvlObject("AssignedBundleSettingsObject");
    qDebug() << "Testing copy constructor...";
    BundleSettings copySettings(settings);
    pvl = copySettings.pvlObject("CopySettingsObject");
    cout << pvl << endl << endl;

    qDebug() << "Testing assignment operator to set this equal to itself...";
    settings = settings;
    pvl = settings.pvlObject("SelfAssignedSettingsObject");
    cout << pvl << endl << endl;

    qDebug() << "Testing copy constructor to create a new settings object...";
    BundleSettings copySettings(constSettings);
    pvl = copySettings.pvlObject("CopyBundleSettingsObject");
    qDebug() << "Testing assignment operator to create a new settings object...";
    BundleSettings assignmentOpSettings = settings;
    assignmentOpSettings = settings;
    pvl = assignmentOpSettings.pvlObject("AssignedSettingsObject");
    cout << pvl << endl << endl;

    qDebug() << "Testing mutator methods...";
    // reset all...
    // validate the network
    settings.setValidateNetwork(true);
    // set the solve options
@@ -73,6 +78,7 @@ int main(int argc, char *argv[]) {
                                        5, 6, true, 7000.0, 8000.0, 9000.0);
    boss1.setInstrumentPointingSettings(BundleObservationSolveSettings::NoPointingFactors, 
                                        10, 11, true, true, 12.0, 13.0, 14.0);
    // TODO: why am i getting QList index error???
//    pvl = boss1.pvlObject();
//    cout << pvl << endl << endl;
    QList<BundleObservationSolveSettings> observationSolveSettings;
@@ -82,6 +88,7 @@ int main(int argc, char *argv[]) {
                                        15, 16, true, 17000.0, 18000.0, 19000.0);
    boss1.setInstrumentPointingSettings(BundleObservationSolveSettings::AllPointingCoefficients, 
                                        20, 21, true, true, 22.0, 23.0, 24.0);
    // TODO: why am i getting QList index error???
//    pvl = boss1.pvlObject();
//    cout << pvl << endl << endl;
    observationSolveSettings.append(boss1);
@@ -95,15 +102,39 @@ int main(int argc, char *argv[]) {
    settings.addMaximumLikelihoodEstimatorModel(MaximumLikelihoodWFunctions::HuberModified, 29); 
    settings.addMaximumLikelihoodEstimatorModel(MaximumLikelihoodWFunctions::Chen, 30); 
    // set output file options
    settings.setOutputFiles("TestFilePrefix", false, false, false);
    pvl = settings.pvlObject("ResetAllOptions");
    cout << pvl << endl << endl;

    // now for test coverage, call some more resets
    // SolveObservationMode = UpdateCubeLabel = ErrorPropagation = true and
    // SolveRadius = OutlierRejection = false
    settings.setSolveOptions(BundleSettings::stringToSolveMethod("sparse"), 
                             true, true, true, false);
    settings.setOutlierRejection(false);
    settings.setOutputFiles("TestFilePrefix", false, true, false);
    pvl = settings.pvlObject("MutatedBundleSettingsObject");
    pvl = settings.pvlObject("ResetSolveOptions");
    cout << pvl << endl << endl;

    // reset output options - test coverage
    settings.setOutputFiles("TestFilePrefix", false, false, true);
    pvl = settings.pvlObject("ResetOutputOptions");
    cout << pvl << endl << endl;


    qDebug() << "Testing accessor methods...";
//    BundleObservationSolveSettings *boss2 = settings.observationSolveSettings("Instrument1");
//    qDebug() << boss2->instrumentId();
//    boss2 = settings.observationSolveSettings(2);
//    qDebug() << boss2->instrumentId();
    BundleObservationSolveSettings boss2 = settings.observationSolveSettings("Instrument1");
    qDebug() << boss2.instrumentId();
    // TODO: why am i getting QList index error???
    // pvl = boss2.pvlObject();
    // cout << pvl << endl << endl;

    boss2 = settings.observationSolveSettings(1);
    qDebug() << boss2.instrumentId();
    // TODO: why am i getting QList index error???
    // pvl = boss2.pvlObject();
    // cout << pvl << endl << endl;

    QList< QPair< MaximumLikelihoodWFunctions::Model, double > > models
           = settings.maximumLikelihoodEstimatorModels();
    for (int i = 0; i < models.size(); i++) {
@@ -145,6 +176,18 @@ int main(int argc, char *argv[]) {
    catch (IException &e) {
      e.print();
    }
    try {
      settings.observationSolveSettings("NoSuchInstrumentId");
    } 
    catch (IException &e) {
      e.print();
    }
    try {
      settings.observationSolveSettings(32);
    } 
    catch (IException &e) {
      e.print();
    }
    try {
      BundleSettings::stringToConvergenceCriteria("Pickles");
    } 
@@ -152,7 +195,7 @@ int main(int argc, char *argv[]) {
      e.print();
    }
    try {
      BundleSettings::convergenceCriteriaToString(BundleSettings::ConvergenceCriteria(32));
      BundleSettings::convergenceCriteriaToString(BundleSettings::ConvergenceCriteria(33));
    } 
    catch (IException &e) {
      e.print();