|
Isis 3.0 Object Programmers' Reference |
Home |
00001 #ifndef BundleAdjust_h 00002 #define BundleAdjust_h 00003 00027 #include <QObject> // parent class 00028 00029 #include <vector> 00030 #include <fstream> 00031 00032 #include "ControlNet.h" 00033 #include "SerialNumberList.h" 00034 #include "ObservationNumberList.h" 00035 #include "Camera.h" 00036 #include "Statistics.h" 00037 //#include "SpicePosition.h" 00038 //#include "SpiceRotation.h" 00039 #include "Progress.h" 00040 #include "CameraGroundMap.h" 00041 #include "ControlMeasure.h" 00042 #include "SparseBlockMatrix.h" 00043 00044 #include <CHOLMOD/cholmod.h> 00045 #include <CHOLMOD/UFconfig.h> 00046 00047 template< typename T > class QList; 00048 template< typename A, typename B > class QMap; 00049 00050 #ifndef __sun__ 00051 #include "gmm/gmm.h" 00052 #endif 00053 00054 namespace Isis { 00055 class LeastSquares; 00056 class BasisFunction; 00057 class MaximumLikelihoodWFunctions; 00058 class StatCumProbDistDynCalc; 00059 00155 class BundleAdjust { 00156 public: 00157 BundleAdjust(const QString &cnetFile, const QString &cubeList, 00158 bool printSummary = true); 00159 BundleAdjust(const QString &cnetFile, const QString &cubeList, 00160 const QString &heldList, bool printSummary = true); 00161 BundleAdjust(Isis::ControlNet &cnet, Isis::SerialNumberList &snlist, 00162 bool printSummary = true); 00163 BundleAdjust(Isis::ControlNet &cnet, Isis::SerialNumberList &snlist, 00164 Isis::SerialNumberList &heldsnlist, bool printSummary = true); 00165 ~BundleAdjust(); 00166 00167 bool ReadSCSigmas(const QString &scsigmasList); 00168 00169 double Solve(); 00170 bool SolveCholesky(); 00171 00172 Isis::ControlNet *ControlNet() { return m_pCnet; } 00173 00174 Isis::SerialNumberList *SerialNumberList() { return m_pSnList; } 00175 int Images() const { return m_pSnList->Size(); } 00176 int Observations() const; 00177 QString FileName(int index); 00178 bool IsHeld(int index); 00179 Table Cmatrix(int index); 00180 Table SpVector(int index); 00181 00182 void SetSolveTwist(bool solve) { m_bSolveTwist = solve; ComputeNumberPartials(); } 00183 void SetSolveRadii(bool solve) { m_bSolveRadii = solve; } 00184 void SetSolvePolyOverHermite(bool b) { m_bSolvePolyOverHermite = b; 00185 if( b ) m_nPositionType = SpicePosition::PolyFunctionOverHermiteConstant; } 00186 00187 void SetSolvePolyOverPointing(bool b) { m_bSolvePolyOverPointing = b; 00188 if( b ) m_nPointingType = SpiceRotation::PolyFunctionOverSpice; } 00189 00190 void SetErrorPropagation(bool b) { m_bErrorPropagation = b; } 00191 void SetOutlierRejection(bool b) { m_bOutlierRejection = b; } 00192 void SetRejectionMultiplier(double d) { m_dRejectionMultiplier = d; } 00193 00194 void SetGlobalLatitudeAprioriSigma(double d) { m_dGlobalLatitudeAprioriSigma = d; } 00195 void SetGlobalLongitudeAprioriSigma(double d) { m_dGlobalLongitudeAprioriSigma = d; } 00196 void SetGlobalRadiiAprioriSigma(double d) { m_dGlobalRadiusAprioriSigma = d; } 00197 00198 // void SetGlobalSurfaceXAprioriSigma(double d) { m_dGlobalSurfaceXAprioriSigma = d; } 00199 // void SetGlobalSurfaceYAprioriSigma(double d) { m_dGlobalSurfaceYAprioriSigma = d; } 00200 // void SetGlobalSurfaceZAprioriSigma(double d) { m_dGlobalSurfaceZAprioriSigma = d; } 00201 // 00202 // void SetGlobalSpacecraftPositionAprioriSigma(double d) { m_dGlobalSpacecraftPositionAprioriSigma = d; } 00203 // void SetGlobalSpacecraftVelocityAprioriSigma(double d) { m_dGlobalSpacecraftVelocityAprioriSigma = d; } 00204 // void SetGlobalSpacecraftAccelerationAprioriSigma(double d) { m_dGlobalSpacecraftAccelerationAprioriSigma = d; } 00205 00206 void SetGlobalSpacecraftPositionAprioriSigma(double d) { if( m_nNumberCamPosCoefSolved < 1 ) return; m_dGlobalSpacecraftPositionAprioriSigma[0] = d; } 00207 void SetGlobalSpacecraftVelocityAprioriSigma(double d) { if( m_nNumberCamPosCoefSolved < 2 ) return; m_dGlobalSpacecraftPositionAprioriSigma[1] = d; } 00208 void SetGlobalSpacecraftAccelerationAprioriSigma(double d) { if( m_nNumberCamPosCoefSolved < 3 ) return; m_dGlobalSpacecraftPositionAprioriSigma[2] = d; } 00209 00210 void SetGlobalCameraAnglesAprioriSigma(double d) { if( m_nNumberCamAngleCoefSolved < 1 ) return; m_dGlobalCameraAnglesAprioriSigma[0] = d; } 00211 void SetGlobalCameraAngularVelocityAprioriSigma(double d) { if( m_nNumberCamAngleCoefSolved < 2 ) return; m_dGlobalCameraAnglesAprioriSigma[1] = d; } 00212 void SetGlobalCameraAngularAccelerationAprioriSigma(double d) { if( m_nNumberCamAngleCoefSolved < 3 ) return; m_dGlobalCameraAnglesAprioriSigma[2] = d; } 00213 00214 // void SetGlobalCameraAngularVelocityAprioriSigma(double d) { m_dGlobalCameraAngularVelocityAprioriSigma = d; } 00215 // void SetGlobalCameraAngularAccelerationAprioriSigma(double d) { m_dGlobalCameraAngularAccelerationAprioriSigma = d; } 00216 00217 void SetStandardOutput(bool b) { m_bOutputStandard = b; } 00218 void SetCSVOutput(bool b) { m_bOutputCSV = b; } 00219 void SetResidualOutput(bool b) { m_bOutputResiduals = b; } 00220 void SetOutputFilePrefix(const QString &str) { m_strOutputFilePrefix = str; } 00221 00222 enum DecompositionMethod { 00223 NoneSelected, 00224 SPECIALK, 00225 CHOLMOD, 00226 }; 00227 00228 enum CmatrixSolveType { 00229 None, 00230 AnglesOnly, 00231 AnglesVelocity, 00232 AnglesVelocityAcceleration, 00233 CKAll 00234 }; 00235 00236 enum SpacecraftPositionSolveType { 00237 Nothing, 00238 PositionOnly, 00239 PositionVelocity, 00240 PositionVelocityAcceleration, 00241 SPKAll 00242 }; 00243 00244 struct SpacecraftWeights { 00245 QString SpacecraftName; 00246 QString InstrumentId; 00247 std::vector<double> weights; 00248 }; 00249 00250 void SetDecompositionMethod(DecompositionMethod method); 00251 00252 void SetSolveCmatrix(CmatrixSolveType type); 00253 void SetSolveSpacecraftPosition(SpacecraftPositionSolveType type); 00254 00256 void SetCKDegree(int degree) { m_nCKDegree = degree; } 00257 00259 void SetSolveCKDegree(int degree) { m_nsolveCKDegree = degree; } 00260 00262 void SetSPKDegree(int degree) { m_nSPKDegree = degree; } 00263 00266 void SetSolveSPKDegree(int degree) { m_nsolveSPKDegree = degree; } 00267 00268 int BasisColumns(); 00269 int ComputeConstrainedParameters(); 00270 00271 double Error() const { return m_dError; } 00272 double Iteration() const { return m_nIteration; } 00273 00274 // int HeldPoints() const { return m_nHeldPoints; } 00275 int IgnoredPoints() const { return m_nIgnoredPoints; } 00276 int FixedPoints() const { return m_nFixedPoints; } 00277 void SetObservationMode(bool bObservationMode); 00278 00279 void SetConvergenceThreshold(double d) { m_dConvergenceThreshold = d; } 00280 void SetMaxIterations(int n) { m_nMaxIterations = n; } 00281 void SetSolutionMethod(QString str); 00282 00283 void GetSparseParameterCorrections(); 00284 00285 bool IsConverged() { return m_bConverged; } 00286 QString IterationSummaryGroup () const { 00287 return m_iterationSummary; 00288 } 00289 00290 private: 00291 00292 void Init(Progress *progress = 0); 00293 bool validateNetwork(); 00294 00295 void ComputeNumberPartials(); 00296 void ComputeImageParameterWeights(); 00297 void SetSpaceCraftWeights(); 00298 00299 void AddPartials(int nPointIndex); 00300 void FillPointIndexMap(); 00301 void Update(BasisFunction &basis); 00302 00303 int PointIndex(int i) const; 00304 int ImageIndex(int i) const; 00305 00306 void CheckHeldList(); 00307 void ApplyHeldList(); 00308 00309 // triangulation functions 00310 int Triangulation(bool bDoApproximation = false); 00311 bool ApproximatePoint_ClosestApproach(const ControlPoint &rpoint, int nIndex); 00312 bool TriangulatePoint(const ControlPoint &rpoint); 00313 bool TriangulationPartials(); 00314 00315 bool SetParameterWeights(); 00316 void SetPostBundleSigmas(); 00317 00318 // output functions 00319 void IterationSummary(double avErr, double sigmaXY, double sigmaHat, 00320 double sigmaX, double sigmaY); 00321 void SpecialKIterationSummary(); 00322 bool Output(); 00323 bool OutputHeader(std::ofstream& fp_out); 00324 bool OutputWithErrorPropagation(); 00325 bool OutputNoErrorPropagation(); 00326 bool OutputPointsCSV(); 00327 bool OutputImagesCSV(); 00328 bool OutputResiduals(); 00329 bool WrapUp(); 00330 bool ComputeBundleStatistics(); 00331 00333 bool m_bSolveTwist; 00334 bool m_bSolveRadii; 00335 bool m_bSolvePolyOverHermite; 00336 bool m_bSolvePolyOverPointing; 00337 bool m_bObservationMode; 00338 bool m_bErrorPropagation; 00339 bool m_bOutlierRejection; 00340 double m_dRejectionMultiplier; 00341 bool m_bPrintSummary; 00342 bool m_bOutputStandard; 00343 bool m_bOutputCSV; 00344 bool m_bOutputResiduals; 00345 bool m_bCleanUp; 00346 bool m_bSimulatedData; 00347 bool m_bLastIteration; 00348 bool m_bMaxIterationsReached; 00349 bool m_bDeltack; 00350 // This will become obsolete once we have a dedicated resection class. 00351 00352 int m_nIteration; 00353 int m_nMaxIterations; 00354 int m_nNumImagePartials; 00355 int m_nNumPointPartials; 00356 int m_nObservations; 00357 int m_nRejectedObservations; 00358 int m_nImageParameters; 00359 int m_nPointParameters; 00360 int m_nConstrainedPointParameters; 00361 int m_nConstrainedImageParameters; 00362 int m_nDegreesOfFreedom; 00363 int m_nHeldPoints; 00364 int m_nFixedPoints; 00365 int m_nIgnoredPoints; 00366 int m_nHeldImages; 00367 int m_nHeldObservations; 00368 int m_nCKDegree; 00369 int m_nsolveCKDegree; 00370 int m_nNumberCamAngleCoefSolved; 00371 int m_nSPKDegree; 00372 int m_nsolveSPKDegree; 00373 int m_nNumberCamPosCoefSolved; 00374 int m_nUnknownParameters; 00375 int m_nBasisColumns; 00376 SpicePosition::Source m_nPositionType; 00377 SpiceRotation::Source m_nPointingType; 00378 std::vector<int> m_nPointIndexMap; 00379 std::vector<int> m_nImageIndexMap; 00380 00381 double m_dError; 00382 double m_dConvergenceThreshold; 00383 double m_dElapsedTime; 00384 double m_dElapsedTimeErrorProp; 00385 double m_dSigma0; 00386 double m_drms_rx; 00387 double m_drms_ry; 00388 double m_drms_rxy; 00389 double m_drms_sigmaLat; 00390 double m_drms_sigmaLon; 00391 double m_drms_sigmaRad; 00392 double m_dminSigmaLatitude; 00393 QString m_idMinSigmaLatitude; 00394 double m_dmaxSigmaLatitude; 00395 QString m_idMaxSigmaLatitude; 00396 double m_dminSigmaLongitude; 00397 QString m_idMinSigmaLongitude; 00398 double m_dmaxSigmaLongitude; 00399 QString m_idMaxSigmaLongitude; 00400 double m_dminSigmaRadius; 00401 QString m_idMinSigmaRadius; 00402 double m_dmaxSigmaRadius; 00403 QString m_idMaxSigmaRadius; 00404 00405 double m_dRejectionLimit; 00406 00409 00411 double m_dGlobalLatitudeAprioriSigma; 00412 double m_dGlobalLongitudeAprioriSigma; 00413 double m_dGlobalRadiusAprioriSigma; 00414 double m_dGlobalSurfaceXAprioriSigma; 00415 double m_dGlobalSurfaceYAprioriSigma; 00416 double m_dGlobalSurfaceZAprioriSigma; 00417 00418 std::vector<double> m_dGlobalSpacecraftPositionAprioriSigma; 00419 // double m_dGlobalSpacecraftPositionAprioriSigma; //!< spacecraft coordinates apriori sigmas 00420 // double m_dGlobalSpacecraftVelocityAprioriSigma; //!< spacecraft coordinate velocities apriori sigmas 00421 // double m_dGlobalSpacecraftAccelerationAprioriSigma; //!< spacecraft coordinate accelerations apriori sigmas 00422 00423 std::vector<double> m_dGlobalCameraAnglesAprioriSigma; 00424 // double m_dGlobalCameraAnglesAprioriSigma; //!< camera angles apriori sigmas 00425 // double m_dGlobalCameraAngularVelocityAprioriSigma; //!< camera angular velocities apriori sigmas 00426 // double m_dGlobalCameraAngularAccelerationAprioriSigma; //!< camera angular accelerations apriori sigmas 00427 00428 double m_dGlobalSpacecraftPositionWeight; 00429 double m_dGlobalSpacecraftVelocityWeight; 00430 double m_dGlobalSpacecraftAccelerationWeight; 00431 double m_dGlobalCameraAnglesWeight; 00432 double m_dGlobalCameraAngularVelocityWeight; 00433 double m_dGlobalCameraAngularAccelerationWeight; 00434 00435 std::vector<double> m_dImageParameterWeights; 00436 00437 00438 double m_dRTM; 00439 double m_dMTR; 00440 Distance m_BodyRadii[3]; 00441 00442 std::vector<double> m_dEpsilons; 00443 std::vector<double> m_dParameterWeights; 00444 00445 std::vector<double> m_dxKnowns; 00446 std::vector<double> m_dyKnowns; 00447 00448 QString m_strCnetFileName; 00449 QString m_strSolutionMethod; 00450 QString m_strOutputFilePrefix; 00451 00453 Isis::LeastSquares *m_pLsq; 00454 Isis::ControlNet *m_pCnet; 00455 Isis::SerialNumberList *m_pSnList; 00456 Isis::SerialNumberList *m_pHeldSnList; 00457 Isis::ObservationNumberList *m_pObsNumList; 00458 00460 Statistics m_Statsx; 00461 Statistics m_Statsy; 00462 Statistics m_Statsrx; 00463 Statistics m_Statsry; 00464 Statistics m_Statsrxy; 00465 00466 std::vector<Statistics> m_rmsImageSampleResiduals; 00467 std::vector<Statistics> m_rmsImageLineResiduals; 00468 std::vector<Statistics> m_rmsImageResiduals; 00469 std::vector<Statistics> m_rmsImageXSigmas; 00470 std::vector<Statistics> m_rmsImageYSigmas; 00471 std::vector<Statistics> m_rmsImageZSigmas; 00472 std::vector<Statistics> m_rmsImageRASigmas; 00473 std::vector<Statistics> m_rmsImageDECSigmas; 00474 std::vector<Statistics> m_rmsImageTWISTSigmas; 00475 00476 DecompositionMethod m_decompositionMethod; 00477 00478 CmatrixSolveType m_cmatrixSolveType; 00479 SpacecraftPositionSolveType m_spacecraftPositionSolveType; 00480 00481 std::vector<SpacecraftWeights> m_SCWeights; 00482 00483 // beyond this place (there be dragons) all refers to the folded bundle solution (referred to as 'SpecialK' 00484 // in the interim; there is no dependence on the least-squares class 00485 00486 private: 00487 int m_nRank; 00488 00489 bool m_bConverged; 00490 bool m_bError; 00491 00492 boost::numeric::ublas::symmetric_matrix < double, 00493 boost::numeric::ublas::upper, boost::numeric::ublas::column_major > 00494 m_Normals; 00495 // symmetric_matrix<double,lower> m_Normals; //!< reduced normal equations matrix 00496 boost::numeric::ublas::vector< double > m_nj; 00497 00499 std::vector< boost::numeric::ublas::compressed_matrix< double> > m_Qs_SPECIALK; 00500 std::vector< SparseBlockRowMatrix > m_Qs_CHOLMOD; 00501 00502 // vector<bounded_vector<double,3> > m_NICs; //!< array of NICs (see Brown, 1976) 00504 std::vector< boost::numeric::ublas::bounded_vector< double, 3 > > m_NICs; 00505 00506 boost::numeric::ublas::vector<double> m_Image_Corrections; 00507 boost::numeric::ublas::vector<double> m_Image_Solution; 00508 00509 // vector<bounded_vector<double,3> > m_Point_Corrections; //!< vector of corrections to 3D point parameter 00510 std::vector< boost::numeric::ublas::bounded_vector< double, 3 > > m_Point_Corrections; 00511 std::vector< boost::numeric::ublas::bounded_vector< double, 3 > > m_Point_AprioriSigmas; 00512 std::vector< boost::numeric::ublas::bounded_vector< double, 3 > > m_Point_Weights; 00513 00514 void Initialize(); 00515 bool InitializePointWeights(); 00516 void InitializePoints(); 00517 00518 QString m_iterationSummary; 00519 00520 bool formNormalEquations(); 00521 void applyParameterCorrections(); 00522 bool errorPropagation(); 00523 bool solveSystem(); 00524 00525 // solution, error propagation, and matrix methods for cholmod approach 00526 bool formNormalEquations_CHOLMOD(); 00527 00528 bool formNormals1_CHOLMOD(boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper>&N22, 00529 SparseBlockColumnMatrix& N12, 00530 boost::numeric::ublas::compressed_vector<double>& n1, 00531 boost::numeric::ublas::vector<double>& n2, 00532 boost::numeric::ublas::matrix<double>& coeff_image, 00533 boost::numeric::ublas::matrix<double>& coeff_point3D, 00534 boost::numeric::ublas::vector<double>& coeff_RHS, int nImageIndex); 00535 00536 bool formNormals2_CHOLMOD(boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper>&N22, 00537 SparseBlockColumnMatrix& N12, 00538 boost::numeric::ublas::vector<double>& n2, 00539 boost::numeric::ublas::vector<double>& nj, int nPointIndex, int i); 00540 00541 bool formNormals3_CHOLMOD(boost::numeric::ublas::compressed_vector<double>& n1, 00542 boost::numeric::ublas::vector<double>& nj); 00543 00544 bool solveSystem_CHOLMOD(); 00545 00546 void AmultAdd_CNZRows_CHOLMOD(double alpha, SparseBlockColumnMatrix& A, 00547 SparseBlockRowMatrix& B); 00548 00549 void transA_NZ_multAdd_CHOLMOD(double alpha, SparseBlockRowMatrix &A, 00550 boost::numeric::ublas::vector< double > &B, 00551 boost::numeric::ublas::vector< double > &C); 00552 00553 void applyParameterCorrections_CHOLMOD(); 00554 00555 bool errorPropagation_CHOLMOD(); 00556 00557 // solution, error propagation, and matrix methods for specialk approach 00558 // TODO: this may be able to go away if I can verify cholmod behaviour for 00559 // a truly dense matrix 00560 bool formNormalEquations_SPECIALK(); 00561 00562 bool formNormals1_SPECIALK(boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper>&N22, 00563 boost::numeric::ublas::matrix<double>& N12, 00564 boost::numeric::ublas::compressed_vector<double>& n1, 00565 boost::numeric::ublas::vector<double>& n2, 00566 boost::numeric::ublas::matrix<double>& coeff_image, 00567 boost::numeric::ublas::matrix<double>& coeff_point3D, 00568 boost::numeric::ublas::vector<double>& coeff_RHS, int nImageIndex); 00569 00570 bool formNormals2_SPECIALK(boost::numeric::ublas::symmetric_matrix<double, boost::numeric::ublas::upper>&N22, 00571 boost::numeric::ublas::matrix<double>& N12, 00572 boost::numeric::ublas::vector<double>& n2, 00573 boost::numeric::ublas::vector<double>& nj, int nPointIndex, int i); 00574 00575 bool formNormals3_SPECIALK(boost::numeric::ublas::compressed_vector<double>& n1, 00576 boost::numeric::ublas::vector<double>& nj); 00577 00578 bool solveSystem_SPECIALK(); 00579 00580 void AmultAdd_CNZRows_SPECIALK(double alpha, 00581 boost::numeric::ublas::matrix< double > &A, 00582 boost::numeric::ublas::compressed_matrix< double > &B, 00583 boost::numeric::ublas::symmetric_matrix < double, 00584 boost::numeric::ublas::upper, 00585 boost::numeric::ublas::column_major > &C); 00586 00587 void transA_NZ_multAdd_SPECIALK(double alpha, 00588 boost::numeric::ublas::compressed_matrix< double > &A, 00589 boost::numeric::ublas::vector< double > &B, 00590 boost::numeric::ublas::vector< double > &C); 00591 00592 void applyParameterCorrections_SPECIALK(); 00593 00594 bool errorPropagation_SPECIALK(); 00595 00596 bool CholeskyUT_NOSQR(); 00597 bool CholeskyUT_NOSQR_Inverse(); 00598 bool CholeskyUT_NOSQR_BackSub( 00599 boost::numeric::ublas::symmetric_matrix < double, 00600 boost::numeric::ublas::upper, 00601 boost::numeric::ublas::column_major > &m, 00602 boost::numeric::ublas::vector< double > &s, 00603 boost::numeric::ublas::vector< double > &rhs); 00604 00605 bool ComputePartials_DC(boost::numeric::ublas::matrix<double>& coeff_image, 00606 boost::numeric::ublas::matrix<double>& coeff_point3D, 00607 boost::numeric::ublas::vector<double>& coeff_RHS, 00608 const ControlMeasure &measure, const ControlPoint &point); 00609 00610 // bool CholeskyUT_NOSQR_BackSub(symmetric_matrix<double,lower>& m, vector<double>& s, vector<double>& rhs); 00611 double ComputeResiduals(); 00612 00613 // dedicated matrix functions 00614 void AmulttransBNZ(boost::numeric::ublas::matrix<double>& A, 00615 boost::numeric::ublas::compressed_matrix<double>& B, 00616 boost::numeric::ublas::matrix<double> &C, double alpha=1.0); 00617 void ANZmultAdd(boost::numeric::ublas::compressed_matrix<double>& A, 00618 boost::numeric::ublas::symmetric_matrix < double, 00619 boost::numeric::ublas::upper,boost::numeric::ublas::column_major >& B, 00620 boost::numeric::ublas::matrix<double>& C, double alpha=1.0) ; 00621 00622 bool Invert_3x3(boost::numeric::ublas::symmetric_matrix < double, 00623 boost::numeric::ublas::upper > &m); 00624 00625 bool product_ATransB(boost::numeric::ublas::symmetric_matrix < double, 00626 boost::numeric::ublas::upper > &N22, SparseBlockColumnMatrix& N12, 00627 SparseBlockRowMatrix& Q); 00628 void product_AV(double alpha, boost::numeric::ublas::bounded_vector< double,3 >& v2, 00629 SparseBlockRowMatrix& Q, boost::numeric::ublas::vector< double >& v1); 00630 00631 bool ComputeRejectionLimit(); 00632 bool FlagOutliers(); 00633 00634 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00635 // variables and methods for cholmod 00636 cholmod_common m_cm; 00637 cholmod_factor *m_L; 00638 cholmod_sparse* m_N; 00639 00640 SparseBlockMatrix m_SparseNormals; 00641 cholmod_triplet* m_pTriplet; 00642 00643 bool initializeCholMod(); 00644 bool freeCholMod(); 00645 bool cholmod_Inverse(); 00646 bool loadCholmodTriplet(); 00647 00648 00649 00650 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00651 // variables and methods for maximum likelihood estimation 00652 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00655 MaximumLikelihoodWFunctions *m_wFunc[3]; 00656 00659 StatCumProbDistDynCalc *m_cumPro; 00660 00663 StatCumProbDistDynCalc *m_cumProRes; 00664 00667 bool m_maxLikelihoodFlag[3]; 00668 00671 int m_maxLikelihoodIndex; 00672 00675 double m_maxLikelihoodQuan[3]; 00676 00677 public: void maximumLikelihoodSetup( QList<QString> models, QList<double> quantiles ); 00678 }; 00679 00680 } 00681 00682 #endif 00683