32 #include "CubeManager.h"
48 #define MAX(x,y) (((x) > (y)) ? (x) : (y))
98 QString message =
"Pixel Ifov offsets not implemented for this camera.";
164 vector<double> lookC(v, v + 3);
174 memcpy(
m_lookB, &lookB[0],
sizeof(
double) * 3);
189 return target()->
shape()->intersectSurface(sB, lookB);
328 std::vector<double> sunB(
m_uB,
m_uB+3);
351 std::vector<double> sunB(
m_uB,
m_uB+3);
372 const double longitude,
407 const double longitude,
483 const vector<double> &sB =
528 vector<double> lookB(3);
575 vector<double> lookB(3);
582 recrad_c((SpiceDouble *)&lookJ[0], &range, &
m_ra, &
m_dec);
597 vector<double> lookJ(3);
598 radrec_c(1.0, ra *
PI / 180.0, dec *
PI / 180.0, (SpiceDouble *)&lookJ[0]);
614 scSurfaceVector[0] =
m_lookB[0];
615 scSurfaceVector[1] =
m_lookB[1];
616 scSurfaceVector[2] =
m_lookB[2];
626 SpiceDouble psB[3], upsB[3];
637 vsub_c(pB, (SpiceDouble *) &sB[0], psB);
638 unorm_c(psB, upsB, &dist);
654 if (lst < 0.0) lst += 24.0;
655 if (lst > 24.0) lst -= 24.0;
677 double dist = sqrt(xChange*xChange + yChange*yChange + zChange*zChange);
678 dist /= 149597870.691;
697 double rlat = lat *
PI / 180.0;
698 double rlon = lon *
PI / 180.0;
708 double xChange = spB[0] - ssB[0];
709 double yChange = spB[1] - ssB[1];
710 double zChange = spB[2] - ssB[2];
713 double dist = sqrt(xChange*xChange + yChange*yChange + zChange*zChange);
This class defines a body-fixed surface point.
double RightAscension()
Returns the right ascension angle (sky longitude).
void IgnoreElevationModel(bool ignore)
This allows you to ignore the cube elevation model and use the ellipse.
void SetSpherical(const Latitude &lat, const Longitude &lon, const Distance &radius, const Angle &latSigma=Angle(), const Angle &lonSigma=Angle(), const Distance &radiusSigma=Distance())
Set surface point and covariance matrix in planetocentric coordinates and convert to rectangular (Lat...
double degrees() const
Get the angle in units of Degrees.
Parse and return pieces of a time string.
SpicePosition * sunPosition() const
Accessor method for the sun position.
Distance GetLocalRadius() const
Return the radius of the surface point.
virtual QList< QPointF > PixelIfovOffsets()
This method is implemented in Camera which defaults to the (pixel pitch * summing mode ) / 2...
double SlantDistance() const
Return the distance between the spacecraft and surface point in kmv.
Latitude GetLatitude() const
Returns a planetocentric latitude object at the surface intersection point in body fixed...
SpiceRotation * instrumentRotation() const
Accessor method for the instrument rotation.
Longitude GetLongitude() const
Returns a positive east, 0-360 domain longitude object at the surface intersection point in the body ...
SpiceDouble m_dec
Decliation (sky latitude)
bool hasIntersection()
Returns intersection status.
std::vector< double > lookDirectionBodyFixed() const
Returns the look direction in the body fixed coordinate system.
const double PI(3.14159265358979323846)
The mathematical constant PI.
bool SetRightAscensionDeclination(const double ra, const double dec)
Given the ra/dec compute the look direction.
double UniversalLatitude() const
Returns the planetocentric latitude, in degrees, at the surface intersection point in the body fixed ...
bool SetGround(const SurfacePoint &surfacePt, bool backCheck=true)
This overloaded method has the opposite function as SetLookDirection.
SpiceDouble m_lookB[3]
Look direction in body fixed.
This class is designed to encapsulate the concept of a Latitude.
void computeRaDec()
Computes the ra/dec from the look direction.
SpicePosition * instrumentPosition() const
Accessor method for the instrument position.
bool SetUniversalGround(const double latitude, const double longitude, bool backCheck=true)
This is the opposite routine for SetLookDirection.
bool SetLookDirection(const double v[3])
Sets the look direction of the spacecraft.
bool m_newLookB
flag to indicate we need to recompute ra/dec
virtual double emissionAngle(const std::vector< double > &sB)
Computes and returns emission angle, in degrees, given the observer position.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
This error is for when a programmer made an API call that was illegal.
Distance measurement, usually in meters.
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
bool SetGroundLocal(bool backCheck)
Computes look vector.
double UniversalLongitude() const
Returns the positive east, 0-360 domain longitude, in degrees, at the surface intersection point in t...
void setHasIntersection(bool b)
Sets the flag to indicate whether this ShapeModel has an intersection.
This class is designed to encapsulate the concept of a Longitude.
virtual double phaseAngle(const std::vector< double > &sB, const std::vector< double > &uB)
Computes and returns phase angle, in degrees, given the positions of the observer and illuminator...
Target * target() const
Returns a pointer to the target object.
void restoreShape()
Restores the shape to the original after setShapeEllipsoid has overridden it.
virtual ~Sensor()
Destroys the Sensor.
Degrees are generally considered more human readable, 0-360 is one circle, however most math does not...
std::vector< double > ReferenceVector(const std::vector< double > &jVec)
Given a direction vector in J2000, return a reference frame direction.
SpiceRotation * bodyRotation() const
Accessor method for the body rotation.
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
double EmissionAngle() const
Returns the emission angle in degrees.
double kilometers() const
Get the displacement in kilometers.
void subSolarPoint(double &lat, double &lon)
Returns the sub-solar latitude/longitude in universal coordinates (0-360 positive east...
#define _FILEINFO_
Macro for the filename and line number.
double PhaseAngle() const
Returns the phase angle in degrees.
virtual double incidenceAngle(const std::vector< double > &uB)
Computes and returns incidence angle, in degrees, given the illuminator position. ...
void setTime(const iTime &time)
By setting the time you essential set the position of the spacecraft and body as indicated in the cla...
SurfacePoint GetSurfacePoint() const
Returns the surface point (most efficient accessor).
bool HasSurfaceIntersection() const
Returns if the last call to either SetLookDirection or SetUniversalGround had a valid intersection wi...
void clearSurfacePoint()
Clears or resets the current surface point.
double SpacecraftAltitude()
Returns the distance from the spacecraft to the subspacecraft point in km.
Define shapes and provide utilities for Isis3 targets.
void Coordinate(double p[3]) const
Returns the x,y,z of the surface intersection in BodyFixed km.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
Distance LocalRadius() const
Returns the local radius at the intersection point.
SpiceDouble m_ra
Right ascension (sky longitude)
std::vector< double > J2000Vector(const std::vector< double > &rVec)
Given a direction vector in the reference frame, return a J2000 direction.
double SolarDistance() const
Returns the distance between the sun and surface point in AU.
void setSurfacePoint(const SurfacePoint &surfacePoint)
Set surface intersection point.
void setShapeEllipsoid()
Set the shape to the ellipsoid and save the original shape.
Obtain SPICE information for a spacecraft.
The distance is being specified in meters.
double kilometers() const
Get the distance in kilometers.
void SpacecraftSurfaceVector(double scSurfaceVector[3]) const
Sets the vector between the spacecraft and surface point in body-fixed.
double LocalSolarTime()
Return the local solar time in hours.
ShapeModel * shape() const
Return the shape.
void LookDirection(double v[3]) const
Returns the look direction in the camera coordinate system.
SpiceDouble m_uB[3]
This contains the sun position (u) in the bodyfixed reference frame (B).
double IncidenceAngle() const
Returns the incidence angle in degrees.
SurfacePoint * surfaceIntersection() const
Returns the surface intersection for this ShapeModel.
std::vector< double > lookDirectionJ2000() const
Returns the look direction in the camera coordinate system.
void setTime(const iTime &time)
Sets the ephemeris time and reads the spacecraft and sun position from the kernels at that instant in...
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
double Declination()
Returns the declination angle (sky latitude).
IO Handler for Isis Cubes.
void subSpacecraftPoint(double &lat, double &lon)
Returns the sub-spacecraft latitude/longitude in universal coordinates (0-360 positive east...