Isis 3 Programmer Reference
Spice.h
1#ifndef Spice_h
2#define Spice_h
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include <string>
11#include <vector>
12
13#include <SpiceUsr.h>
14#include <SpiceZfc.h>
15#include <SpiceZmc.h>
16
17#include "Pvl.h"
18#include "ShapeModel.h"
19#include "SpicePosition.h"
20#include "SpiceRotation.h"
21
22namespace Isis {
23 class Cube;
24 class iTime;
25 class Distance;
26 class EllipsoidShape;
27 class Longitude;
28 class Target;
29
283 class Spice {
284 public:
285 // constructors
286 Spice(Cube &cube);
287 Spice(Pvl &lab, nlohmann::json);
288
289 // destructor
290 virtual ~Spice();
291
292 // Methods
293 virtual void setTime(const iTime &time);
294 void instrumentPosition(double p[3]) const;
295 virtual void instrumentBodyFixedPosition(double p[3]) const;
296 virtual void sunPosition(double p[3]) const;
297 virtual double targetCenterDistance() const;
298 virtual double sunToBodyDist() const;
299
300 virtual Longitude solarLongitude();
301 virtual void instrumentBodyFixedVelocity(double v[3]) const;
302 virtual iTime time() const;
303
304 void radii(Distance r[3]) const;
305
306 virtual void createCache(iTime startTime, iTime endTime,
307 const int size, double tol);
308 virtual iTime cacheStartTime() const;
309 virtual iTime cacheEndTime() const;
310
311 virtual void subSpacecraftPoint(double &lat, double &lon);
312 virtual void subSolarPoint(double &lat, double &lon);
313
314 virtual Target *target() const;
315 QString targetName() const;
316
317 virtual iTime getClockTime(QString clockValue,
318 int sclkCode = -1,
319 bool clockTicks=false);
320 SpiceDouble getDouble(const QString &key, int index = 0);
321 SpiceInt getInteger(const QString &key, int index = 0);
322 QString getString(const QString &key, int index = 0);
323
324 virtual SpicePosition *sunPosition() const;
325 virtual SpicePosition *instrumentPosition() const;
326 virtual SpiceRotation *bodyRotation() const;
327 virtual SpiceRotation *instrumentRotation() const;
328
329 bool isUsingAle();
330 bool hasKernels(Pvl &lab);
331 bool isTimeSet();
332
333 SpiceInt naifBodyCode() const;
334 SpiceInt naifSpkCode() const;
335 SpiceInt naifCkCode() const;
336 SpiceInt naifIkCode() const;
337 SpiceInt naifSclkCode() const;
338 SpiceInt naifBodyFrameCode() const;
339
341 virtual double resolution();
342
343 protected:
354
355 QVariant readValue(QString key, SpiceValueType type, int index = 0);
356
357 void storeResult(QString name, SpiceValueType type, QVariant value);
358 QVariant getStoredResult(QString name, SpiceValueType type);
359
360 void storeValue(QString key, int index, SpiceValueType type,
361 QVariant value);
362 QVariant readStoredValue(QString key, SpiceValueType type, int index);
363 virtual void computeSolarLongitude(iTime et);
364
365 // Leave these protected so that inheriting classes don't
366 // have to convert between double and spicedouble
367 // None of the below data elements are usable (except
368 // m_radii) until SetEphemerisTime is invoked
369 SpiceDouble m_uB[3];
374 SpiceDouble m_BJ[3][3];
384
385 private:
386 // Don't allow copies
387 Spice(const Spice &other);
388 Spice &operator=(const Spice &other);
389
390 void init(Pvl &pvl, bool noTables, nlohmann::json isd = NULL);
391 void csmInit(Cube &cube, Pvl label);
392 void defaultInit();
393
394 void load(PvlKeyword &key, bool notab);
395
396 QVector<QString> * m_kernels;
397
398 // cache stuff
401 SpiceDouble *m_cacheSize;
402
403 SpiceDouble *m_startTimePadding;
404 SpiceDouble *m_endTimePadding;
405
410
412
413 // Constants
414 // SpiceInt *m_bodyCode; /**< The NaifBodyCode value, if it exists in the
415 // labels. Otherwise, if the target is sky,
416 // it's the SPK code and if not sky then it's
417 // calculated by the naifBodyCode() method.*/
418 SpiceInt *m_spkCode;
419 SpiceInt *m_ckCode;
420 SpiceInt *m_ikCode;
421 SpiceInt *m_sclkCode;
422 SpiceInt *m_spkBodyCode;
423 SpiceInt *m_bodyFrameCode;
428
435 };
436}
437
438#endif
IO Handler for Isis Cubes.
Definition Cube.h:168
Distance measurement, usually in meters.
Definition Distance.h:34
This class is designed to encapsulate the concept of a Longitude.
Definition Longitude.h:40
Container for cube-like labels.
Definition Pvl.h:119
A single keyword-value pair.
Definition PvlKeyword.h:87
Contains Pvl Groups and Pvl Objects.
Definition PvlObject.h:61
Obtain SPICE information for a spacecraft.
Definition Spice.h:283
virtual void setTime(const iTime &time)
Sets the ephemeris time and reads the spacecraft and sun position from the kernels at that instant in...
Definition Spice.cpp:787
SpiceDouble m_BJ[3][3]
This contains the transformation matrix from J2000 (J) to Body fixed (B).
Definition Spice.h:374
QString getString(const QString &key, int index=0)
This returns a value from the NAIF text pool.
Definition Spice.cpp:1273
virtual iTime getClockTime(QString clockValue, int sclkCode=-1, bool clockTicks=false)
This converts the spacecraft clock ticks value (clockValue) to an iTime.
Definition Spice.cpp:1060
SpiceDouble * m_startTimePadding
Kernels pvl group StartPadding keyword value.
Definition Spice.h:403
Target * m_target
Target of the observation.
Definition Spice.h:381
bool m_usingNaif
Indicates whether we are reading values from the NaifKeywords PvlObject in cube.
Definition Spice.h:429
QVariant readValue(QString key, SpiceValueType type, int index=0)
This should be used for reading ALL text naif kernel values.
Definition Spice.cpp:1100
Longitude * m_solarLongitude
Body rotation solar longitude value.
Definition Spice.h:383
bool m_usingAle
Indicate whether we are reading values from an ISD returned from ALE.
Definition Spice.h:432
virtual Longitude solarLongitude()
Returns the solar longitude.
Definition Spice.cpp:1521
Spice(Cube &cube)
Constructs a Spice object and loads SPICE kernels using information from the label object.
Definition Spice.cpp:64
SpiceInt * m_ikCode
Instrument kernel (IK) code.
Definition Spice.h:420
virtual void instrumentBodyFixedVelocity(double v[3]) const
Returns the spacecraft velocity in body-fixed frame km/sec units.
Definition Spice.cpp:860
SpiceRotation * m_instrumentRotation
Instrument spice rotation.
Definition Spice.h:407
SpiceInt * m_sclkCode
Spacecraft clock correlation kernel (SCLK) code.
Definition Spice.h:421
void csmInit(Cube &cube, Pvl label)
Initialize the Spice object for a CSMCamera.
Definition Spice.cpp:97
virtual void computeSolarLongitude(iTime et)
Computes the solar longitude for the given ephemeris time.
Definition Spice.cpp:1412
SpicePosition * m_instrumentPosition
Instrument spice position.
Definition Spice.h:406
bool m_allowDownsizing
Indicates whether to allow downsizing.
Definition Spice.h:411
SpiceDouble * m_endTimePadding
Kernels pvl group EndPadding keyword value.
Definition Spice.h:404
SpicePosition * m_sunPosition
Sun spice position.
Definition Spice.h:408
SpiceInt * m_bodyFrameCode
Naif's BODY_FRAME_CODE value.
Definition Spice.h:423
virtual SpiceRotation * bodyRotation() const
Accessor method for the body rotation.
Definition Spice.cpp:1623
virtual double targetCenterDistance() const
Calculates and returns the distance from the spacecraft to the target center.
Definition Spice.cpp:925
virtual void subSolarPoint(double &lat, double &lon)
Returns the sub-solar latitude/longitude in universal coordinates (0-360 positive east,...
Definition Spice.cpp:1341
virtual void createCache(iTime startTime, iTime endTime, const int size, double tol)
This method creates an internal cache of spacecraft and sun positions over a specified time range.
Definition Spice.cpp:649
virtual iTime cacheEndTime() const
Accessor method for the cache end time.
Definition Spice.cpp:765
virtual ~Spice()
Destroys the Spice object.
Definition Spice.cpp:511
void radii(Distance r[3]) const
Returns the radii of the body in km.
Definition Spice.cpp:937
SpiceValueType
NAIF value primitive type.
Definition Spice.h:348
@ SpiceByteCodeType
SpiceByteCode type.
Definition Spice.h:352
@ SpiceIntType
SpiceInt type.
Definition Spice.h:351
@ SpiceStringType
SpiceString type.
Definition Spice.h:350
@ SpiceDoubleType
SpiceDouble type.
Definition Spice.h:349
PvlObject * m_naifKeywords
NaifKeywords PvlObject from cube.
Definition Spice.h:427
void init(Pvl &pvl, bool noTables, nlohmann::json isd=NULL)
Initialization of Spice object.
Definition Spice.cpp:154
SpiceInt naifBodyCode() const
This returns the NAIF body code of the target indicated in the labels.
Definition Spice.cpp:948
SpiceInt naifSpkCode() const
This returns the NAIF SPK code to use when reading from SPK kernels.
Definition Spice.cpp:957
virtual void instrumentBodyFixedPosition(double p[3]) const
Returns the spacecraft position in body-fixed frame km units.
Definition Spice.cpp:842
PvlObject getStoredNaifKeywords() const
This returns the PvlObject that stores all of the requested Naif data and can be a replacement for fu...
Definition Spice.cpp:1005
SpiceInt naifCkCode() const
This returns the NAIF CK code to use when reading from CK kernels.
Definition Spice.cpp:966
virtual Target * target() const
Returns a pointer to the target object.
Definition Spice.cpp:1380
SpiceInt * m_spkBodyCode
Spacecraft and planet ephemeris kernel (SPK) body code.
Definition Spice.h:422
virtual iTime time() const
Returns the ephemeris time in seconds which was used to obtain the spacecraft and sun positions.
Definition Spice.cpp:891
SpiceInt * m_ckCode
Camera kernel (CK) code.
Definition Spice.h:419
SpiceInt * m_spkCode
Spacecraft and planet ephemeris kernel (SPK) code.
Definition Spice.h:418
bool hasKernels(Pvl &lab)
Returns true if the kernel group has kernel files.
Definition Spice.cpp:1538
virtual SpiceRotation * instrumentRotation() const
Accessor method for the instrument rotation.
Definition Spice.cpp:1634
SpiceDouble * m_cacheSize
Cache size. Note: This value is 1 for Framing cameras.
Definition Spice.h:401
void defaultInit()
Default initialize the members of the SPICE object.
Definition Spice.cpp:107
virtual SpicePosition * instrumentPosition() const
Accessor method for the instrument position.
Definition Spice.cpp:1612
SpiceInt naifIkCode() const
This returns the NAIF IK code to use when reading from instrument kernels.
Definition Spice.cpp:975
SpiceInt naifSclkCode() const
This returns the NAIF SCLK code to use when reading from instrument kernels.
Definition Spice.cpp:985
QString targetName() const
Returns the QString name of the target.
Definition Spice.cpp:1390
SpiceInt naifBodyFrameCode() const
This returns the NAIF body frame code.
Definition Spice.cpp:996
void load(PvlKeyword &key, bool notab)
Loads/furnishes NAIF kernel(s)
Definition Spice.cpp:486
SpiceDouble m_uB[3]
This contains the sun position (u) in the bodyfixed reference frame (B).
Definition Spice.h:369
virtual iTime cacheStartTime() const
Accessor method for the cache start time.
Definition Spice.cpp:750
iTime * m_endTime
Corrected end (shutter close) time of the observation.
Definition Spice.h:400
iTime * m_et
Ephemeris time (read NAIF documentation for a detailed description)
Definition Spice.h:382
bool isTimeSet()
Returns true if time has been initialized.
Definition Spice.cpp:1589
QVector< QString > * m_kernels
Vector containing kernels filenames.
Definition Spice.h:396
SpiceRotation * m_bodyRotation
Body spice rotation.
Definition Spice.h:409
iTime * m_startTime
Corrected start (shutter open) time of the observation.
Definition Spice.h:399
virtual SpicePosition * sunPosition() const
Accessor method for the sun position.
Definition Spice.cpp:1601
SpiceDouble getDouble(const QString &key, int index=0)
This returns a value from the NAIF text pool.
Definition Spice.cpp:1046
SpiceInt getInteger(const QString &key, int index=0)
This returns a value from the NAIF text pool.
Definition Spice.cpp:1032
virtual void subSpacecraftPoint(double &lat, double &lon)
Returns the sub-spacecraft latitude/longitude in universal coordinates (0-360 positive east,...
Definition Spice.cpp:1290
virtual double resolution()
Virtual method that returns the pixel resolution of the sensor in meters/pix.
Definition Spice.cpp:1016
Obtain SPICE position information for a body.
Obtain SPICE rotation information for a body.
This class is used to create and store valid Isis targets.
Definition Target.h:63
Parse and return pieces of a time string.
Definition iTime.h:65
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16