Commit 7007a394 authored by Ken Edmundson's avatar Ken Edmundson
Browse files

addressed error propagation speed issues in jigsaw; added screen output during...

addressed error propagation speed issues in jigsaw; added screen output during error propagation; fixes #2031

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/trunk@5729 41f8697f-d340-4b68-9986-7bafba869bb8
parent d73d4575
Loading
Loading
Loading
Loading
+335 −31
Original line number Diff line number Diff line
/**
 * @file
 *   Unless noted otherwise, the portions of Isis written by the USGS are public
 *   domain. See individual third-party library and package descriptions for
 *   intellectual property information,user agreements, and related information.
 *
 *   Although Isis has been used by the USGS, no warranty, expressed or implied,
 *   is made by the USGS as to the accuracy and functioning of such software
 *   and related material nor shall the fact of distribution constitute any such
 *   warranty, and no responsibility is assumed by the USGS in connection
 *   therewith.
 *
 *   For additional information, launch
 *   $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see
 *   the Privacy & Disclaimers page on the Isis website,
 *   http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on
 *   http://www.usgs.gov/privacy.html.
 */

#include "SparseBlockMatrix.h"

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>

#include <iostream>
#include <iomanip>
#include <QDebug>
#include <QMapIterator>
#include <QListIterator>

#include "IString.h"

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>


using namespace boost::numeric::ublas;

namespace Isis {
@@ -42,6 +23,7 @@ namespace Isis {
    wipe();
  }


  /**
   * Deletes all pointer elements and removes them from the map.
   * Effectively, a destructor, and in fact, called by the
@@ -52,13 +34,15 @@ void SparseBlockColumnMatrix::wipe() {
    clear();
  }


  /**
 * Copy constructor. See copy method below.
   * Copy constructor. Calls copy method immediately below.
   */
  SparseBlockColumnMatrix::SparseBlockColumnMatrix(const SparseBlockColumnMatrix& src) {
    copy(src);
  }


  /**
   * Copy method.
   */
@@ -79,6 +63,7 @@ void SparseBlockColumnMatrix::copy(const SparseBlockColumnMatrix& src) {
     }
  }


  /**
   * "Equals" operator.
   */
@@ -92,6 +77,7 @@ SparseBlockColumnMatrix&
    return *this;
  }


  /**
   * Inserts a "newed" boost matrix<double>* of size (nRows, nCols) into the
   * map with the block column number as key. The matrix::clear call initializes
@@ -124,6 +110,7 @@ bool SparseBlockColumnMatrix::InsertMatrixBlock(int nColumnBlock, int nRows,
    return true;
  }


  /**
   * Returns total number of matrix elements in map (NOTE: NOT the number of
   * matrix blocks). The sum of all the elements of all the matrix blocks.
@@ -144,6 +131,51 @@ int SparseBlockColumnMatrix::numberOfElements() {
     return nElements;
  }


  /**
   * Returns total number of columns in map (NOTE: NOT the number of
   * matrix blocks).
   */
  int SparseBlockColumnMatrix::numberOfColumns() {

    int nColumns = 0;

    QMapIterator<int, matrix<double>*> it(*this);
     while (it.hasNext()) {
         it.next();

         if( !it.value() )
           continue;

         nColumns = it.value()->size2();
         break;
     }

     return nColumns;
  }


  /**
   * Returns total number of rows in map (this needs to be clarified and maybe rewritten)
   * its the number of rows in the block on the diagonal (the last one in the column).
   */
  int SparseBlockColumnMatrix::numberOfRows() {

    // iterate to last block (the diagonal one)
    QMapIterator<int, matrix<double>*> it(*this);
     while (it.hasNext()) {
         it.next();

         if( !it.value() )
           continue;
     }

     int nRows = it.value()->size1();

    return nRows;
  }


  /**
   * Prints matrix blocks to std output stream out for debugging.
   */
@@ -167,6 +199,7 @@ void SparseBlockColumnMatrix::print(std::ostream& outstream) {
     }
  }


  /**
   * Sets all elements of all matrix blocks to zero.
   */
