Isis 3 Programmer Reference
Isis::BundleAdjust Class Reference

An image bundle adjustment object. More...

#include <BundleAdjust.h>

Inheritance diagram for Isis::BundleAdjust:
Inheritance graph
Collaboration diagram for Isis::BundleAdjust:
Collaboration graph

Public Slots

bool solveCholesky ()
 Compute the least squares bundle adjustment solution using Cholesky decomposition.
 
void abortBundle ()
 Flag to abort when bundle is threaded.
 
void outputBundleStatus (QString status)
 Slot for deltack and jigsaw to output the bundle status.
 
ControlNetQsp controlNet ()
 Returns a pointer to the output control network.
 
LidarDataQsp lidarData ()
 Returns a pointer to the output lidar data file.
 
SerialNumberListserialNumberList ()
 Returns a pointer to the serial number list.
 
QString fileName (int index)
 Return the ith filename in the cube list file given to constructor.
 
QString iterationSummaryGroup () const
 Returns the iteration summary string.
 
bool isConverged ()
 Returns if the BundleAdjust converged.
 
Table cMatrix (int index)
 Return the updated instrument pointing table for the ith cube in the cube list given to the constructor.
 
Table spVector (int index)
 Return the updated instrument position table for the ith cube in the cube list given to the constructor.
 
QString modelState (int index)
 Return the updated model state for the ith cube in the cube list given to the constructor.
 
int numberOfImages () const
 Returns the number of images.
 
double iteration () const
 Returns what iteration the BundleAdjust is currently on.
 

Signals

void statusUpdate (QString)
 
void error (QString)
 
void iterationUpdate (int)
 
void pointUpdate (int)
 
void statusBarUpdate (QString)
 
void resultsReady (BundleSolutionInfo *bundleSolveInformation)
 
void finished ()
 

Public Member Functions

 BundleAdjust (BundleSettingsQsp bundleSettings, const QString &cnetFile, const QString &cubeList, bool printSummary=true)
 Construct a BundleAdjust object from the given settings, control network file, and cube list.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, const QString &cnetFile, const QString &cubeList, const QString &lidarDataFile, bool printSummary=true)
 Construct a BundleAdjust object from the given settings, control network file, cube list, and lidar point data.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, QString &cnet, SerialNumberList &snlist, bool printSummary=true)
 Construct a BundleAdjust object with held cubes.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, Control &cnet, SerialNumberList &snlist, bool bPrintSummary)
 Constructs a BundleAdjust object using a Control object.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, ControlNet &cnet, SerialNumberList &snlist, bool printSummary=true)
 Constructs a BundleAdjust object using a ControlNet object.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, ControlNetQsp cnet, const QString &cubeList, bool printSummary=true)
 Constructs a BundleAdjust from an already created ControlNet within a shared pointer.
 
 BundleAdjust (BundleSettingsQsp bundleSettings, Control &control, QList< ImageList * > imgList, bool printSummary)
 Thread safe constructor.
 
 ~BundleAdjust ()
 Destroys BundleAdjust object, deallocates pointers (if we have ownership), and frees variables from cholmod library.
 
BundleSolutionInfosolveCholeskyBR ()
 Compute the least squares bundle adjustment solution using Cholesky decomposition.
 
QList< ImageList * > imageLists ()
 This method returns the image list used in the bundle adjust.
 
bool isAborted ()
 Returns if the BundleAdjust has been aborted.
 

Private Member Functions

void init (Progress *progress=0)
 Initialize all solution parameters.
 
bool initializeNormalEquationsMatrix ()
 Initialize Normal Equations matrix (m_sparseNormals).
 
bool validateNetwork ()
 control network validation - on the very real chance that the net has not been checked before running the bundle
 
bool solveSystem ()
 Compute the solution to the normal equations using the CHOLMOD library.
 
void iterationSummary ()
 Creates an iteration summary and an iteration group for the solution summary.
 
BundleSolutionInfobundleSolveInformation ()
 Create a BundleSolutionInfo containing the settings and results from the bundle adjustment.
 
bool computeBundleStatistics ()
 Compute Bundle statistics and store them in m_bundleResults.
 
void applyParameterCorrections ()
 Apply parameter corrections for current iteration.
 
bool errorPropagation ()
 Error propagation for solution.
 
void computeResiduals ()
 Compute image measure residuals.
 
double computeVtpv ()
 Computes vtpv, the weighted sum of squares of residuals.
 
bool computeRejectionLimit ()
 Compute rejection limit.
 
bool flagOutliers ()
 Flags outlier measures and control points.
 
bool formNormalEquations ()
 Form the least-squares normal equations matrix via cholmod.
 
bool computePartials (LinearAlgebra::Matrix &coeffTarget, LinearAlgebra::Matrix &coeffImage, LinearAlgebra::Matrix &coeffPoint3D, LinearAlgebra::Vector &coeffRHS, BundleMeasure &measure, BundleControlPoint &point)
 Compute partial derivatives and weighted residuals for a measure.
 
bool formMeasureNormals (LinearAlgebra::MatrixUpperTriangular &N22, SparseBlockColumnMatrix &N12, LinearAlgebra::VectorCompressed &n1, LinearAlgebra::Vector &n2, LinearAlgebra::Matrix &coeffTarget, LinearAlgebra::Matrix &coeffImage, LinearAlgebra::Matrix &coeffPoint3D, LinearAlgebra::Vector &coeffRHS, int observationIndex)
 Form the auxilary normal equation matrices for a measure.
 
int formPointNormals (LinearAlgebra::MatrixUpperTriangular &N22, SparseBlockColumnMatrix &N12, LinearAlgebra::Vector &n2, LinearAlgebra::Vector &nj, BundleControlPointQsp &point)
 Compute the Q matrix and NIC vector for a control point.
 
int formLidarPointNormals (LinearAlgebra::MatrixUpperTriangular &N22, SparseBlockColumnMatrix &N12, LinearAlgebra::Vector &n2, LinearAlgebra::Vector &nj, BundleLidarControlPointQsp &point)
 Compute the Q matrix and NIC vector for a control point.
 
bool formWeightedNormals (LinearAlgebra::VectorCompressed &n1, LinearAlgebra::Vector &nj)
 Apply weighting for spacecraft position, velocity, acceleration and camera angles, angular velocities, angular accelerations if so stipulated (legalese).
 
void productAB (SparseBlockColumnMatrix &A, SparseBlockRowMatrix &B)
 Perform the matrix multiplication C = N12 x Q.
 
void accumProductAlphaAB (double alpha, SparseBlockRowMatrix &A, LinearAlgebra::Vector &B, LinearAlgebra::Vector &C)
 Performs the matrix multiplication nj = nj + alpha (Q x n2).
 
bool invert3x3 (LinearAlgebra::MatrixUpperTriangular &m)
 Dedicated quick inverse of 3x3 matrix.
 
bool productATransB (LinearAlgebra::MatrixUpperTriangular &N22, SparseBlockColumnMatrix &N12, SparseBlockRowMatrix &Q)
 Perform the matrix multiplication Q = N22 x N12(transpose)
 
bool initializeCHOLMODLibraryVariables ()
 Initializations for CHOLMOD sparse matrix package.
 
bool freeCHOLMODLibraryVariables ()
 Free CHOLMOD library variables.
 
bool loadCholmodTriplet ()
 Load sparse normal equations matrix into CHOLMOD triplet.
 

Private Attributes

BundleSettingsQsp m_bundleSettings
 Contains the solve settings.
 
BundleResults m_bundleResults
 Stores the results of the bundle adjust.
 
ControlNetQsp m_controlNet
 Output control net.
 
QString m_cnetFileName
 The control net filename.
 
QVector< BundleControlPointQspm_bundleControlPoints
 Vector of control points.
 
BundleLidarPointVector m_bundleLidarControlPoints
 Vector of lidar points.
 
QString m_lidarFileName
 Input lidar point filename.
 
LidarDataQsp m_lidarDataSet
 Output lidar data.
 
int m_numLidarConstraints
 TODO: temp.
 
BundleObservationVector m_bundleObservations
 
SerialNumberListm_serialNumberList
 !< Vector of observations.
 
BundleTargetBodyQsp m_bundleTargetBody
 
bool m_abort
 !< Contains information about the target body.
 
