Isis 3.0 Programmer Reference
Back | Home
SpicePosition.h
Go to the documentation of this file.
1 #ifndef SpicePosition_h
2 #define SpicePosition_h
3 
25 #include <string>
26 #include <vector>
27 
28 #include <SpiceUsr.h>
29 #include <SpiceZfc.h>
30 #include <SpiceZmc.h>
31 
32 #include "Table.h"
33 #include "PolynomialUnivariate.h"
34 
35 namespace Isis {
36  class NumericalApproximation;
37 
181  public:
182  //??? jw
187  enum Source { Spice,
192  // table and adding nth degree polynomial
193  };
194 
195  SpicePosition(int targetCode, int observerCode);
196 
198  virtual ~SpicePosition();
199 
200  void SetTimeBias(double timeBias);
201  double GetTimeBias() const;
202 
203  virtual void SetAberrationCorrection(const QString &correction);
204  virtual QString GetAberrationCorrection() const;
205  double GetLightTime() const;
206 
207  const std::vector<double> &SetEphemerisTime(double et);
208  enum PartialType {WRT_X, WRT_Y, WRT_Z};
209 
211  double EphemerisTime() const {
212  return p_et;
213  };
214 
215  const std::vector<double> &GetCenterCoordinate();
216 
218  const std::vector<double> &Coordinate() {
219  return p_coordinate;
220  };
221 
223  const std::vector<double> &Velocity();
224 
226  bool HasVelocity() {
227  return p_hasVelocity;
228  };
229 
230  void LoadCache(double startTime, double endTime, int size);
231  void LoadCache(double time);
232  void LoadCache(Table &table);
233 
234  Table LineCache(const QString &tableName);
235  Table LoadHermiteCache(const QString &tableName);
236 
237  void ReloadCache();
238  void ReloadCache(Table &table);
239 
240  Table Cache(const QString &tableName);
241 
243  bool IsCached() const {
244  return (p_cache.size() > 0);
245  };
246 
247  void SetPolynomial(const Source type = PolyFunction);
248 
249  void SetPolynomial(const std::vector<double>& XC,
250  const std::vector<double>& YC,
251  const std::vector<double>& ZC,
252  const Source type = PolyFunction);
253 
254  void GetPolynomial(std::vector<double>& XC,
255  std::vector<double>& YC,
256  std::vector<double>& ZC);
257 
259  void SetPolynomialDegree(int degree);
260 
263  return p_source;
264  };
265 
266  void ComputeBaseTime();
267 
269  double GetBaseTime() {
270  return p_baseTime;
271  };
272 
273  void SetOverrideBaseTime(double baseTime, double timeScale);
274 
276  double GetTimeScale() {
277  return p_timeScale;
278  };
279 
280  double DPolynomial(const int coeffIndex);
281 
282  std::vector<double> CoordinatePartial(SpicePosition::PartialType partialVar, int coeffIndex);
283 
284  std::vector<double> VelocityPartial(SpicePosition::PartialType partialVar, int coeffIndex);
285  enum OverrideType {NoOverrides, ScaleOnly, BaseAndScale};
286  void Memcache2HermiteCache(double tolerance);
287  std::vector<double> Extrapolate(double timeEt);
288  std::vector<double> HermiteCoordinate();
289  protected:
292  virtual void SetEphemerisTimeSpice();
295 
296  std::vector<int> HermiteIndices(double tol, std::vector <int> indexList);
297 
298  //======================================================================
299  // New methods support for light time correction and swap of observer/target
300  SpicePosition(int targetCode, int observerCode, bool swapObserverTarget);
301  int getObserverCode() const;
302  int getTargetCode() const;
303  double getAdjustedEphemerisTime() const;
304  void computeStateVector(double et, int target, int observer,
305  const QString &refFrame,
306  const QString &abcorr,
307  double state[6], bool &hasVelocity,
308  double &lightTime) const;
309  void setStateVector(const double state[6], const bool &hasVelocity);
310  void setLightTime(const double &lightTime);
311  //======================================================================
312 
313  private:
314  void init(int targetCode, int observerCode,
315  const bool &swapObserverTarget = false);
316  void ClearCache();
317  void LoadTimeCache();
318  void CacheLabel(Table &table);
319  double ComputeVelocityInTime(PartialType var);
320 
323 
324  double p_timeBias;
326 
327  double p_et;
328  std::vector<double> p_coordinate;
329  std::vector<double> p_velocity;
330 
337 
339  std::vector<double> p_cacheTime;
340  std::vector<std::vector<double> > p_cache;
341  std::vector<std::vector<double> > p_cacheVelocity;
342  std::vector<double> p_coefficients[3];
343 
344  double p_baseTime;
345  double p_timeScale;
347  // of degree p_degree has been created and
348  // used to fill the cache
349  int p_degree;
354  OverrideType p_override;
357 
358  // Variables support observer/target swap and light time correction
359  bool m_swapObserverTarget;
360  double m_lt;
361  };
362 };
363 
364 #endif
double p_timeScale
Time scale used in fit equations.
Object is reading from splined table.
void CacheLabel(Table &table)
Add labels to a SpicePosition table.
virtual QString GetAberrationCorrection() const
Returns current state of stellar aberration correction.
const std::vector< double > & GetCenterCoordinate()
Compute and return the coordinate at the center time.
double p_timeBias
iTime bias when reading kernels
Source p_source
Enumerated value for the location of the SPK information used.
virtual ~SpicePosition()
Destructor.
int getTargetCode() const
Returns target code.
Object is calculated from nth degree polynomial.
int p_degree
Degree of polynomial function fit to the coordinates of the position.
virtual void SetAberrationCorrection(const QString &correction)
Set the aberration correction (light time)
std::vector< double > Extrapolate(double timeEt)
Extrapolate position for a given time assuming a constant velocity.
void SetTimeBias(double timeBias)
Apply a time bias when invoking SetEphemerisTime method.
double GetLightTime() const
Return the light time coorection value.
int p_targetCode
target body code
OverrideType p_override
Time base and scale override options;.
double p_fullCacheStartTime
Original start time of the complete cache after spiceinit.
Object is reading from cached table.
bool IsCached() const
Is this position cached.
std::vector< double > CoordinatePartial(SpicePosition::PartialType partialVar, int coeffIndex)
Set the coefficients of a polynomial fit to each of the three coordinates of the position vector for ...
void ComputeBaseTime()
Compute the base time using cached times.
NumericalApproximation provides various numerical analysis methods of interpolation, extrapolation and approximation of a tabulated set of x, y data.
double ComputeVelocityInTime(PartialType var)
Compute the velocity with respect to time instead of scaled time.
void SetEphemerisTimePolyFunctionOverHermiteConstant()
This is a protected method that is called by SetEphemerisTime() when Source type is PolyFunctionOverH...
double p_fullCacheEndTime
Original end time of the complete cache after spiceinit.
void LoadCache(double startTime, double endTime, int size)
Cache J2000 position over a time range.
void init(int targetCode, int observerCode, const bool &swapObserverTarget=false)
Internal initialization of the object support observer/target swap.
void LoadTimeCache()
Load the time cache.
double p_fullCacheSize
Orignial size of the complete cache after spiceinit.
void ReloadCache()
Cache J2000 positions over existing cached time range using polynomials.
Table Cache(const QString &tableName)
Return a table with J2000 positions.
void SetEphemerisTimePolyFunction()
This is a protected method that is called by SetEphemerisTime() when Source type is PolyFunction...
std::vector< double > p_coordinate
J2000 position at time et.
NumericalApproximation * p_xhermite
Hermite spline for x coordinate if Source == HermiteCache.
int getObserverCode() const
Returns observer code.
Source GetSource()
Return the source of the position.
std::vector< double > p_coefficients[3]
Coefficients of polynomials fit to 3 coordinates.
double p_baseTime
Base time used in fit equations.
bool HasVelocity()
Return the flag indicating whether the velocity exists.
void ClearCache()
Removes the entire cache from memory.
bool p_hasVelocity
Flag to indicate velocity is available.
QString p_aberrationCorrection
Light time correction to apply.
void setStateVector(const double state[6], const bool &hasVelocity)
Sets the state of target relative to observer.
const std::vector< double > & Coordinate()
Return the current J2000 position.
void SetPolynomialDegree(int degree)
Set the polynomial degree.
void SetOverrideBaseTime(double baseTime, double timeScale)
Set an override base time to be used with observations on scanners to allow all images in an observat...
int p_observerCode
observer body code
std::vector< int > HermiteIndices(double tol, std::vector< int > indexList)
This method is called by Memcache2HermiteCache() to determine which indices from the orginal cache sh...
double p_overrideBaseTime
Value set by caller to override computed base time.
NumericalApproximation * p_zhermite
Hermite spline for z coordinate if Source == HermiteCache.
double GetTimeBias() const
Returns the value of the time bias added to ET.
void SetEphemerisTimeHermiteCache()
This is a protected method that is called by SetEphemerisTime() when Source type is HermiteCache...
void Memcache2HermiteCache(double tolerance)
This method reduces the cache for position, time and velocity to the minimum number of values needed ...
double p_et
Current ephemeris time.
double DPolynomial(const int coeffIndex)
Evaluate the derivative of the fit polynomial (parabola) defined by the given coefficients with respe...
void SetEphemerisTimeMemcache()
This is a protected method that is called by SetEphemerisTime() when Source type is Memcache...
std::vector< double > p_velocity
J2000 velocity at time et.
bool p_degreeApplied
Flag indicating whether or not a polynomial.
void computeStateVector(double et, int target, int observer, const QString &refFrame, const QString &abcorr, double state[6], bool &hasVelocity, double &lightTime) const
Computes the state vector of the target w.r.t observer.
Class for storing Table blobs information.
Definition: Table.h:74
NumericalApproximation * p_yhermite
Hermite spline for y coordinate if Source == HermiteCache.
double GetTimeScale()
Return the time scale for the position.
std::vector< double > VelocityPartial(SpicePosition::PartialType partialVar, int coeffIndex)
Compute the derivative of the velocity with respect to the specified variable.
Obtain SPICE position information for a body.
const std::vector< double > & Velocity()
Return the current J2000 velocity.
Table LineCache(const QString &tableName)
Return a table with J2000 to reference positions.
void setLightTime(const double &lightTime)
Inheritors can set the light time if indicated.
double GetBaseTime()
Return the base time for the position.
Table LoadHermiteCache(const QString &tableName)
Cache J2000 position over existing cached time range using polynomials stored as Hermite cubic spline...
const std::vector< double > & SetEphemerisTime(double et)
Return J2000 coordinate at given time.
double m_lt
!&lt; Swap traditional order
std::vector< std::vector< double > > p_cacheVelocity
Cached velocities.
std::vector< double > HermiteCoordinate()
This method returns the Hermite coordinate for the current time for PolyFunctionOverHermiteConstant f...
SpicePosition(int targetCode, int observerCode)
Construct an empty SpicePosition class using valid body codes.
Object is reading directly from the kernels.
std::vector< double > p_cacheTime
iTime for corresponding position
double p_overrideTimeScale
Value set by caller to override computed time scale.
virtual void SetEphemerisTimeSpice()
This is a protected method that is called by SetEphemerisTime() when Source type is Spice...
double getAdjustedEphemerisTime() const
Returns adjusted ephemeris time.
double EphemerisTime() const
Return the current ephemeris time.
void GetPolynomial(std::vector< double > &XC, std::vector< double > &YC, std::vector< double > &ZC)
Return the coefficients of a polynomial fit to each of the three coordinates of the position for the ...
std::vector< std::vector< double > > p_cache
Cached positions.
Source
This enum indicates the status of the object.
void SetPolynomial(const Source type=PolyFunction)
Set the coefficients of a polynomial fit to each of the components (X, Y, Z) of the position vector f...

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:29:41