9#include "BundleTargetBody.h" 
   14#include "BundleSettings.h" 
   15#include "IException.h" 
   17#include "PvlKeyword.h" 
   73    m_pm = target->pmCoefs();
 
 
  217                                          Angle aprioriVelocityPoleRA,
 
  218                                          Angle sigmaVelocityPoleRA,
 
  220                                          Angle aprioriVelocityPoleDec,
 
  221                                          Angle sigmaVelocityPoleDec,
 
  223                                          Angle aprioriVelocityPM,
 
  224                                          Angle sigmaVelocityPM,
 
  247    m_raPole[1] = aprioriVelocityPoleRA;
 
  253    m_pm[1] = aprioriVelocityPM;
 
  263      if (sigmaPoleRA.degrees() > 0.0) {
 
  265        m_weights(n) = 1.0/(sigmaPoleRA.radians()*sigmaPoleRA.radians());
 
  276      m_raPole[1] = aprioriVelocityPoleRA;
 
  278      if (sigmaVelocityPoleRA.degrees() > 0.0) {
 
  280        m_weights(n) = 1.0/(sigmaVelocityPoleRA.radians()*sigmaVelocityPoleRA.radians());
 
  297      if (sigmaPoleDec.degrees() > 0.0) {
 
  299        m_weights(n) = 1.0/(sigmaPoleDec.radians()*sigmaPoleDec.radians());
 
  311      if (sigmaVelocityPoleDec.degrees() > 0.0) {
 
  313        m_weights(n) = 1.0/(sigmaVelocityPoleDec.radians()*sigmaVelocityPoleDec.radians());
 
  331      if (sigmaPM.degrees() > 0.0) {
 
  333        m_weights(n) = 1.0/(sigmaPM.radians()*sigmaPM.radians());
 
  344      m_pm[1] = aprioriVelocityPM;
 
  346      if (sigmaVelocityPM.degrees() > 0.0) {
 
  348        m_weights(n) = 1.0/(sigmaVelocityPM.radians()*sigmaVelocityPM.radians());
 
 
  583      QString msg = 
"In BundleTargetBody::applyParameterCorrections: " 
  584                    "correction and m_targetParameter vectors sizes don't match.\n";
 
  603          case AccelerationPoleRA:
 
  609          case VelocityPoleDec:
 
  612          case AccelerationPoleDec:
 
  624          case TriaxialRadiusA:
 
  626              double c = 
m_radii[0].kilometers();
 
  627              double d = c + corrections[n];
 
  632          case TriaxialRadiusB:
 
  634              double c = 
m_radii[1].kilometers();
 
  635              double d = c + corrections[n];
 
  640          case TriaxialRadiusC:
 
  642              double c = 
m_radii[2].kilometers();
 
  643              double d = c + corrections[n];
 
  651            double d = c + corrections[n];
 
  666      QString msg = 
"Unable to apply parameter corrections to BundleTargetBody.";
 
 
  683    if (method.compare(
"NONE", Qt::CaseInsensitive) == 0) {
 
  686    else if (method.compare(
"MEAN", Qt::CaseInsensitive) == 0) {
 
  689    else if (method.compare(
"ALL", Qt::CaseInsensitive) == 0) {
 
  694                       "Unknown target body radius solution method [" + method + 
"].",
 
 
  712    else if (method == 
Mean)
 
  714    else if (method == 
All)
 
  717                          "Unknown target body radius solve method enum [" + 
toString(method) + 
"].",
 
 
  908      QString msg = 
"The triaxial radii can only be accessed when solving for triaxial radii.";
 
 
  925      QString msg = 
"The mean radius can only be accessed when solving for mean radius.";
 
 
  948    for (
int i = 0; i < nParameters; i++) {
 
 
  969    std::vector<double> finalParameterValues;
 
  972    int nAngleParameters = 0;
 
  973    int nRadiusParameters = 0;
 
  975      finalParameterValues.push_back(
m_raPole[0].degrees());
 
  976      parameterNamesList.append( str.arg(
"POLE RA    ") );
 
  980      finalParameterValues.push_back(
m_raPole[1].degrees());
 
  981      parameterNamesList.append( str.arg(
"POLE RAv   ") );
 
  985      finalParameterValues.push_back(
m_raPole[2].degrees());
 
  986      parameterNamesList.append( str.arg(
"POLE RAa   ") );
 
  990      finalParameterValues.push_back(
m_decPole[0].degrees());
 
  991      parameterNamesList.append( str.arg(
"POLE DEC   ") );
 
  995      finalParameterValues.push_back(
m_decPole[1].degrees());
 
  996      parameterNamesList.append( str.arg(
"POLE DECv  ") );
 
 1000      finalParameterValues.push_back(
m_decPole[2].degrees());
 
 1001      parameterNamesList.append( str.arg(
"POLE DECa  ") );
 
 1005      finalParameterValues.push_back(
m_pm[0].degrees());
 
 1006      parameterNamesList.append( str.arg(
"  PM       ") );
 
 1010      finalParameterValues.push_back(
m_pm[1].degrees());
 
 1011      parameterNamesList.append( str.arg(
"  PMv      ") );
 
 1015      finalParameterValues.push_back(
m_pm[2].degrees());
 
 1016      parameterNamesList.append( str.arg(
"  PMa      ") );
 
 1020      finalParameterValues.push_back(
m_radii[0].kilometers());
 
 1021      finalParameterValues.push_back(
m_radii[1].kilometers());
 
 1022      finalParameterValues.push_back(
m_radii[2].kilometers());
 
 1023      parameterNamesList.append( str.arg(
"  RadiusA  ") );
 
 1024      parameterNamesList.append( str.arg(
"  RadiusB  ") );
 
 1025      parameterNamesList.append( str.arg(
"  RadiusC  ") );
 
 1026      nRadiusParameters += 3;
 
 1030      parameterNamesList.append( str.arg(
"MeanRadius ") );
 
 1031      nRadiusParameters++;
 
 1034    int nParameters = nAngleParameters + nRadiusParameters;
 
 1037    QString finalqStr = 
"";
 
 1042    for (
int i = 0; i < nAngleParameters; i++) {
 
 1049      if (errorPropagation) {
 
 1051        qStr = QString(
"%1%2%3%4%5%6\n").
 
 1052            arg( parameterNamesList.at(i) ).
 
 1053            arg(finalParameterValues[i] - corr_temp.degrees(), 17, 
'f', 8).
 
 1054            arg(corr_temp.degrees(), 21, 
'f', 8).
 
 1055            arg(finalParameterValues[i], 20, 
'f', 8).
 
 1061        qStr = QString(
"%1%2%3%4%5%6\n").
 
 1062            arg( parameterNamesList.at(i) ).
 
 1063            arg(finalParameterValues[i] - corr_temp.degrees(), 17, 
'f', 8).
 
 1064            arg(corr_temp.degrees(), 21, 
'f', 8).
 
 1065            arg(finalParameterValues[i], 20, 
'f', 8).
 
 1072    for (
int i = nAngleParameters; i < nParameters; i++) {
 
 1079      if (errorPropagation) {
 
 1080        double d1 = finalParameterValues[i];
 
 1082        qStr = QString(
"%1%2%3%4%5%6\n").
 
 1083            arg( parameterNamesList.at(i) ).
 
 1084            arg(d1 - d2, 17, 
'f', 8).
 
 1085            arg(d2, 21, 
'f', 8).
 
 1086            arg(d1, 20, 
'f', 8).
 
 1091        double d1 = finalParameterValues[i];
 
 1093        qStr = QString(
"%1%2%3%4%5%6\n").
 
 1094            arg( parameterNamesList.at(i) ).
 
 1095            arg(d1 - d2, 17, 
'f', 8).
 
 1096            arg(d2, 21, 
'f', 8).
 
 1097            arg(d1, 20, 
'f', 8).
 
 
 1191    std::set<int> targetParameterSolveCodes;
 
 1193    for (g = tbObject.beginGroup(); g != tbObject.endGroup(); ++g) {
 
 1194      if (g->hasKeyword(
"Ra")) {
 
 1196          str = g->findKeyword(
"Ra")[0];
 
 1199          QString msg = 
"Ra must be given as none, position, velocity, or acceleration";
 
 1202        if (str == 
"position") {
 
 1203          targetParameterSolveCodes.insert(BundleTargetBody::PoleRA);
 
 1205        else if (str == 
"velocity") {
 
 1206          targetParameterSolveCodes.insert(BundleTargetBody::PoleRA);
 
 1207          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleRA);
 
 1209        else if (str == 
"acceleration") {
 
 1210          targetParameterSolveCodes.insert(BundleTargetBody::PoleRA);
 
 1211          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleRA);
 
 1212          targetParameterSolveCodes.insert(BundleTargetBody::AccelerationPoleRA);
 
 1216      if (g->hasKeyword(
"Dec")) {
 
 1218          str = g->findKeyword(
"Dec")[0];
 
 1221          QString msg = 
"Dec must be given as none, position, velocity, or acceleration";
 
 1224        if (str == 
"position") {
 
 1225          targetParameterSolveCodes.insert(BundleTargetBody::PoleDec);
 
 1227        else if (str == 
"velocity") {
 
 1228          targetParameterSolveCodes.insert(BundleTargetBody::PoleDec);
 
 1229          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleDec);
 
 1231        else if (str == 
"acceleration") {
 
 1232          targetParameterSolveCodes.insert(BundleTargetBody::PoleDec);
 
 1233          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleDec);
 
 1234          targetParameterSolveCodes.insert(BundleTargetBody::AccelerationPoleDec);
 
 1238      if (g->hasKeyword(
"Pm")) {
 
 1240          str = g->findKeyword(
"Pm")[0];
 
 1243          QString msg = 
"Pm must be given as none, position, velocity, or acceleration";
 
 1246        if (str == 
"position") {
 
 1247          targetParameterSolveCodes.insert(BundleTargetBody::PM);
 
 1249        else if (str == 
"velocity") {
 
 1250          targetParameterSolveCodes.insert(BundleTargetBody::PM);
 
 1251          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPM);
 
 1253        else if (str == 
"acceleration") {
 
 1254          targetParameterSolveCodes.insert(BundleTargetBody::PM);
 
 1255          targetParameterSolveCodes.insert(BundleTargetBody::VelocityPM);
 
 1256          targetParameterSolveCodes.insert(BundleTargetBody::AccelerationPM);
 
 1260      if (g->hasKeyword(
"RadiiSolveOption")) {
 
 1262          str = g->findKeyword(
"RadiiSolveOption")[0];
 
 1265          QString msg = 
"RadiiSolveOption must be given as none, triaxial, or mean";
 
 1268        if (str == 
"triaxial") {
 
 1269          targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusA);
 
 1270          targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusB);
 
 1271          targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusC);
 
 1272          solveRadiiMethod = 
All;
 
 1274        else if (str == 
"mean") {
 
 1275          targetParameterSolveCodes.insert(BundleTargetBody::MeanRadius);
 
 1276          solveRadiiMethod = 
Mean;
 
 1279          solveRadiiMethod = 
None;
 
 1283    Angle aprioriPoleRA;
 
 1285    Angle aprioriVelocityPoleRA;
 
 1286    Angle poleRAVelocitySigma;
 
 1287    Angle aprioriAccelerationPoleRA;
 
 1288    Angle poleRAAccelerationSigma;
 
 1289    Angle aprioriPoleDec;
 
 1291    Angle aprioriVelocityPoleDec;
 
 1292    Angle sigmaVelocityPoleDec;
 
 1293    Angle aprioriAccelerationPoleDec;
 
 1294    Angle sigmaAccelerationPoleDec;
 
 1297    Angle aprioriVelocityPM;
 
 1298    Angle sigmaVelocityPM;
 
 1299    Angle aprioriAccelerationPM;
 
 1300    Angle pmAccelerationSigma;
 
 1312    for (g = tbObject.beginGroup(); g != tbObject.endGroup(); ++g) {
 
 1313      if (g->hasKeyword(
"RaValue")) {
 
 1315          d = (double)(g->findKeyword(
"RaValue"));
 
 1318          QString msg = 
"RaValue must be a valid double (>= 0; blank defaults to 0).";
 
 1324      if (g->hasKeyword(
"RaSigma")) {
 
 1326          d = (double)(g->findKeyword(
"RaSigma"));
 
 1329          QString msg = 
"RaSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1335      if (g->hasKeyword(
"RaVelocityValue")) {
 
 1337          d = (double)(g->findKeyword(
"RaVelocityValue"));
 
 1340          QString msg = 
"RaVelocityValue must be a valid double (>= 0; blank defaults to 0).";
 
 1346      if (g->hasKeyword(
"RaVelocitySigma")) {
 
 1348          d = (double)(g->findKeyword(
"RaVelocitySigma"));
 
 1351          QString msg = 
"RaVelocitySigma must be a valid double (>= 0; blank defaults to 0).";
 
 1357      if (g->hasKeyword(
"RaAccelerationValue")) {
 
 1359          d = (double)(g->findKeyword(
"RaAccelerationValue"));
 
 1362          QString msg = 
"RaAccelerationValue must be a valid double (>= 0; blank defaults to 0).";
 
 1368      if (g->hasKeyword(
"RaAccelerationSigma")) {
 
 1370          d = (double)(g->findKeyword(
"RaAccelerationSigma"));
 
 1373          QString msg = 
"RaAccelerationSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1379      if (g->hasKeyword(
"DecValue")) {
 
 1381          d = (double)(g->findKeyword(
"DecValue"));
 
 1384          QString msg = 
"DecValue must be a valid double (>= 0; blank defaults to 0).";
 
 1390      if (g->hasKeyword(
"DecSigma")) {
 
 1392          d = (double)(g->findKeyword(
"DecSigma"));
 
 1395          QString msg = 
"DecSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1401      if (g->hasKeyword(
"DecVelocityValue")) {
 
 1403          d = (double)(g->findKeyword(
"DecVelocityValue"));
 
 1406          QString msg = 
"DecVelocityValue must be a valid double (>= 0; blank defaults to 0).";
 
 1412      if (g->hasKeyword(
"DecVelocitySigma")) {
 
 1414          d = (double)(g->findKeyword(
"DecVelocitySigma"));
 
 1417          QString msg = 
"DecVelocitySigma must be a valid double (>= 0; blank defaults to 0).";
 
 1423      if (g->hasKeyword(
"DecAccelerationValue")) {
 
 1425          d = (double)(g->findKeyword(
"DecAccelerationValue"));
 
 1428          QString msg = 
"DecAccelerationValue must be a valid double (>= 0; blank defaults to 0).";
 
 1434      if (g->hasKeyword(
"DecAccelerationSigma")) {
 
 1436          d = (double)(g->findKeyword(
"DecAccelerationSigma"));
 
 1439          QString msg = 
"DecAccelerationSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1445      if (g->hasKeyword(
"PmValue")) {
 
 1447          d = (double)(g->findKeyword(
"PmValue"));
 
 1450          QString msg = 
"PmValue must be a valid double (>= 0; blank defaults to 0).";
 
 1456      if (g->hasKeyword(
"PmSigma")) {
 
 1458          d = (double)(g->findKeyword(
"PmSigma"));
 
 1461          QString msg = 
"PmSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1468      if (g->hasKeyword(
"PmVelocityValue")) {
 
 1470          d = (double)(g->findKeyword(
"PmVelocityValue"));
 
 1473          QString msg = 
"PmVelocityValue must be a valid double (>= 0; blank defaults to 0).";
 
 1479      if (g->hasKeyword(
"PmVelocitySigma")) {
 
 1481          d = (double)(g->findKeyword(
"PmVelocitySigma"));
 
 1484          QString msg = 
"PmVelocitySigma must be a valid double (>= 0; blank defaults to 0).";
 
 1490      if (g->hasKeyword(
"PmAccelerationValue")) {
 
 1492          d = (double)(g->findKeyword(
"PmAccelerationValue"));
 
 1495          QString msg = 
"PmAccelerationValue must be a valid double (>= 0; blank defaults to 0).";
 
 1501      if (g->hasKeyword(
"PmAccelerationSigma")) {
 
 1503          d = (double)(g->findKeyword(
"PmAccelerationSigma"));
 
 1506          QString msg = 
"PmAccelerationSigma must be a valid double (>= 0; blank defaults to 0).";
 
 1512      if (g->hasKeyword(
"RadiusAValue")) {
 
 1514          d = (double)(g->findKeyword(
"RadiusAValue"));
 
 1517          QString msg = 
"RadiusAValue must be a valid double (blank defaults to 0).";
 
 1524          QString msg = 
"RadiusAValue must be >= 0.";
 
 1529      if (g->hasKeyword(
"RadiusASigma")) {
 
 1531          d = (double)(g->findKeyword(
"RadiusASigma"));
 
 1534          QString msg = 
"RadiusASigma must be a valid double (blank defaults to 0).";
 
 1541          QString msg = 
"RadiusASigma must be >= 0.";
 
 1546      if (g->hasKeyword(
"RadiusBValue")) {
 
 1548          d = (double)(g->findKeyword(
"RadiusBValue"));
 
 1551          QString msg = 
"RadiusBValue must be a valid double (blank defaults to 0).";
 
 1558          QString msg = 
"RadiusBValue must be >= 0.";
 
 1563      if (g->hasKeyword(
"RadiusBSigma")) {
 
 1565          d = (double)(g->findKeyword(
"RadiusBSigma"));
 
 1568          QString msg = 
"RadiusBSigma must be a valid double (blank defaults to 0).";
 
 1575          QString msg = 
"RadiusBSigma must be >= 0.";
 
 1580      if (g->hasKeyword(
"RadiusCValue")) {
 
 1582          d = (double)(g->findKeyword(
"RadiusCValue"));
 
 1585          QString msg = 
"RadiusCValue must be a valid double (blank defaults to 0).";
 
 1592          QString msg = 
"RadiusCValue must be >= 0.";
 
 1597      if (g->hasKeyword(
"RadiusCSigma")) {
 
 1599          d = (double)(g->findKeyword(
"RadiusCSigma"));
 
 1602          QString msg = 
"RadiusCSigma must be a valid double (blank defaults to 0).";
 
 1609          QString msg = 
"RadiusCSigma must be >= 0.";
 
 1614      if (g->hasKeyword(
"MeanRadiusValue")) {
 
 1616          d = (double)(g->findKeyword(
"MeanRadiusValue"));
 
 1619          QString msg = 
"MeanRadiusValue must be a valid double (blank defaults to 0).";
 
 1626          QString msg = 
"MeanRadiusValue must be >= 0.";
 
 1631      if (g->hasKeyword(
"MeanRadiusSigma")) {
 
 1633          d = (double)(g->findKeyword(
"MeanRadiusSigma"));
 
 1636          QString msg = 
"MeanRadiusSigma must be a valid double (blank defaults to 0).";
 
 1643          QString msg = 
"MeanRadiusSigma must be >= 0.";
 
 1662           aprioriPoleRA, poleRASigma,
 
 1663           aprioriVelocityPoleRA, poleRAVelocitySigma,
 
 1664           aprioriPoleDec, poleDecSigma,
 
 1665           aprioriVelocityPoleDec, sigmaVelocityPoleDec,
 
 1667           aprioriVelocityPM, sigmaVelocityPM,
 
 1669           aprioriRadiusA, sigmaRadiusA,
 
 1670           aprioriRadiusB, sigmaRadiusB,
 
 1671           aprioriRadiusC, sigmaRadiusC,
 
 1672           aprioriMeanRadius, sigmaMeanRadius);
 
 
 1693      QString msg = 
"Local radius can only be found if triaxial radii were solved for.";
 
 1697    double a = 
m_radii[0].kilometers();
 
 1698    double b = 
m_radii[1].kilometers();
 
 1699    double c = 
m_radii[2].kilometers();
 
 1701    double rlat = lat.radians();
 
 1702    double rlon = lon.radians();
 
 1704    double xyradius = a * b / sqrt(pow(b * cos(rlon), 2) +
 
 1705                      pow(a * sin(rlon), 2));
 
 1706    const double &radius = xyradius * c / sqrt(pow(c * cos(rlat), 2) +
 
 1707                           pow(xyradius * sin(rlat), 2));
 
 
Defines an angle and provides unit conversions.
 
@ Degrees
Degrees are generally considered more human readable, 0-360 is one circle, however most math does not...
 
@ Radians
Radians are generally used in mathematical equations, 0-2*PI is one circle, however these are more di...
 
This class is used to represent a target body in a bundle and how to solve for it.
 
Distance m_sigmaRadiusC
Apriori Radius C Sigma.
 
TargetRadiiSolveMethod
Enumeration that defines how to solve for target radii.
 
@ Mean
Solve for mean radius.
 
@ All
Solve for all radii.
 
LinearAlgebra::Vector & parameterWeights()
Returns the vector of parameter weights.
 
std::vector< Angle > m_raPole
pole ra quadratic polynomial coefficients
 
std::vector< Angle > m_pm
pole pm quadratic polynomial coefficients
 
virtual bool solvePoleRAAcceleration()
If the pole right ascension acceleration will be solved for with this target body.
 
LinearAlgebra::Vector & aprioriSigmas()
Returns the vector of apriori parameters sigmas.
 
std::vector< Angle > poleRaCoefs()
Returns the coefficients of the right ascension polynomial.
 
virtual bool solvePoleDec()
If the pole declination angle will be solved for with this target body.
 
static QString targetRadiiOptionToString(TargetRadiiSolveMethod targetRadiiSolveMethod)
Converts a TargetRadiiSolveMethod to a QString.
 
virtual bool solvePoleDecVelocity()
If the pole declination velocity will be solved for with this target body.
 
void setSolveSettings(std::set< int > targetParameterSolveCodes, Angle aprioriPoleRA, Angle sigmaPoleRA, Angle aprioriVelocityPoleRA, Angle sigmaVelocityPoleRA, Angle aprioriPoleDec, Angle sigmaPoleDec, Angle aprioriVelocityPoleDec, Angle sigmaVelocityPoleDec, Angle aprioriPM, Angle sigmaPM, Angle aprioriVelocityPM, Angle sigmaVelocityPM, TargetRadiiSolveMethod solveRadiiMethod, Distance aprioriRadiusA, Distance sigmaRadiusA, Distance aprioriRadiusB, Distance sigmaRadiusB, Distance aprioriRadiusC, Distance sigmaRadiusC, Distance aprioriMeanRadius, Distance sigmaMeanRadius)
Sets the solve settings for the target body.
 
LinearAlgebra::Vector & parameterCorrections()
Returns the vector of corrections applied to the parameters.
 
std::vector< Distance > radii()
Returns the radius values.
 
LinearAlgebra::Vector m_corrections
Cumulative parameter corrections.
 
BundleTargetBody & operator=(const BundleTargetBody &src)
Assignment operator.
 
double vtpv()
Calculates and returns the weighted sum of the squares of the corrections.
 
std::vector< Angle > pmCoefs()
Returns the coefficients of the prime meridian polynomial.
 
LinearAlgebra::Vector & adjustedSigmas()
Returns the vector of adjusted parameters sigmas.
 
virtual bool solvePoleRA()
If the pole right ascension angle will be solved for with this target body.
 
int numberRadiusParameters()
Returns the number of radius parameters being solved for.
 
Distance m_sigmaMeanRadius
Apriori Mean Radius Sigma.
 
virtual bool solvePM()
If the prime meridian angle will be solved for with this target body.
 
Distance m_sigmaRadiusA
Apriori Radius A Sigma.
 
QString formatBundleOutputString(bool errorPropagation)
Formats and returns the parameter values as a QString.
 
Distance m_aprioriRadiusC
Apriori Radius C.
 
Distance meanRadius()
Returns the mean radius.
 
LinearAlgebra::Vector & parameterSolution()
Returns the vector of parameters solution.
 
virtual bool solvePMAcceleration()
If the prime meridian acceleration will be solved for with this target body.
 
LinearAlgebra::Vector m_aprioriSigmas
A priori parameter sigmas.
 
Distance m_aprioriRadiusA
Apriori Radius A.
 
virtual bool solveTriaxialRadii()
If the triaxial radii will be solved for with this target body.
 
virtual bool solveMeanRadius()
If the mean radius will be solved for with this target body.
 
Distance m_aprioriMeanRadius
Apriori Mean Radius.
 
virtual int numberParameters()
Returns the total number of parameters being solved for.
 
static TargetRadiiSolveMethod stringToTargetRadiiOption(QString option)
Converts a QString to a TargetRadiiSolveMethod.
 
std::vector< Distance > m_radii
Adjusted triaxial radii values.
 
Distance localRadius(const Latitude &lat, const Longitude &lon)
Gets the local radius for the given latitude/longitude coordinate.
 
virtual bool solvePoleRAVelocity()
If the pole right ascension velocity will be solved for with this target body.
 
virtual bool solvePoleDecAcceleration()
If the pole declination acceleration will be solved for with this target body.
 
BundleTargetBody()
Creates an empty BundleTargetBody object.
 
QStringList m_parameterNamesList
List of all target parameters.
 
LinearAlgebra::Vector m_adjustedSigmas
Adjusted parameter sigmas.
 
Distance m_sigmaRadiusB
Apriori Radius B Sigma.
 
virtual ~BundleTargetBody()
Destructor.
 
Distance m_meanRadius
Adjusted mean radius value.
 
LinearAlgebra::Vector m_weights
Parameter weights.
 
std::vector< Angle > poleDecCoefs()
Returns the coefficients of the declination polynomial.
 
QStringList parameterList()
Returns a list of all the parameters being solved for as QStrings.
 
Distance m_aprioriRadiusB
Apriori Radius B.
 
bool readFromPvl(PvlObject &tbPvlObject)
Set bundle solve parameters for target body from a pvl file.
 
LinearAlgebra::Vector m_solution
Parameter solution vector.
 
virtual bool solvePMVelocity()
If the prime meridian velocity will be solved for with this target body.
 
void applyParameterCorrections(LinearAlgebra::Vector corrections)
Applies a vector of corrections to the parameters for the target body.
 
std::set< int > m_parameterSolveCodes
Target parameter solve codes.
 
TargetRadiiSolveMethod m_solveTargetBodyRadiusMethod
Which radii will be solved for.
 
std::vector< Angle > m_decPole
pole dec quadratic polynomial coefficients
 
Distance measurement, usually in meters.
 
double kilometers() const
Get the distance in kilometers.
 
@ Kilometers
The distance is being specified in kilometers.
 
@ Meters
The distance is being specified in meters.
 
@ Unknown
A type of error that cannot be classified as any of the other error types.
 
@ User
A type of error that could only have occurred due to a mistake on the user's part (e....
 
@ Programmer
This error is for when a programmer made an API call that was illegal.
 
This class is designed to encapsulate the concept of a Latitude.
 
boost::numeric::ublas::vector< double > Vector
Definition for an Isis::LinearAlgebra::Vector of doubles.
 
This class is designed to encapsulate the concept of a Longitude.
 
Contains Pvl Groups and Pvl Objects.
 
QList< Isis::PvlGroup >::iterator PvlGroupIterator
The counter for groups.
 
This class is used to create and store valid Isis targets.
 
std::vector< Distance > radii() const
Returns the radii of the body in km.
 
This is free and unencumbered software released into the public domain.
 
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.