@@ -178,6 +211,110 @@ void SparseBlockColumnMatrix::zeroBlocks() {
    }
  }


  /**
   * Writes matrix to binary disk file pointed to by QDataStream stream
   */
  QDataStream &operator<<(QDataStream &stream, const SparseBlockColumnMatrix &sbcm) {
    // write number of blocks in this column
    int nBlocks = sbcm.size();
    stream << nBlocks;

    QMapIterator<int, matrix<double>*> it(sbcm);
     while ( it.hasNext() ) {
       it.next();

       if( !it.value() )
         continue;

       int nRows = it.value()->size1();
       int nCols = it.value()->size2();

       // write block number (key); rows (size1); and columns (size2)
       stream << it.key() << nRows << nCols;

       double* data = &it.value()->data()[0];

       // write raw matrix data
       stream.writeRawData((const char*)data, nRows*nCols*sizeof(double));
     }

    return stream;
  }


  /**
   * Reads matrix from binary disk file pointed to by QDataStream stream
   */
  QDataStream &operator>>(QDataStream &stream, SparseBlockColumnMatrix &sbcm) {
    int nBlocks, nBlockNumber, nRows, nCols;
    int i, r, c;

    stream >> nBlocks;

    for ( i = 0; i < nBlocks; i++) {
      // read block number (key); rows (size1); and columns (size2)
      stream >> nBlockNumber >> nRows >> nCols;

      double data[nRows*nCols];

      // read raw matrix data
      stream.readRawData((char*)data, nRows*nCols*sizeof(double));

      // insert matrix at correct key
      sbcm.InsertMatrixBlock(nBlockNumber, nRows, nCols);

      // get matrix
      matrix<double>* matrix = sbcm[nBlockNumber];

      // fill with data
      for (r = 0; r < nRows; r++ ) {
        for (c = 0; c < nCols; c++ ) {
          int nLocation = r*nRows + c;
          (*matrix)(r,c) = data[nLocation];
        }
      }
    }

    return stream;
  }

  /**
   * Writes matrix to QDebug stream (dbg)
   */
  QDebug operator<<(QDebug dbg, const SparseBlockColumnMatrix &sbcm) {
    dbg.space() << "New Block" << endl;

    QMapIterator<int, matrix<double>*> it(sbcm);
     while ( it.hasNext() ) {
       it.next();

       if( !it.value() )
         continue;

       // get matrix
       matrix<double>* matrix = it.value();

       // matrix rows, columns
       int nRows = matrix->size1();
       int nCols = matrix->size2();

       dbg.nospace() << qSetFieldWidth(4);
       dbg.nospace() << qSetRealNumberPrecision(8);

       for (int r = 0; r < nRows; r++ ) {
         for (int c = 0; c < nCols; c++ ) {
             dbg.space() << (*matrix)(r,c);
         }
         dbg.space() << endl;
       }
       dbg.space() << endl;
     }

    return dbg;
  }


  //////////////////////////////////////////////////////////////////////////////
  // SparseBlockRowMatrix methods

@@ -188,6 +325,7 @@ SparseBlockRowMatrix::~SparseBlockRowMatrix() {
     wipe();
  }


  /**
   * Deletes all pointer elements and removes them from the map.
   * Effectively, a destructor, and in fact, called by the
@@ -198,13 +336,15 @@ void SparseBlockRowMatrix::wipe() {
    clear();
  }


  /**
 * Copy constructor. See copy method below.
   * Copy constructor. Calls method immediately below.
   */
  SparseBlockRowMatrix::SparseBlockRowMatrix(const SparseBlockRowMatrix& src) {
    copy(src);
  }


  /**
   * Copy method.
   */
@@ -225,6 +365,7 @@ void SparseBlockRowMatrix::copy(const SparseBlockRowMatrix& src) {
     }
  }


  /**
   * "Equals" operator.
   */
@@ -238,6 +379,7 @@ SparseBlockRowMatrix&
    return *this;
  }


  /**
   * Inserts a "newed" boost matrix<double>* of size (nRows, nCols) into the
   * map with the block row number as key. The matrix::clear call initializes
@@ -265,6 +407,7 @@ bool SparseBlockRowMatrix::InsertMatrixBlock(int nRowBlock, int nRows,
    return true;
  }


  /**
   * Returns total number of matrix elements in map (NOTE: NOT the number of
   * matrix blocks). The sum of all the elements of all the matrix blocks.
@@ -285,6 +428,7 @@ int SparseBlockRowMatrix::numberOfElements() {
    return nElements;
  }


  /**
   * Prints matrix blocks to std output stream out for debugging.
   */
@@ -308,6 +452,7 @@ void SparseBlockRowMatrix::print(std::ostream& outstream) {
     }
  }


  /**
   * Sets all elements of all matrix blocks to zero.
   */
@@ -319,6 +464,7 @@ void SparseBlockRowMatrix::zeroBlocks() {
    }
  }


  /**
   * Copies a SparseBlockRowMatrix to a Boost compressed_matrix
   * This may be a temporary implementation
@@ -350,6 +496,109 @@ void SparseBlockRowMatrix::copyToBoost(compressed_matrix<double>& B) {
    }
  }

  /**
   * Writes matrix to binary disk file pointed to by QDataStream stream
   */
  QDataStream &operator<<(QDataStream &stream, const SparseBlockRowMatrix &sbrm) {
    // write number of blocks in this column
    int nBlocks = sbrm.size();
    stream << nBlocks;

    QMapIterator<int, matrix<double>*> it(sbrm);
     while ( it.hasNext() ) {
       it.next();

       if( !it.value() )
         continue;

       int nRows = it.value()->size1();
       int nCols = it.value()->size2();

       // write block number (key); rows (size1); and columns (size2)
       stream << it.key() << nRows << nCols;

       double* data = &it.value()->data()[0];

       // write raw matrix data
       stream.writeRawData((const char*)data, nRows*nCols*sizeof(double));
     }

    return stream;
  }


  /**
   * Reads matrix from binary disk file pointed to by QDataStream stream
   */
  QDataStream &operator>>(QDataStream &stream, SparseBlockRowMatrix &sbrm) {
    int nBlocks, nBlockNumber, nRows, nCols;
    int i, r, c;

    stream >> nBlocks;

    for ( i = 0; i < nBlocks; i++) {
      // read block number (key); rows (size1); and columns (size2)
      stream >> nBlockNumber >> nRows >> nCols;

      double data[nRows*nCols];

      // read raw matrix data
      stream.readRawData((char*)data, nRows*nCols*sizeof(double));

      // insert matrix at correct key
      sbrm.InsertMatrixBlock(nBlockNumber, nRows, nCols);

      // get matrix
      matrix<double>* matrix = sbrm[nBlockNumber];

      // fill with data
      for (r = 0; r < nRows; r++ ) {
        for (c = 0; c < nCols; c++ ) {
          int nLocation = r*nRows + c;
          (*matrix)(r,c) = data[nLocation];
        }
      }
    }

    return stream;
  }

  /**
   * Writes matrix to QDebug stream (dbg)
   */
  QDebug operator<<(QDebug dbg, const SparseBlockRowMatrix &sbrm) {
    dbg.space() << "New Block" << endl;

    QMapIterator<int, matrix<double>*> it(sbrm);
     while ( it.hasNext() ) {
       it.next();

       if( !it.value() )
         continue;

       // get matrix
       matrix<double>* matrix = it.value();

       // matrix rows, columns
       int nRows = matrix->size1();
       int nCols = matrix->size2();

       dbg.nospace() << qSetFieldWidth(4);
       dbg.nospace() << qSetRealNumberPrecision(8);

       for (int r = 0; r < nRows; r++ ) {
         for (int c = 0; c < nCols; c++ ) {
             dbg.space() << (*matrix)(r,c);
         }
         dbg.space() << endl;
       }
       dbg.space() << endl;
     }

    return dbg;
  }


  //////////////////////////////////////////////////////////////////////////////
  // SparseBlockMatrix methods

@@ -360,6 +609,7 @@ SparseBlockMatrix::~SparseBlockMatrix() {
    wipe();
  }


  /**
   * Deletes all pointer elements and removes them from the list.
   * Effectively, a destructor, and in fact, called by the
@@ -370,8 +620,9 @@ void SparseBlockMatrix::wipe() {
    clear();
  }


  /**
 * Copy constructor. See copy method below.
   * Copy constructor. Calls copy method immediately below.
   */
  SparseBlockMatrix::SparseBlockMatrix(const SparseBlockMatrix& src) {
    copy(src);
@@ -390,6 +641,7 @@ void SparseBlockMatrix::copy(const SparseBlockMatrix& src) {
    }
  }


  /**
   * "Equals" operator.
   */
@@ -402,6 +654,7 @@ SparseBlockMatrix& SparseBlockMatrix::operator=(const SparseBlockMatrix& src) {
    return *this;
  }


  /**
   * Initializes number of columns (SparseBlockColumnMatrix).
   *
@@ -415,6 +668,7 @@ bool SparseBlockMatrix::setNumberOfColumns( int n ) {
    return true;
  }


  /**
   * Inserts a "newed" boost matrix<double>* of size (nRows, nCols) into the
   * matrix at nColumnBlock, nRowBlock. The inserted matrix elements are
@@ -431,6 +685,7 @@ bool SparseBlockMatrix::InsertMatrixBlock(int nColumnBlock, int nRowBlock,
    return (*this)[nColumnBlock]->InsertMatrixBlock(nRowBlock, nRows, nCols);
  }


  /**
   * Returns total number of blocks in matrix.
   */
@@ -447,6 +702,7 @@ int SparseBlockMatrix::numberOfBlocks() {
    return nBlocks;
  }


  /**
   * Returns number of diagonal matrix blocks (equivalent to size - there is one
   * per column).
@@ -474,6 +730,7 @@ int SparseBlockMatrix::numberOfDiagonalBlocks() {
    return ndiagBlocks;
  }


  /**
   * Returns number of off-diagonal matrix blocks.
   */
@@ -481,6 +738,7 @@ int SparseBlockMatrix::numberOfOffDiagonalBlocks() {
    return (numberOfBlocks() - numberOfDiagonalBlocks());
  }


  /**
   * Returns number of matrix elements in matrix.
   */
@@ -497,6 +755,7 @@ int SparseBlockMatrix::numberOfElements() {
    return nElements;
  }


  /**
   * Returns pointer to boost matrix at (column, row).
   *
@@ -507,6 +766,16 @@ matrix<double>* SparseBlockMatrix::getBlock(int column, int row) {
    return (*(*this)[column])[row];
  }


  /**
   * Sets all elements of all matrix blocks to zero.
   */
  void SparseBlockMatrix::zeroBlocks() {
    for ( int i = 0; i < size(); i++ )
      (*this)[i]->zeroBlocks();
  }


  /**
   * Prints matrix blocks to std output stream out for debugging.
   */
@@ -528,12 +797,47 @@ void SparseBlockMatrix::print(std::ostream& outstream) {
    }
  }


  /**
 * Sets all elements of all matrix blocks to zero.
   * Writes matrix to binary disk file pointed to by QDataStream stream
   */
void SparseBlockMatrix::zeroBlocks() {
  for ( int i = 0; i < size(); i++ )
    (*this)[i]->zeroBlocks();
  QDataStream &operator<<(QDataStream &stream, const SparseBlockMatrix &sparseBlockMatrix) {
    int nBlockColumns = sparseBlockMatrix.size();

    stream << nBlockColumns;

    for (int i =0; i < nBlockColumns; i++)
      stream << *sparseBlockMatrix.at(i);

    return stream;
  }


  /**
   * Reads matrix from binary disk file pointed to by QDataStream stream
   */
  QDataStream &operator>>(QDataStream &stream, SparseBlockMatrix &sparseBlockMatrix) {
    int nBlockColumns;

    // read and set number of block columns
    stream >> nBlockColumns;
    sparseBlockMatrix.setNumberOfColumns(nBlockColumns);

    for (int i =0; i < nBlockColumns; i++)
      stream >> *sparseBlockMatrix.at(i);

    return stream;
  }

  /**
   * Writes matrix to QDebug stream (dbg)
   */
  QDebug operator<<(QDebug dbg, const SparseBlockMatrix &m) {
    int nBlockColumns = m.size();

    for (int i =0; i < nBlockColumns; i++)
      dbg << *m.at(i);

    return dbg;
  }
}
+34 −1
Original line number Diff line number Diff line
@@ -23,11 +23,12 @@

#include <QMap>
#include <QList>

#include <iostream>

#include <boost/numeric/ublas/fwd.hpp>

class QDebug;

namespace Isis {

  /**
@@ -41,6 +42,8 @@ namespace Isis {
   *
   * @internal
   *   @history 2011-07-29 Ken Edmundson Created
   *   @history 2014-02-25 Ken Edmundson - operators to read/write matrices to binary disk file and
   *                       to write matrices to QDebug stream.
   */
  class SparseBlockColumnMatrix :
      public QMap< int, boost::numeric::ublas::matrix<double>* > {
@@ -60,9 +63,19 @@ namespace Isis {
    void zeroBlocks();
    bool InsertMatrixBlock(int nColumnBlock, int nRows, int nCols);
    int numberOfElements();
    int numberOfRows();
    int numberOfColumns();
    void print(std::ostream& outstream);
  };

  // operators to read/write SparseBlockColumnMatrix to/from binary disk file
  QDataStream &operator<<(QDataStream &, const SparseBlockColumnMatrix &);
  QDataStream &operator>>(QDataStream &, SparseBlockColumnMatrix &);

  // operator to write SparseBlockColumnMatrix to QDebug stream
  QDebug operator<<(QDebug dbg, const SparseBlockColumnMatrix &sbcm);


  /**
   * @brief SparseBlockRowMatrix
   *
@@ -74,6 +87,8 @@ namespace Isis {
   *
   * @internal
   *   @history 2011-07-29 Ken Edmundson Created
   *   @history 2014-02-25 Ken Edmundson - operators to read/write matrices to binary disk file and
   *                       to write matrices to QDebug stream.
   */
  class SparseBlockRowMatrix :
      public QMap< int, boost::numeric::ublas::matrix<double>* > {
@@ -87,6 +102,7 @@ namespace Isis {

    SparseBlockRowMatrix& operator=(const SparseBlockRowMatrix& src);


    void wipe();
    void copy(const SparseBlockRowMatrix& src);

@@ -97,6 +113,13 @@ namespace Isis {
    void print(std::ostream& outstream);
  };

  // operators to read/write SparseBlockRowMatrix to/from binary disk file
  QDataStream &operator<<(QDataStream &, const SparseBlockRowMatrix &);
  QDataStream &operator>>(QDataStream &, SparseBlockRowMatrix &);

  // operator to write SparseBlockRowMatrix to QDebug stream
  QDebug operator<<(QDebug dbg, const SparseBlockRowMatrix &sbcm);

  /**
   * @brief SparseBlockMatrix
   *
@@ -108,6 +131,8 @@ namespace Isis {
   *
   * @internal
   *   @history 2011-07-29 Ken Edmundson Created
   *   @history 2014-02-25 Ken Edmundson - operators to read/write matrices to binary disk file and
   *                       to write matrices to QDebug stream.
   */
  class SparseBlockMatrix : public QList< SparseBlockColumnMatrix* > {

@@ -132,7 +157,15 @@ namespace Isis {
    int numberOfOffDiagonalBlocks();
    int numberOfElements();
    void print(std::ostream& outstream);
    bool write(std::ofstream &fp_out, bool binary=true);
  };

  // operators to read/write SparseBlockMatrix to/from binary disk file
  QDataStream &operator<<(QDataStream &, const SparseBlockMatrix &);
  QDataStream &operator>>(QDataStream &, SparseBlockMatrix &);

  // operator to write SparseBlockMatrix to QDebug stream
  QDebug operator<<(QDebug dbg, const SparseBlockMatrix &m);
}

#endif
+17 −5
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
#include "CubeAttribute.h"
#include "iTime.h"
#include <vector>

#include <QDir>

using namespace std;
using namespace Isis;
@@ -18,7 +18,6 @@ void IsisMain() {
  QString cnetFile = ui.GetFileName("CNET");
  QString cubeList = ui.GetFileName("FROMLIST");
  
  
  BundleAdjust *b = NULL;

  // Get the held list if entered and prep for bundle adjustment, to determine which constructor to use
@@ -54,9 +53,23 @@ void IsisMain() {
  b->SetObservationMode(ui.GetBoolean("OBSERVATIONS"));
  b->SetSolutionMethod(ui.GetString("METHOD"));
  b->SetSolveRadii(ui.GetBoolean("RADIUS"));
  b->SetErrorPropagation(ui.GetBoolean("ERRORPROPAGATION"));
  b->SetOutlierRejection(ui.GetBoolean("OUTLIER_REJECTION"));
  b->SetUpdateCubes(ui.GetBoolean("UPDATE"));
  b->SetRejectionMultiplier(ui.GetDouble("REJECTION_MULTIPLIER"));
  b->SetOutlierRejection(ui.GetBoolean("OUTLIER_REJECTION"));

  b->SetErrorPropagation(ui.GetBoolean("ERRORPROPAGATION"));
//  if (ui.WasEntered("BINARYFILEPATH")) {
//    QString binaryfilepath = ui.GetString("BINARYFILEPATH");
//    QDir dir(binaryfilepath);

//    // verify path exists
//    if (!dir.exists()) {
//      QString msg = QString("BINARYFILEPATH [%1] does not exist").arg(binaryfilepath);
//      throw IException(IException::User, msg, _FILEINFO_);
//    }
//    else
//      b->SetErrorPropagationBinaryFilePath(binaryfilepath);
//  }

  b->SetCKDegree(ui.GetInteger("CKDEGREE"));
  b->SetSolveCKDegree(ui.GetInteger("CKSOLVEDEGREE"));
@@ -242,5 +255,4 @@ void IsisMain() {
  }

  delete b;

}
+18 −41
Original line number Diff line number Diff line
@@ -169,9 +169,13 @@
      Added REJECTION_MULTIPLIER to interface, part of Mantis issue #637.
    </change>
    <change name="Ken Edmundson" date="2012-01-19">
      Added SPKDEGEE and SPKSOLVEDEGREE; changed name of SOLVEDEGREE to
      Added SPKDEGREE and SPKSOLVEDEGREE; changed name of SOLVEDEGREE to
      CKSOLVEDEGREE.
    </change>
    <change name="Ken Edmundson" date="2014-02-13">
      Added separate group for Error Propagation with option to write inverse matrix to binary
      file. For extremely large networks where memory/time for error propagation is limited.
    </change>
  </history>

  <groups>
@@ -225,29 +229,6 @@
          *.net
        </filter>
      </parameter>

<!--  Removed until fully functional 2011-09-26
      <parameter name="SC_SIGMAS">
        <type>filename</type>
        <internalDefault>none</internalDefault>
        <fileMode>input</fileMode>
        <brief>
          Input spacecraft parameter uncertainties
        </brief>
        <description>
          This file contains a list of parameter uncertainties for position and 
        angle parameters (including those of velocity and acceleration). Format 
        is one instrument per line; entries separated by commas; as follows... 
          SPACECRAFTNAME/INSTRUMENTID, sPos, sPos(v), sPos(a), sAngles, 
          sAngles(v), sAngles(a). Any entries without values should be filled 
          with a -1.0 as a placeholder
        </description>
        <filter>
          *.csv *.txt
        </filter>
      </parameter>
-->

      <parameter name="ONET">
        <type>filename</type>
        <fileMode>output</fileMode>
@@ -373,19 +354,6 @@
        </list>
      </parameter>

      <parameter name="ERRORPROPAGATION">
        <brief> Compute variance-covariance matrix</brief>
        <description>
            Select this option to compute the variance-covariance matrix of the 
            parameters.  The parameter uncertainties can be computed from this
            matrix.
        </description>
        <type>boolean</type>
        <default>
          <item>No</item>
        </default>
      </parameter>

      <parameter name="OUTLIER_REJECTION">
      <brief> Auto-rejection of outliers</brief>
      <description>
@@ -405,10 +373,22 @@
          <item>3.0</item>
        </default>
      </parameter>

    <parameter name="ERRORPROPAGATION">
      <brief> Compute variance-covariance matrix</brief>
      <description>
          Select this option to compute the variance-covariance matrix of the
          parameters.  The parameter uncertainties can be computed from this
          matrix.
      </description>
      <type>boolean</type>
      <default>
        <item>No</item>
      </default>
    </parameter>
   </group>

   <group name="Maximum Likelihood Estimation">
    
      <parameter name="MODEL1">
        <type>string</type>
        <brief>A maximum likelihood estimation model selection.</brief>
@@ -592,11 +572,8 @@
        <minimum inclusive="no">0</minimum>
        <maximum inclusive="no">1</maximum>
      </parameter>

    </group>

 

    <group name="Convergence Criteria">
      <parameter name="SIGMA0">
        <brief> standard deviation of unit weight
+2 −12
Original line number Diff line number Diff line
@@ -43,16 +43,12 @@ commands:
	camsolve=angles \
	spsolve=position \
	spacecraft_position_sigma=1000.0 \
	camera_angles_sigma=2.0 | grep -v "100% Processed" | \
	grep -v "jigsaw" > apollo_specialk_outLog.txt; \
	camera_angles_sigma=2.0 > /dev/null;
	cat bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
	  | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
	  | sed 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
	  | sed s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
	  > $(OUTPUT)/apollo_specialK_bundleout.txt;
	cat apollo_specialk_outLog.txt | grep -v "Elapsed Time:" | grep -v "TotalElapsedTime" | grep -v "ErrorPropagationElapsedTime" \
	  | sed 's/\([0-9][0-9]*\.[0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
	  > $(OUTPUT)/apollo_specialk_outLog.txt;
	cat residuals.csv \
	  | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
	  > $(OUTPUT)/apollo_specialK_residuals.csv;
@@ -62,7 +58,6 @@ commands:
	$(RM) bundleout_images.csv > /dev/null;
	$(MV) bundleout_points.csv $(OUTPUT)/apollo_specialK_bundleout_points.csv > /dev/null;
	$(RM) bundleout.txt print.prt > /dev/null;
	$(RM) apollo_specialk_outLog.txt > /dev/null;
	$(RM) residuals.csv > /dev/null;
	$(APPNAME) fromlist=$(OUTPUT)/cube.lis  \
	cnet=$(INPUT)/Ames_7-ImageLSTest_USGS_combined.net \
@@ -82,16 +77,12 @@ commands:
	camsolve=angles \
	spsolve=position \
	spacecraft_position_sigma=1000.0 \
	camera_angles_sigma=2.0 | grep -v "100% Processed" | \
	grep -v "jigsaw" > apollo_cholmod_outLog.txt;
	camera_angles_sigma=2.0 > /dev/null;
	cat bundleout.txt  | grep -v "Run Time:" | grep -v "Elapsed Time:" \
	  | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
	  | sed 's/\([0-9][0-9]*\.[0-9][0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
	  | sed s/`date +%Y-%m-%dT`\[0-2\]\[0-9\]:\[0-5\]\[0-9\]:\[0-5\]\[0-9\]/date/ \
	  > $(OUTPUT)/apollo_cholmod_bundleout.txt;
	cat apollo_cholmod_outLog.txt | grep -v "Elapsed Time:" | grep -v "TotalElapsedTime" | grep -v "ErrorPropagationElapsedTime" \
	  | sed 's/\([0-9][0-9]*\.[0-9][0-9][0-9]\)\([0-9][0-9]*\)/\1/g' \
	  > $(OUTPUT)/apollo_cholmod_outLog.txt;
	cat residuals.csv \
	  | perl -pe 's/(^|,|: )([^,:]+\/)([^,\/:]*\.)(net|cub)/\1\3\4/g' 2>/dev/null \
	  > $(OUTPUT)/apollo_cholmod_residuals.csv;
@@ -101,6 +92,5 @@ commands:
	$(RM) bundleout_images.csv > /dev/null;
	$(MV) bundleout_points.csv $(OUTPUT)/apollo_cholmod_bundleout_points.csv > /dev/null;
	$(RM) bundleout.txt print.prt > /dev/null;
	$(RM) apollo_cholmod_outLog.txt > /dev/null;
	$(RM) residuals.csv > /dev/null;
	$(RM) $(OUTPUT)/cube.lis print.prt > /dev/null;
Loading