QString m_iterationSummary
 
bool m_printSummary
 !< Summary of the most recently completed iteration.
 
bool m_cleanUp
 !< If the iteration summaries should be output to the log file.
 
int m_rank
 !< If the serial number lists need to be deleted by the destructor.
 
int m_iteration
 The current iteration.
 
double m_iterationTime
 Time for last iteration.
 
int m_numberOfImagePartials
 number of image-related partials.
 
QList< ImageList * > m_imageLists
 
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper, boost::numeric::ublas::column_major > m_normalInverse
 !< The lists of images used in the bundle.
 
cholmod_common m_cholmodCommon
 
LinearAlgebra::Vector m_RHS
 !< Contains object parameters, statistics, and workspace used by the CHOLMOD library.
 
SparseBlockMatrix m_sparseNormals
 !< The right hand side of the normal equations.
 
cholmod_triplet * m_cholmodTriplet
 !< The sparse block normal equations matrix.
 
cholmod_sparse * m_cholmodNormal
 !< The CHOLMOD triplet representation of the sparse normal equations matrix.
 
cholmod_factor * m_L
 !< The CHOLMOD sparse normal equations matrix used by cholmod_factorize to solve the system.
 
LinearAlgebra::Vector m_imageSolution
 !< The lower triangular L matrix from Cholesky decomposition.
 
int m_previousNumberImagePartials
 !< The image parameter solution vector.
 

Detailed Description

An image bundle adjustment object.

BundleAdjust is used to perform a bundle adjustment on overlapping ISIS cubes. Using the collineariy condition, BundleAdjust can construct a system of normal equations and then using the CHOLMOD library, solve that system.

Author
2006-05-30 Jeff Anderson, Debbie A. Cook, and Tracie Sucharski
History

2005-05-30 Jeff Anderson, Debbie A. Cook & Tracie Sucharski - Original version

2007-05-29 Debbie A. Cook - Added new method iterationSummary and changed points on held images to held instead of ground.

2007-07-12 Debbie A. Cook - Fixed bug in iteration statistics calculations in the case of a single control point that was causing a divide by zero error.

2007-08-25 Debbie A. Cook - Added methods and members to support instrument position solution.

2007-09-17 Debbie A. Cook - Added ability to process in observation mode for Lunar Orbiter.

2007-11-17 Debbie A. Cook - Added method SetSolution Method.

2007-12-21 Debbie A. Cook - Added member p_Degree and methods m_nsolveCamDegree and ckDegree.

2008-01-11 Debbie A. Cook - Added observation mode functionality for spacecraft position and upgraded ObservationNumber methods for compatability.

2008-01-14 Debbie A. Cook - Added code to solve for local radii.

2008-04-18 Debbie A. Cook - Added progress for ControlNet.

2008-06-18 Christopher Austin - Fixed ifndef.

2008-11-07 Tracie Sucharski - Added bool to constructors to indicate whether to print iteration summary info to the session log. This was needed for qtie which has no session log.

2008-11-22 Debbie A. Cook - Added code to wrap longitude to keep it in [0.0, 360.0].

2008-11-22 Debbie A. Cook - Added new call to get timeScale and set for the observation along with basetime.

2008-11-26 Debbie A. Cook - Added check to applyHeldList for Ignored points and measures.

2009-01-08 Debbie A. Cook - Revised AddPartials and PointPartial to avoid using the camera methods to map a body-fixed vector to the camera because they compute a new time for line scan cameras based on the lat/lon/radius and the new time is used to retrieve Spice. The updated software uses the Spice at the time of the measurement.

2009-02-15 Debbie A. Cook - Corrected focal length to include its sign and removed obsolete calls to X/Y direction methods. Also modified PointPartial to use lat/lon/radius from the point instead of the camera.

2009-08-13 Debbie A. Cook - Corrected calculations of cudx and cudy so that they use the signed focal length also.

2009-10-14 Debbie A. Cook - Modified AddPartials method to use new CameraGroundMap method, GetXY.

2009-10-30 Debbie A. Cook - Improved error message in AddPartials.

2009-12-14 Debbie A. Cook - Updated SpicePosition enumerated partial type constants.

2010-03-19 Debbie A. Cook - Moved partials to GroundMap classes to support Radar sensors and modified argument list for GroundMap method ComputeXY since it now returns cudx and cudy.

2010-06-18 Debbie A. Cook - Added p_cnetFile as member since it was taken out of ControlNet.

2010-07-09 Ken Edmundson - Added Folding in solution method (SPECIALK), error propogation, statistical report, etc.

2010-08-13 Debbie A. Cook - Changed surface point from lat/lon/radius to body-fixed XYZ.

2010-12-17 Debbie A. Cook - Merged Ken Edmundson version with system and updated to new binary control net.

2011-02-01 Debbie A. Cook - Moved code to create point index map into its own method to be called after the solution method has been set.

2011-02-17 Debbie A. Cook - Updated to use new parameter added to SpicePosition, p_timeScale.

2011-03-05 Debbie A. Cook - Put point index creation back in init. This will prevent QRD and SVD from working if ground points are in the control net.

2011-03-29 Ken Edmundson - Fixed bug in observation mode when solving for spacecraft position and improved output.

2011-04-02 Debbie A. Cook - Updated to ControlPoint class changes regarding target radii. Also separated out 2 sets of calculations to test later for efficiency.

2011-06-05 Debbie A. Cook - Changed checks for solution type to match change from SPARSE to SPARSE-LU.

2011-06-07 Debbie A. Cook - and Tracie Sucharski - Modified point types from Ground to Fixed and from Tie to Free.

2011-06-14 Debbie A. Cook - added method isHeld(int index) for preventing any updates to held images.

2011-06-27 Debbie A. Cook - and Ken Edmundson Added names to top header fields of .csv output and fixed bugs in sparse output.

2011-07-12 Ken Edmundson - Segmentation fault bugfix in OutputHeader method. Previously was attempting to output camera angle sigmas when none had been allocated.

2011-07-14 Ken Edmundson and Debbie Cook - Added new member, m_bDeltack to indicate calling application was deltack (or qtie) and has potential to have a single ControlPoint and ControlMeasure.

2011-08-08 Tracie Sucharski - Added method to return the iteration summary to be used in qtie which does not have a log file. In SetImages, clear the cameraMavtpv_targetBodyp and cameraList. Added this back in (was originally added on 2011-01-19), was deleted somewhere along the line.

2011-09-28 Debbie A. Cook - Renamed SPARSE solve method to OLDSPARSE and CHOLMOD to SPARSE.

2011-10-14 Ken Edmundson - Added call to m_pCnet->ClearJigsawRejected() to the init() method to set all measure/point JigsawRejected flags to false prior to bundle.

2011-12-09 Ken Edmundson - Memory leak fix in method cholmodInverse. Need call to "cholmod_free_dense(&x,&m_cholmodCommon)" inside loop.

2011-12-20 Ken Edmundson - Fixes to outlier rejection. Added rejection multiplier member variable, can be set in jigsaw interface.

2012-02-02 Debbie A. Cook - Added SetSolvePolyOverHermite method and members m_bSolvePolyOverHermite and m_positionType.

2012-03-26 Orrin Thomas - Added maximum likelihood capabilities.

2012-05-21 Debbie A. Cook - Added initialization of m_dRejectionMultiplier.

2012-07-06 Debbie A. Cook - Updated Spice members to be more compliant with Isis coding standards. References #972.

2012-09-28 Ken Edmundson - Initialized variables for bundle statistic computations. The bundleout.txt file was modifed to show N/A for RMS, Min, Max of Radius Sigmas when not solving for radius. References #783.

2013-11-12 Ken Edmundson - Programmers Note. References #813, #1521, #1653 #813 - Info echoed to screen when using Maximum Likelihood methods are now printed to print.prt file. #1521 - The cout debug statements that appear on screen when updating images were removed from SpiceRotation.cpp #1653 - Constraints were being applied for "Free" points that have constrained coordinates. Also found that a priori coordinates for these points were not being computed in ControlPoint::ComputeApriori, this has also been fixed.

2013-12-18 Tracie Sucharski - The ControlNet::GetNumberOfMeasuresInImage was renamed to ControlNet::GetNumberOfValidMeasuresInImage and only returns the number of valid (Ignore= False) measures.

