|
Isis 3.0 Object Programmers' Reference |
Home |
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