Commit 2c527b79 authored by Kristin Berry's avatar Kristin Berry Committed by Makayla Shepherd
Browse files

Removed new functions from ControlPoint that are no longer needed

parent e6d2cc4c
Loading
Loading
Loading
Loading
+327 −65
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
#include "ControlMeasureLogData.h"
#include "ControlNet.h"
#include "ControlNetFile.h"
#include "ControlNetFile.h"
#include "ControlNetFileV0002.pb.h"
#include "Cube.h"
#include "IString.h"
#include "Latitude.h"
@@ -108,6 +110,209 @@ namespace Isis {
  }


  /**
   * This is used when reading from a protocol buffer. Given a file
   *   representation (protocol buffer), and log data,
   *   construct the control point.
   *
   * @history 2008-06-18  Debbie A. Cook, Swapped Init with SetRadii
   *          calls to avoid resetting the surface points with no radii
   * @history 2015-11-03  Kris Becker - invalid flag was not being initialized
   */
  ControlPoint::ControlPoint(const ControlPointFileEntryV0002 &fileEntry,
      const Distance &majorRad, const Distance &minorRad,
      const Distance &polarRad) : invalid(false)  {
    measures = NULL;
    cubeSerials = NULL;
    referenceMeasure = NULL;
    numberOfRejectedMeasures = 0;
    measures = new QHash< QString, ControlMeasure * >;
    cubeSerials = new QStringList;

    id = fileEntry.id().c_str();
    dateTime = "";
    aprioriSurfacePointSource = SurfacePointSource::None;
    aprioriRadiusSource = RadiusSource::None;

    chooserName = fileEntry.choosername().c_str();
    dateTime = fileEntry.datetime().c_str();
    editLock = false;

    parentNetwork = NULL;

    switch (fileEntry.type()) {
      case ControlPointFileEntryV0002_PointType_obsolete_Tie:
      case ControlPointFileEntryV0002_PointType_Free:
        type = Free;
        break;
      case ControlPointFileEntryV0002_PointType_Constrained:
        type = Constrained;
        break;
      case ControlPointFileEntryV0002_PointType_obsolete_Ground:
      case ControlPointFileEntryV0002_PointType_Fixed:
        type = Fixed;
        break;
      default:
        QString msg = "Point type is invalid.";
        throw IException(IException::Programmer, msg, _FILEINFO_);
    }

    ignore = fileEntry.ignore();
    jigsawRejected = fileEntry.jigsawrejected();

    // Read apriori keywords
    if (fileEntry.has_apriorisurfpointsource()) {
      switch (fileEntry.apriorisurfpointsource()) {
        case ControlPointFileEntryV0002_AprioriSource_None:
          aprioriSurfacePointSource = SurfacePointSource::None;
          break;

        case ControlPointFileEntryV0002_AprioriSource_User:
          aprioriSurfacePointSource = SurfacePointSource::User;
          break;

        case ControlPointFileEntryV0002_AprioriSource_AverageOfMeasures:
          aprioriSurfacePointSource = SurfacePointSource::AverageOfMeasures;
          break;

        case ControlPointFileEntryV0002_AprioriSource_Reference:
          aprioriSurfacePointSource = SurfacePointSource::Reference;
          break;

        case ControlPointFileEntryV0002_AprioriSource_Basemap:
          aprioriSurfacePointSource = SurfacePointSource::Basemap;
          break;

        case ControlPointFileEntryV0002_AprioriSource_BundleSolution:
          aprioriSurfacePointSource = SurfacePointSource::BundleSolution;
          break;

        case ControlPointFileEntryV0002_AprioriSource_Ellipsoid:
        case ControlPointFileEntryV0002_AprioriSource_DEM:
          break;
      }
    }

    if (fileEntry.has_apriorisurfpointsourcefile()) {
      aprioriSurfacePointSourceFile = fileEntry.apriorisurfpointsourcefile().c_str();
    }

    if (fileEntry.has_aprioriradiussource()) {
      switch (fileEntry.aprioriradiussource()) {
        case ControlPointFileEntryV0002_AprioriSource_None:
          aprioriRadiusSource = RadiusSource::None;
          break;
        case ControlPointFileEntryV0002_AprioriSource_User:
          aprioriRadiusSource = RadiusSource::User;
          break;
        case ControlPointFileEntryV0002_AprioriSource_AverageOfMeasures:
          aprioriRadiusSource = RadiusSource::AverageOfMeasures;
          break;
        case ControlPointFileEntryV0002_AprioriSource_Ellipsoid:
          aprioriRadiusSource = RadiusSource::Ellipsoid;
          break;
        case ControlPointFileEntryV0002_AprioriSource_DEM:
          aprioriRadiusSource = RadiusSource::DEM;
          break;
        case ControlPointFileEntryV0002_AprioriSource_BundleSolution:
          aprioriRadiusSource = RadiusSource::BundleSolution;
          break;

        case ControlPointFileEntryV0002_AprioriSource_Reference:
        case ControlPointFileEntryV0002_AprioriSource_Basemap:
          break;
      }
    }

    if (fileEntry.has_aprioriradiussourcefile()) {
      aprioriRadiusSourceFile = fileEntry.aprioriradiussourcefile().c_str();
    }

    constraintStatus.reset();

    if (fileEntry.has_apriorix() && fileEntry.has_aprioriy() &&
        fileEntry.has_aprioriz()) {
      SurfacePoint apriori(
        Displacement(fileEntry.apriorix(), Displacement::Meters),
        Displacement(fileEntry.aprioriy(), Displacement::Meters),
        Displacement(fileEntry.aprioriz(), Displacement::Meters));

      if (fileEntry.aprioricovar_size() > 0) {
        symmetric_matrix<double, upper> covar;
        covar.resize(3);
        covar.clear();
        covar(0, 0) = fileEntry.aprioricovar(0);
        covar(0, 1) = fileEntry.aprioricovar(1);
        covar(0, 2) = fileEntry.aprioricovar(2);
        covar(1, 1) = fileEntry.aprioricovar(3);
        covar(1, 2) = fileEntry.aprioricovar(4);
        covar(2, 2) = fileEntry.aprioricovar(5);
        apriori.SetRectangularMatrix(covar);

        if (Displacement(covar(0, 0), Displacement::Meters).isValid() ||
            Displacement(covar(1, 1), Displacement::Meters).isValid()) {
          if (fileEntry.latitudeconstrained())
            constraintStatus.set(LatitudeConstrained);
          if (fileEntry.longitudeconstrained())
            constraintStatus.set(LongitudeConstrained);
          if (fileEntry.radiusconstrained())
            constraintStatus.set(RadiusConstrained);
        }
        else if (Displacement(covar(2, 2), Displacement::Meters).isValid()) {
          if (fileEntry.latitudeconstrained())
            constraintStatus.set(LatitudeConstrained);
          if (fileEntry.radiusconstrained())
            constraintStatus.set(RadiusConstrained);
        }
      }

      aprioriSurfacePoint = apriori;
    }

    if (fileEntry.has_adjustedx() &&
        fileEntry.has_adjustedy() &&
        fileEntry.has_adjustedz()) {
      SurfacePoint adjusted(
        Displacement(fileEntry.adjustedx(), Displacement::Meters),
        Displacement(fileEntry.adjustedy(), Displacement::Meters),
        Displacement(fileEntry.adjustedz(), Displacement::Meters));

      if (fileEntry.adjustedcovar_size() > 0) {
        symmetric_matrix<double, upper> covar;
        covar.resize(3);
        covar.clear();
        covar(0, 0) = fileEntry.adjustedcovar(0);
        covar(0, 1) = fileEntry.adjustedcovar(1);
        covar(0, 2) = fileEntry.adjustedcovar(2);
        covar(1, 1) = fileEntry.adjustedcovar(3);
        covar(1, 2) = fileEntry.adjustedcovar(4);
        covar(2, 2) = fileEntry.adjustedcovar(5);
        adjusted.SetRectangularMatrix(covar);
      }

      adjustedSurfacePoint = adjusted;
    }

    if (majorRad.isValid() && minorRad.isValid() && polarRad.isValid()) {
      aprioriSurfacePoint.SetRadii(majorRad, minorRad, polarRad);
      adjustedSurfacePoint.SetRadii(majorRad, minorRad, polarRad);
    }

    referenceExplicitlySet = false;

    for (int m = 0 ; m < fileEntry.measures_size() ; m++) {
      ControlMeasure *measure = new ControlMeasure(fileEntry.measures(m));
      AddMeasure(measure);
    }

    if (fileEntry.has_referenceindex()) {
      SetRefMeasure((*measures)[cubeSerials->at(fileEntry.referenceindex())]);
    }

    // Set edit lock last
    editLock = fileEntry.editlock();
  }


  /**
   * Construct a control point with given Id
@@ -2119,87 +2324,144 @@ namespace Isis {
  }


  //! Returns the apriori covar value associated at the given position.
  double ControlPoint::GetAprioriCovar(int position) const {
    SurfacePoint apriori = GetAprioriSurfacePoint();
    symmetric_matrix< double, upper > covar = apriori.GetRectangularMatrix();
    switch (position) {
      case 0:
        return covar(0, 0);
  ControlPointFileEntryV0002 ControlPoint::ToFileEntry() const {
    ControlPointFileEntryV0002 fileEntry;

    fileEntry.set_id(GetId().toLatin1().data());
    switch (GetType()) {
      case ControlPoint::Free:
        fileEntry.set_type(ControlPointFileEntryV0002::Free);
        break;
      case ControlPoint::Constrained:
        fileEntry.set_type(ControlPointFileEntryV0002::Constrained);
        break;
      case 1:
        return covar(0, 1);
      case ControlPoint::Fixed:
        fileEntry.set_type(ControlPointFileEntryV0002::Fixed);
        break;
    }

    if (!GetChooserName().isEmpty()) {
      fileEntry.set_choosername(GetChooserName().toLatin1().data());
    }
    if (!GetDateTime().isEmpty()) {
      fileEntry.set_datetime(GetDateTime().toLatin1().data());
    }
    if (IsEditLocked())
      fileEntry.set_editlock(true);
    if (IsIgnored())
      fileEntry.set_ignore(true);
    if (IsRejected())
      fileEntry.set_jigsawrejected(true);

    if (referenceMeasure && referenceExplicitlySet) {
      fileEntry.set_referenceindex(IndexOfRefMeasure());
    }

    switch (GetAprioriSurfacePointSource()) {
      case ControlPoint::SurfacePointSource::None:
        break;
      case 2:
        return covar(0, 2);
      case ControlPoint::SurfacePointSource::User:
        fileEntry.set_apriorisurfpointsource(ControlPointFileEntryV0002_AprioriSource_User);
        break;
      case 3:
        return covar(1, 1);
      case ControlPoint::SurfacePointSource::AverageOfMeasures:
        fileEntry.set_apriorisurfpointsource(ControlPointFileEntryV0002_AprioriSource_AverageOfMeasures);
        break;
      case 4:
        return covar(1, 2);
      case ControlPoint::SurfacePointSource::Reference:
        fileEntry.set_apriorisurfpointsource(ControlPointFileEntryV0002_AprioriSource_Reference);
        break;
      case 5:
        return covar(2, 2);
      case ControlPoint::SurfacePointSource::Basemap:
        fileEntry.set_apriorisurfpointsource(ControlPointFileEntryV0002_AprioriSource_Basemap);
        break;
      case ControlPoint::SurfacePointSource::BundleSolution:
        fileEntry.set_apriorisurfpointsource(ControlPointFileEntryV0002_AprioriSource_BundleSolution);
        break;
      default:
        QString msg = "Invalid position given";
        throw IException(IException::Io, msg, _FILEINFO_);
        break;
    }
    if (!GetAprioriSurfacePointSourceFile().isEmpty()) {
      fileEntry.set_apriorisurfpointsourcefile(GetAprioriSurfacePointSourceFile().toLatin1().data());
    }

  //! Returns true if there are apriori surface point covar values.
  bool ControlPoint::HasAprioriCovar() const {
    switch (GetAprioriRadiusSource()) {
      case ControlPoint::RadiusSource::None:
        break;
      case ControlPoint::RadiusSource::User:
        fileEntry.set_aprioriradiussource(ControlPointFileEntryV0002_AprioriSource_User);
        break;
      case ControlPoint::RadiusSource::AverageOfMeasures:
        fileEntry.set_aprioriradiussource(ControlPointFileEntryV0002_AprioriSource_AverageOfMeasures);
        break;
      case ControlPoint::RadiusSource::Ellipsoid:
        fileEntry.set_aprioriradiussource(ControlPointFileEntryV0002_AprioriSource_Ellipsoid);
        break;
      case ControlPoint::RadiusSource::DEM:
        fileEntry.set_aprioriradiussource(ControlPointFileEntryV0002_AprioriSource_DEM);
        break;
      case ControlPoint::RadiusSource::BundleSolution:
        fileEntry.set_aprioriradiussource(ControlPointFileEntryV0002_AprioriSource_BundleSolution);
        break;
      default:
        break;
    }

    if (!GetAprioriRadiusSourceFile().isEmpty()) {
      fileEntry.set_aprioriradiussourcefile(GetAprioriRadiusSourceFile().toLatin1().data());
    }

    if (GetAprioriSurfacePoint().Valid()) {
      SurfacePoint apriori = GetAprioriSurfacePoint();
      fileEntry.set_apriorix(apriori.GetX().meters());
      fileEntry.set_aprioriy(apriori.GetY().meters());
      fileEntry.set_aprioriz(apriori.GetZ().meters());

      symmetric_matrix< double, upper > covar = apriori.GetRectangularMatrix();
    // If there are values in any of the covar matrices.
      if (covar(0, 0) != 0. || covar(0, 1) != 0. ||
          covar(0, 2) != 0. || covar(1, 1) != 0. ||
          covar(1, 2) != 0. || covar(2, 2) != 0.) {
        return true;
    }
    return false;
  }

  //! Returns true if there are adjusted surface point covar values.
  bool ControlPoint::HasAdjustedCovar() const {
        fileEntry.add_aprioricovar(covar(0, 0));
        fileEntry.add_aprioricovar(covar(0, 1));
        fileEntry.add_aprioricovar(covar(0, 2));
        fileEntry.add_aprioricovar(covar(1, 1));
        fileEntry.add_aprioricovar(covar(1, 2));
        fileEntry.add_aprioricovar(covar(2, 2));
      }
      if (constraintStatus.test(LatitudeConstrained))
//      if (!IsLatitudeConstrained())
        fileEntry.set_latitudeconstrained(true);
      if (constraintStatus.test(LongitudeConstrained))
//      if (!IsLongitudeConstrained())
        fileEntry.set_longitudeconstrained(true);
      if (constraintStatus.test(RadiusConstrained))
//      if (!IsRadiusConstrained())
        fileEntry.set_radiusconstrained(true);
    }


    if (GetAdjustedSurfacePoint().Valid()) {
      SurfacePoint adjusted = GetAdjustedSurfacePoint();
      fileEntry.set_adjustedx(adjusted.GetX().meters());
      fileEntry.set_adjustedy(adjusted.GetY().meters());
      fileEntry.set_adjustedz(adjusted.GetZ().meters());

      symmetric_matrix< double, upper > covar = adjusted.GetRectangularMatrix();
    // If there are values in any of the covar matrices.
      if (covar(0, 0) != 0. || covar(0, 1) != 0. ||
          covar(0, 2) != 0. || covar(1, 1) != 0. ||
          covar(1, 2) != 0. || covar(2, 2) != 0.) {
        return true;
        fileEntry.add_adjustedcovar(covar(0, 0));
        fileEntry.add_adjustedcovar(covar(0, 1));
        fileEntry.add_adjustedcovar(covar(0, 2));
        fileEntry.add_adjustedcovar(covar(1, 1));
        fileEntry.add_adjustedcovar(covar(1, 2));
        fileEntry.add_adjustedcovar(covar(2, 2));
      }
    return false;
    }

  //! Returns the adjusted covar value associated at the given position.
  double ControlPoint::GetAdjustedCovar(int position) const {
    SurfacePoint adjusted = GetAdjustedSurfacePoint();
    symmetric_matrix< double, upper > covar = adjusted.GetRectangularMatrix();
    switch (position) {
      case 0:
        return covar(0, 0);
        break;
      case 1:
        return covar(0, 1);
        break;
      case 2:
        return covar(0, 2);
        break;
      case 3:
        return covar(1, 1);
        break;
      case 4:
        return covar(1, 2);
        break;
      case 5:
        return covar(2, 2);
        break;
      default:
        QString msg = "Invalid position given";
        throw IException(IException::Io, msg, _FILEINFO_);
    //  Process all measures in the point
    for (int i = 0; i < cubeSerials->size(); i++) {
      *fileEntry.add_measures() =
        (*measures)[cubeSerials->at(i)]->ToProtocolBuffer();
    }

    return fileEntry;
  }
}
+5 −6
Original line number Diff line number Diff line
@@ -340,8 +340,6 @@ namespace Isis {
   *                            GetAprioriX(), GetAprioriY(), GetAprioriZ(), HasAdjustedCoordinates(),
   *                            GetAdjustedX(), GetAdjustedY(), GetAdjustedZ(), HasRefMeasure().
   *   @history 2017-12-19 Kristin Berry - Added IsJigsawRejected().
   *   @history 2017-12-20 Adam Goins - Added AprioriCovar() and AdjustedCovar() accessors.
   *   @history 2017-12-21 Adam Goins - Removed redundant code following ControlNetVersioner refactor.
   */
  class ControlPoint : public QObject {

@@ -446,6 +444,9 @@ namespace Isis {
      ControlPoint();
      ControlPoint(const ControlPoint &);
      ControlPoint(const QString &id);
      ControlPoint(const ControlPointFileEntryV0002 &fileEntry,
          const Distance &majorRad, const Distance &minorRad,
          const Distance &polarRad);
      ~ControlPoint();

      ControlNet *Parent() { return parentNetwork; }
@@ -512,8 +513,6 @@ namespace Isis {

      bool HasAprioriCoordinates();
      bool HasAdjustedCoordinates();
      bool HasAprioriCovar() const;
      bool HasAdjustedCovar() const;

      bool IsConstrained();
      bool IsLatitudeConstrained();
@@ -578,10 +577,10 @@ namespace Isis {
      double GetSampleResidualRms() const;
      double GetLineResidualRms() const;
      double GetResidualRms() const;
      double GetAprioriCovar(int) const;
      double GetAdjustedCovar(int) const;
      void ClearJigsawRejected();

      ControlPointFileEntryV0002 ToFileEntry() const;

    private:
      void SetExplicitReference(ControlMeasure *measure);
      void ValidateMeasure(QString serialNumber) const;