2014-02-25 Ken Edmundson - Speed up and memory improvements to error propagation. References #2031.

2014-05-16 Jeannie Backer - Added BundleSettings object to constructor inputs. Cleaned and organized code. Updated to be more compliant with ISIS coding standards.

2014-07-14 Kimberly Oyama - Added support for correlation matrix. Covariance matrix is now written to a file and the location is saved as part of the CorrelationMatrix object.

2014-07-23 Jeannie Backer - Modified to print "N/A" for rejection multiplier if outlier rejection is turned off.

2014-09-18 Kimberly Oyama - Added a constructor for running the bunlde in a separate thread.

2014-11-05 Ken Edmundson - Fixed memory bug. Wasn't releasing cholmod_factor m_L every iteration. Now release every iteration but the last since we

2015-02-20 Jeannie Backer - Updated to be more compliant with ISIS coding standards.

2015-08-17 Jeannie Backer - Updated to be more compliant with ISIS coding standards.

2015-09-03 Jeannie Backer - Changed the name of the output correlation matrix file from ["inverseMatrix" + random unique code + ".dat"] to [BundleSettings::outputFilePrefix() + "inverseMatrix.dat"]. So that the prefix can be used to specify the path of the location where the matrix file should be written. Some improvements made to comply with coding standards.

2015-09-10 Ian Humphrey - Fixed include for cholmod header after updating v005 libraries.

2016-07-11 Jesse Mapel - Changed m_bundleControlPoints to be a vector of QSharedPointers to BundleControlPoints instead of a BundleControlPointVector. Fixes #4099.

2016-07-11 Jeannie Backer - Removed initialize(). Implementation was moved the the bottom of init() method. Fixes #4161.

2016-08-03 Jesse Mapel - Changed BundleObservationVector to a vector of QSharedPointers. Fixes #4150.

2016-08-10 Jeannie Backer - Replaced boost vectors and matrices with Isis::LinearAlgebra::Vector and Isis::LinearAlgebra::Matrix, respectively. References #4163.

2016-08-15 Jesse Mapel - Moved write methods to BundleSolutionInfo. Changed constructors to always construct a new control network. Fixes #4159.

2016-08-15 Ian Humphrey - Replaced ISIS ControlPoint and ControlMeasure uses with BundleControlPoint and BundleMeasure. No longer need to check if the BundleControlPoint or BundleMeasure is ignored before use, since we only add non-ignored ControlPoints to the BundleControlPoint, and we only add non-ignored ControlMeasures to the BundleControlPoint. Fixes #4173, #4201.

2016-08-16 Jesse Mapel - Added error throw when covariance matrices are not symmetric due to unstable data and settings. Fixes #2302.

2016-08-17 Jesse Mapel - Moved all method implementations to the cpp file. Fixes #4185.

2016-08-18 Jeannie Backer - Removed all references to deprecated solve methods SpeckialK and OldSparse. Fixes #4162.

2016-08-23 Jesse Mapel - Removed output file calls. Apps and objects that use BundleAdjust must call output methods from BundleSolutionInfo. Fixes #4279.

2016-08-24 Jesse Mapel - Updated documentation and member variable names. Brought closer to ISIS 3 coding standards. Fixes #4183, #4188, #4235.

2016-08-28 Kelvin Rodriguez - Remvoed useless register keywords to squash warnigns in clang. Part of porting to OS X 10.11.

2016-09-22 Ian Humphrey - Modified validateNetwork() so that validation status messages are logged to stdout. Fixes #4313.

2016-10-05 Ian Humphrey - Modified errorPropagation_CHOLMOD() to check bundle settings to see if it should generate the inverseMatrix.dat file. References #4315.

2016-10-13 Ian Humphrey - Added constructor that takes a ControlNetQsp, so that when jigsaw modifies a control net for a held image, the control net can be passed as a shared pointer. Removed m_pHeldSnList, isHeld(), checkHeldList(), applyHeldList(), two constructors that used heldList parameters. Modified destructor to not delete m_pHeldSnList, since it was removed. Fixes #4293.

2016-10-17 Adam Paquette - Cleaned up terminal output for readability and cohesion Fixes #4263, #4311, #4312.

2016-10-18 Ian Humphrey - Modified iterationSummary() to always output Rejected_Measures kewyord, regardless of outlier rejection being on or off. Fixes #4461.

2016-10-25 Ian Humphrey - Modified iterationSumary() to always output Rejected_Measures keyword, regarldess of outlier rjection being on or off. Fixes #4461. Modified solveCholesky() and computeRejectionLimit() so jigsaw's std out for Rejection Limit, Sigma0, and Elapsed Time match ISIS production's jigsaw std out. Fixes #4463.

2016-10-28 Ian Humphrey - Modified solveCholesky() and errorPropagation() to change spacing in terminal output, so that it matches production. References #4463.

2016-11-16 Ian Humphrey - Modified solveCholesky() to throw caught exceptions that occur. Removed bundleException(QString) signal. Fixes #4483.

2016-12-01 Ian Humphrey - Modified outputBundleStatus()'s printf() call so that there is no longer a -Wformat-security warning.

2017-05-01 Makayla Shepherd - Added imageLists() to track and return the images bundled. Fixes #4818.

2017-05-09 Tracie Sucharski - Fixed an empty pointer in ::imgeLists method.

2017-05-09 Ken Edmundson - Speed improvements and error propagation bug fix. Separated initializations for Normal Equations matrix out of ::initializeCholmodLibraryVariables() into initializeNormalEquationsMatrix(). Added m_previousNumberImagePartials to avoid unnecessary resizing of the "coeffImage" matrix in computePartials. New m_startColumn member in SparseBlockColumnMatrix eliminates costly computation of leading colums and rows. In errorPropagation method, call to get Q matrix from BundleControlPoint was creating a copy instead of getting a reference. References #4664.

2017-06-08 Makayla Shepherd - Modified imageLists() to close the image cube after adding it to the image list. Fixes #4908.

2017-08-09 Summer Stapleton - Added a try/catch around the m_controlNet assignment in each of the constructors to verify valid control net input. Fixes #5068.

2017-09-01 Debbie A. Cook - Added BundleSettingsQsp as argument to BundleControlPoint constructor and moved setWeights call from BundleAdjust::init to BundleControlPoint constructor. Don't allow solving for triaxial radii when coordinate type is not Latitudinal. Added new optional argument controlPointCoordType to ControlNet constructor call. References #4649 and #501.

2018-02-12 Ken Edmundson - Removed members m_xResiduals, m_yResiduals, and m_xyResiduals and made them local to the computeResiduals() method. Removed member m_bodyRadii, used only locally in init() method.

2018-05-22 Ken Edmundson - Modified methods bundleSolveInformation() and solveCholeskyBR() to return raw pointers to a BundleSolutionInfo object. Also modified resultsReady signal to take a raw pointer to a BundleSolutionInfo object. This was done to avoid using a copy 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.

2018-05-31 Debbie A. Cook - Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.

2018-06-14 Christopher Combs - Added getter method to tell if a bundle adjust was aborted. Added emits for status updates to the run widget.

2018-06-18 Makayla Shepherd - Stopped command line output for ipce BundleAdjust. Fixes #4171.

2018-06-27 Ken Edmundson - Now setting measure sigmas in BundleMeasure in init() method; retrieving sigma and sqrt of weight in computePartials and computeVtpv methods.

2018-09-06 Debbie A. Cook - (added to BundleXYZ branch on 2017-09-01) Added BundleSettingsQsp as argument to BundleControlPoint constructor and moved setWeights call from BundleAdjust::init to BundleControlPoint constructor. Don't allow solving for triaxial radii when coordinate type is not Latitudinal. Added new optional argument controlPointCoordType to ControlNet constructor call. References #4649 and #501.

2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ branch on (2018-05-31). Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/ covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.

2018-09-06 Debbie A. Cook - Removed obsolete member variables: m_radiansToMeters, m_metersToRadians, and m_bodyRadii which have been replaced with the local radius of a control point for converting point sigmas to/from radians from/to meters. References #4649 and #501.

2018-11-29 Ken Edmundson - Modifed init, initializeNormalEquationsMatrix, and computePartials methods.

