USGS

Isis 3.0 Object Programmers' Reference

Home

BundleAdjust.h

Go to the documentation of this file.
00001 #ifndef BundleAdjust_h
00002 #define BundleAdjust_h
00003 
00060 #include "ControlNet.h"
00061 #include "SerialNumberList.h"
00062 #include "ObservationNumberList.h"
00063 #include "Camera.h"
00064 #include "Statistics.h"
00065 #include "SpicePosition.h"
00066 #include "Progress.h"
00067 
00068 namespace Isis {
00069   class LeastSquares;
00070   class BasisFunction;
00071 
00072   class BundleAdjust {
00073     public:
00074       BundleAdjust(const std::string &cnetFile, const std::string &cubeList,
00075                    bool printSummary=true);
00076       BundleAdjust(const std::string &cnetFile, const std::string &cubeList,
00077                    const std::string &heldList,bool printSummary=true);
00078       BundleAdjust(Isis::ControlNet &cnet, Isis::SerialNumberList &snlist,
00079                    bool printSummary=true);
00080       BundleAdjust(Isis::ControlNet &cnet, Isis::SerialNumberList &snlist,
00081                    Isis::SerialNumberList &heldsnlist,bool printSummary=true);
00082       ~BundleAdjust();
00083 
00084       double Solve(double tol, int maxIterations);
00085 
00086       Isis::ControlNet *ControlNet() { return p_cnet; };
00087 
00088       Isis::SerialNumberList *SerialNumberList() { return p_snlist; };
00089       int Images() const;
00090       int Observations() const;
00091       std::string Filename(int index);
00092       Table Cmatrix(int index);
00093       Table SpVector(int index);
00094 
00095       void SetSolveTwist(bool solve);
00096       void SetSolveRadii(bool solve);
00097 
00098       enum CmatrixSolveType {
00099         None,
00100         AnglesOnly,
00101         AnglesVelocity,
00102         AnglesVelocityAcceleration,
00103         All
00104       };
00105 
00106       enum SpacecraftPositionSolveType {
00107         Nothing,
00108         PositionOnly,
00109         PositionVelocity,
00110         PositionVelocityAcceleration
00111       };
00112 
00113       void SetSolveCmatrix(CmatrixSolveType type);
00114       void SetSolveSpacecraftPosition(SpacecraftPositionSolveType type);
00115 
00117       void SetCkDegree( int degree ) { p_ckDegree = degree; };
00118 
00120       void SetSolveCamDegree( int degree ) { p_solveCamDegree = degree; };
00121 
00122       int BasisColumns() const;
00123 
00124       double Error() const { return p_error; };
00125       double Iteration() const { return p_iteration; };
00126 
00127       int HeldPoints() const { return p_heldPoints; };
00128       int IgnoredPoints() const { return p_ignoredPoints; };
00129       int GroundPoints() const { return p_groundPoints; };
00130       void SetObservationMode ( bool observationMode );
00131 
00133       void SetSolutionMethod ( std::string solutionMethod ) { p_solutionMethod = solutionMethod;};
00134 
00135     private:
00136       void Init(Progress *progress=0);
00137 
00138       void ComputeNumberPartials();
00139 
00140       void AddPartials (LeastSquares &lsq,
00141                         int point);
00142       void Update (BasisFunction &basis);
00143 
00144       int PointIndex (int i) const;
00145 
00146       int ImageIndex (int i) const;
00147 
00148       void CheckHeldList();
00149       void ApplyHeldList();
00150 
00151       Isis::ControlNet *p_cnet;
00152       Isis::SerialNumberList *p_snlist;
00153       Isis::SerialNumberList *p_heldsnlist;
00154       Isis::ObservationNumberList *p_onlist;
00155 
00156       double p_error;
00157       int p_iteration;
00158       bool p_printSummary;
00159 
00160       int p_numImagePartials;
00161       int p_numPointPartials;
00162 
00163       bool p_solveTwist;
00164       bool p_solveRadii;
00165       bool p_observationMode;
00166       CmatrixSolveType p_cmatrixSolveType;
00167       SpacecraftPositionSolveType p_spacecraftPositionSolveType;
00168 
00169       double LowDHigh(std::vector<double> &lookC,
00170                       std::vector<double> &dlookC,
00171                       int index);
00172 
00173       enum PartialDerivative {
00174         WRT_Latitude,
00175         WRT_Longitude,
00176         WRT_Radius
00177       };
00178 
00179       std::vector<double> PointPartial(Isis::ControlPoint &point, PartialDerivative wrt);
00180 
00181       int p_heldPoints;
00182       int p_groundPoints;
00183       int p_ignoredPoints;
00184       int p_heldImages;
00185       int p_heldObservations;
00186       std::vector<int> p_pointIndexMap;
00187       std::vector<int> p_imageIndexMap;
00188       bool p_cleanUp;
00189 
00190       void IterationSummary(double avErr, double sigmaXY,
00191                             double sigmaHat, double sigmaX, double sigmaY);
00192       Statistics p_statx;
00193       Statistics p_staty;
00194       std::string p_solutionMethod;
00195       int p_ckDegree;
00196       int p_solveCamDegree;
00197       int p_numberCameraCoefSolved;  
00198   };
00199 };
00200 
00201 #endif
00202