Commit 7c0e777e authored by Ian Humphrey's avatar Ian Humphrey
Browse files

Integrated kedmundson's changes to jigsaw's csv and txt output. Fixes #4527.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@7238 41f8697f-d340-4b68-9986-7bafba869bb8
parent 3d98e372
Loading
Loading
Loading
Loading
+30 −90
Original line number Diff line number Diff line
@@ -546,148 +546,80 @@ namespace Isis {
    outputColumns.push_back("rms,");
    outputColumns.push_back("rms,");


    BundleObservationSolveSettings obsSettings = m_settings->observationSolveSettings(0);

    int numberCamPosCoefSolved = obsSettings.numberCameraPositionCoefficientsSolved();
    int numberCamAngleCoefSolved  = obsSettings.numberCameraAngleCoefficientsSolved();
    bool solveTwist = obsSettings.solveTwist();

    char strCoeff = 'a' + numberCamPosCoefSolved -1;
    std::ostringstream oStr;
    int nCoeff = 1;
    if (numberCamPosCoefSolved > 0)
      nCoeff = numberCamPosCoefSolved;

    for (int i = 0; i < nCoeff; i++) {
      if (i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (nCoeff == 1)
          outputColumns.push_back("X,");
        else {
          QString str = "X(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "X(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
    }
    strCoeff = 'a' + numberCamPosCoefSolved - 1;
    for (int i = 0; i < nCoeff; i++) {
      if (i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (nCoeff == 1)
          outputColumns.push_back("Y,");
        else {
          QString str = "Y(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "Y(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
    }
    strCoeff = 'a' + numberCamPosCoefSolved - 1;
    for (int i = 0; i < nCoeff; i++) {
      if (i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (nCoeff == 1) {
          outputColumns.push_back("Z,");
        }
        else {
          QString str = "Z(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "Z(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
      if (!i)
        break;
    }

    strCoeff = 'a' + numberCamAngleCoefSolved - 1;
    for (int i = 0; i < numberCamAngleCoefSolved; i++) {
      if(i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (numberCamAngleCoefSolved == 1)
          outputColumns.push_back("RA,");
        else {
          QString str = "RA(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "RA(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
    }
    strCoeff = 'a' + numberCamAngleCoefSolved - 1;
    for (int i = 0; i < numberCamAngleCoefSolved; i++) {
      if (i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (numberCamAngleCoefSolved == 1)
          outputColumns.push_back("DEC,");
        else {
          QString str = "DEC(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "DEC(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
    }
    strCoeff = 'a' + numberCamAngleCoefSolved - 1;
    for (int i = 0; i < numberCamAngleCoefSolved; i++) {
      if (i == 0)
        oStr << strCoeff;
      else if (i == 1)
        oStr << strCoeff << "t";
      else
        oStr << strCoeff << "t" << i;
      for (int j = 0; j < 5; j++) {
        if (numberCamAngleCoefSolved == 1 || !solveTwist) {
          outputColumns.push_back("TWIST,");
        }
        else {
          QString str = "TWIST(";
          str += oStr.str().c_str();
          str += "),";
          QString str = "TWIST(t" + toString(i) + "),";
          outputColumns.push_back(str);
        }
      }
      oStr.str("");
      strCoeff--;
      if (!solveTwist)
        break;
    }
@@ -905,8 +837,12 @@ namespace Isis {
        sprintf(buf,"\n                          CAMSOLVE: ANGLES, VELOCITIES, ACCELERATIONS");
        break;
      default:
        sprintf(buf,"\n                          CAMSOLVE: ALL POLYNOMIAL COEFFICIENTS (%d)",
                pointingSolveDegree);
        sprintf(buf,"\n                          CAMSOLVE: ALL POLYNOMIAL COEFFICIENTS (%d)"
                    "\n                          CKDEGREE: %d"
                    "\n                     CKSOLVEDEGREE: %d",
                pointingSolveDegree,
                globalSettings.ckDegree(),
                globalSettings.ckSolveDegree());
        break;
    }
    fpOut << buf;
@@ -935,8 +871,12 @@ namespace Isis {
        sprintf(buf,"\n                        SPSOLVE: POSITION, VELOCITIES, ACCELERATIONS");
        break;
      default:
        sprintf(buf,"\n                        CAMSOLVE: ALL POLYNOMIAL COEFFICIENTS (%d)",
                positionSolveDegree);
        sprintf(buf,"\n                        SPSOLVE: ALL POLYNOMIAL COEFFICIENTS (%d)"
                    "\n                      SPKDEGREE: %d"
                    "\n                 SPKSOLVEDEGREE: %d",
                positionSolveDegree,
                globalSettings.spkDegree(),
                globalSettings.spkSolveDegree());
        break;
    }
    fpOut << buf;
@@ -1396,7 +1336,6 @@ namespace Isis {
        fpOut << buf;
        sprintf(buf, "\nImage Serial Number: %s\n", image->serialNumber().toLatin1().data());
        fpOut << buf;
      }

        sprintf(buf, "\n    Image         Initial              Total               "
                     "Final             Initial           Final\n"
@@ -1413,6 +1352,7 @@ namespace Isis {
          imagesAndParameters.insert( image, observation->parameterList() );
        }
      }
    }
        
    // Save list of images and their associated parameters for CorrelationMatrix to use in ice.
    m_statisticsResults->setCorrMatImgsAndParams(imagesAndParameters);
+11 −0
Original line number Diff line number Diff line
@@ -78,6 +78,17 @@ namespace Isis {
   *                           USEPVL being removed from jigsaw.  References #4316.
   *   @history 2016-10-28 Tyler Wilson - Modified outputText() to check and output if the solution
   *                           is solving for the radius.  References #4317.
   *   @history 2016-11-14 Ken Edmundson Modified the following...
   *                           -Changed column headers in images.csv to match row headers in bundleout.txt
   *                            (instead of at2, bt, c to indicate coefficients, now using t2, t1, t0, etc)
   *                           -Added output of CKDEGREE, CKSOLVEDEGREE, SPKDEGREE, SPKSOLVEDEGREE to
   *                            bundleout.txt header when CAMSOLVE=ALL and/or SPSOLVE=ALL
   *                           -Fixed typo under SPACECRAFT OPTIONS; what should have said
   *                            "SPSOLVE: All POLYNOMIAL COEFFICIENTS" was
   *                            "CAMSOLVE: All POLYNOMIAL COEFFICIENTS"
   *                           -modified output of image EO in bundleout.txt for images solved with
   *                            observation mode; previously one entry per observation was written,
   *                            now all images in the observation are written separately. 
   */
  class BundleSolutionInfo : public QObject {
    Q_OBJECT
+22 −21
Original line number Diff line number Diff line
@@ -959,9 +959,10 @@ namespace Isis {

    // Set up default values when we are using default position
    QString sigma = "N/A";
    double adjustedSigma = 0.0;
    QString adjustedSigma = "N/A";
    double correction = 0.0;

    // this implies we're writing to bundleout.txt
    if (!imageCSV) {
      // position parameters
      for (int i = 0; i < nPositionParameters; i++) {
@@ -969,7 +970,7 @@ namespace Isis {
        // members
        if (!useDefaultPosition) {
          correction = m_corrections(i);
          adjustedSigma = m_adjustedSigmas(i);
          adjustedSigma = QString::number(m_adjustedSigmas[i], 'f', 8);
          sigma = ( IsSpecial(m_aprioriSigmas[i]) ? "FREE" : toString(m_aprioriSigmas[i], 8) );
        }
        if (errorPropagation) {
@@ -979,7 +980,7 @@ namespace Isis {
          arg(correction, 21, 'f', 8).
          arg(finalParameterValues[i], 20, 'f', 8).
          arg(sigma, 18).
          arg(adjustedSigma, 18, 'f', 8);
          arg(adjustedSigma, 18);
        }
        else {
          qStr = QString("%1%2%3%4%5%6\n").
@@ -1008,12 +1009,12 @@ namespace Isis {
          // TWIST is last parameter, which corresponds to nParameters - nPointingCoefficients
          if ( (i >= nParameters - nPointingCoefficients) && useDefaultTwist) {
            correction = 0.0;
            adjustedSigma = 0.0;
            adjustedSigma = "N/A";
            sigma = "N/A";
          }
          else {
            correction = m_corrections(i - offset);
            adjustedSigma = m_adjustedSigmas(i - offset);
            adjustedSigma = QString::number(m_adjustedSigmas(i-offset) * RAD2DEG, 'f', 8);
            sigma = ( IsSpecial(m_aprioriSigmas[i - offset]) ? "FREE" :
                    toString(m_aprioriSigmas[i-offset], 8) );
          }
@@ -1021,7 +1022,7 @@ namespace Isis {
        // We are using default pointing, so provide default correction and sigma values to output
        else {
          correction = 0.0;
          adjustedSigma = 0.0;
          adjustedSigma = "N/A";
          sigma = "N/A";
        }
        if (errorPropagation) {
@@ -1031,7 +1032,7 @@ namespace Isis {
          arg(correction * RAD2DEG, 21, 'f', 8).
          arg(finalParameterValues[i], 20, 'f', 8).
          arg(sigma, 18).
          arg(adjustedSigma * RAD2DEG, 18, 'f', 8);
          arg(adjustedSigma, 18);
        }
        else {
          qStr = QString("%1%2%3%4%5%6\n").
@@ -1046,19 +1047,20 @@ namespace Isis {
      }

    }
    // this implies we're writing to images.csv
    else {
      // position parameters
      for (int i = 0; i < nPositionParameters; i++) {
        if (!useDefaultPosition) {
          correction = m_corrections(i);
          adjustedSigma = m_adjustedSigmas[i];
          adjustedSigma = QString::number(m_adjustedSigmas[i], 'f', 8);
          sigma = ( IsSpecial(m_aprioriSigmas[i]) ? "FREE" : toString(m_aprioriSigmas[i], 8) );
        }
        // Provide default values for position if not solving position
        else {
          correction = 0.0;
          adjustedSigma = 0.0;
          sigma = "-1.0";
          adjustedSigma = "N/A";
          sigma = "N/A";
        }
        qStr = "";
        if (errorPropagation) {
@@ -1066,7 +1068,7 @@ namespace Isis {
          qStr += toString(correction) + ",";
          qStr += toString(finalParameterValues[i]) + ",";
          qStr += sigma + ",";
          qStr += toString(adjustedSigma) + ",";
          qStr += adjustedSigma + ",";
        }
        else {       
          qStr += toString(finalParameterValues[i] - correction) + ",";
@@ -1092,22 +1094,21 @@ namespace Isis {
          // into m_corrections and m_*sigmas
          if ( (i >= nParameters - nPointingCoefficients) && useDefaultTwist) {
            correction = 0.0;
            adjustedSigma = 0.0;
            sigma = "-1.0";
            adjustedSigma = "N/A";
            sigma = "N/A";
          }
          else {
            correction = m_corrections(i - offset);
            adjustedSigma = m_adjustedSigmas[i - offset];
            adjustedSigma = QString::number(m_adjustedSigmas(i-offset) * RAD2DEG, 'f', 8);
            sigma = ( IsSpecial(m_aprioriSigmas[i-offset]) ? "FREE" :
                toString(m_aprioriSigmas[i-offset], 8) );

          }
        }
        // Provide default values for pointing if not solving pointing
        else {
          correction = 0.0;
          adjustedSigma = 0.0;
          sigma = "-1.0";
          adjustedSigma = "N/A";
          sigma = "N/A";
        }
        qStr = "";
        if (errorPropagation) {        
@@ -1115,7 +1116,7 @@ namespace Isis {
          qStr += toString(correction * RAD2DEG) + ",";
          qStr += toString(finalParameterValues[i]) + ",";
          qStr += sigma + ",";
          qStr += toString(adjustedSigma * RAD2DEG) + ",";
          qStr += adjustedSigma + ",";
        }
        else {
          qStr += toString(finalParameterValues[i] - correction * RAD2DEG) + ",";
+6 −1
Original line number Diff line number Diff line
@@ -70,8 +70,13 @@ namespace Isis {
   *                           values for all solve parameters, whether they are being solved for
   *                           or not. Fixes #4464.
   *   @history 2016-10-27 Tyler Wilson Modified formatBundleOutputString to change N/A to FREE 
   *                           in the ouptut under POINTS DETAL when no lat/lon sigmas were entered.
   *                           in the output under POINTS DETAIL when no lat/lon sigmas were entered.
   *                           Fixes #4317.
   *   @history 2016-11-14 Ken Edmundson Modified the following...
   *                           -changed adjustedSigma from 0.0 to N/A if error propagation is off
   *                            when writing bundleout.txt OR images.csv.
   *                           -changed sigma default from -1.0 to N/A for position and pointing
   *                            parameters when writing images.csv. 
   */
  class BundleObservation : public QVector<BundleImageQsp> {

+18 −18
Original line number Diff line number Diff line
@@ -391,8 +391,8 @@ Object = NoCamAngles
End_Object

    output bundle observation...
0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,
0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,
0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,
0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,
  X  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Y  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Z  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
@@ -400,12 +400,12 @@ End_Object
DEC  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
TWI  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A

  X  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
  Y  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
  Z  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
 RA  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
DEC  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
TWI  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
  X  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Y  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Z  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
 RA  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
DEC  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
TWI  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A

    Set solve settings using with TWIST=FALSE...
Object = NoTwist
@@ -427,8 +427,8 @@ Object = NoTwist
End_Object

    output bundle observation...
0.0,0.0,0.0,8.0,0.0,0.0,0.0,0.0,9.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,8.0,0.0,0.0,0.0,0.0,9.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,8.0,0.0,0.0,0.0,0.0,9.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,
0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,1.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,3.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,1.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,3.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,
0.0,0.0,0.0,8.0,0.00000000,0.0,0.0,0.0,9.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,8.0,0.00000000,0.0,0.0,0.0,9.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,8.0,0.00000000,0.0,0.0,0.0,9.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,1.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,3.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,1.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,3.0,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,
0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,8.0,N/A,0.0,0.0,0.0,9.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,1.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,3.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,1.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,3.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,
  X  (t0)       0.00000000           0.00000000          0.00000000               8.0               N/A
     (t1)       0.00000000           0.00000000          0.00000000               9.0               N/A
     (t2)       0.00000000           0.00000000          0.00000000              FREE               N/A
@@ -508,12 +508,12 @@ DEC (t0) 0.00000000 0.00000000 0.00000000
     (t3)       0.00000000           0.00000000          0.00000000              FREE        0.00000000
     (t4)       0.00000000           0.00000000          0.00000000              FREE        0.00000000
     (t5)       0.00000000           0.00000000          0.00000000              FREE        0.00000000
TWI  (t0)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
     (t1)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
     (t2)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
     (t3)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
     (t4)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
     (t5)       0.00000000           0.00000000          0.00000000               N/A        0.00000000
TWI  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
     (t1)       0.00000000           0.00000000          0.00000000               N/A               N/A
     (t2)       0.00000000           0.00000000          0.00000000               N/A               N/A
     (t3)       0.00000000           0.00000000          0.00000000               N/A               N/A
     (t4)       0.00000000           0.00000000          0.00000000               N/A               N/A
     (t5)       0.00000000           0.00000000          0.00000000               N/A               N/A

    Set solve settings using with CAMSOLVE=ALL and TWIST=TRUE...
Object = SettingsFromBundleObservation
@@ -546,7 +546,7 @@ parameter corrections : 0.0 0.0 0.0
apriori sigmas :        -1.79769313486231e+308     -1.79769313486231e+308     -1.79769313486231e+308     
adjusted sigmas :       0.0     0.0     0.0     
    output bundle observation...
0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,-1.0,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,
0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,0.0,0.0,0.0,FREE,N/A,
  X  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Y  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
  Z  (t0)       0.00000000           0.00000000          0.00000000               N/A               N/A
@@ -554,7 +554,7 @@ adjusted sigmas : 0.0 0.0 0.0
DEC  (t0)       0.00000000           0.00000000          0.00000000              FREE               N/A
TWI  (t0)       0.00000000           0.00000000          0.00000000              FREE               N/A

0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,0.0,0.0,0.0,FREE,0.0,
0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,N/A,N/A,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,0.0,0.0,0.0,FREE,0.00000000,
init exterior orientiation successful?   "Yes"
**ERROR** Unable to apply parameter corrections to BundleObservation.
**ERROR** Instrument rotation is NULL, but pointing solve option is AnglesOnly.