2019-04-29 Ken Edmundson - Modifications for bundle with lidar.

2019-05-15 Debbie A. Cook - The call to CameraGroundMap::GetXY in method ComputePartials was modified to not check for points on the back side of the planet when computing instrument coordinates during the bundle adjustment. In the future a control net diagnostic program might be useful to detect any points not visible on an image based on the exterior orientation of the image. References #2591.

Definition at line 329 of file BundleAdjust.h.

Constructor & Destructor Documentation

◆ BundleAdjust() [1/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
const QString & cnetFile,
const QString & cubeList,
bool printSummary = true )

Construct a BundleAdjust object from the given settings, control network file, and cube list.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
cnetFileThe filename of the control network to be used.
cubeListThe list of filenames of the cubes to be adjusted.
printSummaryIf summaries should be printed each iteration.

Definition at line 107 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ BundleAdjust() [2/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
const QString & cnetFile,
const QString & cubeList,
const QString & lidarDataFile,
bool printSummary = true )

Construct a BundleAdjust object from the given settings, control network file, cube list, and lidar point data.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
cnetFileThe filename of the control network to be used.
cubeListThe list of filenames of the cubes to be adjusted.
lidarDataFileLidar point dataset filename.
printSummaryIf summaries should be printed each iteration.

Definition at line 145 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_lidarDataSet, m_lidarFileName, m_printSummary, m_serialNumberList, Isis::BundleResults::setOutputControlNet(), and Isis::BundleResults::setOutputLidarData().

◆ BundleAdjust() [3/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
QString & cnetFile,
SerialNumberList & snlist,
bool printSummary = true )

Construct a BundleAdjust object with held cubes.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
cnetFileThe filename of the control network to be used.
cubeListThe list of filenames of the cubes to be adjusted.
heldListThe list of filenames of the held cubes. Held cubes must be in both heldList and cubeList.
printSummaryIf summaries should be printed each iteration.

Definition at line 195 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ BundleAdjust() [4/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
Control & cnet,
SerialNumberList & snlist,
bool printSummary )

Constructs a BundleAdjust object using a Control object.

A new control network object will be created as a copy of the Control's control network.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
cnetThe Control object whose control network will be copied. The Control will not be modified by the BundleAdjust.
snlistA serial number list containing the cubes to be adjusted.
printSummaryIf summaries should be printed each iteration.

Definition at line 232 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ BundleAdjust() [5/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
ControlNet & cnet,
SerialNumberList & snlist,
bool printSummary = true )

Constructs a BundleAdjust object using a ControlNet object.

A copy of the ControlNet will be used.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
cnetThe ControlNet that will be copied. The original ControlNet will not be modified.
snlistA serial number list containing the cubes to be adjusted.
printSummaryIf summaries should be printed each iteration.

Definition at line 269 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ BundleAdjust() [6/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
ControlNetQsp cnet,
const QString & cubeList,
bool printSummary = true )

Constructs a BundleAdjust from an already created ControlNet within a shared pointer.

Parameters
bundleSettingsQSharedPointer to the bundle settings to use.
cnetQSharedPointer to the control net to adjust.
cubeListQString name of list of cubes to create serial numbers for.
printSummaryBoolean indicating whether to print application output summary.

Definition at line 303 of file BundleAdjust.cpp.

References init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ BundleAdjust() [7/7]

Isis::BundleAdjust::BundleAdjust ( BundleSettingsQsp bundleSettings,
Control & control,
QList< ImageList * > imgLists,
bool printSummary )

Thread safe constructor.

Parameters
bundleSettingsA shared pointer to the BundleSettings to be used.
controlThe Control object whose control network will be copied. The Control will not be modified by the BundleAdjust.
snlistA serial number list containing the cubes to be adjusted.
printSummaryIf summaries should be printed each iteration.

Definition at line 335 of file BundleAdjust.cpp.

References Isis::SerialNumberList::add(), Isis::Control::fileName(), Isis::Image::fileName(), init(), m_abort, m_bundleResults, m_bundleSettings, m_cleanUp, m_cnetFileName, m_controlNet, m_printSummary, m_serialNumberList, and Isis::BundleResults::setOutputControlNet().

◆ ~BundleAdjust()

Isis::BundleAdjust::~BundleAdjust ( )

Destroys BundleAdjust object, deallocates pointers (if we have ownership), and frees variables from cholmod library.

History
2016-10-13 Ian Humphrey - Removed deallocation of m_pHeldSnList, since this member was removed. References #4293.

Definition at line 383 of file BundleAdjust.cpp.

References freeCHOLMODLibraryVariables(), m_cleanUp, and m_serialNumberList.

Member Function Documentation

◆ abortBundle

void Isis::BundleAdjust::abortBundle ( )
slot

Flag to abort when bundle is threaded.

Flag is set outside the bundle thread, typically by the gui thread.

Definition at line 812 of file BundleAdjust.cpp.

References m_abort.

Referenced by Isis::JigsawRunWidget::closeEvent().

◆ accumProductAlphaAB()

void Isis::BundleAdjust::accumProductAlphaAB ( double alpha,
SparseBlockRowMatrix & A,
LinearAlgebra::Vector & B,
LinearAlgebra::Vector & C )
private

Performs the matrix multiplication nj = nj + alpha (Q x n2).

Parameters
alphaA constant multiplier.
QA sparse block matrix.
n2A vector.
njThe output accumulation vector.
See also
BundleAdjust::formPointNormals

Definition at line 1762 of file BundleAdjust.cpp.

References m_sparseNormals.

Referenced by formLidarPointNormals(), and formPointNormals().

◆ applyParameterCorrections()

void Isis::BundleAdjust::applyParameterCorrections ( )
private

Apply parameter corrections for current iteration.

Definition at line 2128 of file BundleAdjust.cpp.

References m_bundleControlPoints, m_bundleLidarControlPoints, m_bundleSettings, m_imageSolution, m_sparseNormals, and Isis::BundleObservationVector::numberParameters().

Referenced by solveCholesky().

◆ bundleSolveInformation()

BundleSolutionInfo * Isis::BundleAdjust::bundleSolveInformation ( )
private

Create a BundleSolutionInfo containing the settings and results from the bundle adjustment.

Returns
BundleSolutionInfo A container with solve information from the adjustment. NOTE: Caller takes ownership and is responsible for memory management of returned BundleSolutionInfo raw pointer.

Definition at line 1164 of file BundleAdjust.cpp.

References imageLists(), m_bundleResults, m_bundleSettings, m_cnetFileName, m_lidarFileName, and Isis::BundleSolutionInfo::setRunTime().

Referenced by solveCholesky(), and solveCholeskyBR().

◆ cMatrix

Table Isis::BundleAdjust::cMatrix ( int i)
slot

Return the updated instrument pointing table for the ith cube in the cube list given to the constructor.

This is only valid for ISIS camera model cubes

Parameters
iThe index of the cube
Returns
Table The InstrumentPointing table for the cube.

Definition at line 2946 of file BundleAdjust.cpp.

References m_controlNet.

Referenced by Isis::JigsawRunWidget::on_JigsawAcceptButton_clicked().

◆ computeBundleStatistics()

bool Isis::BundleAdjust::computeBundleStatistics ( )
private

Compute Bundle statistics and store them in m_bundleResults.

Sets: m_rmsImageSampleResiduals m_rmsImageLineResiduals m_rmsImageResiduals

m_rmsImageXSigmas m_rmsImageYSigmas m_rmsImageZSigmas m_rmsImageRASigmas m_rmsImageDECSigmas m_rmsImageTWISTSigmas

m_maxSigmaLatitude m_maxSigmaLatitudePointId m_maxSigmaLongitude m_maxSigmaLongitudePointId m_maxSigmaRadius m_maxSigmaRadiusPointId

m_minSigmaLatitude m_minSigmaLatitudePointId m_minSigmaLongitude m_minSigmaLongitudePointId m_minSigmaRadius m_minSigmaRadiusPointId

m_rmsSigmaLat m_rmsSigmaLon m_rmsSigmaRad

Returns
bool If the statistics were successfully computed and stored.

Definition at line 3150 of file BundleAdjust.cpp.

