Loading isis/src/control/apps/jigsaw/jigsaw.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -123,7 +123,7 @@ void IsisMain() { bundleSolution->outputResiduals(); } bundleSolution.outputLidarCSV(); bundleSolution->outputLidarCSV(); // write updated control net bundleAdjustment->controlNet()->Write(ui.GetFileName("ONET")); Loading isis/src/control/apps/jigsaw/jigsaw.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp +75 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <QUuid> #include <QXmlStreamWriter> #include "BundleLidarRangeConstraint.h" #include "BundleResults.h" #include "ControlList.h" #include "ControlMeasure.h" Loading Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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. * Loading isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
isis/src/control/apps/jigsaw/jigsaw.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -123,7 +123,7 @@ void IsisMain() { bundleSolution->outputResiduals(); } bundleSolution.outputLidarCSV(); bundleSolution->outputLidarCSV(); // write updated control net bundleAdjustment->controlNet()->Write(ui.GetFileName("ONET")); Loading
isis/src/control/apps/jigsaw/jigsaw.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.cpp +75 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <QUuid> #include <QXmlStreamWriter> #include "BundleLidarRangeConstraint.h" #include "BundleResults.h" #include "ControlList.h" #include "ControlMeasure.h" Loading Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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. * Loading
isis/src/control/objs/BundleSolutionInfo/BundleSolutionInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading