Unverified Commit 93645897 authored by Kristin's avatar Kristin Committed by GitHub
Browse files

Merge pull request #254 from makaylas/ipce

BundleAdjust no longer outputs text to the command line for ipce. jigsaw is unaffected other than spacing changes. Fixes #4171.
parents 8a508cb4 72996b2e
Loading
Loading
Loading
Loading
+104 −51
Original line number Diff line number Diff line
@@ -275,9 +275,8 @@ namespace Isis {
    m_bundleSettings = bundleSettings;

    m_abort = false;
    Progress progress;
    try {
      m_controlNet = ControlNetQsp( new ControlNet(control.fileName(), &progress) );
      m_controlNet = ControlNetQsp( new ControlNet(control.fileName()) );
    }
    catch (IException &e) {
      throw;
@@ -551,6 +550,7 @@ namespace Isis {
   *                           printed to stdout. References #4313.
   */
  bool BundleAdjust::validateNetwork() {
     
    outputBundleStatus("\nValidating network...");
    
    int imagesWithInsufficientMeasures = 0;
@@ -576,7 +576,7 @@ namespace Isis {
      throw IException(IException::User, msg, _FILEINFO_);
    }

    outputBundleStatus("Validation complete!...");
    outputBundleStatus("\nValidation complete!...\n");
    
    return true;
  }
@@ -803,7 +803,7 @@ namespace Isis {

        // solve the system
        if (!solveSystem()) {
          printf("solve failed!\n");
          outputBundleStatus("\nsolve failed!");
          m_bundleResults.setConverged(false);
          break;
        }
@@ -855,20 +855,20 @@ namespace Isis {
        char format = 'f';
        int precision = 10;

        emit statusUpdate(QString("Iteration: %1")
        emit statusUpdate(QString("Iteration: %1 \n")
                                  .arg(m_iteration));
        emit statusUpdate(QString("Sigma0: %1")
        emit statusUpdate(QString("Sigma0: %1 \n")
                                  .arg(m_bundleResults.sigma0(),
                                       fieldWidth,
                                       format,
                                       precision));
        emit statusUpdate(QString("Observations: %1")
        emit statusUpdate(QString("Observations: %1 \n")
                                  .arg(m_bundleResults.numberObservations()));
        emit statusUpdate(QString("Constrained Parameters:%1")
        emit statusUpdate(QString("Constrained Parameters:%1 \n")
                                  .arg(m_bundleResults.numberConstrainedPointParameters()));
        emit statusUpdate(QString("Unknowns: %1")
        emit statusUpdate(QString("Unknowns: %1 \n")
                                  .arg(m_bundleResults.numberUnknownParameters()));
        emit statusUpdate(QString("Degrees of Freedom: %1")
        emit statusUpdate(QString("Degrees of Freedom: %1 \n")
                                  .arg(m_bundleResults.degreesOfFreedom()));
        emit iterationUpdate(m_iteration, m_bundleResults.sigma0());

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

          if ( numConvergedParams == numImgParams ) {
            m_bundleResults.setConverged(true);
            emit statusUpdate("Bundle has converged");
            emit statusUpdate("Bundle has converged\n");
            break;
          }
        }
@@ -923,8 +923,8 @@ namespace Isis {
        clock_t iterationStopClock = clock();
        double iterationTime = (iterationStopClock - iterationStartClock)
                                / (double)CLOCKS_PER_SEC;
        emit statusUpdate( QString("End of Iteration %1").arg(m_iteration) );
        emit statusUpdate( QString("Elapsed Time: %1").arg(iterationTime,
        emit statusUpdate( QString("End of Iteration %1 \n").arg(m_iteration) );
        emit statusUpdate( QString("Elapsed Time: %1 \n").arg(iterationTime,
                                                           fieldWidth,
                                                           format,
                                                           precision) );
@@ -958,9 +958,11 @@ namespace Isis {

      if (m_bundleResults.converged() && m_bundleSettings->errorPropagation()) {
        clock_t errorPropStartClock = clock();
        printf("Starting Error Propagation");
        
        outputBundleStatus("\nStarting Error Propagation");
        
        errorPropagation();
        emit statusUpdate("\n\nError Propagation Complete");
        emit statusUpdate("\n\nError Propagation Complete\n");
        clock_t errorPropStopClock = clock();
        m_bundleResults.setElapsedTimeErrorProp((errorPropStopClock - errorPropStartClock)
                                                / (double)CLOCKS_PER_SEC);
@@ -978,7 +980,7 @@ namespace Isis {

      emit resultsReady(bundleSolveInformation());

      emit statusUpdate("\nBundle Complete");
      emit statusUpdate("\nBundle Complete\n");

      iterationSummary();
    }
@@ -1067,7 +1069,7 @@ namespace Isis {
    int pointIndex = 0;
    int num3DPoints = m_bundleControlPoints.size();

    printf("\n");
    outputBundleStatus("\n\n");
    
    for (int i = 0; i < num3DPoints; i++) {

@@ -1652,7 +1654,7 @@ namespace Isis {
                                                  -1, CHOLMOD_REAL, &m_cholmodCommon);

      if ( !m_cholmodTriplet ) {
        printf("Triplet allocation failure");
        outputBundleStatus("\nTriplet allocation failure\n");
        return false;
      }

@@ -1673,7 +1675,8 @@ namespace Isis {
      SparseBlockColumnMatrix *normalsColumn = m_sparseNormals[columnIndex];

      if ( !normalsColumn ) {
        printf("SparseBlockColumnMatrix retrieval failure at column %d", columnIndex);
        QString status = "\nSparseBlockColumnMatrix retrieval failure at column " + columnIndex;
        outputBundleStatus(status);
        return false;
      }

@@ -1692,9 +1695,15 @@ namespace Isis {

        LinearAlgebra::Matrix *normalsBlock = it.value();
        if ( !normalsBlock ) {
          printf("matrix block retrieval failure at column %d, row %d", columnIndex, rowIndex);
          printf("Total # of block columns: %d", numBlockcolumns);
          printf("Total # of blocks: %d", m_sparseNormals.numberOfBlocks());
          QString status = "\nmatrix block retrieval failure at column ";
          status.append(columnIndex);
          status.append(", row ");
          status.append(rowIndex);
          outputBundleStatus(status);
          status = "Total # of block columns: " + numBlockcolumns;
          outputBundleStatus(status);
          status = "Total # of blocks: " + m_sparseNormals.numberOfBlocks();
          outputBundleStatus(status);
          return false;
        }

@@ -2465,16 +2474,25 @@ namespace Isis {
        medianDev = residuals[midpointIndex];
      }

      std::cout << "median deviation: " << medianDev << std::endl;
      QString status = "\nmedian deviation: ";
      status.append(QString("%1").arg(medianDev));
      status.append("\n");
      outputBundleStatus(status);
      
      mad = 1.4826 * medianDev;

      std::cout << "mad: " << mad << "\n";
      status = "\nmad: ";
      status.append(QString("%1").arg(mad));
      status.append("\n");
      outputBundleStatus(status);
      
      m_bundleResults.setRejectionLimit(median
                                        + m_bundleSettings->outlierRejectionMultiplier() * mad);

      std::cout << "Rejection Limit: " << m_bundleResults.rejectionLimit() << std::endl;
      status = "\nRejection Limit: ";
      status.append(QString("%1").arg(m_bundleResults.rejectionLimit()));
      status.append("\n");
      outputBundleStatus(status);
      
      return true;
  }
@@ -2502,6 +2520,8 @@ namespace Isis {
    int numComingBack = 0;

    int numObjectPoints = m_bundleControlPoints.size();
    
    outputBundleStatus("\n");
    for (int i = 0; i < numObjectPoints; i++) {
      BundleControlPointQsp point = m_bundleControlPoints.at(i);

@@ -2526,7 +2546,10 @@ namespace Isis {

          // was it previously rejected?
          if ( measure->isRejected() ) {
            printf("Coming back in: %s\r",point->id().toLatin1().data());
            QString status = "Coming back in: ";
            status.append(QString("%1").arg(point->id().toLatin1().data()));
            status.append("\r");
            outputBundleStatus(status);
            numComingBack++;
            m_controlNet->DecrementNumberOfRejectedMeasuresInImage(measure->cubeSerialNumber());
          }
@@ -2575,7 +2598,10 @@ namespace Isis {
      // do we still have sufficient remaining observations for this 3D point?
      if ( ( numMeasures-numRejected ) < 2 ) {
          point->setRejected(true);
          printf("Rejecting Entire Point: %s\r",point->id().toLatin1().data());
          QString status = "Rejecting Entire Point: ";
          status.append(QString("%1").arg(point->id().toLatin1().data()));
          status.append("\r");
          outputBundleStatus(status);
      }
      else
          point->setRejected(false);
@@ -2584,11 +2610,19 @@ namespace Isis {

    int numberRejectedObservations = 2*totalNumRejected;

    printf("\nRejected Observations:%10d (Rejection Limit:%12.5lf)\n",
            numberRejectedObservations, usedRejectionLimit);
    QString status = "\nRejected Observations:";
    status.append(QString("%1").arg(numberRejectedObservations));
    status.append(" (Rejection Limit:");
    status.append(QString("%1").arg(usedRejectionLimit));
    status.append(")\n");
    outputBundleStatus(status);
    
    m_bundleResults.setNumberRejectedObservations(numberRejectedObservations);

    std::cout << "Measures that came back: " << numComingBack << "\n" << std::endl;
    status = "\nMeasures that came back: ";
    status.append(QString("%1").arg(numComingBack));
    status.append("\n");
    outputBundleStatus(status);
         
    return true;
  }
@@ -2659,7 +2693,11 @@ namespace Isis {
    int numObjectPoints = m_bundleControlPoints.size();

    std::string currentTime = iTime::CurrentLocalTime().toLatin1().data();
    printf("     Time: %s\n\n", currentTime.c_str());
    
    QString status = "     Time: ";
    status.append(currentTime.c_str());
    status.append("\n\n");
    outputBundleStatus(status); 
    
    // create and initialize array of 3x3 matrices for all object points
    std::vector< symmetric_matrix<double> > pointCovariances(numObjectPoints,
@@ -2799,9 +2837,15 @@ namespace Isis {

        // only update point every 100 points
        if (j%100 == 0) {
            printf("\rError Propagation: Inverse Block %8d of %8d; Point %8d of %8d", i+1,
                   numBlockColumns,  j+1, numObjectPoints);

          QString status = "\rError Propagation: Inverse Block ";
          status.append(QString::number(i+1));
          status.append(" of ");
          status.append(QString::number(numBlockColumns));
          status.append("; Point ");
          status.append(QString::number(j+1));
          status.append(" of ");
          status.append(QString::number(numObjectPoints));
          outputBundleStatus(status);
          emit iterationUpdate(i+1, j+1);
        }

@@ -2858,7 +2902,7 @@ namespace Isis {
          }

          catch (std::exception &e) {
            printf("\n\n");
            outputBundleStatus("\n\n");
            QString msg = "Input data and settings are not sufficiently stable "
                          "for error propagation.";
            throw IException(IException::User, msg, _FILEINFO_);
@@ -2881,10 +2925,14 @@ namespace Isis {
    // free b (right-hand side vector
    cholmod_free_dense(&b,&m_cholmodCommon);

    printf("\n\n");
    outputBundleStatus("\n\n");
     
    currentTime = Isis::iTime::CurrentLocalTime().toLatin1().data();
    printf("\rFilling point covariance matrices: Time %s", currentTime.c_str());
    printf("\n\n");
    
    status = "\rFilling point covariance matrices: Time ";
    status.append(currentTime.c_str());
    outputBundleStatus(status);
    outputBundleStatus("\n\n");

    // now loop over points again and set final covariance stuff
    int pointIndex = 0;
@@ -2897,8 +2945,12 @@ namespace Isis {
      }

      if (j%100 == 0) {
        printf("\rError Propagation: Filling point covariance matrices %8d of %8d\r",j+1,
               numObjectPoints);
        status = "\rError Propagation: Filling point covariance matrices ";
        status.append(QString("%1").arg(j+1));
        status.append(" of ");
        status.append(QString("%1").arg(numObjectPoints));
        status.append("\r");
        outputBundleStatus(status);
      }

      // get corresponding point covariance matrix
@@ -3113,9 +3165,10 @@ namespace Isis {
   *                           -Wformat-security warning during the build.
   */
  void BundleAdjust::outputBundleStatus(QString status) {
    status += "\n";
    if (QCoreApplication::applicationName() != "ipce") { 
      printf("%s", status.toStdString().c_str());
    }
  }



+2 −0
Original line number Diff line number Diff line
@@ -292,6 +292,8 @@ namespace Isis {
   *                           constructor in the BundleSolutionInfo class because it is derived
   *                           from QObject. Note that we ultimately want to return a QSharedPointer
   *                           instead of a raw pointer.
   *   @history 2018-06-18 Makayla Shepherd - Stopped command line output for ipce BundleAdjust. 
   *                           Fixes #4171.
   */
  class BundleAdjust : public QObject {
      Q_OBJECT
+1 −0
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@ namespace Isis {
    centralWidget->setTabsMovable(true);
    centralWidget->setTabsClosable(true);

    QCoreApplication::setApplicationName("ipce");
    QStringList args = QCoreApplication::arguments();

    if (args.count() == 2) {
+2 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ namespace Isis {
   *                           test to determine whether project needs saving.
   *   @history 2018-05-01 Tracie Sucharski - Code accidently left commented from previous checking.
   *                           Fixes #5412.
   *   @history 2018-06-18 Makayla Shepherd - Set the QApplication name so that BundleAdjust does 
   *                           not output text to the command line for ipce. Fixes #4171.
   *  
   */
  class IpceMainWindow : public QMainWindow {