References m_bundleControlPoints, m_bundleLidarControlPoints, m_bundleResults, m_bundleSettings, m_serialNumberList, Isis::SurfacePoint::Rectangular, Isis::BundleResults::resizeSigmaStatisticsVectors(), Isis::SerialNumberList::serialNumberIndex(), Isis::BundleResults::setRmsFromSigmaStatistics(), Isis::BundleResults::setRmsImageResidualLists(), Isis::BundleResults::setRmsLidarImageResidualLists(), Isis::BundleResults::setSigmaCoord1Range(), Isis::BundleResults::setSigmaCoord2Range(), Isis::BundleResults::setSigmaCoord3Range(), and Isis::SerialNumberList::size().

Referenced by solveCholesky().

◆ computePartials()

bool Isis::BundleAdjust::computePartials ( LinearAlgebra::Matrix & coeffTarget,
LinearAlgebra::Matrix & coeffImage,
LinearAlgebra::Matrix & coeffPoint3D,
LinearAlgebra::Vector & coeffRHS,
BundleMeasure & measure,
BundleControlPoint & point )
private

Compute partial derivatives and weighted residuals for a measure.

coeffTarget, coeffImage, coeffPoint3D, and coeffRHS will be filled with the different partial derivatives.

Parameters
coeffTargetA matrix that will contain target body partial derivatives.
coeffImageA matrix that will contain camera position and orientation partial derivatives.
coeffPoint3DA matrix that will contain point lat, lon, and radius partial derivatives.
coeffRHSA vector that will contain weighted x,y residuals.
measureThe measure that partials are being computed for.
pointThe point containing measure.
Returns
bool If the partials were successfully computed.
Exceptions
IException::User"Unable to map apriori surface point for measure"

Definition at line 2037 of file BundleAdjust.cpp.

References Isis::BundleResults::addProbabilityDistributionObservation(), Isis::BundleResults::addResidualsProbabilityDistributionObservation(), Isis::BundleControlPoint::adjustedSurfacePoint(), Isis::Camera::Csm, Isis::Camera::Framing, Isis::BundleControlPoint::id(), m_bundleResults, m_bundleSettings, m_previousNumberImagePartials, Isis::BundleResults::maximumLikelihoodModelIndex(), Isis::BundleResults::maximumLikelihoodModelWFunc(), Isis::BundleResults::numberMaximumLikelihoodModels(), Isis::MaximumLikelihoodWFunctions::sqrtWeightScaler(), and Isis::IException::User.

Referenced by formNormalEquations().

◆ computeRejectionLimit()

bool Isis::BundleAdjust::computeRejectionLimit ( )
private

Compute rejection limit.

Computes the median and the median absolute deviation (M.A.D.) of the residuals. Then, sets the rejection limit in m_bundleResults to median + RejectionMultiplier * M.A.D.

Returns
bool If the rejection limit was successfully computed and set.

@TODO should this be in BundleResults?

History
2016-10-25 Ian Humphrey - "Rejection Limit" is output to std out again immediately after "mad." References #4463.

Definition at line 2251 of file BundleAdjust.cpp.

References m_bundleControlPoints, m_bundleResults, m_bundleSettings, Isis::BundleResults::numberObservations(), outputBundleStatus(), Isis::BundleResults::rejectionLimit(), and Isis::BundleResults::setRejectionLimit().

Referenced by solveCholesky().

◆ computeResiduals()

void Isis::BundleAdjust::computeResiduals ( )
private

Compute image measure residuals.

Definition at line 1138 of file BundleAdjust.cpp.

References m_bundleControlPoints, and m_bundleLidarControlPoints.

Referenced by solveCholesky().

◆ computeVtpv()

double Isis::BundleAdjust::computeVtpv ( )
private

Computes vtpv, the weighted sum of squares of residuals.

Returns
double Weighted sum of the squares of the residuals, vtpv.

Definition at line 2196 of file BundleAdjust.cpp.

References m_bundleControlPoints, m_bundleLidarControlPoints, m_bundleResults, Isis::BundleResults::setRmsXYResiduals(), and Isis::BundleLidarPointVector::vtpvRangeContribution().

Referenced by solveCholesky().

◆ controlNet

ControlNetQsp Isis::BundleAdjust::controlNet ( )
slot

Returns a pointer to the output control network.

Returns
ControlNetQsp A shared pointer to the output control network.

Definition at line 2877 of file BundleAdjust.cpp.

References m_controlNet.

◆ errorPropagation()

bool Isis::BundleAdjust::errorPropagation ( )
private

Error propagation for solution.

Returns
bool If the error propagation was successful.
Exceptions
IException::User"Input data and settings are not sufficiently stable for error propagation."
History

2016-10-05 Ian Humphrey - Updated to check to see if bundle settings is allowing us to create the inverse matrix correlation file. References #4315.

2016-10-28 Ian Humphrey - Added extra newline between Error Propagation: Inverse Blocking and Filling point covariance messages. References #4463.

2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ branch on (2018-05-31). Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/ covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.

Definition at line 2529 of file BundleAdjust.cpp.

References Isis::iTime::CurrentLocalTime(), Isis::SparseBlockMatrix::insertMatrixBlock(), Isis::SurfacePoint::Latitudinal, m_bundleControlPoints, m_bundleResults, m_bundleSettings, m_cholmodNormal, m_cholmodTriplet, m_L, m_rank, m_sparseNormals, outputBundleStatus(), Isis::BundleResults::setCorrMatCovFileName(), Isis::SurfacePoint::SetMatrix(), Isis::BundleResults::sigma0(), Isis::IException::User, and Isis::SparseBlockMatrix::wipe().

Referenced by solveCholesky().

◆ fileName

QString Isis::BundleAdjust::fileName ( int i)
slot

Return the ith filename in the cube list file given to constructor.

Parameters
iThe index of the cube.
Returns
QString The filename of the cube.
Todo
: probably don't need this, can get from BundleObservation

Definition at line 2921 of file BundleAdjust.cpp.

References Isis::SerialNumberList::fileName(), and m_serialNumberList.

Referenced by init().

◆ flagOutliers()

bool Isis::BundleAdjust::flagOutliers ( )
private

Flags outlier measures and control points.

Returns
bool If the flagging was successful.
Todo
How should we handle points with few measures.

Definition at line 2350 of file BundleAdjust.cpp.

References m_bundleControlPoints, m_bundleResults, m_controlNet, outputBundleStatus(), Isis::BundleResults::rejectionLimit(), and Isis::BundleResults::setNumberRejectedObservations().

Referenced by solveCholesky().

◆ formLidarPointNormals()

int Isis::BundleAdjust::formLidarPointNormals ( LinearAlgebra::MatrixUpperTriangular & N22,
SparseBlockColumnMatrix & N12,
LinearAlgebra::Vector & n2,
LinearAlgebra::Vector & nj,
BundleLidarControlPointQsp & point )
private

Compute the Q matrix and NIC vector for a control point.

The inputs N22, N12, and n2 come from calling formMeasureNormals() with the control point's measures. The Q matrix and NIC vector are stored in the BundleControlPoint. R = N12 x Q is accumulated into m_sparseNormals.

Parameters
N22Contribution to normal equations matrix for a control point.
N12Contribution to normal equations matrix for images and target body.
n2The right hand side vector for the point on the body.
njThe output right hand side vector.
bundleControlPointThe control point that the Q matrixs are NIC vector are being formed for.
Returns
int Number of constrained coordinates.
See also
BundleAdjust::formNormalEquations

Definition at line 1535 of file BundleAdjust.cpp.

References accumProductAlphaAB(), invert3x3(), m_bundleSettings, productAB(), productATransB(), Isis::SurfacePoint::SetMatrix(), and Isis::SparseBlockRowMatrix::zeroBlocks().

Referenced by formNormalEquations().

◆ formMeasureNormals()

bool Isis::BundleAdjust::formMeasureNormals ( LinearAlgebra::MatrixUpperTriangular & N22,
SparseBlockColumnMatrix & N12,
LinearAlgebra::VectorCompressed & n1,
LinearAlgebra::Vector & n2,
LinearAlgebra::Matrix & coeffTarget,
LinearAlgebra::Matrix & coeffImage,
LinearAlgebra::Matrix & coeffPoint3D,
LinearAlgebra::Vector & coeffRHS,
int observationIndex )
private

Form the auxilary normal equation matrices for a measure.

N22, N12, n1, and n2 will contain the auxilary matrices when completed.

Parameters
N22The normal equation matrix for the point on the body.
N12The normal equation matrix for the camera and the target body.
n1The right hand side vector for the camera and the target body.
n2The right hand side vector for the point on the body.
coeffTargetThe matrix containing target body partial derivatives.
coeffImageThe matrix containing camera parameter partial derivatives.
coeffPoint3DThe matrix containing point parameter partial derivatives.
coeffRHSThe vector containing weighted x,y residuals.
observationIndexThe index of the observation containing the measure that the partial derivative matrices are for.
Returns
bool If the matrices were successfully formed.
See also
BundleAdjust::formNormalEquations

Definition at line 1369 of file BundleAdjust.cpp.

References Isis::SparseBlockMatrix::insertMatrixBlock(), m_bundleSettings, and m_sparseNormals.

Referenced by formNormalEquations().

◆ formNormalEquations()

◆ formPointNormals()

int Isis::BundleAdjust::formPointNormals ( LinearAlgebra::MatrixUpperTriangular & N22,
SparseBlockColumnMatrix & N12,
LinearAlgebra::Vector & n2,
LinearAlgebra::Vector & nj,
BundleControlPointQsp & point )
private

Compute the Q matrix and NIC vector for a control point.

The inputs N22, N12, and n2 come from calling formMeasureNormals() with the control point's measures. The Q matrix and NIC vector are stored in the BundleControlPoint. R = N12 x Q is accumulated into m_sparseNormals.

Parameters
N22The normal equation matrix for the point on the body.
N12The normal equation matrix for the camera and the target body.
n2The right hand side vector for the point on the body.
njThe output right hand side vector.
bundleControlPointThe control point that the Q matrixs are NIC vector are being formed for.
Returns
int Number of constrained coordinates.
See also
BundleAdjust::formNormalEquations

Definition at line 1455 of file BundleAdjust.cpp.

References accumProductAlphaAB(), invert3x3(), m_bundleSettings, productAB(), productATransB(), Isis::SurfacePoint::SetMatrix(), and Isis::SparseBlockRowMatrix::zeroBlocks().

Referenced by formNormalEquations().

◆ formWeightedNormals()

bool Isis::BundleAdjust::formWeightedNormals ( LinearAlgebra::VectorCompressed & n1,
LinearAlgebra::Vector & nj )
private

Apply weighting for spacecraft position, velocity, acceleration and camera angles, angular velocities, angular accelerations if so stipulated (legalese).

Parameters
n1The right hand side vector for the camera and the target body.
njThe right hand side vector
Returns
bool If the weights were successfully applied.
Exceptions
IException::Programmer"In BundleAdjust::formWeightedNormals(): target body normals matrix block is null."
IException::Programmer"In BundleAdjust::formWeightedNormals(): position segment normals matrix block is null."
IException::Programmer"In BundleAdjust::formWeightedNormals(): pointing segment normals matrix block is null."
See also
BundleAdjust::formNormalEquations

Definition at line 1616 of file BundleAdjust.cpp.

References Isis::SparseBlockMatrix::getBlock(), Isis::BundleResults::incrementNumberConstrainedImageParameters(), Isis::BundleResults::incrementNumberConstrainedTargetParameters(), m_bundleResults, m_bundleSettings, m_sparseNormals, Isis::BundleResults::resetNumberConstrainedImageParameters(), and Isis::BundleResults::resetNumberConstrainedTargetParameters().

Referenced by formNormalEquations().

◆ freeCHOLMODLibraryVariables()

bool Isis::BundleAdjust::freeCHOLMODLibraryVariables ( )
private

Free CHOLMOD library variables.

Frees m_cholmodTriplet, m_cholmodNormal, and m_L. Calls cholmod_finish when complete.

Returns
bool If the CHOLMOD library successfully cleaned up.

Definition at line 737 of file BundleAdjust.cpp.

References m_cholmodNormal, m_cholmodTriplet, and m_L.

Referenced by ~BundleAdjust().

◆ imageLists()

QList< ImageList * > Isis::BundleAdjust::imageLists ( )

This method returns the image list used in the bundle adjust.

If a QList<ImageList *> was passed into the constructor then it uses that list, otherwise it constructs the QList using the m_serialNumberList

Returns
QList<ImageList *> The ImageLists used for the bundle adjust

Definition at line 2480 of file BundleAdjust.cpp.

References Isis::Image::closeCube(), Isis::SerialNumberList::fileName(), m_serialNumberList, Isis::IException::Programmer, and Isis::SerialNumberList::size().

Referenced by bundleSolveInformation().

◆ init()

void Isis::BundleAdjust::init ( Progress * progress = 0)
private

Initialize all solution parameters.

This method is called by constructors to

  • initialize member variables
  • set up the control net
  • get the cameras set up for all images
  • clear JigsawRejected flags
  • create a new BundleImages and add to BundleObservation
  • set up vector of BundleControlPoints
  • set parent observation for each BundleMeasure
  • use BundleSettings to set more parameters
  • set up matrix initializations
  • initialize cholomod library variables
Parameters
progressA pointer to the progress of creating the cameras.
Exceptions
IException::Programmer"In BundleAdjust::init(): image is null."
IException::Programmer"In BundleAdjust::init(): observation is null."
History

2011-08-14 Debbie A. Cook - Opt out of network validation for deltack network in order to allow a single measure on a point

2016-10-13 Ian Humphrey - Removed verification of held images in the from list and counting of the number of held images. References #4293.

Todo

remove printf statements

answer comments with questions, TODO, ???, and !!!

Definition at line 425 of file BundleAdjust.cpp.

References Isis::BundleObservationVector::addNew(), Isis::ControlPoint::ComputeApriori(), Isis::SerialNumberList::fileName(), fileName(), initializeCHOLMODLibraryVariables(), initializeNormalEquationsMatrix(), m_bundleControlPoints, m_bundleLidarControlPoints, m_bundleResults, m_bundleSettings, m_cholmodNormal, m_cholmodTriplet, m_controlNet, m_imageSolution, m_iteration, m_L, m_lidarDataSet, m_normalInverse, m_previousNumberImagePartials, m_rank, m_RHS, m_serialNumberList, Isis::BundleResults::maximumLikelihoodSetUp(), Isis::BundleObservationVector::numberParameters(), Isis::BundleObservationVector::observationByCubeSerialNumber(), Isis::SerialNumberList::observationNumber(), outputBundleStatus(), Isis::IException::Programmer, Isis::SerialNumberList::serialNumber(), Isis::BundleResults::setNumberUnknownParameters(), Isis::SerialNumberList::size(), Isis::SerialNumberList::spacecraftInstrumentId(), and validateNetwork().

Referenced by BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), and BundleAdjust().

◆ initializeCHOLMODLibraryVariables()

bool Isis::BundleAdjust::initializeCHOLMODLibraryVariables ( )
private

Initializations for CHOLMOD sparse matrix package.

Calls cholmod_start, sets m_cholmodCommon options.

Returns
bool If the CHOLMOD library variables were successfully initialized.

Definition at line 709 of file BundleAdjust.cpp.

References Isis::cholmodErrorHandler(), m_cholmodTriplet, and m_rank.

Referenced by init().

◆ initializeNormalEquationsMatrix()

bool Isis::BundleAdjust::initializeNormalEquationsMatrix ( )
private

Initialize Normal Equations matrix (m_sparseNormals).

Returns
bool.
Todo
Ken Currently we are explicitly setting the start column for each block in the normal equations matrix below. I think it should be possible (and relatively easy) to make the m_sparseNormals smart enough to set the start column of a column block automatically when it is added to the matrix.

Definition at line 759 of file BundleAdjust.cpp.

References m_bundleSettings, m_sparseNormals, Isis::BundleObservationVector::numberParameters(), and Isis::SparseBlockMatrix::setNumberOfColumns().

Referenced by init().

◆ invert3x3()

bool Isis::BundleAdjust::invert3x3 ( LinearAlgebra::MatrixUpperTriangular & m)
private

Dedicated quick inverse of 3x3 matrix.

Parameters
mThe 3x3 matrix to invert. Overwritten with the inverse.
Returns
bool If the matrix was inverted. False usually means the matrix is not invertible.
See also
BundleAdjust::formPointNormals

@TODO Move to LinearAlgebra

Definition at line 1990 of file BundleAdjust.cpp.

Referenced by formLidarPointNormals(), and formPointNormals().

◆ isAborted()

bool Isis::BundleAdjust::isAborted ( )

Returns if the BundleAdjust has been aborted.

Returns
bool If the BundleAdjust was aborted.

Definition at line 3078 of file BundleAdjust.cpp.

References m_abort.

Referenced by Isis::JigsawRunWidget::notifyThreadFinished().

◆ isConverged

bool Isis::BundleAdjust::isConverged ( )
slot

Returns if the BundleAdjust converged.

Returns
bool If the BundleAdjust converged.

Definition at line 3068 of file BundleAdjust.cpp.

References Isis::BundleResults::converged(), and m_bundleResults.

◆ iteration

double Isis::BundleAdjust::iteration ( ) const
slot

Returns what iteration the BundleAdjust is currently on.

Returns
double The current iteration number.

Definition at line 2931 of file BundleAdjust.cpp.

References m_iteration.

◆ iterationSummary()

◆ iterationSummaryGroup

QString Isis::BundleAdjust::iterationSummaryGroup ( ) const
slot

Returns the iteration summary string.

Returns
QString the iteration summary string.
See also
iterationSummary()

Definition at line 3090 of file BundleAdjust.cpp.

◆ lidarData

LidarDataQsp Isis::BundleAdjust::lidarData ( )
slot

Returns a pointer to the output lidar data file.

Returns
LidarDataQsp A shared pointer to the output lidar data file.

Definition at line 2887 of file BundleAdjust.cpp.

References m_lidarDataSet.

◆ loadCholmodTriplet()

bool Isis::BundleAdjust::loadCholmodTriplet ( )
private

Load sparse normal equations matrix into CHOLMOD triplet.

Blocks from the sparse block normal matrix are loaded into a CHOLMOD triplet. Before the triplet can be used with CHOLMOD, it must be converted to a CHOLMOD sparse matrix via cholmod_triplet_to_sparse.

Returns
bool If the triplet was successfully formed.
See also
BundleAdjust::solveSystem

Definition at line 1872 of file BundleAdjust.cpp.

References m_cholmodTriplet, m_iteration, m_rank, m_sparseNormals, Isis::SparseBlockMatrix::numberOfBlocks(), Isis::SparseBlockMatrix::numberOfElements(), and outputBundleStatus().

Referenced by solveSystem().

◆ modelState

QString Isis::BundleAdjust::modelState ( int i)
slot

Return the updated model state for the ith cube in the cube list given to the constructor.

This is only valid for CSM cubes.

Parameters
iThe index of the cube to get the model state for
Returns
QString The updated CSM model state string

Definition at line 2974 of file BundleAdjust.cpp.

References Isis::Camera::Csm, Isis::CSMCamera::getModelState(), m_controlNet, Isis::IException::Programmer, and Isis::toString().

◆ numberOfImages

int Isis::BundleAdjust::numberOfImages ( ) const
slot

Returns the number of images.

Returns
int The number of images.

Definition at line 2907 of file BundleAdjust.cpp.

References m_serialNumberList, and Isis::SerialNumberList::size().

◆ outputBundleStatus

void Isis::BundleAdjust::outputBundleStatus ( QString status)
slot

Slot for deltack and jigsaw to output the bundle status.

Parameters
statusThe bundle status string to output.
History
2016-12-01 Ian Humphrey - Added s as first paramter to prevent a -Wformat-security warning during the build.

Definition at line 3104 of file BundleAdjust.cpp.

Referenced by computeRejectionLimit(), errorPropagation(), flagOutliers(), formNormalEquations(), init(), loadCholmodTriplet(), solveCholesky(), and validateNetwork().

◆ productAB()

void Isis::BundleAdjust::productAB ( SparseBlockColumnMatrix & N12,
SparseBlockRowMatrix & Q )
private

Perform the matrix multiplication C = N12 x Q.

The result, C, is stored in m_sparseNormals.

Parameters
N12A sparse block matrix.
QA sparse block matrix
See also
BundleAdjust::formPointNormals

Definition at line 1717 of file BundleAdjust.cpp.

References Isis::SparseBlockMatrix::insertMatrixBlock(), and m_sparseNormals.

Referenced by formLidarPointNormals(), and formPointNormals().

◆ productATransB()

bool Isis::BundleAdjust::productATransB ( LinearAlgebra::MatrixUpperTriangular & N22,
SparseBlockColumnMatrix & N12,
SparseBlockRowMatrix & Q )
private

Perform the matrix multiplication Q = N22 x N12(transpose)

Parameters
N22A symmetric matrix
N12A sparse block matrix
QThe output sparse block matrix
See also
BundleAdjust::formPointNormals

Definition at line 1687 of file BundleAdjust.cpp.

Referenced by formLidarPointNormals(), and formPointNormals().

◆ serialNumberList

SerialNumberList * Isis::BundleAdjust::serialNumberList ( )
slot

Returns a pointer to the serial number list.

Returns
SerialNumberList* A pointer to the serial number list.

Definition at line 2897 of file BundleAdjust.cpp.

References m_serialNumberList.

◆ solveCholesky

bool Isis::BundleAdjust::solveCholesky ( )
slot

Compute the least squares bundle adjustment solution using Cholesky decomposition.

Returns
bool If the solution was successfully computed.
History

2016-10-25 Ian Humphrey - Spacing and precision for Sigma0 and Elapsed Time match ISIS production's jigsaw std output. References #4463." <p> <p> 2016-10-28 Ian Humphrey - Updated spacing for Error Propagation Complete message. References #4463."

2016-11-16 Ian Humphrey - Modified catch block to throw the caught exception, so a message box will appear to the user when running jigsaw in GUI mode. Fixes #4483.

Definition at line 831 of file BundleAdjust.cpp.

References applyParameterCorrections(), bundleSolveInformation(), computeBundleStatistics(), computeRejectionLimit(), computeResiduals(), Isis::BundleResults::computeSigma0(), computeVtpv(), Isis::BundleResults::converged(), Isis::BundleResults::degreesOfFreedom(), errorPropagation(), flagOutliers(), formNormalEquations(), Isis::BundleResults::incrementMaximumLikelihoodModelIndex(), Isis::BundleResults::initializeResidualsProbabilityDistribution(), iterationSummary(), Isis::SurfacePoint::Latitudinal, m_abort, m_bundleControlPoints, m_bundleLidarControlPoints, m_bundleResults, m_bundleSettings, m_imageSolution, m_iteration, m_iterationTime, m_L, m_sparseNormals, Isis::BundleResults::maximumLikelihoodModelIndex(), Isis::BundleResults::numberConstrainedPointParameters(), Isis::BundleResults::numberMaximumLikelihoodModels(), Isis::BundleResults::numberObservations(), Isis::BundleResults::numberUnknownParameters(), outputBundleStatus(), Isis::BundleResults::printMaximumLikelihoodTierInformation(), Isis::BundleResults::setBundleControlPoints(), Isis::BundleResults::setBundleLidarPoints(), Isis::BundleResults::setConverged(), Isis::BundleResults::setElapsedTime(), Isis::BundleResults::setElapsedTimeErrorProp(), Isis::BundleResults::setIterations(), Isis::BundleResults::setObservations(), Isis::BundleResults::sigma0(), Isis::BundleSettings::Sigma0, solveSystem(), and Isis::SparseBlockMatrix::zeroBlocks().

Referenced by solveCholeskyBR().

◆ solveCholeskyBR()

BundleSolutionInfo * Isis::BundleAdjust::solveCholeskyBR ( )

Compute the least squares bundle adjustment solution using Cholesky decomposition.

Returns
BundleSolutionInfo A container with settings and results from the adjustment.
See also
BundleAdjust::solveCholesky
Todo
make solveCholesky return a BundleSolutionInfo object and delete this placeholder ???

Definition at line 802 of file BundleAdjust.cpp.

References bundleSolveInformation(), and solveCholesky().

◆ solveSystem()

bool Isis::BundleAdjust::solveSystem ( )
private

Compute the solution to the normal equations using the CHOLMOD library.

