Commit 799f71a6 authored by Jesse Mapel's avatar Jesse Mapel
Browse files

Updated documentation and coding standards for BundleControlPoint class in...

Updated documentation and coding standards for BundleControlPoint class in preparation for merging IPCE into ISIS.  Fixes #4075.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@6951 41f8697f-d340-4b68-9986-7bafba869bb8
parent aa155fbd
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -1211,7 +1211,7 @@ namespace Isis {
//N12.printClean(std::cout);

    boost::numeric::ublas::bounded_vector<double, 3> &NIC = bundleControlPoint->nicVector();
    SparseBlockRowMatrix &Q = bundleControlPoint->cholmod_QMatrix();
    SparseBlockRowMatrix &Q = bundleControlPoint->cholmodQMatrix();

    NIC.clear();
    Q.zeroBlocks();
@@ -1253,7 +1253,7 @@ namespace Isis {
    // save upper triangular covariance matrix for error propagation
    // TODO:  The following method does not exist yet (08-13-2010)
//    SurfacePoint SurfacePoint = point->GetAdjustedSurfacePoint();
    SurfacePoint SurfacePoint = bundleControlPoint->getAdjustedSurfacePoint();
    SurfacePoint SurfacePoint = bundleControlPoint->adjustedSurfacePoint();
    SurfacePoint.SetSphericalMatrix(N22);
    bundleControlPoint->setAdjustedSurfacePoint(SurfacePoint);

@@ -2624,23 +2624,23 @@ namespace Isis {
    }

    // REMOVE
    SurfacePoint surfacePoint = point.getAdjustedSurfacePoint();
    SurfacePoint surfacePoint = point.adjustedSurfacePoint();
    // REMOVE

    // Compute the look vector in instrument coordinates based on time of observation and apriori
    // lat/lon/radius
    if (!(pCamera->GroundMap()->GetXY(point.getAdjustedSurfacePoint(), &dComputedx, &dComputedy))) {
    if (!(pCamera->GroundMap()->GetXY(point.adjustedSurfacePoint(), &dComputedx, &dComputedy))) {
      QString msg = "Unable to map apriori surface point for measure ";
      msg += measure.cubeSerialNumber() + " on point " + point.getId() + " into focal plane";
      msg += measure.cubeSerialNumber() + " on point " + point.id() + " into focal plane";
      throw IException(IException::User, msg, _FILEINFO_);
    }

    // partials for fixed point w/r lat, long, radius in Body-Fixed
    d_lookB_WRT_LAT = pCamera->GroundMap()->PointPartial(point.getAdjustedSurfacePoint(),
    d_lookB_WRT_LAT = pCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
                      CameraGroundMap::WRT_Latitude);
    d_lookB_WRT_LON = pCamera->GroundMap()->PointPartial(point.getAdjustedSurfacePoint(),
    d_lookB_WRT_LON = pCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
                      CameraGroundMap::WRT_Longitude);
    d_lookB_WRT_RAD = pCamera->GroundMap()->PointPartial(point.getAdjustedSurfacePoint(),
    d_lookB_WRT_RAD = pCamera->GroundMap()->PointPartial(point.adjustedSurfacePoint(),
                      CameraGroundMap::WRT_Radius);

//  std::cout << "d_lookB_WRT_LAT" << d_lookB_WRT_LAT << std::endl;
@@ -2932,7 +2932,7 @@ namespace Isis {

      // get NIC, Q, and correction vector for this point
      boost::numeric::ublas::bounded_vector< double, 3 > &NIC = point->nicVector();
      SparseBlockRowMatrix &Q = point->cholmod_QMatrix();
      SparseBlockRowMatrix &Q = point->cholmodQMatrix();
      boost::numeric::ublas::bounded_vector< double, 3 > &corrections = point->corrections();

//      printf("Q\n");
@@ -2955,7 +2955,7 @@ namespace Isis {
//      printf("Point %s Corrections\n Latitude: %20.10lf\nLongitude: %20.10lf\n   Radius: %20.10lf\n",point->GetId().toLatin1().data(),dLatCorr, dLongCorr, dRadCorr);
//      std::cout <<"Point " <<  point->GetId().toLatin1().data() << " Corrections\n" << "Latitude: " << dLatCorr << std::endl << "Longitude: " << dLongCorr << std::endl << "Radius: " << dRadCorr << std::endl;

      SurfacePoint surfacepoint = point->getAdjustedSurfacePoint();
      SurfacePoint surfacepoint = point->adjustedSurfacePoint();

      double dLat = surfacepoint.GetLatitude().degrees();
      double dLon = surfacepoint.GetLongitude().degrees();
@@ -3857,7 +3857,7 @@ namespace Isis {
        }

        // get corresponding Q matrix
        SparseBlockRowMatrix Q = point->cholmod_QMatrix();
        SparseBlockRowMatrix Q = point->cholmodQMatrix();

        T.clear();

@@ -3942,7 +3942,7 @@ namespace Isis {

      // Ask Ken what is happening here...Setting just the sigmas is not very accurate
      // Shouldn't we be updating and setting the matrix???  TODO
      SurfacePoint SurfacePoint = point->getAdjustedSurfacePoint();
      SurfacePoint SurfacePoint = point->adjustedSurfacePoint();

      dSigmaLat = SurfacePoint.GetLatSigma().radians();
      dSigmaLong = SurfacePoint.GetLonSigma().radians();
@@ -3954,7 +3954,7 @@ namespace Isis {
      t = dSigmaLong*dSigmaLong + cv(1, 1);
      t = sqrt(dSigma02 * t) * m_dRTM;
      Distance tLonSig(
          t * cos(point->getAdjustedSurfacePoint().GetLatitude().radians()),
          t * cos(point->adjustedSurfacePoint().GetLatitude().radians()),
          Distance::Meters);

      t = dSigmaRadius*dSigmaRadius + cv(2, 2);
+16 −23
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ namespace Isis {
   * 
   * @return @b SurfacePoint The adjusted surface point.
   */
  SurfacePoint BundleControlPoint::getAdjustedSurfacePoint() const {
  SurfacePoint BundleControlPoint::adjustedSurfacePoint() const {
    return m_controlPoint->GetAdjustedSurfacePoint();
  }

@@ -256,7 +256,7 @@ namespace Isis {
   * 
   * @return @b QString The ID for this point.
   */
  QString BundleControlPoint::getId() const {
  QString BundleControlPoint::id() const {
    return m_controlPoint->GetId();
  }

@@ -266,8 +266,7 @@ namespace Isis {
   * Accesses the 3 dimensional ordered vector of correction values associated 
   * with latitude, longitude, and radius. 
   * 
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of 
   *         correction values.
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of correction values.
   */
  boost::numeric::ublas::bounded_vector< double, 3 > &BundleControlPoint::corrections() {
    return m_corrections;
@@ -278,8 +277,7 @@ namespace Isis {
   * Accesses the 3 dimenstional ordered vector of apriori sigmas (apriori 
   * latitude, apriori longitude, apriori radius). 
   * 
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of 
   *         apriori sigmas.
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of apriori sigmas.
   */
  boost::numeric::ublas::bounded_vector< double, 3 > &BundleControlPoint::aprioriSigmas() {
    return m_aprioriSigmas;
@@ -291,8 +289,7 @@ namespace Isis {
   * Accesses the 3 dimenstional ordered vector of adjusted sigmas (adjusted 
   * latitude, adjusted longitude, adjusted radius). 
   * 
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of 
   *         adjusted sigmas.
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of adjusted sigmas.
   */
  boost::numeric::ublas::bounded_vector< double, 3 > &BundleControlPoint::adjustedSigmas() {
    return m_adjustedSigmas;
@@ -303,8 +300,7 @@ namespace Isis {
   * Accesses the 3 dimensional ordered vector of weight values associated 
   * with latitude, longitude, and radius. 
   * 
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of 
   *         weight values.
   * @return @b boost::numeric::ublas::bounded_vector<double,3>& The vector of weight values.
   */
  boost::numeric::ublas::bounded_vector< double, 3 > &BundleControlPoint::weights() {
    return m_weights;
@@ -326,8 +322,8 @@ namespace Isis {
   * 
   * @return @b SparseBlockRowMatrix& The CholMod row matrix.
   */
  SparseBlockRowMatrix &BundleControlPoint::cholmod_QMatrix() {
    return m_cholmod_QMatrix;
  SparseBlockRowMatrix &BundleControlPoint::cholmodQMatrix() {
    return m_cholmodQMatrix;
  }


@@ -353,7 +349,7 @@ namespace Isis {
    QString pointType = m_controlPoint->GetPointTypeString().toUpper();

    QString output = QString("%1%2%3 of %4%5%6%7%8%9%10%11\n")
                             .arg(getId(), 16)
                             .arg(id(), 16)
                             .arg(pointType, 15)
                             .arg(numGoodRays, 5)
                             .arg(numRays)
@@ -370,10 +366,10 @@ namespace Isis {


  /**
   * Formats an detailed output string table for this BundleControlPoint. 
   * Formats a detailed output string table for this BundleControlPoint. 
   *  
   * @param errorPropagation Indicates whether error propagation was selected.
   * @param RTM Conversion factor from meters to radians. Used to convert the 
   * @param RTM Conversion factor from radians to meters. Used to convert the 
   *            latitude and longitude corrections to meters.
   * 
   * @return @b QString The formatted output detailed string.
@@ -418,7 +414,7 @@ namespace Isis {
    QString output;

    output = QString(" Label: %1\nStatus: %2\n  Rays: %3 of %4\n")
                        .arg(getId())
                        .arg(id())
                        .arg(pointType)
                        .arg(numGoodRays)
                        .arg(numRays);
@@ -562,7 +558,6 @@ namespace Isis {
   * @param errorPropagation Indicates whether error propagation was selected.
   * 
   * @return @b QString The formatted value, as a string.
   * 
   */
  QString BundleControlPoint::formatAdjustedSigmaString(int type, int fieldWidth, int precision,
                                                        bool errorPropagation) const {
@@ -601,8 +596,7 @@ namespace Isis {
   * @param precision The precision of the double to be saved off.
   * @param errorPropagation Indicates whether error propagation was selected.
   * 
   * @return @b QString The formatted adjusted latitude sigma value, as a 
   *         string.
   * @return @b QString The formatted adjusted latitude sigma value, as a string.
   *  
   * @see formatAdjustedSigmaString() 
   */
@@ -619,8 +613,7 @@ namespace Isis {
   * @param precision The precision of the double to be saved off.
   * @param errorPropagation Indicates whether error propagation was selected.
   * 
   * @return @b QString The formatted adjusted longitude sigma value, as a 
   *         string.
   * @return @b QString The formatted adjusted longitude sigma value, as a string.
   *  
   * @see formatAdjustedSigmaString() 
   */
+22 −10
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
 */

#include <QVector>

#include <QSharedPointer>

#include "BundleMeasure.h"
@@ -37,12 +38,16 @@ namespace Isis {
  class ControlPoint;

  /**
   * This class holds information about a control point that BundleAdjust needs to run correctly.
   * 
   * @author 2014-05-22 Ken Edmundson
   *
   * @internal
   *   @history 2014-05-22 Ken Edmundson - Original version.
   *   @history 2015-02-20 Jeannie Backer - Added unitTest.  Reformatted output
   *                           strings. Brought closer to ISIS coding standards.
   *   @history 2016-06-27 Jesse Mapel - Updated documentation and ISIS coding standards in
   *                           preparation for merging IPCE into ISIS.  Fixes #4075.
   */
  class BundleControlPoint : public QVector<BundleMeasure*> {

@@ -64,14 +69,14 @@ namespace Isis {
      ControlPoint *rawControlPoint() const;
      bool isRejected() const;
      int numberMeasures() const;
      SurfacePoint getAdjustedSurfacePoint() const; // TODO: Rename this method without "get" to meet coding standards
      QString getId() const; // TODO: Rename this method without "get" to meet coding standards
      SurfacePoint adjustedSurfacePoint() const;
      QString id() const;
      boost::numeric::ublas::bounded_vector< double, 3 > &corrections();
      boost::numeric::ublas::bounded_vector< double, 3 > &aprioriSigmas();
      boost::numeric::ublas::bounded_vector< double, 3 > &adjustedSigmas();
      boost::numeric::ublas::bounded_vector< double, 3 > &weights();
      boost::numeric::ublas::bounded_vector<double, 3> &nicVector();         //!< array of NICs (see Brown, 1976)
      SparseBlockRowMatrix &cholmod_QMatrix();
      boost::numeric::ublas::bounded_vector<double, 3> &nicVector();
      SparseBlockRowMatrix &cholmodQMatrix();

      // string format methods
      QString formatBundleOutputSummaryString(bool errorPropagation) const;
@@ -91,18 +96,25 @@ namespace Isis {
                                              bool errorPropagation) const;

    private:
      //!< pointer to the control point object this represents
      ControlPoint *m_controlPoint;

      boost::numeric::ublas::bounded_vector< double, 3 > m_corrections;                             //!< corrections to point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_aprioriSigmas;                           //!< apriori sigmas for point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_adjustedSigmas;                          //!< adjusted sigmas for point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_weights;                                 //!< weights for point parameters

      //! corrections to point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_corrections;
      //! apriori sigmas for point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_aprioriSigmas;
      //! adjusted sigmas for point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_adjustedSigmas;
      //! weights for point parameters
      boost::numeric::ublas::bounded_vector< double, 3 > m_weights;
      //! array of NICs (see Brown, 1976)
      boost::numeric::ublas::bounded_vector<double, 3> m_nicVector;
      SparseBlockRowMatrix m_cholmod_QMatrix;
      //! The CholMod matrix associated with this point
      SparseBlockRowMatrix m_cholmodQMatrix;
  };

  // typedefs
  //! Definition for BundleControlPointQSP, a shared pointer to a BundleControlPoint.
  typedef QSharedPointer<BundleControlPoint> BundleControlPointQsp;
}

+70 −46
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ using namespace Isis;
void printBundleMeasure(BundleMeasure &);

/**
 * This class is used to test loading objects from xml files.
 * 
 * @author 2014 Jeannie Backer
 *
 * @internal
@@ -602,11 +604,15 @@ int main(int argc, char *argv[]) {
    BundleControlPoint bcp1(freePoint);
    bool errorProp = false;
    double radiansToMeters = 10.0;
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters); // ??? these print outs are not pretty... fix???
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
    errorProp = true;
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters); // ??? these print outs are not pretty... fix???
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
    qDebug() << "";

    qDebug() << "Modify FreePoint - setAdjustedSurfacePoint(0,0,10) and addMeasure()";
@@ -614,30 +620,40 @@ int main(int argc, char *argv[]) {
                     Longitude(0.0, Angle::Degrees), 
                     Distance(10.0, Distance::Meters));
    bcp1.setAdjustedSurfacePoint(sp1);
    BundleMeasure bcm = *(bcp1.addMeasure(cm1)); // ???? this appears to do nothing! measure is added to the internal QVector of measures, not the member control point...
                                               // probably need to fix the format string methods to use "this" instead of member control point???
    // ??? this appears to do nothing! measure is added to the internal QVector of measures,
    // not the member control point...
    // probably need to fix the format string methods to use "this" instead of member control point
    // and accessor methods???
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters); // ??? these print outs are not pretty... fix???
    BundleMeasure bcm = *(bcp1.addMeasure(cm1));
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
    // ??? these print outs are not pretty... fix???
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);

    qDebug() << "Modify FreePoint - setWeights() - solveRadius=false";
    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings); // default solveRadius=false
    // default solveRadius=false
    BundleSettingsQsp settings = BundleSettingsQsp(new BundleSettings);
    double metersToRadians = 1.0 / radiansToMeters;
    bcp1.setWeights(settings, metersToRadians);
    qDebug().noquote() << bcp1.formatBundleOutputSummaryString(errorProp);
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
    boost::numeric::ublas::bounded_vector< double, 3 > aprioriSigmas = bcp1.aprioriSigmas();
    boost::numeric::ublas::bounded_vector< double, 3 > weights = bcp1.weights();
    boost::numeric::ublas::bounded_vector< double, 3 > corrections = bcp1.corrections(); //??? never set 000??? init to 1.0e+50???
    boost::numeric::ublas::bounded_vector< double, 3 > adjustedSigmas = bcp1.adjustedSigmas(); //??? never set 000??? 1.0e+50???
    boost::numeric::ublas::bounded_vector<double, 3> nicVector = bcp1.nicVector(); //??? never set 000c??? 1.0e+50???
    SparseBlockRowMatrix qMatrix = bcp1.cholmod_QMatrix(); //??? empty matrix...
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
    //??? never set 000??? init to 1.0e+50???
    boost::numeric::ublas::bounded_vector< double, 3 > corrections = bcp1.corrections();
    //??? never set 000??? 1.0e+50???
    boost::numeric::ublas::bounded_vector< double, 3 > adjustedSigmas = bcp1.adjustedSigmas();
    //??? never set 000c??? 1.0e+50???
    boost::numeric::ublas::bounded_vector< double, 3 > nicVector = bcp1.nicVector();
    SparseBlockRowMatrix qMatrix = bcp1.cholmodQMatrix(); //??? empty matrix...
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "N/A" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "N/A" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
    qDebug() << "corrections:    " << corrections[0] << corrections[1] << corrections[2];
    qDebug() << "adjustedSigmas: " << (Isis::IsSpecial(adjustedSigmas[0]) ? "N/A" : Isis::toString(adjustedSigmas[0]))
    qDebug() << "adjustedSigmas: "
               << (Isis::IsSpecial(adjustedSigmas[0]) ? "N/A" : Isis::toString(adjustedSigmas[0]))
               << (Isis::IsSpecial(adjustedSigmas[1]) ? "N/A" : Isis::toString(adjustedSigmas[1]))
               << (Isis::IsSpecial(adjustedSigmas[2]) ? "N/A" : Isis::toString(adjustedSigmas[2]));
    qDebug() << "nicVector:      " << nicVector[0] << nicVector[1] << nicVector[2];
@@ -652,7 +668,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp1.aprioriSigmas();
    weights = bcp1.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "N/A" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "N/A" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -665,7 +682,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp1.formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp1.aprioriSigmas();
    weights = bcp1.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "N/A" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "N/A" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "N/A" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -674,8 +692,9 @@ int main(int argc, char *argv[]) {
    ControlPoint *cp = bcp1.rawControlPoint();
    qDebug() << "Raw control point equal to original?    " << toString(*cp == *freePoint);
    qDebug() << "Raw control point is rejected?          " << toString(bcp1.isRejected());
    SurfacePoint sp = bcp1.getAdjustedSurfacePoint();
    qDebug() << "Adjusted SurfacePoint (Lat, Lon, Rad) = " << toString(sp.GetLatitude().degrees())
    SurfacePoint sp = bcp1.adjustedSurfacePoint();
    qDebug() << "Adjusted SurfacePoint (Lat, Lon, Rad) = "
               << toString(sp.GetLatitude().degrees())
               << toString(sp.GetLongitude().degrees())
               << toString(sp.GetLocalRadius().meters());
    qDebug() << "";
@@ -697,7 +716,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp3->formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp3->aprioriSigmas();
    weights = bcp3->weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -718,7 +738,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp4.aprioriSigmas();
    weights = bcp4.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -732,7 +753,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp4.aprioriSigmas();
    weights = bcp4.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -746,7 +768,8 @@ int main(int argc, char *argv[]) {
    qDebug().noquote() << bcp4.formatBundleOutputDetailString(errorProp, radiansToMeters);
    aprioriSigmas = bcp4.aprioriSigmas();
    weights = bcp4.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -790,7 +813,8 @@ int main(int argc, char *argv[]) {
    aprioriSigmas = bcp5.aprioriSigmas(); // these values were verified by comparing against
                                          // SurfacePoint truth data
    weights = bcp5.weights();
    qDebug() << "aprioriSigmas:  " << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
    qDebug() << "aprioriSigmas:  "
               << (Isis::IsSpecial(aprioriSigmas[0]) ? "NULL" : Isis::toString(aprioriSigmas[0]))
               << (Isis::IsSpecial(aprioriSigmas[1]) ? "NULL" : Isis::toString(aprioriSigmas[1]))
               << (Isis::IsSpecial(aprioriSigmas[2]) ? "NULL" : Isis::toString(aprioriSigmas[2]));
    qDebug() << "weights:        " << weights[0] << weights[1] << weights[2];
@@ -829,7 +853,7 @@ int main(int argc, char *argv[]) {
    // BundleObservation  *parentObs = 
    bundleMeasure.parentBundleObservation();
    BundleControlPoint *parentBCP = bundleMeasure.parentControlPoint();
    qDebug() << "parent control point id" << parentBCP->getId();
    qDebug() << "parent control point id" << parentBCP->id();
    // BundleImage        *parentImage = 
    bundleMeasure.parentBundleImage(); //TODO m_parentBundleImage always NULL ???