USGS

Isis 3.0 Developer's Reference (API)

Home

Sensor.h

Go to the documentation of this file.
00001 #ifndef Sensor_h
00002 #define Sensor_h
00003 
00025 #include "Spice.h"
00026 #include "Cube.h"
00027 #include "ProjectionFactory.h"
00028 #include "Portal.h"
00029 #include "Interpolator.h"
00030 
00031 namespace Isis {
00032   class Distance;
00033   class EllipsoidShape;
00034   class iTime;
00035   class Latitude;
00036   class Longitude;
00037   class ShapeModel;
00038   class SurfacePoint;
00039   class Target;
00040 
00185   class Sensor : public Spice {
00186     public:
00187       Sensor(Pvl &lab);
00188 
00189       virtual ~Sensor();
00190 
00191       void setTime(const iTime &time);
00192       bool SetLookDirection(const double v[3]);
00193       bool SetRightAscensionDeclination(const double ra, const double dec);
00194       bool SetUniversalGround(const double latitude, const double longitude,
00195                               bool backCheck = true);
00196       bool SetUniversalGround(const double latitude, const double longitude,
00197                               const double radius, bool backCheck = true);
00198       bool SetGround(const SurfacePoint &surfacePt, bool backCheck = true);
00199       bool HasSurfaceIntersection() const;
00200       void Coordinate(double p[3]) const;
00201 
00202       double UniversalLatitude() const;
00203       Latitude GetLatitude() const;
00204       double UniversalLongitude() const;
00205       Longitude GetLongitude() const;
00206       SurfacePoint GetSurfacePoint() const;
00207 
00208       Distance LocalRadius() const;
00209       Distance LocalRadius(Latitude lat, Longitude lon);
00210       Distance LocalRadius(double lat, double lon);
00211 
00212       double PhaseAngle() const;
00213       double EmissionAngle() const;
00214       double IncidenceAngle() const;
00215 
00216       void LookDirection(double v[3]) const;
00217 
00218       double RightAscension();
00219       double Declination();
00220 
00221       // Return vector between spacecraft and surface point in body-fixed
00222       void SpacecraftSurfaceVector(double scSurfaceVector[3]) const;
00223       double SlantDistance() const;
00224       double LocalSolarTime();
00225       double SolarDistance() const;
00226       double SpacecraftAltitude();
00227 
00228       // Return local radius from dem
00229 //      Distance DemRadius(const SurfacePoint &pt);
00230 //      Distance DemRadius(const Latitude &lat, const Longitude
00231 //      &lon); bool HasElevationModel() {
00232 
00239       virtual double resolution() {
00240         return 1.0;
00241       };
00242       void IgnoreElevationModel(bool ignore);
00243 
00244     private:
00245       // This version of DemRadius is for SetLookDirection ONLY. Do not call.
00246       // DAC TODO Why is next declaration here? Don't move until I know
00247 //      double DemRadius(double lat, double lon);
00248       void CommonInitialize(const std::string &demCube);
00249 
00250       SpiceDouble m_lookB[3];  
00251 
00252       bool m_newLookB;      
00253       SpiceDouble m_ra;     
00254       SpiceDouble m_dec;    
00255       void computeRaDec();  
00256       bool SetGroundLocal(bool backCheck);   
00257   };
00258 };
00259 
00260 #endif