Returns
bool If the solution was successfully computed.
Exceptions
IException::Programmer"CHOLMOD: Failed to load Triplet matrix"
See also
BundleAdjust::solveCholesky

Definition at line 1801 of file BundleAdjust.cpp.

References loadCholmodTriplet(), m_cholmodNormal, m_cholmodTriplet, m_imageSolution, m_L, m_rank, m_RHS, Isis::IException::Programmer, and Isis::toString().

Referenced by solveCholesky().

◆ spVector

Table Isis::BundleAdjust::spVector ( int i)
slot

Return the updated instrument position table for the ith cube in the cube list given to the constructor.

This is only valid for ISIS camera model cubes

Parameters
iThe index of the cube
Returns
Table The InstrumentPosition table for the cube.

Definition at line 2961 of file BundleAdjust.cpp.

References m_controlNet.

Referenced by Isis::JigsawRunWidget::on_JigsawAcceptButton_clicked().

◆ validateNetwork()

bool Isis::BundleAdjust::validateNetwork ( )
private

control network validation - on the very real chance that the net has not been checked before running the bundle

checks implemented for ... (1) images with 0 or 1 measures

Returns
bool If the control network is valid.
Exceptions
IException::User"Images with one or less measures:"
History

2011-08-04 Debbie A. Cook - Changed error message to indicate it fails with one measure as well as no measures.

2016-09-22 Ian Humphrey - Replaced statusUpdate signal emits with direct calls to outputBundleStats() so the validation messages are printed to stdout. References #4313.

Definition at line 670 of file BundleAdjust.cpp.

References m_controlNet, outputBundleStatus(), Isis::toString(), and Isis::IException::User.

Referenced by init().

Member Data Documentation

◆ m_abort

bool Isis::BundleAdjust::m_abort
private

!< Contains information about the target body.

If the bundle should abort.

Definition at line 483 of file BundleAdjust.h.

Referenced by abortBundle(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), isAborted(), and solveCholesky().

◆ m_bundleControlPoints

◆ m_bundleLidarControlPoints

BundleLidarPointVector Isis::BundleAdjust::m_bundleLidarControlPoints
private

◆ m_bundleObservations

BundleObservationVector Isis::BundleAdjust::m_bundleObservations
private

Definition at line 477 of file BundleAdjust.h.

◆ m_bundleResults

◆ m_bundleSettings

◆ m_bundleTargetBody

BundleTargetBodyQsp Isis::BundleAdjust::m_bundleTargetBody
private

Definition at line 481 of file BundleAdjust.h.

◆ m_cholmodCommon

cholmod_common Isis::BundleAdjust::m_cholmodCommon
private

Definition at line 510 of file BundleAdjust.h.

◆ m_cholmodNormal

cholmod_sparse* Isis::BundleAdjust::m_cholmodNormal
private

!< The CHOLMOD triplet representation of the sparse normal equations matrix.

Created from m_sparseNormals and then used to create m_cholmodNormal.

Definition at line 525 of file BundleAdjust.h.

Referenced by errorPropagation(), freeCHOLMODLibraryVariables(), init(), and solveSystem().

◆ m_cholmodTriplet

cholmod_triplet* Isis::BundleAdjust::m_cholmodTriplet
private

!< The sparse block normal equations matrix.

Used to populate m_cholmodTriplet and for error propagation.

Definition at line 519 of file BundleAdjust.h.

Referenced by errorPropagation(), freeCHOLMODLibraryVariables(), init(), initializeCHOLMODLibraryVariables(), loadCholmodTriplet(), and solveSystem().

◆ m_cleanUp

bool Isis::BundleAdjust::m_cleanUp
private

!< If the iteration summaries should be output to the log file.

Definition at line 489 of file BundleAdjust.h.

Referenced by BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), and ~BundleAdjust().

◆ m_cnetFileName

QString Isis::BundleAdjust::m_cnetFileName
private

◆ m_controlNet

ControlNetQsp Isis::BundleAdjust::m_controlNet
private

◆ m_imageLists

QList<ImageList *> Isis::BundleAdjust::m_imageLists
private

Definition at line 496 of file BundleAdjust.h.

◆ m_imageSolution

LinearAlgebra::Vector Isis::BundleAdjust::m_imageSolution
private

!< The lower triangular L matrix from Cholesky decomposition.

Created from m_cholmodNormal by cholmod_factorize.

Definition at line 534 of file BundleAdjust.h.

Referenced by applyParameterCorrections(), init(), solveCholesky(), and solveSystem().

◆ m_iteration

int Isis::BundleAdjust::m_iteration
private

The current iteration.

Definition at line 493 of file BundleAdjust.h.

Referenced by init(), iteration(), iterationSummary(), loadCholmodTriplet(), and solveCholesky().

◆ m_iterationSummary

QString Isis::BundleAdjust::m_iterationSummary
private

Definition at line 484 of file BundleAdjust.h.

◆ m_iterationTime

double Isis::BundleAdjust::m_iterationTime
private

Time for last iteration.

Definition at line 494 of file BundleAdjust.h.

Referenced by iterationSummary(), and solveCholesky().

◆ m_L

cholmod_factor* Isis::BundleAdjust::m_L
private

!< The CHOLMOD sparse normal equations matrix used by cholmod_factorize to solve the system.

Created from m_cholmodTriplet.

Definition at line 530 of file BundleAdjust.h.

Referenced by errorPropagation(), freeCHOLMODLibraryVariables(), init(), solveCholesky(), and solveSystem().

◆ m_lidarDataSet

LidarDataQsp Isis::BundleAdjust::m_lidarDataSet
private

Output lidar data.

Definition at line 474 of file BundleAdjust.h.

Referenced by BundleAdjust(), init(), and lidarData().

◆ m_lidarFileName

QString Isis::BundleAdjust::m_lidarFileName
private

Input lidar point filename.

Definition at line 473 of file BundleAdjust.h.

Referenced by BundleAdjust(), and bundleSolveInformation().

◆ m_normalInverse

boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper, boost::numeric::ublas::column_major > Isis::BundleAdjust::m_normalInverse
private

!< The lists of images used in the bundle.

Inverse of the normal equations matrix. Set by cholmodInverse.

Definition at line 509 of file BundleAdjust.h.

Referenced by init().

◆ m_numberOfImagePartials

int Isis::BundleAdjust::m_numberOfImagePartials
private

number of image-related partials.

Definition at line 495 of file BundleAdjust.h.

◆ m_numLidarConstraints

int Isis::BundleAdjust::m_numLidarConstraints
private

TODO: temp.

Definition at line 475 of file BundleAdjust.h.

Referenced by formNormalEquations().

◆ m_previousNumberImagePartials

int Isis::BundleAdjust::m_previousNumberImagePartials
private

!< The image parameter solution vector.

Definition at line 537 of file BundleAdjust.h.

Referenced by computePartials(), and init().

◆ m_printSummary

bool Isis::BundleAdjust::m_printSummary
private

!< Summary of the most recently completed iteration.

Definition at line 486 of file BundleAdjust.h.

Referenced by BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), and iterationSummary().

◆ m_rank

int Isis::BundleAdjust::m_rank
private

!< If the serial number lists need to be deleted by the destructor.

The rank of the system.

Definition at line 492 of file BundleAdjust.h.

Referenced by errorPropagation(), formNormalEquations(), init(), initializeCHOLMODLibraryVariables(), loadCholmodTriplet(), and solveSystem().

◆ m_RHS

LinearAlgebra::Vector Isis::BundleAdjust::m_RHS
private

!< Contains object parameters, statistics, and workspace used by the CHOLMOD library.

Definition at line 513 of file BundleAdjust.h.

Referenced by formNormalEquations(), init(), and solveSystem().

◆ m_serialNumberList

SerialNumberList* Isis::BundleAdjust::m_serialNumberList
private

!< Vector of observations.

Each observation contains one or more images. List of image serial numbers.

Definition at line 480 of file BundleAdjust.h.

Referenced by BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), BundleAdjust(), computeBundleStatistics(), fileName(), imageLists(), init(), numberOfImages(), serialNumberList(), and ~BundleAdjust().

◆ m_sparseNormals

SparseBlockMatrix Isis::BundleAdjust::m_sparseNormals
private

The documentation for this class was generated from the following files: