USGS

Isis 3.0 Developer's Reference (API)

Home

ControlPoint.h

Go to the documentation of this file.
00001 #ifndef ControlPoint_h
00002 #define ControlPoint_h
00003 
00027 #include <bitset>
00028 
00029 #include <QObject>
00030 #include <QString>
00031 
00032 #include "SurfacePoint.h"
00033 
00034 template< typename A, typename B > class QHash;
00035 
00036 class QStringList;
00037 
00038 namespace Isis {
00039   class ControlMeasure;
00040   class ControlNet;
00041   class ControlPointFileEntryV0002;
00042   class Latitude;
00043   class Longitude;
00044   class PBControlNet_PBControlPoint;
00045   class PBControlNetLogData_Point;
00046   class PvlObject;
00047   class Statistics;
00048 
00330   class ControlPoint : public QObject {
00331 
00332       Q_OBJECT
00333 
00334       friend class ControlNet;
00335     public:
00340       enum PointType {
00347         Fixed = 0,
00352         Constrained = 1,
00360         Free = 2
00361       };
00362       static const int PointTypeCount = 3;
00363 
00369       enum Status {
00375         Failure,
00379         Success,
00384         PointLocked
00385       };
00386 
00391       enum ConstraintStatus {
00398         LatitudeConstrained = 0,
00399         LongitudeConstrained = 1,
00400         RadiusConstrained = 2,
00401 //      XConstrained = 3,
00402 //      YConstrained = 4,
00403 //      ZConstrained = 5;
00404       };
00405 
00406       // This stuff input to jigsaw
00407       // How did apriori source get computed??
00408       struct SurfacePointSource {
00409         enum Source {
00410           None,
00411           User,
00412           AverageOfMeasures,
00413           Reference,
00414           Basemap,
00415           BundleSolution
00416         };
00417       };
00418 
00419       struct RadiusSource {
00420         enum Source {
00421           None,
00422           User,
00423           AverageOfMeasures,
00424           Ellipsoid,
00425           DEM,
00426           BundleSolution
00427         };
00428       };
00429 
00430       ControlPoint();
00431       ControlPoint(const ControlPoint &);
00432       ControlPoint(const QString &id);
00433       ControlPoint(const ControlPointFileEntryV0002 &fileEntry,
00434           const Distance &majorRad, const Distance &minorRad,
00435           const Distance &polarRad);
00436       ~ControlPoint();
00437 
00438       ControlNet *Parent() { return parentNetwork; }
00439 
00440       void Load(PvlObject &p);
00441 
00442       void Add(ControlMeasure *measure);
00443       int Delete(ControlMeasure *measure);
00444       int Delete(QString serialNumber);
00445       int Delete(int index);
00446       Status ResetApriori();
00447 
00448       const ControlMeasure *GetMeasure(QString serialNumber) const;
00449       ControlMeasure *GetMeasure(QString serialNumber);
00450 
00451       const ControlMeasure *GetMeasure(int index) const;
00452       ControlMeasure *GetMeasure(int index);
00453 
00454       const ControlMeasure *GetRefMeasure() const;
00455       ControlMeasure *GetRefMeasure();
00456 
00457       Status SetChooserName(QString name);
00458       Status SetDateTime(QString newDateTime);
00459       Status SetEditLock(bool editLock);
00460       Status SetId(QString id);
00461       Status SetRefMeasure(ControlMeasure *cm);
00462       Status SetRefMeasure(int index);
00463       Status SetRefMeasure(QString sn);
00464       Status SetRejected(bool rejected);
00465       Status SetIgnored(bool newIgnoreStatus);
00466       Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint);
00467       Status SetType(PointType newType);
00468 
00469       Status SetAprioriRadiusSource(RadiusSource::Source source);
00470       Status SetAprioriRadiusSourceFile(QString sourceFile);
00471       Status SetAprioriSurfacePoint(SurfacePoint aprioriSP);
00472       Status SetAprioriSurfacePointSource(SurfacePointSource::Source source);
00473       Status SetAprioriSurfacePointSourceFile(QString sourceFile);
00474 
00475 //    Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon,
00476 //                                      const Distance &radius);
00477 
00478       Status ComputeApriori();
00479       Status ComputeResiduals();
00480       Status ComputeResiduals_Millimeters();
00481 
00482       SurfacePoint GetAdjustedSurfacePoint() const;
00483       SurfacePoint GetBestSurfacePoint() const;
00484       QString GetChooserName() const;
00485       QString GetDateTime() const;
00486       bool IsEditLocked() const;
00487       bool IsRejected() const;
00488       QString GetId() const;
00489       bool IsIgnored() const;
00490       bool IsValid() const;
00491       bool IsInvalid() const;
00492       bool IsFixed() const;
00493 
00494       bool HasAprioriCoordinates();
00495       bool IsConstrained();
00496       bool IsLatitudeConstrained();
00497       bool IsLongitudeConstrained();
00498       bool IsRadiusConstrained();
00499       int NumberOfConstrainedCoordinates();
00500 
00501       static QString PointTypeToString(PointType type);
00502       static PointType StringToPointType(QString pointTypeString);
00503 
00504       QString GetPointTypeString() const;
00505       PointType GetType() const;
00506 
00507       static QString RadiusSourceToString(RadiusSource::Source source);
00508       static RadiusSource::Source StringToRadiusSource(QString str);
00509       QString GetRadiusSourceString() const;
00510       static QString SurfacePointSourceToString(SurfacePointSource::Source source);
00511       static SurfacePointSource::Source StringToSurfacePointSource(QString str);
00512       QString GetSurfacePointSourceString() const;
00513 
00514       SurfacePoint GetAprioriSurfacePoint() const;
00515       RadiusSource::Source GetAprioriRadiusSource() const;
00516       QString GetAprioriRadiusSourceFile() const;
00517       SurfacePointSource::Source GetAprioriSurfacePointSource() const;
00518       QString GetAprioriSurfacePointSourceFile() const;
00519 
00520       int GetNumMeasures() const;
00521       int GetNumValidMeasures() const;
00522       int GetNumLockedMeasures() const;
00523       bool HasSerialNumber(QString serialNumber) const;
00524       int IndexOf(ControlMeasure *, bool throws = true) const;
00525       int IndexOf(QString sn, bool throws = true) const;
00526       int IndexOfRefMeasure() const;
00527       bool IsReferenceExplicit() const;
00528       QString GetReferenceSN() const;
00529 
00530       Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const;
00531       Statistics GetStatistic(long dataType) const;
00532 
00533       QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const;
00534       QList< QString > getCubeSerialNumbers() const;
00535 
00536       const ControlMeasure *operator[](QString serialNumber) const;
00537       ControlMeasure *operator[](QString serialNumber);
00538 
00539       const ControlMeasure *operator[](int index) const;
00540       ControlMeasure *operator[](int index);
00541 
00542       bool operator!=(const ControlPoint &pPoint) const;
00543       bool operator==(const ControlPoint &pPoint) const;
00544       const ControlPoint &operator=(const ControlPoint &pPoint);
00545 
00546       // The next 7 methods are specifically to support BundleAdjust
00547       void ZeroNumberOfRejectedMeasures();
00548       void SetNumberOfRejectedMeasures(int numRejected);
00549       int GetNumberOfRejectedMeasures() const;
00550       double GetSampleResidualRms() const;
00551       double GetLineResidualRms() const;
00552       double GetResidualRms() const;
00553       void ClearJigsawRejected();
00554 
00555       ControlPointFileEntryV0002 ToFileEntry() const;
00556 
00557     private:
00558       void SetExplicitReference(ControlMeasure *measure);
00559       void ValidateMeasure(QString serialNumber) const;
00560       void AddMeasure(ControlMeasure *measure);
00561       void PointModified();
00562 
00563 
00564     private:
00565       ControlNet *parentNetwork;
00566 
00568       QHash< QString, ControlMeasure * > * measures;
00569 
00570       QStringList *cubeSerials;
00571 
00572       ControlMeasure *referenceMeasure;
00573 
00579       QString id;
00580 
00589       QString chooserName;
00590 
00595       QString dateTime;
00596 
00601       PointType type;
00602 
00608       bool invalid;
00609 
00614       bool editLock;
00615 
00620       bool jigsawRejected;
00621 
00626       std::bitset<6> constraintStatus;
00627 
00634       bool referenceExplicitlySet;
00635 
00640       bool ignore;
00641 
00643       SurfacePointSource::Source aprioriSurfacePointSource;
00644 
00646       QString aprioriSurfacePointSourceFile;
00647 
00652       RadiusSource::Source aprioriRadiusSource;
00653 
00657       QString aprioriRadiusSourceFile;
00658 
00667       SurfacePoint aprioriSurfacePoint;
00668 
00673       SurfacePoint adjustedSurfacePoint;
00674 
00680       int numberOfRejectedMeasures;
00681   };
00682 }
00683 
00684 #endif