Loading isis/src/base/objs/LinearAlgebra/LinearAlgebra.h +1 −12 Original line number Original line Diff line number Diff line Loading @@ -26,9 +26,8 @@ #include <iostream> #include <iostream> // boost library // boost library #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/symmetric.hpp> #include <boost/numeric/ublas/io.hpp> // Qt Library // Qt Library #include <QDebug> #include <QDebug> Loading Loading @@ -113,16 +112,6 @@ namespace Isis { * API. * API. */ */ typedef boost::numeric::ublas::matrix<double> Matrix; typedef boost::numeric::ublas::matrix<double> Matrix; /** * Definition for an Isis::LinearAlgebra::UpperSymmetricMatrix * of doubles. This is a typedef for a boost matrix. */ typedef boost::numeric::ublas::symmetric_matrix<double> SymmetricMatrix; /** * Definition for an Isis::LinearAlgebra::UpperSymmetricMatrix * of doubles. This is a typedef for a boost matrix. */ typedef boost::numeric::ublas::symmetric_matrix<double, upper> UpperSymmetricMatrix; /** /** * Definition for an Isis::LinearAlgebra::Vector of doubles. This is a * Definition for an Isis::LinearAlgebra::Vector of doubles. This is a * typedef for a boost vector. * typedef for a boost vector. Loading isis/src/base/objs/SurfacePoint/SurfacePoint.cpp +21 −21 Original line number Original line Diff line number Diff line Loading @@ -5,9 +5,9 @@ #include "IException.h" #include "IException.h" #include "IString.h" #include "IString.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" using namespace boost::numeric::ublas; using namespace std; using namespace std; namespace Isis { namespace Isis { Loading Loading @@ -70,14 +70,14 @@ namespace Isis { } } if(other.p_rectCovar) { if(other.p_rectCovar) { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_rectCovar); p_rectCovar = new symmetric_matrix<double, upper>(*other.p_rectCovar); } } else { else { p_rectCovar = NULL; p_rectCovar = NULL; } } if(other.p_sphereCovar) { if(other.p_sphereCovar) { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_sphereCovar); p_sphereCovar = new symmetric_matrix<double, upper>(*other.p_sphereCovar); } } else { else { p_sphereCovar = NULL; p_sphereCovar = NULL; Loading Loading @@ -132,7 +132,7 @@ namespace Isis { * * */ */ SurfacePoint::SurfacePoint(const Latitude &lat, const Longitude &lon, SurfacePoint::SurfacePoint(const Latitude &lat, const Longitude &lon, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Distance &radius, const symmetric_matrix<double, upper> &covar) { InitCovariance(); InitCovariance(); InitPoint(); InitPoint(); InitRadii(); InitRadii(); Loading Loading @@ -190,7 +190,7 @@ namespace Isis { * @param covar The variance/covariance matrix of the point * @param covar The variance/covariance matrix of the point */ */ SurfacePoint::SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint::SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Displacement &z, const symmetric_matrix<double, upper> &covar) { InitCovariance(); InitCovariance(); InitPoint(); InitPoint(); InitRadii(); InitRadii(); Loading Loading @@ -318,7 +318,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetRectangular(Displacement x, Displacement y, Displacement z, void SurfacePoint::SetRectangular(Displacement x, Displacement y, Displacement z, const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double,upper>& covar) { SetRectangularPoint(x, y, z); SetRectangularPoint(x, y, z); SetRectangularMatrix(covar); SetRectangularMatrix(covar); } } Loading @@ -342,7 +342,7 @@ namespace Isis { throw IException(IException::User, msg, _FILEINFO_); throw IException(IException::User, msg, _FILEINFO_); } } LinearAlgebra::UpperSymmetricMatrix covar(3); symmetric_matrix<double,upper> covar(3); covar.clear(); covar.clear(); covar(0,0) = xSigma.meters() * xSigma.meters(); covar(0,0) = xSigma.meters() * xSigma.meters(); covar(1,1) = ySigma.meters() * ySigma.meters(); covar(1,1) = ySigma.meters() * ySigma.meters(); Loading @@ -359,7 +359,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetRectangularMatrix( void SurfacePoint::SetRectangularMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double, upper> &covar) { // Make sure the point is set first // Make sure the point is set first if (!Valid()) { if (!Valid()) { IString msg = "A point must be set before a variance/covariance matrix " IString msg = "A point must be set before a variance/covariance matrix " Loading @@ -371,7 +371,7 @@ namespace Isis { *p_rectCovar = covar; *p_rectCovar = covar; } } else { else { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(covar); p_rectCovar = new symmetric_matrix<double, upper>(covar); } } SpiceDouble rectMat[3][3]; SpiceDouble rectMat[3][3]; Loading Loading @@ -406,7 +406,7 @@ namespace Isis { J[2][2] = p_z->meters() / radius; J[2][2] = p_z->meters() / radius; if(!p_sphereCovar) if(!p_sphereCovar) p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(3); p_sphereCovar = new symmetric_matrix<double, upper>(3); SpiceDouble mat[3][3]; SpiceDouble mat[3][3]; mxm_c (J, rectMat, mat); mxm_c (J, rectMat, mat); Loading Loading @@ -486,7 +486,7 @@ namespace Isis { * @param covar Spherical variance/covariance matrix in m*m * @param covar Spherical variance/covariance matrix in m*m */ */ void SurfacePoint::SetSpherical(const Latitude &lat, const Longitude &lon, void SurfacePoint::SetSpherical(const Latitude &lat, const Longitude &lon, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Distance &radius, const symmetric_matrix<double, upper> &covar) { SetSphericalPoint(lat, lon, radius); SetSphericalPoint(lat, lon, radius); SetSphericalMatrix(covar); SetSphericalMatrix(covar); } } Loading Loading @@ -518,7 +518,7 @@ namespace Isis { const Angle &lonSigma, const Angle &lonSigma, const Distance &radiusSigma) { const Distance &radiusSigma) { if (latSigma.isValid() && lonSigma.isValid() && radiusSigma.isValid()) { if (latSigma.isValid() && lonSigma.isValid() && radiusSigma.isValid()) { LinearAlgebra::UpperSymmetricMatrix covar(3); symmetric_matrix<double,upper> covar(3); covar.clear(); covar.clear(); double sphericalCoordinate; double sphericalCoordinate; Loading Loading @@ -584,7 +584,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetSphericalMatrix( void SurfacePoint::SetSphericalMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double, upper> & covar) { // Make sure the point is set first // Make sure the point is set first if (!Valid()) { if (!Valid()) { Loading @@ -597,7 +597,7 @@ namespace Isis { *p_sphereCovar = covar; *p_sphereCovar = covar; } } else { else { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(covar); p_sphereCovar = new symmetric_matrix<double, upper>(covar); } } SpiceDouble sphereMat[3][3]; SpiceDouble sphereMat[3][3]; Loading Loading @@ -637,7 +637,7 @@ namespace Isis { J[2][2] = sinPhi; J[2][2] = sinPhi; if(!p_rectCovar) if(!p_rectCovar) p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(3); p_rectCovar = new symmetric_matrix<double, upper>(3); SpiceDouble mat[3][3]; SpiceDouble mat[3][3]; mxm_c (J, sphereMat, mat); mxm_c (J, sphereMat, mat); Loading Loading @@ -825,10 +825,10 @@ namespace Isis { } } LinearAlgebra::UpperSymmetricMatrix SurfacePoint::GetRectangularMatrix() symmetric_matrix<double, upper> SurfacePoint::GetRectangularMatrix() const { const { if(!p_rectCovar) { if(!p_rectCovar) { LinearAlgebra::UpperSymmetricMatrix tmp(3); symmetric_matrix<double, upper> tmp(3); tmp.clear(); tmp.clear(); return tmp; return tmp; } } Loading Loading @@ -977,9 +977,9 @@ namespace Isis { } } LinearAlgebra::UpperSymmetricMatrix SurfacePoint::GetSphericalMatrix() const { symmetric_matrix<double, upper> SurfacePoint::GetSphericalMatrix() const { if(!p_sphereCovar) { if(!p_sphereCovar) { LinearAlgebra::UpperSymmetricMatrix tmp(3); symmetric_matrix<double, upper> tmp(3); tmp.clear(); tmp.clear(); return tmp; return tmp; } } Loading Loading @@ -1192,11 +1192,11 @@ namespace Isis { } } if(other.p_rectCovar) { if(other.p_rectCovar) { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_rectCovar); p_rectCovar = new symmetric_matrix<double, upper>(*other.p_rectCovar); } } if(other.p_sphereCovar) { if(other.p_sphereCovar) { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_sphereCovar); p_sphereCovar = new symmetric_matrix<double, upper>(*other.p_sphereCovar); } } } } Loading isis/src/base/objs/SurfacePoint/SurfacePoint.h +20 −10 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <vector> #include <vector> #include <cmath> #include <cmath> #include "boost/numeric/ublas/symmetric.hpp" #include "boost/numeric/ublas/io.hpp" #include "Displacement.h" #include "Displacement.h" #include "Distance.h" #include "Distance.h" #include "Angle.h" #include "Angle.h" Loading Loading @@ -93,7 +96,8 @@ namespace Isis { const Distance &radiusSigma); const Distance &radiusSigma); SurfacePoint(const Latitude &lat, const Longitude &lon, SurfacePoint(const Latitude &lat, const Longitude &lon, const Distance &radius, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z); const Displacement &z); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, Loading @@ -101,7 +105,8 @@ namespace Isis { const Distance &zSigma); const Distance &zSigma); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z, const Displacement &z, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); ~SurfacePoint(); ~SurfacePoint(); // Rectangular loading utilities // Rectangular loading utilities Loading @@ -110,7 +115,7 @@ namespace Isis { const Distance &ySigma=Distance(), const Distance &zSigma=Distance()); const Distance &ySigma=Distance(), const Distance &zSigma=Distance()); void SetRectangular(const Displacement x, const Displacement y, const Displacement z, void SetRectangular(const Displacement x, const Displacement y, const Displacement z, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); //! Set surface point and sigmas in rectangular coordinates and convert to planetocentric //! Set surface point and sigmas in rectangular coordinates and convert to planetocentric void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, Loading @@ -118,7 +123,7 @@ namespace Isis { void SetRectangularMatrix( void SetRectangularMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); // Spherical loading utilities // Spherical loading utilities Loading @@ -131,13 +136,14 @@ namespace Isis { void SetSpherical (const Latitude &lat, const Longitude &lon, void SetSpherical (const Latitude &lat, const Longitude &lon, const Distance &radius, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius); const Distance &radius); void SetSphericalMatrix( void SetSphericalMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, const Distance &radiusSigma); const Distance &radiusSigma); Loading @@ -159,7 +165,8 @@ namespace Isis { Distance GetXSigma() const; Distance GetXSigma() const; Distance GetYSigma() const; Distance GetYSigma() const; Distance GetZSigma() const; Distance GetZSigma() const; LinearAlgebra::UpperSymmetricMatrix GetRectangularMatrix() const; boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper> GetRectangularMatrix() const; Latitude GetLatitude() const; Latitude GetLatitude() const; Longitude GetLongitude() const; Longitude GetLongitude() const; Distance GetLocalRadius() const; Distance GetLocalRadius() const; Loading @@ -171,7 +178,8 @@ namespace Isis { double GetLonWeight() const; double GetLonWeight() const; Distance GetLocalRadiusSigma() const; Distance GetLocalRadiusSigma() const; double GetLocalRadiusWeight() const; double GetLocalRadiusWeight() const; LinearAlgebra::UpperSymmetricMatrix GetSphericalMatrix() const; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> GetSphericalMatrix() const; // Computational methods // Computational methods Distance GetDistanceToPoint(const SurfacePoint &other) const; Distance GetDistanceToPoint(const SurfacePoint &other) const; Loading Loading @@ -201,9 +209,11 @@ namespace Isis { Displacement *p_y; Displacement *p_y; Displacement *p_z; Displacement *p_z; //! 3x3 upper triangular covariance matrix rectangular coordinates //! 3x3 upper triangular covariance matrix rectangular coordinates LinearAlgebra::UpperSymmetricMatrix *p_rectCovar; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> *p_rectCovar; //! 3x3 upper triangular covariance matrix ocentric coordinates //! 3x3 upper triangular covariance matrix ocentric coordinates LinearAlgebra::UpperSymmetricMatrix *p_sphereCovar; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> *p_sphereCovar; }; }; }; }; Loading isis/src/base/objs/SurfacePoint/unitTest.cpp +9 −7 Original line number Original line Diff line number Diff line Loading @@ -8,13 +8,15 @@ #include "Distance.h" #include "Distance.h" #include "IException.h" #include "IException.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" #include "Preference.h" #include "Preference.h" #include "SurfacePoint.h" #include "SurfacePoint.h" #include "boost/numeric/ublas/symmetric.hpp" using namespace Isis; using namespace Isis; using namespace std; using namespace std; using namespace boost::numeric::ublas; /** /** * * Loading @@ -26,7 +28,7 @@ using namespace std; */ */ int main(int argc, char *argv[]) { int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); Isis::Preference::Preferences(true); LinearAlgebra::UpperSymmetricMatrix cvRect,cvOc; symmetric_matrix<double,upper> cvRect,cvOc; try { try { cout << "UnitTest for SurfacePoint" << endl << endl; cout << "UnitTest for SurfacePoint" << endl << endl; Loading @@ -39,7 +41,7 @@ int main(int argc, char *argv[]) { Distance(1000., Distance::Meters), Distance(1000., Distance::Meters), Distance(1000., Distance::Meters)); Distance(1000., Distance::Meters)); LinearAlgebra::UpperSymmetricMatrix covar; symmetric_matrix<double,upper> covar; covar.resize(3); covar.resize(3); covar.clear(); covar.clear(); covar(0,0) = 100.; covar(0,0) = 100.; Loading @@ -56,7 +58,7 @@ int main(int argc, char *argv[]) { double latSig = spRec.GetLatSigma().degrees(); double latSig = spRec.GetLatSigma().degrees(); double lonSig = spRec.GetLonSigma().degrees(); double lonSig = spRec.GetLonSigma().degrees(); double radSig = spRec.GetLocalRadiusSigma().meters(); double radSig = spRec.GetLocalRadiusSigma().meters(); LinearAlgebra::UpperSymmetricMatrix covarSphere(3); symmetric_matrix<double,upper> covarSphere(3); covarSphere.clear(); covarSphere.clear(); covarSphere = spRec.GetSphericalMatrix(); covarSphere = spRec.GetSphericalMatrix(); Loading Loading @@ -106,7 +108,7 @@ int main(int argc, char *argv[]) { Longitude(lon, Angle::Degrees), Longitude(lon, Angle::Degrees), Distance(radius, Distance::Meters), Distance(radius, Distance::Meters), covarSphere ); covarSphere ); LinearAlgebra::UpperSymmetricMatrix covarRec(3); symmetric_matrix<double,upper> covarRec(3); covarRec.clear(); covarRec.clear(); covarRec = spSphere.GetRectangularMatrix(); covarRec = spSphere.GetRectangularMatrix(); Loading Loading @@ -153,7 +155,7 @@ int main(int argc, char *argv[]) { double latSig = (spRec.GetLatSigma()).degrees(); double latSig = (spRec.GetLatSigma()).degrees(); double lonSig = (spRec.GetLonSigma()).degrees(); double lonSig = (spRec.GetLonSigma()).degrees(); double radSig = spRec.GetLocalRadiusSigma().meters(); double radSig = spRec.GetLocalRadiusSigma().meters(); LinearAlgebra::UpperSymmetricMatrix covarSphere(3); symmetric_matrix<double,upper> covarSphere(3); covarSphere.clear(); covarSphere.clear(); covarSphere = spRec.GetSphericalMatrix(); covarSphere = spRec.GetSphericalMatrix(); Loading Loading @@ -184,7 +186,7 @@ int main(int argc, char *argv[]) { Angle(1.78752107, Angle::Degrees), Angle(1.78752107, Angle::Degrees), Distance(38.454887335682053718134171237789, Distance(38.454887335682053718134171237789, Distance::Meters)); Distance::Meters)); LinearAlgebra::UpperSymmetricMatrix covarRec(3); symmetric_matrix<double,upper> covarRec(3); covarRec.clear(); covarRec.clear(); covarRec = spSphere1.GetRectangularMatrix(); covarRec = spSphere1.GetRectangularMatrix(); spSphere2.SetSpherical(Latitude(0.55850536, Angle::Radians), spSphere2.SetSpherical(Latitude(0.55850536, Angle::Radians), Loading isis/src/control/objs/BundleAdjust/BundleAdjust.cpp +11 −12 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,6 @@ #include "ImageList.h" #include "ImageList.h" #include "iTime.h" #include "iTime.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" #include "MaximumLikelihoodWFunctions.h" #include "MaximumLikelihoodWFunctions.h" #include "SpecialPixel.h" #include "SpecialPixel.h" Loading Loading @@ -1031,7 +1030,7 @@ namespace Isis { static LinearAlgebra::Matrix coeffImage; static LinearAlgebra::Matrix coeffImage; static LinearAlgebra::Matrix coeffPoint3D(2, 3); static LinearAlgebra::Matrix coeffPoint3D(2, 3); static LinearAlgebra::Vector coeffRHS(2); static LinearAlgebra::Vector coeffRHS(2); static LinearAlgebra::UpperSymmetricMatrix N22(3); static boost::numeric::ublas::symmetric_matrix<double, upper> N22(3); SparseBlockColumnMatrix N12; SparseBlockColumnMatrix N12; static LinearAlgebra::Vector n2(3); static LinearAlgebra::Vector n2(3); boost::numeric::ublas::compressed_vector<double> n1(m_rank); boost::numeric::ublas::compressed_vector<double> n1(m_rank); Loading Loading @@ -1148,7 +1147,7 @@ namespace Isis { * * * @see BundleAdjust::formNormalEquations * @see BundleAdjust::formNormalEquations */ */ bool BundleAdjust::formMeasureNormals(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::formMeasureNormals(symmetric_matrix<double, upper>&N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, compressed_vector<double> &n1, compressed_vector<double> &n1, vector<double> &n2, vector<double> &n2, Loading @@ -1158,7 +1157,7 @@ namespace Isis { vector<double> &coeffRHS, vector<double> &coeffRHS, int observationIndex) { int observationIndex) { static LinearAlgebra::UpperSymmetricMatrix N11; static symmetric_matrix<double, upper> N11; static matrix<double> N11TargetImage; static matrix<double> N11TargetImage; int blockIndex = observationIndex; int blockIndex = observationIndex; Loading Loading @@ -1284,7 +1283,7 @@ namespace Isis { * * * @see BundleAdjust::formNormalEquations * @see BundleAdjust::formNormalEquations */ */ bool BundleAdjust::formPointNormals(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::formPointNormals(symmetric_matrix<double, upper>&N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, vector<double> &n2, vector<double> &n2, vector<double> &nj, vector<double> &nj, Loading Loading @@ -1455,7 +1454,7 @@ namespace Isis { * * * @see BundleAdjust::formPointNormals * @see BundleAdjust::formPointNormals */ */ bool BundleAdjust::productATransB(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::productATransB(symmetric_matrix <double,upper> &N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, SparseBlockRowMatrix &Q) { SparseBlockRowMatrix &Q) { Loading Loading @@ -1796,11 +1795,11 @@ namespace Isis { * * * @TODO Move to LinearAlgebra * @TODO Move to LinearAlgebra */ */ bool BundleAdjust::invert3x3(LinearAlgebra::UpperSymmetricMatrix &m) { bool BundleAdjust::invert3x3(symmetric_matrix<double, upper> &m) { double det; double det; double den; double den; LinearAlgebra::UpperSymmetricMatrix c = m; boost::numeric::ublas::symmetric_matrix< double, upper > c = m; den = m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) den = m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) Loading Loading @@ -2658,8 +2657,8 @@ namespace Isis { printf(" Time: %s\n\n", currentTime.c_str()); printf(" Time: %s\n\n", currentTime.c_str()); // create and initialize array of 3x3 matrices for all object points // create and initialize array of 3x3 matrices for all object points std::vector< LinearAlgebra::SymmetricMatrix > pointCovariances(numObjectPoints, std::vector< symmetric_matrix<double> > pointCovariances(numObjectPoints, SymmetricMatrix(3)); symmetric_matrix<double>(3)); for (int d = 0; d < numObjectPoints; d++) { for (int d = 0; d < numObjectPoints; d++) { pointCovariances[d].clear(); pointCovariances[d].clear(); } } Loading Loading @@ -2809,7 +2808,7 @@ namespace Isis { T.clear(); T.clear(); // get corresponding point covariance matrix // get corresponding point covariance matrix LinearAlgebra::SymmetricMatrix &covariance = pointCovariances[pointIndex]; boost::numeric::ublas::symmetric_matrix<double> &covariance = pointCovariances[pointIndex]; // get firstQBlock - index i is the key into Q for firstQBlock // get firstQBlock - index i is the key into Q for firstQBlock LinearAlgebra::Matrix *firstQBlock = Q.value(i); LinearAlgebra::Matrix *firstQBlock = Q.value(i); Loading Loading @@ -2898,7 +2897,7 @@ namespace Isis { } } // get corresponding point covariance matrix // get corresponding point covariance matrix LinearAlgebra::SymmetricMatrix &covariance = pointCovariances[pointIndex]; boost::numeric::ublas::symmetric_matrix<double> &covariance = pointCovariances[pointIndex]; // Ask Ken what is happening here...Setting just the sigmas is not very accurate // Ask Ken what is happening here...Setting just the sigmas is not very accurate // Shouldn't we be updating and setting the matrix??? TODO // Shouldn't we be updating and setting the matrix??? TODO Loading Loading
isis/src/base/objs/LinearAlgebra/LinearAlgebra.h +1 −12 Original line number Original line Diff line number Diff line Loading @@ -26,9 +26,8 @@ #include <iostream> #include <iostream> // boost library // boost library #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/symmetric.hpp> #include <boost/numeric/ublas/io.hpp> // Qt Library // Qt Library #include <QDebug> #include <QDebug> Loading Loading @@ -113,16 +112,6 @@ namespace Isis { * API. * API. */ */ typedef boost::numeric::ublas::matrix<double> Matrix; typedef boost::numeric::ublas::matrix<double> Matrix; /** * Definition for an Isis::LinearAlgebra::UpperSymmetricMatrix * of doubles. This is a typedef for a boost matrix. */ typedef boost::numeric::ublas::symmetric_matrix<double> SymmetricMatrix; /** * Definition for an Isis::LinearAlgebra::UpperSymmetricMatrix * of doubles. This is a typedef for a boost matrix. */ typedef boost::numeric::ublas::symmetric_matrix<double, upper> UpperSymmetricMatrix; /** /** * Definition for an Isis::LinearAlgebra::Vector of doubles. This is a * Definition for an Isis::LinearAlgebra::Vector of doubles. This is a * typedef for a boost vector. * typedef for a boost vector. Loading
isis/src/base/objs/SurfacePoint/SurfacePoint.cpp +21 −21 Original line number Original line Diff line number Diff line Loading @@ -5,9 +5,9 @@ #include "IException.h" #include "IException.h" #include "IString.h" #include "IString.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" using namespace boost::numeric::ublas; using namespace std; using namespace std; namespace Isis { namespace Isis { Loading Loading @@ -70,14 +70,14 @@ namespace Isis { } } if(other.p_rectCovar) { if(other.p_rectCovar) { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_rectCovar); p_rectCovar = new symmetric_matrix<double, upper>(*other.p_rectCovar); } } else { else { p_rectCovar = NULL; p_rectCovar = NULL; } } if(other.p_sphereCovar) { if(other.p_sphereCovar) { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_sphereCovar); p_sphereCovar = new symmetric_matrix<double, upper>(*other.p_sphereCovar); } } else { else { p_sphereCovar = NULL; p_sphereCovar = NULL; Loading Loading @@ -132,7 +132,7 @@ namespace Isis { * * */ */ SurfacePoint::SurfacePoint(const Latitude &lat, const Longitude &lon, SurfacePoint::SurfacePoint(const Latitude &lat, const Longitude &lon, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Distance &radius, const symmetric_matrix<double, upper> &covar) { InitCovariance(); InitCovariance(); InitPoint(); InitPoint(); InitRadii(); InitRadii(); Loading Loading @@ -190,7 +190,7 @@ namespace Isis { * @param covar The variance/covariance matrix of the point * @param covar The variance/covariance matrix of the point */ */ SurfacePoint::SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint::SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Displacement &z, const symmetric_matrix<double, upper> &covar) { InitCovariance(); InitCovariance(); InitPoint(); InitPoint(); InitRadii(); InitRadii(); Loading Loading @@ -318,7 +318,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetRectangular(Displacement x, Displacement y, Displacement z, void SurfacePoint::SetRectangular(Displacement x, Displacement y, Displacement z, const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double,upper>& covar) { SetRectangularPoint(x, y, z); SetRectangularPoint(x, y, z); SetRectangularMatrix(covar); SetRectangularMatrix(covar); } } Loading @@ -342,7 +342,7 @@ namespace Isis { throw IException(IException::User, msg, _FILEINFO_); throw IException(IException::User, msg, _FILEINFO_); } } LinearAlgebra::UpperSymmetricMatrix covar(3); symmetric_matrix<double,upper> covar(3); covar.clear(); covar.clear(); covar(0,0) = xSigma.meters() * xSigma.meters(); covar(0,0) = xSigma.meters() * xSigma.meters(); covar(1,1) = ySigma.meters() * ySigma.meters(); covar(1,1) = ySigma.meters() * ySigma.meters(); Loading @@ -359,7 +359,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetRectangularMatrix( void SurfacePoint::SetRectangularMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double, upper> &covar) { // Make sure the point is set first // Make sure the point is set first if (!Valid()) { if (!Valid()) { IString msg = "A point must be set before a variance/covariance matrix " IString msg = "A point must be set before a variance/covariance matrix " Loading @@ -371,7 +371,7 @@ namespace Isis { *p_rectCovar = covar; *p_rectCovar = covar; } } else { else { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(covar); p_rectCovar = new symmetric_matrix<double, upper>(covar); } } SpiceDouble rectMat[3][3]; SpiceDouble rectMat[3][3]; Loading Loading @@ -406,7 +406,7 @@ namespace Isis { J[2][2] = p_z->meters() / radius; J[2][2] = p_z->meters() / radius; if(!p_sphereCovar) if(!p_sphereCovar) p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(3); p_sphereCovar = new symmetric_matrix<double, upper>(3); SpiceDouble mat[3][3]; SpiceDouble mat[3][3]; mxm_c (J, rectMat, mat); mxm_c (J, rectMat, mat); Loading Loading @@ -486,7 +486,7 @@ namespace Isis { * @param covar Spherical variance/covariance matrix in m*m * @param covar Spherical variance/covariance matrix in m*m */ */ void SurfacePoint::SetSpherical(const Latitude &lat, const Longitude &lon, void SurfacePoint::SetSpherical(const Latitude &lat, const Longitude &lon, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar) { const Distance &radius, const symmetric_matrix<double, upper> &covar) { SetSphericalPoint(lat, lon, radius); SetSphericalPoint(lat, lon, radius); SetSphericalMatrix(covar); SetSphericalMatrix(covar); } } Loading Loading @@ -518,7 +518,7 @@ namespace Isis { const Angle &lonSigma, const Angle &lonSigma, const Distance &radiusSigma) { const Distance &radiusSigma) { if (latSigma.isValid() && lonSigma.isValid() && radiusSigma.isValid()) { if (latSigma.isValid() && lonSigma.isValid() && radiusSigma.isValid()) { LinearAlgebra::UpperSymmetricMatrix covar(3); symmetric_matrix<double,upper> covar(3); covar.clear(); covar.clear(); double sphericalCoordinate; double sphericalCoordinate; Loading Loading @@ -584,7 +584,7 @@ namespace Isis { * @return void * @return void */ */ void SurfacePoint::SetSphericalMatrix( void SurfacePoint::SetSphericalMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar) { const symmetric_matrix<double, upper> & covar) { // Make sure the point is set first // Make sure the point is set first if (!Valid()) { if (!Valid()) { Loading @@ -597,7 +597,7 @@ namespace Isis { *p_sphereCovar = covar; *p_sphereCovar = covar; } } else { else { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(covar); p_sphereCovar = new symmetric_matrix<double, upper>(covar); } } SpiceDouble sphereMat[3][3]; SpiceDouble sphereMat[3][3]; Loading Loading @@ -637,7 +637,7 @@ namespace Isis { J[2][2] = sinPhi; J[2][2] = sinPhi; if(!p_rectCovar) if(!p_rectCovar) p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(3); p_rectCovar = new symmetric_matrix<double, upper>(3); SpiceDouble mat[3][3]; SpiceDouble mat[3][3]; mxm_c (J, sphereMat, mat); mxm_c (J, sphereMat, mat); Loading Loading @@ -825,10 +825,10 @@ namespace Isis { } } LinearAlgebra::UpperSymmetricMatrix SurfacePoint::GetRectangularMatrix() symmetric_matrix<double, upper> SurfacePoint::GetRectangularMatrix() const { const { if(!p_rectCovar) { if(!p_rectCovar) { LinearAlgebra::UpperSymmetricMatrix tmp(3); symmetric_matrix<double, upper> tmp(3); tmp.clear(); tmp.clear(); return tmp; return tmp; } } Loading Loading @@ -977,9 +977,9 @@ namespace Isis { } } LinearAlgebra::UpperSymmetricMatrix SurfacePoint::GetSphericalMatrix() const { symmetric_matrix<double, upper> SurfacePoint::GetSphericalMatrix() const { if(!p_sphereCovar) { if(!p_sphereCovar) { LinearAlgebra::UpperSymmetricMatrix tmp(3); symmetric_matrix<double, upper> tmp(3); tmp.clear(); tmp.clear(); return tmp; return tmp; } } Loading Loading @@ -1192,11 +1192,11 @@ namespace Isis { } } if(other.p_rectCovar) { if(other.p_rectCovar) { p_rectCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_rectCovar); p_rectCovar = new symmetric_matrix<double, upper>(*other.p_rectCovar); } } if(other.p_sphereCovar) { if(other.p_sphereCovar) { p_sphereCovar = new LinearAlgebra::UpperSymmetricMatrix(*other.p_sphereCovar); p_sphereCovar = new symmetric_matrix<double, upper>(*other.p_sphereCovar); } } } } Loading
isis/src/base/objs/SurfacePoint/SurfacePoint.h +20 −10 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <vector> #include <vector> #include <cmath> #include <cmath> #include "boost/numeric/ublas/symmetric.hpp" #include "boost/numeric/ublas/io.hpp" #include "Displacement.h" #include "Displacement.h" #include "Distance.h" #include "Distance.h" #include "Angle.h" #include "Angle.h" Loading Loading @@ -93,7 +96,8 @@ namespace Isis { const Distance &radiusSigma); const Distance &radiusSigma); SurfacePoint(const Latitude &lat, const Longitude &lon, SurfacePoint(const Latitude &lat, const Longitude &lon, const Distance &radius, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z); const Displacement &z); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, Loading @@ -101,7 +105,8 @@ namespace Isis { const Distance &zSigma); const Distance &zSigma); SurfacePoint(const Displacement &x, const Displacement &y, SurfacePoint(const Displacement &x, const Displacement &y, const Displacement &z, const Displacement &z, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); ~SurfacePoint(); ~SurfacePoint(); // Rectangular loading utilities // Rectangular loading utilities Loading @@ -110,7 +115,7 @@ namespace Isis { const Distance &ySigma=Distance(), const Distance &zSigma=Distance()); const Distance &ySigma=Distance(), const Distance &zSigma=Distance()); void SetRectangular(const Displacement x, const Displacement y, const Displacement z, void SetRectangular(const Displacement x, const Displacement y, const Displacement z, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); //! Set surface point and sigmas in rectangular coordinates and convert to planetocentric //! Set surface point and sigmas in rectangular coordinates and convert to planetocentric void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, Loading @@ -118,7 +123,7 @@ namespace Isis { void SetRectangularMatrix( void SetRectangularMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); // Spherical loading utilities // Spherical loading utilities Loading @@ -131,13 +136,14 @@ namespace Isis { void SetSpherical (const Latitude &lat, const Longitude &lon, void SetSpherical (const Latitude &lat, const Longitude &lon, const Distance &radius, const Distance &radius, const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper>& covar); void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius); const Distance &radius); void SetSphericalMatrix( void SetSphericalMatrix( const LinearAlgebra::UpperSymmetricMatrix &covar); const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar); void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, const Distance &radiusSigma); const Distance &radiusSigma); Loading @@ -159,7 +165,8 @@ namespace Isis { Distance GetXSigma() const; Distance GetXSigma() const; Distance GetYSigma() const; Distance GetYSigma() const; Distance GetZSigma() const; Distance GetZSigma() const; LinearAlgebra::UpperSymmetricMatrix GetRectangularMatrix() const; boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper> GetRectangularMatrix() const; Latitude GetLatitude() const; Latitude GetLatitude() const; Longitude GetLongitude() const; Longitude GetLongitude() const; Distance GetLocalRadius() const; Distance GetLocalRadius() const; Loading @@ -171,7 +178,8 @@ namespace Isis { double GetLonWeight() const; double GetLonWeight() const; Distance GetLocalRadiusSigma() const; Distance GetLocalRadiusSigma() const; double GetLocalRadiusWeight() const; double GetLocalRadiusWeight() const; LinearAlgebra::UpperSymmetricMatrix GetSphericalMatrix() const; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> GetSphericalMatrix() const; // Computational methods // Computational methods Distance GetDistanceToPoint(const SurfacePoint &other) const; Distance GetDistanceToPoint(const SurfacePoint &other) const; Loading Loading @@ -201,9 +209,11 @@ namespace Isis { Displacement *p_y; Displacement *p_y; Displacement *p_z; Displacement *p_z; //! 3x3 upper triangular covariance matrix rectangular coordinates //! 3x3 upper triangular covariance matrix rectangular coordinates LinearAlgebra::UpperSymmetricMatrix *p_rectCovar; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> *p_rectCovar; //! 3x3 upper triangular covariance matrix ocentric coordinates //! 3x3 upper triangular covariance matrix ocentric coordinates LinearAlgebra::UpperSymmetricMatrix *p_sphereCovar; boost::numeric::ublas::symmetric_matrix <double,boost::numeric::ublas::upper> *p_sphereCovar; }; }; }; }; Loading
isis/src/base/objs/SurfacePoint/unitTest.cpp +9 −7 Original line number Original line Diff line number Diff line Loading @@ -8,13 +8,15 @@ #include "Distance.h" #include "Distance.h" #include "IException.h" #include "IException.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" #include "Preference.h" #include "Preference.h" #include "SurfacePoint.h" #include "SurfacePoint.h" #include "boost/numeric/ublas/symmetric.hpp" using namespace Isis; using namespace Isis; using namespace std; using namespace std; using namespace boost::numeric::ublas; /** /** * * Loading @@ -26,7 +28,7 @@ using namespace std; */ */ int main(int argc, char *argv[]) { int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); Isis::Preference::Preferences(true); LinearAlgebra::UpperSymmetricMatrix cvRect,cvOc; symmetric_matrix<double,upper> cvRect,cvOc; try { try { cout << "UnitTest for SurfacePoint" << endl << endl; cout << "UnitTest for SurfacePoint" << endl << endl; Loading @@ -39,7 +41,7 @@ int main(int argc, char *argv[]) { Distance(1000., Distance::Meters), Distance(1000., Distance::Meters), Distance(1000., Distance::Meters)); Distance(1000., Distance::Meters)); LinearAlgebra::UpperSymmetricMatrix covar; symmetric_matrix<double,upper> covar; covar.resize(3); covar.resize(3); covar.clear(); covar.clear(); covar(0,0) = 100.; covar(0,0) = 100.; Loading @@ -56,7 +58,7 @@ int main(int argc, char *argv[]) { double latSig = spRec.GetLatSigma().degrees(); double latSig = spRec.GetLatSigma().degrees(); double lonSig = spRec.GetLonSigma().degrees(); double lonSig = spRec.GetLonSigma().degrees(); double radSig = spRec.GetLocalRadiusSigma().meters(); double radSig = spRec.GetLocalRadiusSigma().meters(); LinearAlgebra::UpperSymmetricMatrix covarSphere(3); symmetric_matrix<double,upper> covarSphere(3); covarSphere.clear(); covarSphere.clear(); covarSphere = spRec.GetSphericalMatrix(); covarSphere = spRec.GetSphericalMatrix(); Loading Loading @@ -106,7 +108,7 @@ int main(int argc, char *argv[]) { Longitude(lon, Angle::Degrees), Longitude(lon, Angle::Degrees), Distance(radius, Distance::Meters), Distance(radius, Distance::Meters), covarSphere ); covarSphere ); LinearAlgebra::UpperSymmetricMatrix covarRec(3); symmetric_matrix<double,upper> covarRec(3); covarRec.clear(); covarRec.clear(); covarRec = spSphere.GetRectangularMatrix(); covarRec = spSphere.GetRectangularMatrix(); Loading Loading @@ -153,7 +155,7 @@ int main(int argc, char *argv[]) { double latSig = (spRec.GetLatSigma()).degrees(); double latSig = (spRec.GetLatSigma()).degrees(); double lonSig = (spRec.GetLonSigma()).degrees(); double lonSig = (spRec.GetLonSigma()).degrees(); double radSig = spRec.GetLocalRadiusSigma().meters(); double radSig = spRec.GetLocalRadiusSigma().meters(); LinearAlgebra::UpperSymmetricMatrix covarSphere(3); symmetric_matrix<double,upper> covarSphere(3); covarSphere.clear(); covarSphere.clear(); covarSphere = spRec.GetSphericalMatrix(); covarSphere = spRec.GetSphericalMatrix(); Loading Loading @@ -184,7 +186,7 @@ int main(int argc, char *argv[]) { Angle(1.78752107, Angle::Degrees), Angle(1.78752107, Angle::Degrees), Distance(38.454887335682053718134171237789, Distance(38.454887335682053718134171237789, Distance::Meters)); Distance::Meters)); LinearAlgebra::UpperSymmetricMatrix covarRec(3); symmetric_matrix<double,upper> covarRec(3); covarRec.clear(); covarRec.clear(); covarRec = spSphere1.GetRectangularMatrix(); covarRec = spSphere1.GetRectangularMatrix(); spSphere2.SetSpherical(Latitude(0.55850536, Angle::Radians), spSphere2.SetSpherical(Latitude(0.55850536, Angle::Radians), Loading
isis/src/control/objs/BundleAdjust/BundleAdjust.cpp +11 −12 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,6 @@ #include "ImageList.h" #include "ImageList.h" #include "iTime.h" #include "iTime.h" #include "Latitude.h" #include "Latitude.h" #include "LinearAlgebra.h" #include "Longitude.h" #include "Longitude.h" #include "MaximumLikelihoodWFunctions.h" #include "MaximumLikelihoodWFunctions.h" #include "SpecialPixel.h" #include "SpecialPixel.h" Loading Loading @@ -1031,7 +1030,7 @@ namespace Isis { static LinearAlgebra::Matrix coeffImage; static LinearAlgebra::Matrix coeffImage; static LinearAlgebra::Matrix coeffPoint3D(2, 3); static LinearAlgebra::Matrix coeffPoint3D(2, 3); static LinearAlgebra::Vector coeffRHS(2); static LinearAlgebra::Vector coeffRHS(2); static LinearAlgebra::UpperSymmetricMatrix N22(3); static boost::numeric::ublas::symmetric_matrix<double, upper> N22(3); SparseBlockColumnMatrix N12; SparseBlockColumnMatrix N12; static LinearAlgebra::Vector n2(3); static LinearAlgebra::Vector n2(3); boost::numeric::ublas::compressed_vector<double> n1(m_rank); boost::numeric::ublas::compressed_vector<double> n1(m_rank); Loading Loading @@ -1148,7 +1147,7 @@ namespace Isis { * * * @see BundleAdjust::formNormalEquations * @see BundleAdjust::formNormalEquations */ */ bool BundleAdjust::formMeasureNormals(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::formMeasureNormals(symmetric_matrix<double, upper>&N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, compressed_vector<double> &n1, compressed_vector<double> &n1, vector<double> &n2, vector<double> &n2, Loading @@ -1158,7 +1157,7 @@ namespace Isis { vector<double> &coeffRHS, vector<double> &coeffRHS, int observationIndex) { int observationIndex) { static LinearAlgebra::UpperSymmetricMatrix N11; static symmetric_matrix<double, upper> N11; static matrix<double> N11TargetImage; static matrix<double> N11TargetImage; int blockIndex = observationIndex; int blockIndex = observationIndex; Loading Loading @@ -1284,7 +1283,7 @@ namespace Isis { * * * @see BundleAdjust::formNormalEquations * @see BundleAdjust::formNormalEquations */ */ bool BundleAdjust::formPointNormals(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::formPointNormals(symmetric_matrix<double, upper>&N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, vector<double> &n2, vector<double> &n2, vector<double> &nj, vector<double> &nj, Loading Loading @@ -1455,7 +1454,7 @@ namespace Isis { * * * @see BundleAdjust::formPointNormals * @see BundleAdjust::formPointNormals */ */ bool BundleAdjust::productATransB(LinearAlgebra::UpperSymmetricMatrix &N22, bool BundleAdjust::productATransB(symmetric_matrix <double,upper> &N22, SparseBlockColumnMatrix &N12, SparseBlockColumnMatrix &N12, SparseBlockRowMatrix &Q) { SparseBlockRowMatrix &Q) { Loading Loading @@ -1796,11 +1795,11 @@ namespace Isis { * * * @TODO Move to LinearAlgebra * @TODO Move to LinearAlgebra */ */ bool BundleAdjust::invert3x3(LinearAlgebra::UpperSymmetricMatrix &m) { bool BundleAdjust::invert3x3(symmetric_matrix<double, upper> &m) { double det; double det; double den; double den; LinearAlgebra::UpperSymmetricMatrix c = m; boost::numeric::ublas::symmetric_matrix< double, upper > c = m; den = m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) den = m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) Loading Loading @@ -2658,8 +2657,8 @@ namespace Isis { printf(" Time: %s\n\n", currentTime.c_str()); printf(" Time: %s\n\n", currentTime.c_str()); // create and initialize array of 3x3 matrices for all object points // create and initialize array of 3x3 matrices for all object points std::vector< LinearAlgebra::SymmetricMatrix > pointCovariances(numObjectPoints, std::vector< symmetric_matrix<double> > pointCovariances(numObjectPoints, SymmetricMatrix(3)); symmetric_matrix<double>(3)); for (int d = 0; d < numObjectPoints; d++) { for (int d = 0; d < numObjectPoints; d++) { pointCovariances[d].clear(); pointCovariances[d].clear(); } } Loading Loading @@ -2809,7 +2808,7 @@ namespace Isis { T.clear(); T.clear(); // get corresponding point covariance matrix // get corresponding point covariance matrix LinearAlgebra::SymmetricMatrix &covariance = pointCovariances[pointIndex]; boost::numeric::ublas::symmetric_matrix<double> &covariance = pointCovariances[pointIndex]; // get firstQBlock - index i is the key into Q for firstQBlock // get firstQBlock - index i is the key into Q for firstQBlock LinearAlgebra::Matrix *firstQBlock = Q.value(i); LinearAlgebra::Matrix *firstQBlock = Q.value(i); Loading Loading @@ -2898,7 +2897,7 @@ namespace Isis { } } // get corresponding point covariance matrix // get corresponding point covariance matrix LinearAlgebra::SymmetricMatrix &covariance = pointCovariances[pointIndex]; boost::numeric::ublas::symmetric_matrix<double> &covariance = pointCovariances[pointIndex]; // Ask Ken what is happening here...Setting just the sigmas is not very accurate // Ask Ken what is happening here...Setting just the sigmas is not very accurate // Shouldn't we be updating and setting the matrix??? TODO // Shouldn't we be updating and setting the matrix??? TODO Loading