Commit 2b4bb399 authored by Ken Edmundson's avatar Ken Edmundson
Browse files

additional mods for merging dev into lidar branch

parent 8e9bdb3f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ void IsisMain() {
      bundleSolution->outputResiduals();
    }
    
    bundleSolution.outputLidarCSV();
    bundleSolution->outputLidarCSV();

    // write updated control net
    bundleAdjustment->controlNet()->Write(ui.GetFileName("ONET"));
+1 −0
Original line number Diff line number Diff line
@@ -254,6 +254,7 @@
    </change>
    <change name="Ken Edmundson" date="2017-11-01">
      Added interface for piecewise polynomials.
    </change>
    <change name="Ken Edmundson" date="2018-05-23">
      Modifed call to bundleAdjustment->solveCholeskyBR() to return a raw pointer to a
      BundleSolutionInfo object. Am also deleting this pointer because jigsaw.cpp takes
+75 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <QUuid>
#include <QXmlStreamWriter>

#include "BundleLidarRangeConstraint.h"
#include "BundleResults.h"
#include "ControlList.h"
#include "ControlMeasure.h"
@@ -112,7 +113,6 @@ namespace Isis {
  /**
   * Returns bundleout text filename.
   *
   * @return BundleSolutionInfo Reference to the current BundleSolutionInfo
   * @return QString Bundleout text filename.
   */
  QString BundleSolutionInfo::savedBundleOutputFilename() {
@@ -909,6 +909,13 @@ namespace Isis {
      fpOut << buf;
    }

    if (m_statisticsResults->numberLidarRangeConstraintEquations() > 0) {
      sprintf(buf, "\n        Lidar Range Constraints: %6d",
              m_statisticsResults->numberLidarRangeConstraintEquations());
      fpOut << buf;
    }


    sprintf(buf, "\n                       Unknowns: %6d",
                  m_statisticsResults->numberUnknownParameters());
    fpOut << buf;
@@ -1490,6 +1497,73 @@ namespace Isis {
  }


  /**
   * Outputs lidar data to a csv file.
   *
   * @return bool If the point data was successfully output.
   */
  bool BundleSolutionInfo::outputLidarCSV() {
    char buf[1056];

    QString ofname = "bundleout_lidar.csv";
    ofname = m_settings->outputFilePrefix() + ofname;
    m_csvSavedPointsFilename = ofname;

    std::ofstream fpOut(ofname.toLatin1().data(), std::ios::out);
    if (!fpOut) {
      return false;
    }

    int numPoints = m_statisticsResults->bundleControlPoints().size();

    //                     measured   apriori   adjusted               adjusted
    //                      range      sigma     range      residual     sigma
    // point id  image       (km)       (km)      (km)        (km)       (km)

    // print column headers
    if (m_settings->errorPropagation()) {
      sprintf(buf, ",,measured,a priori,adjusted,,adjusted/n"
              "point,image,range,sigma,range,residual,sigma\n"
              "id,name,(km),(km),(km),(km)\n");
    }
    else {
      sprintf(buf, ",,measured,a priori,adjusted\n"
                   "point,image,range,sigma,range,residual\n"
                   "id,name,(km),(km),(km),(km)\n");
    }
    fpOut << buf;

    for (int i = 0; i < numPoints; i++) {

      BundleControlPointQsp point = m_statisticsResults->bundleControlPoints().at(i);
      if (!point || point->isRejected()) {
        continue;
      }

      // NOTE (Edmundson): dynamicCast is likely to be costly, might be ok here since we're just
      // writing out results after the bundle, but generally I suspect we want avoid this. Probably
      // indicative of a not so good software design.
      BundleLidarControlPointQsp lidarPoint = point.dynamicCast<BundleLidarControlPoint>();

      if (!lidarPoint) {
        continue;
      }

      int nRangeConstraints = lidarPoint->numberRangeConstraints();
      for (int j = 0; j < nRangeConstraints; j++) {
        BundleLidarRangeConstraintQsp rangeConstraint = lidarPoint->rangeConstraint(j);

        QString str = rangeConstraint->formatBundleOutputString();
        fpOut << str;
      }
    }

    fpOut.close();

    return true;
  }


  /**
   * Outputs image coordinate residuals to a csv file.
   *
+1 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ namespace Isis {
      bool outputText();
      bool outputImagesCSV();
      bool outputPointsCSV();
      bool outputLidarCSV();
      bool outputResiduals();

      void save(QXmlStreamWriter &stream, const Project *project, FileName newProjectRoot) const;