1 #ifndef SpicePosition_h
2 #define SpicePosition_h
36 class NumericalApproximation;
208 enum PartialType {WRT_X, WRT_Y, WRT_Z};
223 const std::vector<double> &
Velocity();
230 void LoadCache(
double startTime,
double endTime,
int size);
250 const std::vector<double>& YC,
251 const std::vector<double>& ZC,
255 std::vector<double>& YC,
256 std::vector<double>& ZC);
282 std::vector<double>
CoordinatePartial(SpicePosition::PartialType partialVar,
int coeffIndex);
284 std::vector<double>
VelocityPartial(SpicePosition::PartialType partialVar,
int coeffIndex);
285 enum OverrideType {NoOverrides, ScaleOnly, BaseAndScale};
296 std::vector<int>
HermiteIndices(
double tol, std::vector <int> indexList);
300 SpicePosition(
int targetCode,
int observerCode,
bool swapObserverTarget);
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);
314 void init(
int targetCode,
int observerCode,
315 const bool &swapObserverTarget =
false);
359 bool m_swapObserverTarget;
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.
Object is reading from splined.
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.
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
!< 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...