Isis 3.0
Home
SpiceRotation.h
Go to the documentation of this file.
1 #ifndef SpiceRotation_h
2 #define SpiceRotation_h
3 
25 #include <string>
26 #include <vector>
27 
28 //#include <SpiceUsr.h>
29 //#include <SpiceZfc.h>
30 //#include <SpiceZmc.h>
31 
32 #include "Angle.h"
33 #include "Table.h"
34 #include "PolynomialUnivariate.h"
35 #include "Quaternion.h"
36 
37 #define J2000Code 1
38 
39 namespace Isis {
215  public:
216  // Constructors
217  SpiceRotation(int frameCode);
218  /* SpiceRotation( int NaifCode );
219  We would like to call refchg instead to avoid the strings. Currently Naif does
220  not have refchg_c, but only the f2c'd refchg.c.*/
221  SpiceRotation(int frameCode, int targetCode);
222  SpiceRotation(const SpiceRotation &rotToCopy);
223 
224  // Destructor
225  virtual ~SpiceRotation();
226 
227  // Change the frame (has no effect if cached)
228  void SetFrame(int frameCode);
229  int Frame();
230 
231  void SetTimeBias(double timeBias);
232 
249  enum Source {
256  };
257 
262  enum PartialType {
266  };
267 
272  Yes,
274  No
275  };
276 
280  enum FrameType {
281  UNKNOWN = 0,
282  INERTL = 1,
283  PCK = 2,
284  CK = 3,
285  TK = 4,
286  DYN = 5,
287  BPC = 6,
289  };
290 
291  void SetEphemerisTime(double et);
292  double EphemerisTime() const;
293 
294  std::vector<double> GetCenterAngles();
295 
296  std::vector<double> Matrix();
297  std::vector<double> AngularVelocity();
298 
299  // TC
300  std::vector<double> ConstantRotation();
301  std::vector<double> &ConstantMatrix();
302  void SetConstantMatrix(std::vector<double> constantMatrix);
303 
304  // CJ
305  std::vector<double> TimeBasedRotation();
306  std::vector<double> &TimeBasedMatrix();
307  void SetTimeBasedMatrix(std::vector<double> timeBasedMatrix);
308 
309  std::vector<double> J2000Vector(const std::vector<double> &rVec);
310 
311  std::vector<Angle> poleRaCoefs();
312 
313  std::vector<Angle> poleDecCoefs();
314 
315  std::vector<Angle> pmCoefs();
316 
317  std::vector<double> poleRaNutPrecCoefs();
318 
319  std::vector<double> poleDecNutPrecCoefs();
320 
321  std::vector<double> pmNutPrecCoefs();
322 
323  std::vector<Angle> sysNutPrecConstants();
324 
325  std::vector<Angle> sysNutPrecCoefs();
326 
327  std::vector<double> ReferenceVector(const std::vector<double> &jVec);
328 
329  std::vector<double> EvaluatePolyFunction();
330 
331  void loadPCFromSpice(int CenterBodyCode);
332  void loadPCFromTable(const PvlObject &Label);
333 
334  void MinimizeCache(DownsizeStatus status);
335 
336  void LoadCache(double startTime, double endTime, int size);
337 
338  void LoadCache(double time);
339 
340  void LoadCache(Table &table);
341 
342  Table LineCache(const QString &tableName);
343 
344  void ReloadCache();
345 
346  Table Cache(const QString &tableName);
347  void CacheLabel(Table &table);
348 
349  void LoadTimeCache();
350 
351  std::vector<double> Angles(int axis3, int axis2, int axis1);
352  void SetAngles(std::vector<double> angles, int axis3, int axis2, int axis1);
353 
354  bool IsCached() const;
355 
356  void SetPolynomial(const Source type=PolyFunction);
357 
358  void SetPolynomial(const std::vector<double> &abcAng1,
359  const std::vector<double> &abcAng2,
360  const std::vector<double> &abcAng3,
361  const Source type = PolyFunction);
362 
363  void usePckPolynomial();
364  void setPckPolynomial(const std::vector<Angle> &raCoeff,
365  const std::vector<Angle> &decCoeff,
366  const std::vector<Angle> &pmCoeff);
367 
368  void GetPolynomial(std::vector<double> &abcAng1,
369  std::vector<double> &abcAng2,
370  std::vector<double> &abcAng3);
371 
372  void getPckPolynomial(std::vector<Angle> &raCoeff,
373  std::vector<Angle> &decCoeff,
374  std::vector<Angle> &pmCoeff);
375 
376  // Set the polynomial degree
377  void SetPolynomialDegree(int degree);
378  Source GetSource();
379  void SetSource(Source source);
380  void ComputeBaseTime();
382  double GetBaseTime();
383  double GetTimeScale();
384 
385  void SetOverrideBaseTime(double baseTime, double timeScale);
386 
387  // Derivative methods
388  double DPolynomial(const int coeffIndex);
389  double DPckPolynomial(PartialType partialVar, const int coeffIndex);
390 
391  std::vector<double> toJ2000Partial(const std::vector<double> &lookT,
392  PartialType partialVar, int coeffIndex);
393  std::vector<double> ToReferencePartial(std::vector<double> &lookJ,
394  PartialType partialVar, int coeffIndex);
395  void DCJdt(std::vector<double> &dRJ);
396 
397  double WrapAngle(double compareAngle, double angle);
398  void SetAxes(int axis1, int axis2, int axis3);
399  std::vector<double> GetFullCacheTime();
400  void FrameTrace(double et);
401 
402  // Return the frame chain for the constant part of the rotation (ends in target)
403  std::vector<int> ConstantFrameChain();
404  std::vector<int> TimeFrameChain();
405  void InitConstantRotation(double et);
406  bool HasAngularVelocity();
407 
408  void ComputeAv();
409  std::vector<double> Extrapolate(double timeEt);
410 
411  void checkForBinaryPck();
412 
413  protected:
414  void SetFullCacheParameters(double startTime, double endTime, int cacheSize);
416  void setEphemerisTimeNadir();
417  void setEphemerisTimeSpice();
421  std::vector<double> p_cacheTime;
422  std::vector<std::vector<double> > p_cache;
427  int p_degree;
428  int p_axis1;
429  int p_axis2;
430  int p_axis3;
431 
432  private:
433  // method
434  void setFrameType();
435  std::vector<int> p_constantFrames;
438  std::vector<int> p_timeFrames;
441  double p_timeBias;
442 
443  double p_et;
444  Quaternion p_quaternion;
447  bool p_matrixSet;
448  bool m_tOrientationAvailable;
449 
450 
451  FrameType m_frameType;
452  Source p_source;
453  int p_axisP;
455  int p_axisV;
457  int p_targetCode;
458 
459  double p_baseTime;
460  double p_timeScale;
461  bool p_degreeApplied;
464  std::vector<double> p_coefficients[3];
466  bool p_noOverride;
467  double p_overrideBaseTime;
468  double p_overrideTimeScale;
469  DownsizeStatus p_minimizeCache;
470  double p_fullCacheStartTime;
471  double p_fullCacheEndTime;
472  int p_fullCacheSize;
473  std::vector<double> p_TC;
476  std::vector<double> p_CJ;
478  std::vector<std::vector<double> > p_cacheAv;
480  std::vector<double> p_av;
481  bool p_hasAngularVelocity;
483  std::vector<double> StateTJ();
485  // The remaining items are only used for PCK frame types. In this case the
486  // rotation is stored as a cache, but the coefficients are available for display
487  // or comparison, and the first three coefficient sets can be solved for and
488  // updated in jigsaw. The initial coefficient values are read from a Naif PCK.
489  //
490  // The general equation for the right ascension of the pole is
491  //
492  // raPole = raPole[0] + raPole[1]*Time + raPole[2]*Time**2 + raNutPrec,
493  // where
494  // raNutPrec = raNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
495  // raNutPrec1[1]*sin(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
496  // raNutPrec1[N-1]*sin(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
497  // (optional for multiples of nutation precession angles)
498  // raNutPrec2[0]*sin(2*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
499  // raNutPrec2[1]*sin(2*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
500  // raNutPrec2[N-1]*sin(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
501  // raNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
502  // raNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
503  // raNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
504  //
505  // The general equation for the declination of the pole is
506  //
507  // decPole = p_decPole[0] + p_decPole[1]*Time + p_decPole[2]*Time**2 + decNutPrec,
508  // where
509  // decNutPrec = decNutPrec1[0]*cos(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
510  // decNutPrec1[1]*cos(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
511  // decNutPrec1[N-1]*cos(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
512  // decNutPrec2[0]*cos(2*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
513  // decNutPrec2[1]*cos(2*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
514  // decNutPrec2[N-1]*cos(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
515  // (optional for multiples of nutation precession angles)
516  // decNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
517  // decNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
518  // decNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time))
519  //
520  // and Time is julian centuries since J2000.
521  //
522  // The general equation for the prime meridian rotation is
523  //
524  // pm = p_pm[0] + p_pm[1]*Dtime + p_pm[2]*Dtime**2 + pmNutPrec,
525  // where
526  // pmNutPrec = pmNutPrec1[0]*sin(sysNutPrec[0][0] + sysNutPrec[0][1]*Time) +
527  // pmNutPrec1[1]*sin(sysNutPrec[1][0] + sysNutPrec[1][1]*Time) + ...
528  // pmNutPrec1[N-1]*sin(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time) +
529  // (optional for multiples of nutation precession angles)
530  // pmNutPrec2[0]*sin(2*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
531  // pmNutPrec2[1]*sin(2*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
532  // pmNutPrec2[N-1]*sin(2*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time)) +
533  // pmNutPrecM[0]*sin(M*(sysNutPrec[0][0] + sysNutPrec[0][1]*Time)) +
534  // pmNutPrecM[1]*sin(M*(sysNutPrec[1][0] + sysNutPrec[1][1]*Time)) + ...
535  // pmNutPrecM[N-1]*sin(M*(sysNutPrec[N-1][0] + sysNutPrec[N-1][1]*Time))
536  //
537  // Time is interval in Julian centuries since the standard epoch,
538  // dTime is interval in days from the standard epoch (J2000),
539  //
540  // N is the number of nutation/precession terms for the planetary system of the target
541  // body, (possibly including multiple angles as unique terms,
542  // ie. 2*sysNutPrec[0][0] + sysNutPrec[][1]*Time).
543  //
544  // Many of the constants in this equation are 0. for a given body.
545  //
546  // M is included as an option for future improvements. M = highest multiple (period)
547  // of any of the nutation/precession angles included in the equations.
548  //
549  // ***NOTE*** Currently Naif stores multiples (amplitudes) as if they were additional
550  // nutation/precession terms (periods) in the equation. This method works as
551  // long as jigsaw does not solve for those values. In order to solve for
552  // those values, the multiples will need to be known so that the partial
553  // derivatives can be correctly calculated. Some possible ways of doing this
554  // are 1) Convince Naif to change their data format indicating the relation
555  // 2) Make an Isis version of the PCK data and have Isis software to
556  // calculate the rotation and partials.
557  // 3) Have an Isis addendum file that identifies the repeated periods
558  // and software to apply them when calculating the rotation and partials.
559  //
560  // For now this software will handle any terms with the same period and different
561  // amplitudes as unique terms in the equation (raNutPrec, decNutPrec,
562  // and pmNutPrec).
563  //
564  // The next three vectors will have length 3 (for a quadratic polynomial) if used.
565  std::vector<Angle>m_raPole;
566  std::vector<Angle>m_decPole;
567  std::vector<Angle>m_pm ;
568  //
569  // Currently multiples (terms with periods matching other terms but varying amplitudes)
570  // are handled as additional terms added to the end of the vector as Naif does (see
571  // comments in any of the standard Naif PCK.
572  std::vector<double>m_raNutPrec;
573  std::vector<double>m_decNutPrec;
574  std::vector<double>m_pmNutPrec;
575 
576  // The periods of bodies in the same system are modeled with a linear equation
577  std::vector<Angle>m_sysNutPrec0;
578  std::vector<Angle>m_sysNutPrec1;
579 
580  // The following scalars are used in the IAU equations to convert p_et to the appropriate time
581  // units for calculating target body ra, dec, and w. These need to be initialized in every
582  // constructor.
584  static const double m_centScale;
586  static const double m_dayScale;
587  };
588 };
589 
590 #endif
591 
Table Cache(const QString &tableName)
Return a table with J2000 to reference rotations.
Definition: SpiceRotation.cpp:710
Isis specific code for binary pck.
Definition: SpiceRotation.h:287
Provide operations for quaternion arithmetic.
Definition: Quaternion.h:52
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...
Definition: SpiceRotation.cpp:1926
void MinimizeCache(DownsizeStatus status)
Set the downsize status to minimize cache.
Definition: SpiceRotation.cpp:308
std::vector< double > EvaluatePolyFunction()
Evaluate the polynomial fit function for the three pointing angles for the current ephemeris time...
Definition: SpiceRotation.cpp:3220
double DPckPolynomial(PartialType partialVar, const int coeffIndex)
Evaluate the derivative of the fit polynomial defined by the given coefficients with respect to the c...
Definition: SpiceRotation.cpp:1982
std::vector< double > p_cacheTime
iTime for corresponding rotation
Definition: SpiceRotation.h:421
double EphemerisTime() const
Accessor method to get current ephemeris time.
Definition: SpiceRotation.cpp:288
std::vector< double > Matrix()
Return the full rotation TJ as a matrix.
Definition: SpiceRotation.cpp:2655
void SetPolynomialDegree(int degree)
Set the degree of the polynomials to be fit to the three camera angles for the time period covered by...
Definition: SpiceRotation.cpp:2152
int p_axis3
Axis of rotation for angle 3 of rotation.
Definition: SpiceRotation.h:430
void GetPolynomial(std::vector< double > &abcAng1, std::vector< double > &abcAng2, std::vector< double > &abcAng3)
Return the coefficients of a polynomial fit to each of the three camera angles for the time period co...
Definition: SpiceRotation.cpp:1867
void loadPCFromTable(const PvlObject &Label)
Initialize planetary orientation constants from an cube body rotation label.
Definition: SpiceRotation.cpp:934
void SetAxes(int axis1, int axis2, int axis3)
Set the axes of rotation for decomposition of a rotation matrix into 3 angles.
Definition: SpiceRotation.cpp:2259
int p_degree
Degree of fit polynomial for angles.
Definition: SpiceRotation.h:427
void LoadCache(double startTime, double endTime, int size)
Cache J2000 rotation quaternion over a time range.
Definition: SpiceRotation.cpp:331
void setEphemerisTimePolyFunction()
When setting the ephemeris time, updates the rotation according to a polynomial that defines the thre...
Definition: SpiceRotation.cpp:3254
int p_axis1
Axis of rotation for angle 1 of rotation.
Definition: SpiceRotation.h:428
void SetConstantMatrix(std::vector< double > constantMatrix)
Set the constant 3x3 rotation TC matrix from a vector of length 9.
Definition: SpiceRotation.cpp:2695
void usePckPolynomial()
Set the coefficients of a polynomial fit to each of the three planet angles for the time period cover...
Definition: SpiceRotation.cpp:1764
void SetEphemerisTime(double et)
Return the J2000 to reference frame quaternion at given time.
Definition: SpiceRotation.cpp:242
From cached table.
Definition: SpiceRotation.h:252
std::vector< double > AngularVelocity()
Accessor method to get the angular velocity.
Definition: SpiceRotation.cpp:1181
void LoadTimeCache()
Load the time cache.
Definition: SpiceRotation.cpp:2281
bool IsCached() const
Checks if the cache is empty.
Definition: SpiceRotation.cpp:298
int Frame()
Accessor method that returns the frame code.
Definition: SpiceRotation.cpp:207
void getPckPolynomial(std::vector< Angle > &raCoeff, std::vector< Angle > &decCoeff, std::vector< Angle > &pmCoeff)
Return the coefficients of a polynomial fit to each of the three planet angles.
Definition: SpiceRotation.cpp:1889
std::vector< double > GetCenterAngles()
Return the camera angles at the center time of the observation.
Definition: SpiceRotation.cpp:1121
std::vector< double > TimeBasedRotation()
Return time-based 3x3 rotation CJ matrix as a quaternion.
Definition: SpiceRotation.cpp:2705
void setPckPolynomial(const std::vector< Angle > &raCoeff, const std::vector< Angle > &decCoeff, const std::vector< Angle > &pmCoeff)
Set the coefficients of a polynomial fit to each of the three planet angles for the time period cover...
Definition: SpiceRotation.cpp:1844
double WrapAngle(double compareAngle, double angle)
Wrap the input angle to keep it within 2pi radians of the angle to compare.
Definition: SpiceRotation.cpp:2124
std::vector< double > & TimeBasedMatrix()
Return time-based 3x3 rotation CJ matrix as a vector of length 9.
Definition: SpiceRotation.cpp:2720
std::vector< Angle > poleRaCoefs()
Return the coefficients used to calculate the target body pole ra.
Definition: SpiceRotation.cpp:1275
SpiceRotation(int frameCode)
Construct an empty SpiceRotation class using a valid Naif frame code to set up for getting rotation f...
Definition: SpiceRotation.cpp:51
Isis specific code for unknown frame type.
Definition: SpiceRotation.h:281
int p_axis2
Axis of rotation for angle 2 of rotation.
Definition: SpiceRotation.h:429
std::vector< double > Extrapolate(double timeEt)
Extrapolate pointing for a given time assuming a constant angular velocity.
Definition: SpiceRotation.cpp:2926
PCK frame not referenced to J2000.
Definition: SpiceRotation.h:288
FrameType
Enumeration for the frame type of the rotation.
Definition: SpiceRotation.h:280
void SetFrame(int frameCode)
Change the frame to the given frame code.
Definition: SpiceRotation.cpp:196
void loadPCFromSpice(int CenterBodyCode)
Initialize planetary orientation constants from Spice PCK.
Definition: SpiceRotation.cpp:822
DownsizeStatus
Status of downsizing the cache.
Definition: SpiceRotation.h:271
double GetBaseTime()
Accessor method to get the rotation base time.
Definition: SpiceRotation.cpp:2232
std::vector< double > poleDecNutPrecCoefs()
Return the coefficients used to calculate the target body pole dec nut/prec coefficients.
Definition: SpiceRotation.cpp:1349
void checkForBinaryPck()
Check loaded pck to see if any are binary and set frame type to indicate binary pck.
Definition: SpiceRotation.cpp:2968
void CacheLabel(Table &table)
Add labels to a SpiceRotation table.
Definition: SpiceRotation.cpp:1013
std::vector< double > Angles(int axis3, int axis2, int axis1)
Return the camera angles (right ascension, declination, and twist) for the time-based matrix CJ...
Definition: SpiceRotation.cpp:1140
std::vector< double > ReferenceVector(const std::vector< double > &jVec)
Given a direction vector in J2000, return a reference frame direction.
Definition: SpiceRotation.cpp:1517
void SetTimeBias(double timeBias)
Apply a time bias when invoking SetEphemerisTime method.
Definition: SpiceRotation.cpp:224
std::vector< double > GetFullCacheTime()
Return full listing (cache) of original time coverage requested.
Definition: SpiceRotation.cpp:2498
std::vector< int > TimeFrameChain()
Accessor method to get the frame chain for the rotation (begins in J2000).
Definition: SpiceRotation.cpp:1202
With respect to Twist or Prime Meridian Rotation.
Definition: SpiceRotation.h:265
See Naif Frames.req document for.
Definition: SpiceRotation.h:282
void SetTimeBasedMatrix(std::vector< double > timeBasedMatrix)
Set the time-based 3x3 rotation CJ matrix from a vector of length 9.
Definition: SpiceRotation.cpp:2730
std::vector< std::vector< double > > p_cache
Cached rotations, stored as rotation matrix from J2000 to 1st constant frame (CJ) or coefficients of ...
Definition: SpiceRotation.h:422
void SetFullCacheParameters(double startTime, double endTime, int cacheSize)
Set the full cache time parameters.
Definition: SpiceRotation.cpp:2953
Do not downsize the cache.
Definition: SpiceRotation.h:274
void setEphemerisTimePolyFunctionOverSpice()
When setting the ephemeris time, updates the rotation state based on a polynomial fit over spice kern...
Definition: SpiceRotation.cpp:3299
Kernels plus nth degree polynomial.
Definition: SpiceRotation.h:254
std::vector< Angle > sysNutPrecConstants()
Return the constants used to calculate the target body system nut/prec angles.
Definition: SpiceRotation.cpp:1383
Source
The rotation can come from one of 3 places for an Isis cube.
Definition: SpiceRotation.h:249
FrameType getFrameType()
Accessor method to get the rotation frame type.
Definition: SpiceRotation.cpp:2201
std::vector< Angle > pmCoefs()
Return the coefficients used to calculate the target body prime meridian.
Definition: SpiceRotation.cpp:1314
void FrameTrace(double et)
Compute frame trace chain from target frame to J2000.
Definition: SpiceRotation.cpp:2530
Obtain SPICE rotation information for a body.
Definition: SpiceRotation.h:214
Definition: SpiceRotation.h:285
With respect to Declination.
Definition: SpiceRotation.h:264
PartialType
This enumeration indicates whether the partial derivative is taken with respect to Right Ascension...
Definition: SpiceRotation.h:262
std::vector< int > ConstantFrameChain()
Accessor method to get the frame chain for the constant part of the rotation (ends in target) ...
Definition: SpiceRotation.cpp:1192
Definition: SpiceRotation.h:284
std::vector< double > pmNutPrecCoefs()
Return the coefficients used to calculate the target body pm nut/prec coefficients.
Definition: SpiceRotation.cpp:1366
void ComputeBaseTime()
Compute the base time using cached times.
Definition: SpiceRotation.cpp:1903
void setEphemerisTimeNadir()
When setting the ephemeris time, uses spacecraft nadir source to update the rotation state...
Definition: SpiceRotation.cpp:3122
void InitConstantRotation(double et)
Initialize the constant rotation.
Definition: SpiceRotation.cpp:2741
double DPolynomial(const int coeffIndex)
Evaluate the derivative of the fit polynomial defined by the given coefficients with respect to the c...
Definition: SpiceRotation.cpp:1947
void ReloadCache()
Cache J2000 rotation over existing cached time range using polynomials.
Definition: SpiceRotation.cpp:594
void ComputeAv()
Compute the angular velocity from the time-based functions fit to the pointing angles This method com...
Definition: SpiceRotation.cpp:2772
Directly from the kernels.
Definition: SpiceRotation.h:250
void DCJdt(std::vector< double > &dRJ)
Compute the derivative of the 3x3 rotation matrix CJ with respect to time.
Definition: SpiceRotation.cpp:2817
void SetSource(Source source)
Resets the source of the rotation to the given value.
Definition: SpiceRotation.cpp:2221
Downsize the cache.
Definition: SpiceRotation.h:272
Nadir pointing.
Definition: SpiceRotation.h:251
std::vector< double > toJ2000Partial(const std::vector< double > &lookT, PartialType partialVar, int coeffIndex)
Given a direction vector in the reference frame, compute the derivative with respect to one of the co...
Definition: SpiceRotation.cpp:1425
Class for storing Table blobs information.
Definition: Table.h:74
std::vector< double > J2000Vector(const std::vector< double > &rVec)
Given a direction vector in the reference frame, return a J2000 direction.
Definition: SpiceRotation.cpp:1224
Cache is downsized.
Definition: SpiceRotation.h:273
std::vector< Angle > sysNutPrecCoefs()
Return the coefficients used to calculate the target body system nut/prec angles. ...
Definition: SpiceRotation.cpp:1401
From nth degree polynomial.
Definition: SpiceRotation.h:253
std::vector< double > & ConstantMatrix()
Return the constant 3x3 rotation TC matrix as a vector of length 9.
Definition: SpiceRotation.cpp:2685
Definition: SpiceRotation.h:286
void setEphemerisTimeSpice()
When setting the ephemeris time, updates the rotation state based on data read directly from NAIF ker...
Definition: SpiceRotation.cpp:3161
std::vector< Angle > poleDecCoefs()
Return the coefficients used to calculate the target body pole dec.
Definition: SpiceRotation.cpp:1295
double GetTimeScale()
Accessor method to get the rotation time scale.
Definition: SpiceRotation.cpp:2242
std::vector< double > poleRaNutPrecCoefs()
Return the coefficients used to calculate the target body pole ra nut/prec coefficients.
Definition: SpiceRotation.cpp:1332
void setEphemerisTimeMemcache()
Updates rotation state based on the rotation cache.
Definition: SpiceRotation.cpp:3056
void setEphemerisTimePckPolyFunction()
When setting the ephemeris time, updates the rotation state based on the PcK polynomial.
Definition: SpiceRotation.cpp:3345
void SetPolynomial(const Source type=PolyFunction)
Set the coefficients of a polynomial fit to each of the three camera angles for the time period cover...
Definition: SpiceRotation.cpp:1556
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:74
definitions
Definition: SpiceRotation.h:283
bool HasAngularVelocity()
Checks whether the rotation has angular velocities.
Definition: SpiceRotation.cpp:1212
void SetAngles(std::vector< double > angles, int axis3, int axis2, int axis1)
Set the rotation angles (phi, delta, and w) for the current time to define the time-based matrix CJ...
Definition: SpiceRotation.cpp:1167
Table LineCache(const QString &tableName)
Return a table with J2000 to reference rotations.
Definition: SpiceRotation.cpp:674
std::vector< double > ConstantRotation()
Return the constant 3x3 rotation TC matrix as a quaternion.
Definition: SpiceRotation.cpp:2670
Quadratic polynomial function with linear trignometric terms.
Definition: SpiceRotation.h:255
virtual ~SpiceRotation()
Destructor for SpiceRotation object.
Definition: SpiceRotation.cpp:186
Source GetSource()
Accessor method to get the rotation source.
Definition: SpiceRotation.cpp:2211
std::vector< double > ToReferencePartial(std::vector< double > &lookJ, PartialType partialVar, int coeffIndex)
Compute the derivative with respect to one of the coefficients in the angle polynomial fit equation o...
Definition: SpiceRotation.cpp:2042
With respect to Right Ascension.
Definition: SpiceRotation.h:263