SPICE API#
Time convertor API#
datetime()
#
- planetary_coverage.spice.datetime(string, *others)[source]#
Parse datetime with SPICE convention.
- Parameters
string (str) –
Input datetime string. Many format are supported, see the NAIF docs:
https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/time.html#Input%20String%20Conversion
If the string starts with a
@
, this character will be discarded before being parsed.*others (str, optional) – Addition input string(s) to parse.
- Returns
Parsed string(s) as numpy datetime64 object(s).
- Return type
numpy.datetime64 or [numpy.datetime64, …]
- Raises
TypeError – If the input time a not a string.
ValueError – If the provided string is not recognized by SPICE.
Note
This routine is the simple parser and does not require any kernel to be loaded.
Warning
This routine does not implement time conversion from
UTC
toTDB
orTDT
. You need to load at least a leapsecond kernel to perform these conversions.
sorted_datetimes()
#
- planetary_coverage.spice.sorted_datetimes(times, index=None, reverse=False)[source]#
Sort a list of datetimes.
- Parameters
- Returns
Sorted list of datetimes.
- Return type
- Raises
TypeError – If the provided
index
is notNone
,int
,list
ortuple
.
Note
The input
times
don’t need to be pre-formatted.The output list is only reordered, the input
times
are not post-formatted.
iso()
#
jdn_hms()
#
- planetary_coverage.spice.jdn_hms(string)[source]#
Extract the julian day and the time from a string.
- Parameters
string (str) – Input string to parse.
- Returns
Julian date number, hours, minutes, seconds and milliseconds values.
- Return type
- Raises
ValueError – If the string can not be parsed as a SPICE time.
Note
The precision output time is rounded at 1 millisecond. The Julian Day Number is always defined with respect to the Gregorian calendar.
Warning
This definition of the Julian Date does not date into account leapseconds. Use Ephemeris Time (
et
) if you need a 1 second precision.
jd()
#
- planetary_coverage.spice.jd(string)[source]#
Convert time from a string to decimal Julian Date.
- Parameters
string (str) – Input time string to convert.
- Returns
Julian day decimal value.
- Return type
- Raises
ValueError – If the string can not be parsed as a SPICE time.
Warning
This definition of the Julian Date does not date into account leapseconds. Use Ephemeris Time (
et
) if you need a 1 second precision.See also
ymd()
#
- planetary_coverage.spice.ymd(jdn)[source]#
SPICE conversion from Julian Day to the Gregorian Calendar.
- Parameters
jdn (int) – Julian Date Number (no decimal value).
- Returns
Parsed year, month and day in the Gregorian Calendar.
- Return type
Warning
The dates before October 15th, 1582 are still represented in the Gregorian calendar and not in the Julian calendar. This is not strictly correct but it does correspond to the default behavior of SPICE and Numpy:
>>> spiceypy.tparse('1582-10-14') >>> numpy.datetime64('1582-10-14')
Don’t throw errors even if theses date don’t exists, although the day before 1582-10-15 should be 1582-10-04.
>>> numpy.datetime64('1582-10-15') - numpy.datetime64('1582-10-04') == numpy.timedelta64(1,'D') False
mapps_datetime()
#
et()
#
- planetary_coverage.spice.et(utc, *times)[source]#
Convert utc time to ephemeris time.
- Parameters
utc (any) –
Input UTC time. All SPICE time formats are accepted.
For example:
YYYY-MM-DDThh:mm:ss[.ms][Z]
YYYY-MON-DD hh:mm:ss
Multiple iterable input (
slice
,list
,tuple
,numpy.ndarray
) are accepted as well.If an
int
orfloat
is provided, the value is considered to be in ET and is not not converted.*times (str) – Addition input UTC time(s) to parse.
Caution
The value is rounded at 1e-3 precision to avoid conversion rounding error with datetime at
ms
precisions values.
et_range()
#
- planetary_coverage.spice.et_range(start, stop, step='1s', endpoint=True)[source]#
Ephemeris temporal range.
- Parameters
start (str) – Initial start UTC time.
stop (str) – Stop UTC time.
step (int or str, optional) – Temporal step to apply between the start and stop UTC times (default: 1s). If the
step
provided is an int >= 2 it will correspond to the number of samples to generate.endpoint (bool, optional) – If True,
stop
is the last sample. Otherwise, it is not included (default: True).
- Returns
List of ephemeris times.
- Return type
numpy.array
- Raises
TypeError – If the provided step is invalid.
ValueError – If the provided stop time is before the start time.
See also
et_range
,et_ranges
,et_ca_range
,utc_range
,utc_ranges
,utc_ca_range
et_ranges()
#
- planetary_coverage.spice.et_ranges(*ranges)[source]#
Ephemeris times with a irregular sequence.
- Parameters
*ranges (tuple(s), optional) – Sequence(s) of (start, stop, step) tuples.
- Returns
Ephemeris times distribution.
- Return type
[float, …]
Note
If a start time match the previous stop time, the two sequence will be merged.
See also
et_ca_range()
#
- planetary_coverage.spice.et_ca_range(t, *dt, et_min=None, et_max=None)[source]#
Ephemeris times around closest approach with a redefined sequence.
- Parameters
t (str or numpy.datetime64) – Closest approach UTC time.
*dt (tuple(s), optional) –
Temporal sequence around closest approach:
(duration, numpy.datetime unit, step value and unit)
By default, the pattern is:
[ (10, 'm', '1 sec'), (1, 'h', '10 sec'), (2, 'h', '1 min'), (12, 'h', '10 min'), ]
With will lead to the following sampling:
1 pt from CA -12 h to CA -2 h every 10 min
1 pt from CA -2 h to CA -1 h every 1 min
1 pt from CA -1 h to CA -10 m every 10 sec
1 pt from CA -10 m to CA +10 m every 1 sec
1 pt from CA +10 m to CA +1 h every 10 sec
1 pt from CA +1 h to CA +2 h every 1 min
1 pt from CA +2 h to CA +12 h every 10 min
= 2,041 points around the CA point.
et_min (float, optional) – Smallest valid value of ET (default: None).
et_max (float, optional) – Largest valid value of ET (default: None).
- Returns
Ephemeris times distribution around CA.
- Return type
[float, …]
Note
The distribution of ET is symmetrical around CA.
See also
utc()
#
- planetary_coverage.spice.utc(et, *ets, unit='ms')[source]#
Convert ephemeris time to UTC time(s) in ISOC format.
- Parameters
- Returns
Parsed time in ISOC format:
YYYY-MM-DDThh:mm:ss.ms
asnumpy.datetime64
object.- Return type
numpy.datetime64 or [numpy.datetime64, …]
utc_range()
#
- planetary_coverage.spice.utc_range(start, stop, step='1s', endpoint=True)[source]#
UTC temporal range.
- Parameters
start (str) – Initial start UTC time.
stop (str) – Stop UTC time.
step (int or str, optional) – Temporal step to apply between the start and stop UTC times (default: 1s). If the
step
provided is an int >= 2 it will correspond to the number of samples to generate.endpoint (bool, optional) – If True,
stop
is the last sample. Otherwise, it is not included (default: True).
- Returns
List of UTC times.
- Return type
numpy.array
- Raises
TypeError – If the provided step is invalid.
ValueError – If the provided stop time is before the start time.
See also
utc_ranges()
#
- planetary_coverage.spice.utc_ranges(*ranges)[source]#
UTC times with a irregular sequence.
- Parameters
*ranges (tuple(s), optional) – Sequence(s) of (start, stop, step) tuples.
- Returns
UTC times distribution.
- Return type
[float, …]
Note
If a start time match the previous stop time, the two sequence will be merged.
See also
utc_ca_range()
#
- planetary_coverage.spice.utc_ca_range(t, *dt, utc_min=None, utc_max=None)[source]#
UTC times around closest approach with a redefined sequence.
- Parameters
t (str or numpy.datetime64) – Closest approach UTC time.
*dt (tuple(s), optional) – Temporal sequence around closest approach (see
et_ca_range
for details).utc_min (float, optional) – Smallest valid value in UTC (default: None).
utc_max (float, optional) – Largest valid value in UTC (default: None).
- Returns
UTC times distribution around CA.
- Return type
[float, …]
Note
The distribution of ET is symmetrical around CA.
See also
tdb()
#
sclk()
#
Kernel parser API#
kernel_parser()
#
format_data()
#
- planetary_coverage.spice.format_data(indent=4, sep=', ', fmt=False, eq='=', **kwargs)[source]#
Format raw data into a text-kernel complaint string.
SPICE constrains:
All assignments, or portions of an assignment, occurring on a line must not exceed 132 characters, including the assignment operator and any leading or embedded white space.
Metakernel only:
When continuing the value field (a file name) over multiple lines, the continuation marker must be a single
+
character.The maximum length of any file name, including any path specification, is 255 characters (not enforced here, see
planetary_coverage.spice.Metakernel.check()
for more details).
- Parameters
indent (int, optional) – Number of indentation
sep (str, optional) – Separator character in vectors (default:
', '
).fmt (bool, optional) – Optional value formatter (e.g.
.3E
for1.23E-3
).eq (str, optional) – Key-value equal sign (default:
'='
).**kwargs (any) – Data keyword(s) and value(s) to format.
- Returns
Formatted key and value.
- Return type
- Raises
KeyError – If a key length is larger than 32 characters.
ValueError – If a indentation will create a line larger than 132 characters.
get_summary()
#
- planetary_coverage.spice.kernel.get_summary(kernels)[source]#
Get kernels summary description.
- Parameters
kernels ([str or pathlib.Path, ...]) – List of kernel file names.
- Returns
Summary of kernels count and sizes grouped by types.
- Return type
get_details()
#
- planetary_coverage.spice.kernel.get_details(kernels)[source]#
Get kernels detailed description.
- Parameters
kernels ([str or pathlib.Path, ...]) – List of kernel file names.
- Returns
Detailed list of kernels types and sizes.
- Return type
get_type()
#
- planetary_coverage.spice.kernel.get_type(kernel, default_txt='UNKNOWN', default_icon='❓') str [source]#
Get kernel type icon.
- Parameters
kernel (str or pathlib.Path) – Kernel filename.
default_txt (str, optional) – Optional default type if the extension is unknown.
default_icon (str, optional) – Optional default type if the kernel type is unknown.
- Returns
Kernel icon based on it extension.
- Return type
MetaKernel
#
- class planetary_coverage.spice.MetaKernel(mk, download=False, remote=0, load_kernels=False, n_threads=2, **kwargs)[source]#
Bases:
planetary_coverage.spice._abc.ABCMetaKernel
Metakernel object.
- Parameters
mk (str or pathlib.Path) – Metakernel file name.
download (bool, optional) – Download the missing kernels (default:
False
).remote (str or int, optional) – Remote kernel source. If none is provided (default), the content of the file will be parsed to search for a remote base value (with
://
). If multiple remotes are present, the first one will be used by default. You can provide an integer to choose which one you want to use. This value is not required if all the kernel are present locally (it is only used to download the missing kernels).load_kernels (bool, optional) – Load the kernels listed in the metakernel into the SPICE pool. If other kernels are present in the SPICE pool, they will be flushed.
n_threads (int, optional) – Number of threads to open in parallel to download missing kernels. Default:
DEFAULT_N_THREADS
. On windows, multi-thread download is disable by default (see #80) but you can still specify explicitly the number of thread that you want to use.**kwargs (dict, optional) – Path key(s) and value(s) to be substituted in
KERNELS_TO_LOAD
.
- Raises
FileNotFoundError – If the metakernel file does not exists locally.
KeyError – If the file provided does not a
KERNELS_TO_LOAD
key. Or, if a keyword argument is provided but is neitherPATH_SYMBOLS
norPATH_VALUES
are present.ValueError – If one of the provided key is not part of the available
SYMBOLS
.
- property fname#
Metakernel filename.
- property remote#
Kernel remote source.
- update_path_values(download=False, **kwargs)[source]#
Update path values.
- Parameters
download (bool, optional) – Download the missing kernels (default:
False
).**kwargs (any) – Path symbol and value to edit in the file.
- Raises
KeyError – If the file provided does not a PATH_VALUES or PATH_SYMBOLS keys.
ValueError – If the provided key was not part of the available SYMBOLS.
- property content#
Metakernel content.
- get_remote(i=0) str [source]#
Get remote URL kernel source from the file content.
- Raises
ValueError – If more than one remote was found in the content. An explicit remote can be supplied in
__init__
to avoid this issue.
- property urls: list#
Kernels urls based on the remote source.
If the remote was not provided either in
__init__
nor in the file content, the urls will be empty.
- check(download=False)[source]#
Check if all the kernels are locally available.
SPICE constrains:
The maximum length of any file name, including any path specification, is 255 characters.
- Parameters
- Raises
BufferError – If the resulting kernel length is larger than the SPICE constrain of 255 characters.
FileNotFoundError – If the kernel is missing locally.
- load_kernels()[source]#
Load the kernels listed in the metakernel into the SPICE pool.
Note
If the SPICE pool already contains these kernels, nothing will append. If not, the pool is flushed and only the metakernels kernels are reloaded.
- property title#
Metakernel title.
- property description#
Metakernel description.
- property summary#
Metakernel kernels content summary.
- property details#
Metakernel kernels content details.
- property html#
HTML representation.
SPICE objects API#
SpicePool
#
- class planetary_coverage.spice.SpicePool[source]#
Bases:
object
Spice kernel pool singleton.
See:
MetaSpicePool
for details.
MetaSpicePool
#
- class planetary_coverage.spice.pool.MetaSpicePool[source]#
Bases:
type
Meta Spice kernel pool object.
- property kernels#
Return the list of kernels loaded in the pool.
- property summary#
Pool content summary.
- property details#
Pool content summary.
- windows(*refs, fmt='UTC')[source]#
Get kernels windows on a collection of bodies in the pool.
Based on CK, PCK and SPK files.
- Parameters
- Returns
{SpiceRef – Start and stop times windows in the requested format.
- Return type
- Raises
KeyError – If the requested reference does not have a specific coverage range in the pool.
- coverage(*refs, fmt='UTC')[source]#
Get coverage for a collection of bodies in the pool.
- Parameters
- Returns
Start and stop times covered for the requested format.
- Return type
Note
If multiple values are available, only the
max(start)
andmin(stop)
are kept.- Raises
TypeError – If the output time format is invalid.
ValueError – If the start time is after the stop time
SpiceRef
#
- class planetary_coverage.spice.SpiceRef(ref)[source]#
Bases:
planetary_coverage.spice.references.AbstractSpiceRef
SPICE reference generic helper.
SpiceBody
#
- class planetary_coverage.spice.SpiceBody(ref)[source]#
Bases:
planetary_coverage.spice.references.AbstractSpiceRef
SPICE planet/satellite body reference.
- is_valid()[source]#
Check if the code is valid for a SPICE body.
Refer to the NAIF Integer ID codes in section Planets and Satellites for more details.
- Returns
Valid bodies are 10 (SUN) and any value between 101 and 999.
- Return type
- property is_planet#
Check if the body is a planet.
- property parent#
[Cached] Parent body.
- property barycenter#
[Cached] Body barycenter.
- property radii#
[Cached] Body radii, if available (km).
- property radius#
Body mean radius, if available (km).
- property r#
Body mean radius alias.
- property re#
Body equatorial radius, if available (km).
- property rp#
Body polar radius, if available (km).
- property f#
Body flattening coefficient, if available (km).
- property mu#
[Cached] Gravitational parameter (GM, km³/sec²).
SpiceObserver
#
SpiceSpacecraft
#
- class planetary_coverage.spice.SpiceSpacecraft(ref)[source]#
Bases:
planetary_coverage.spice.references.SpiceObserver
SPICE spacecraft reference.
- is_valid()[source]#
Check if the code is valid for a SPICE spacecraft.
Refer to the NAIF Integer ID codes in sections Spacecraft and Earth Orbiting Spacecraft for more details.
Interplanetary spacecraft is normally the negative of the code assigned to the same spacecraft by JPL’s Deep Space Network (DSN) as determined the NASA control authority at Goddard Space Flight Center.
Earth orbiting spacecraft are defined as:
-100000 - NORAD ID code
- Returns
Valid spacecraft ids are between -999 and -1 and between -119,999 and -100,001.
- Return type
- property instruments#
[Cached] SPICE instruments in the pool associated with the spacecraft.
- property spacecraft#
Spacecraft SPICE reference.
- property frame#
[Cached] Spacecraft frame (if available).
- property boresight#
Spacecraft z-axis boresight.
For an orbiting spacecraft, the Z-axis points from the spacecraft to the closest point on the target body.
The component of inertially referenced spacecraft velocity vector orthogonal to Z is aligned with the -X axis.
The Y axis is the cross product of the Z axis and the X axis.
You can change the
SpiceSpacecraft.BORESIGHT
value manually.
SpiceInstrument
#
- class planetary_coverage.spice.SpiceInstrument(ref)[source]#
Bases:
planetary_coverage.spice.references.SpiceObserver
,planetary_coverage.spice.fov.SpiceFieldOfView
SPICE instrument reference.
- is_valid()[source]#
Check if the code is valid for a SPICE instrument.
Refer to the NAIF Integer ID codes in section Instruments for more details.
NAIF instrument code = (s/c code)*(1000) - instrument number
- Returns
Valid instrument ids is below -1,000 and have a valid field of view definition.
- Return type
Warning
Based on the SPICE documentation, the min value of the NAIF code should be -1,000,000. This rule is not enforced because some instrument of Juice have value below -2,800,000 (cf.
JUICE_PEP_JDC_PIXEL_000 (ID: -2_851_000)
in juice_pep_v09.ti).
- property spacecraft#
[Cached] Parent spacecraft.
Warning
The current definition of Juice PEP instruments IDs (in juice_pep_v09.ti) are out-of-range NAIF code rules. This special case is expected to be an exception and manually fixed here with a
DepreciationWarning
. See issue #12 to get more details.
- property ns#
Instrument number of samples.
- property nl#
Instrument number of lines.
- property fov_along_track#
Instrument field of view along-track angle (radians).
- property fov_cross_track#
Instrument field of view cross-track angle (radians).
- property ifov#
Instrument instantaneous field of view angle (radians).
Danger
This calculation expect that the sample direction is aligned with the cross-track direction (ie. 1-line acquisition in push-broom mode should be in the direction of flight).
Warning
JUICE_JANUS
instrument inv06
does not follow this convention. We manually manage this exception for the moment. See MR !27 for more details.
- property ifov_along_track#
Instrument instantaneous along-track field of view angle (radians).
- property ifov_cross_track#
Instrument instantaneous cross-track field of view angle (radians).
SpiceFrame
#
- class planetary_coverage.spice.SpiceFrame(ref)[source]#
Bases:
planetary_coverage.spice.references.AbstractSpiceRef
SPICE reference frame.
- property class_type#
Frame class type.
- property center#
Frame center reference.
- property sclk#
Frame SCLK reference.
- property spk#
Frame SPK reference.
- property frame#
[Cached] Reference frame.
Not implemented for a
SpiceFrame
.
SpiceFieldOfView
#
- class planetary_coverage.spice.SpiceFieldOfView(code)[source]#
Bases:
object
SPICE Instrument field of view object.
- Parameters
code (int) – SPICE instrument code.
See also
- property frame#
Field of view reference frame.
- property m#
[Cached] Boresight rotation matrix.
- to_boresight(*vec)[source]#
Rotate a vector in the plane orthogonal to the boresight.
The vector(s) is/are rotated to be in the plane orthogonal to the boresight with a unit length in the z-direction.
- Parameters
*vec (tuple or numpy.ndarray) – Input vector(s) to rotate.
- property corners#
[Cached] Boundaries corners in the plane orthogonal to the boresight.
- property extent#
[Cached] Boundaries extent in the plane orthogonal to the boresight.
- property xlim#
Boundary x-limits in the plane orthogonal to the boresight.
- property ylim#
Boundary y-limits in the plane orthogonal to the boresight.
- from_boresight(*xy)[source]#
Rotate a vector from the boresight plane to the instrument frame.
- Parameters
*xy (tuple or numpy.ndarray) – Input boresight unitary boresight vector(s).
- rays(npt=24)[source]#
Interpolated rays around the FOV in the instrument frame.
The points are interpolated in the plane orthogonal to the boresight at a unitary distance to the center and re-aligned with the boresight.
- Parameters
npt (int, optional) – Number of points in the interpolated contour (default: 24).
- Returns
Field of view contour rays, shape: (npt, 3).
- Return type
Note
The points will be distributed evenly and the final number of points may be slightly lower than the requested count.
- contour(npt=25)[source]#
FOV footprint contour.
- Parameters
npt (int, optional) – Number of points in the interpolated contour (default: 25). The minimum of points is 9.
- patch(**kwargs)[source]#
FOV patch in the plane orthogonal to the boresight.
- Parameters
**kwargs (any) – Matplotlib artist optional keywords.
- Returns
Matplotlib Patch.
- Return type
- view(ax=None, fig=None, **kwargs)[source]#
2D display field of view in the plane perpendicular to the boresight.
- Parameters
ax (matplotlib.axes.Axes, optional) – Axis to incrust the plot.
fig (matplotlib.figure.Figure, optional) – Main figure (if no
ax
is provided).**kwargs (any) – Matplotlib keyword attributes pass to
matplotlib.patches.Patch
.
- Returns
FOV view
- Return type
matplotlib.axes
- display(ax=None, fig=None, npt=25, show_bounds=False, **kwargs)[source]#
3D display field of view with its the boresight.
- Parameters
ax (matplotlib.axes.Axes, optional) – Axis to incrust the plot.
fig (matplotlib.figure.Figure, optional) – Main figure (if no
ax
is provided).npt (int, optional) – Number of points in the interpolated contour (default:
25
).
- Returns
FOV view
- Return type
matplotlib.axes
SpiceAbCorr
#
- class planetary_coverage.spice.SpiceAbCorr(abcorr='NONE', restrict=None)[source]#
Bases:
str
SPICE light time aberration correction checker.
- Parameters
- Returns
Valid SPICE Aberration Correction string.
- Return type
- Raises
KeyError – If the provided key is invalid.
See also
SPICE aberration corrections required reading.
- property reception#
Transmission case.
- property transmission#
Transmission case.
- property stellar#
Stellar aberration.
- property oneway#
One-way light time correction / planetary aberration.
- property converged#
Converged Newtonian correction.
AbstractSpiceRef
#
- class planetary_coverage.spice.references.AbstractSpiceRef(ref)[source]#
Bases:
object
SPICE reference helper.
- Parameters
- Raises
KeyError – If this reference is not known in the kernel pool.
- property code#
SPICE reference ID as string.
- is_valid()[source]#
Generic SPICE reference.
- Returns
Generic SPICE reference should always
True
.- Return type
- property frame#
[Cached] Reference frame.
SPICE toolbox API#
deg()
#
rlonlat()
#
- planetary_coverage.spice.toolbox.rlonlat(pt)[source]#
Convert point location in planetocentric coordinates.
- Parameters
pt (tuple) – Input XYZ cartesian coordinates.
- Returns
Point radius (in km).
East planetocentric longitude (in degree).
North planetocentric latitude (in degree).
- Return type
Note
If the X and Y components of pt are both zero, the longitude is set to zero.
If pt is the zero vector, longitude and latitude are both set to zero.
See also
planetographic()
#
- planetary_coverage.spice.toolbox.planetographic(body, xyz)[source]#
Convert point location in planetographic coordinates.
- Parameters
- Returns
Point altitude (in km).
East or West planetographic longitude (in degree).
North planetographic latitude (in degree).
- Return type
- Raises
ValueError – If the shape of the point(s) provided is not (3,) or (N, 3).
Note
Planetographic longitude can be positive eastward or westward. For bodies having prograde (aka direct) rotation, the direction of increasing longitude is positive west: from the +X axis of the rectangular coordinate system toward the -Y axis. For bodies having retrograde rotation, the direction of increasing longitude is positive east: from the +X axis toward the +Y axis. The Earth, Moon, and Sun are exceptions: planetographic longitude is measured positive east for these bodies.
Planetographic latitude is defined for a point P on the reference spheroid, as the angle between the XY plane and the outward normal vector at P. For a point P not on the reference spheroid, the planetographic latitude is that of the closest point to P on the spheroid.
You may need a tpc kernel loaded in to the SPICE pool to perform this type of calculation.
See NAIF documentation for more details.
See also
ocentric2ographic()
#
- planetary_coverage.spice.toolbox.ocentric2ographic(body, lon_e, lat)[source]#
Convert planetocentric to planetographic coordinates.
- Parameters
- Returns
Planetographic longitude and latitude (in degrees)
- Return type
- Raises
ValueError – If the longitude and latitude inputs dimension are not the same.
Note
You may need a tpc kernel loaded in to the SPICE pool to perform this type of calculation.
By default we use the body mean radius (harmonic mean on the ellipsoid).
See also
SpiceBody.radius
,planetographic
radec()
#
- planetary_coverage.spice.toolbox.radec(vec)[source]#
Convert vector on the sky J2000 to RA/DEC coordinates.
- Parameters
vec (tuple) – Input XYZ cartesian vector coordinates in J200 frame.
- Returns
Right-ascension (in degree).
Declination angle (in degree).
- Return type
float or numpy.ndarray, float or numpy.ndarray
See also
azel()
#
- planetary_coverage.spice.toolbox.azel(vec, az_spice=False, el_spice=True)[source]#
Convert vector in a reference frame into azimuth and elevation.
- Parameters
vec (tuple) – Input XYZ cartesian vector coordinates in the reference frame.
az_spice (bool, optional) – Use SPICE azimuth convention (counted counterclockwise). Default:
False
(counted clockwise).el_spice (bool, optional) – Use SPICE elevation convention (counted positive above XY plane, toward +Z). Default:
True
. Otherwise, counted positive below XY plane, toward -Z.
- Returns
Azimuth angle from +X in XY plane (in degree).
Elevation angle above or below the XY plane (in degree).
- Return type
See also
sub_obs_pt()
#
- planetary_coverage.spice.toolbox.sub_obs_pt(time, observer, target, abcorr='NONE', method='NEAR POINT/ELLIPSOID')[source]#
Sub-observer point calculation.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
observer (str) – Observer name.
abcorr (str, optional) – Aberration correction (default: ‘NONE’)
method (str, optional) –
Computation method to be used. Possible values:
’NEAR POINT/ELLIPSOID’ (default)
’INTERCEPT/ELLIPSOID’
’NADIR/DSK/UNPRIORITIZED[/SURFACES = <surface list>]’
’INTERCEPT/DSK/UNPRIORITIZED[/SURFACES = <surface list>]’
(See NAIF
spiceypy.spiceypy.subpnt()
for more details).
- Returns
Sub-observer XYZ coordinates in the target body fixed frame (expressed in km).
If a list of time were provided, the results will be stored in a (3, N) array.
- Return type
(float, float, float) or numpy.ndarray
See also
target_position()
#
- planetary_coverage.spice.toolbox.target_position(time, observer, target, *, abcorr='NONE')[source]#
Sun position relative to the target.
The vector starts from the observer to the target body:
observer ------> target (km)
- Parameters
- Returns
Target XYZ coordinates in the target body fixed frame (expressed in km).
If a list of time were provided, the results will be stored in a (3, N) array.
- Return type
(float, float, float) or numpy.ndarray
See also
spiceypy.spiceypy.spkpos
,sun_pos
,ang_size
,station_azel
sun_pos()
#
- planetary_coverage.spice.toolbox.sun_pos(time, target, *, abcorr='NONE')[source]#
Sun position relative to the target.
The vector starts from the target body to the Sun:
target ------> Sun (km)
- Parameters
- Returns
Sun XYZ coordinates in the target body fixed frame (expressed in km).
If a list of time were provided, the results will be stored in a (3, N) array.
- Return type
(float, float, float) or numpy.ndarray
See also
angular_size()
#
- planetary_coverage.spice.toolbox.angular_size(time, observer, target, *, abcorr='NONE')[source]#
Angular size of a target as seen from an observer.
- Parameters
- Returns
Target angular size seen from the observer (in degree).
If a list of time were provided, the results will be stored in an array.
- Return type
See also
station_azel()
#
- planetary_coverage.spice.toolbox.station_azel(time, target, station, *, abcorr='CN+S', az_spice=False, el_spice=True)[source]#
Compute azimuth and elevation of target seen from a station on Earth.
station ------> target
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the station location.
station (str) – Name of the tracking station.
abcorr (str, optional) – Aberration correction (default: ‘NONE’)
az_spice (bool, optional) – Use SPICE azimuth convention (counted counterclockwise). Default:
False
(counted clockwise).el_spice (bool, optional) – Use SPICE elevation convention (counted positive above XY plane, toward +Z). Default:
True
. Otherwise, counted positive below XY plane, toward -Z.
- Returns
Azimuth angle from +X in XY plane (in degree).
Elevation angle above or below the XY plane (in degree).
- Return type
See also
sc_state()
#
- planetary_coverage.spice.toolbox.sc_state(time, spacecraft, target, abcorr='NONE')[source]#
Spacecraft position and velocity relative to the target.
The position vector starts from the target body to the spacecraft:
target ------> spacecraft (km)
The velocity vector correspond to the spacecraft motion (in km/s).
- Parameters
- Returns
Spacecraft XYZ position and velocity coordinates in the target body fixed frame (expressed in km and km/s).
If a list of time were provided, the results will be stored in a (6, N) array.
- Return type
See also
attitude()
#
- planetary_coverage.spice.attitude(time, observer, ref='J2000')[source]#
C-matrix attitude.
Based on SPICE documentation C-matrix (camera matrix) transforms the coordinates of a point in a reference frame (like J2000) into the instrument fixed coordinates:
[ x_inst] [ ] [ x_J2000 ] | y_inst| = | C-matrix | | y_J2000 | [ z_inst] [ ] [ z_J2000 ]
The transpose of a C-matrix rotates vectors from the instrument-fixed frame to the base frame:
[ x_J2000] [ ]T [ x_inst ] | y_J2000| = | C-matrix | | y_inst | [ z_J2000] [ ] [ z_inst ]
Changed in version 1.1.0: Fix C-matrix definition. The previous version was incorrect and returned the transpose of the C-matrix and not the C-matrix. See issue #73 for details.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
observer (str or SpiceSpacecraft or SpiceInstrument) – Spacecraft or instrument name.
ref (str, optional) – Reference for the return pointing.
- Returns
C-matrix relative to the reference frame.
If a list of time were provided, the results will be stored in a (3, 3, N) array.
- Return type
- Raises
ValueError – If the observer provided is not a Spacecraft or an instrument.
See also
quaternions()
#
- planetary_coverage.spice.quaternions(attitude_matrix)[source]#
Compute the SPICE rotation quaternions.
- Parameters
attitude_matrix (numpy.ndarray) – Attitude rotation matrix
- Returns
SPICE quaternions equivalent to the provided rotation matrix.
If a list of attitude matrix was provided, the results will be stored in a (4, N) array.
- Return type
(float, float, float, float) or numpy.ndarray
- Raises
ValueError – If the attitude matrix shape is not (3, 3) or (3, 3, N).
See also
intersect_pt()
#
- planetary_coverage.spice.toolbox.intersect_pt(time, observer, target, frame, ray, limb=False, abcorr='NONE', corloc='TANGENT POINT', method='ELLIPSOID')[source]#
Intersection point on a target from a ray at the observer position.
The intersection is primarily computed with the target surface. If no intersection was found and the
limb
flag is set toTRUE
, the intersection will be search on the target limb (defined as the impact parameter). When no value was find, a NaN array will be return.- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
observer (str or SpiceSpacecraft or SpiceInstrument) – Spacecraft of instrument observer name.
frame (str) – Reference frame relative to which the ray’s direction vector is expressed.
ray (tuple or list of tuple) – Ray direction vector emanating from the observer. The intercept with the target body’s surface of the ray defined by the observer and ray is sought.
limb (bool, optional) – Compute the intersection on the limb impact parameter if no intersection with the surface was found.
abcorr (str, optional) – Aberration correction (default: ‘NONE’).
corloc (str, optional) – Aberration correction locus (default: ‘TANGENT POINT’). Used only if
limb=True
.method (str, optional) – Computation method to be used. (See NAIF
spiceypy.spiceypy.sincpt()
for more details).
- Returns
Surface/limb intersection XYZ position on the target body fixed frame (expressed in km).
If a list of time/ray were provided, the results will be stored in a (3, N) array.
- Return type
(float, float, float) or numpy.ndarray
Warning
Currently the limb intersection parameter is only available for
abcorr='NONE'
(anNotImplementedError
will be raised).
boresight_pt()
#
- planetary_coverage.spice.toolbox.boresight_pt(time, observer, target, limb=False, abcorr='NONE', corloc='TANGENT POINT', method='ELLIPSOID')[source]#
Surface intersection on a target from an instrument/spacecraft boresight.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
observer (str or SpiceSpacecraft or SpiceInstrument) – Spacecraft or instrument name.
limb (bool, optional) – Compute the intersection on the limb impact parameter if no intersection with the surface was found.
abcorr (str, optional) – Aberration correction (default: ‘NONE’)
corloc (str, optional) – Aberration correction locus (default: ‘TANGENT POINT’). Used only if
limb=True
.method (str, optional) – Computation method to be used. (See NAIF
spiceypy.spiceypy.sincpt()
for more details).
- Returns
Boresight intersection XYZ position on the target surface body fixed frame (expressed in km).
If a list of time were provided, the results will be stored in a (3, N) array.
- Return type
(float, float, float) or numpy.ndarray
See also
fov_pts()
#
- planetary_coverage.spice.toolbox.fov_pts(time, inst, target, limb=False, npt=24, abcorr='NONE', corloc='TANGENT POINT', method='ELLIPSOID')[source]#
Surface intersection on a target from an instrument FOV rays.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
inst (str or SpiceInstrument) – Instrument name.
limb (bool, optional) – Compute the intersection on the limb impact parameter if no intersection with the surface was found.
npt (int, optional) – Number of points in the field of view contour (default: 24).
abcorr (str, optional) – Aberration correction (default: ‘NONE’),
corloc (str, optional) – Aberration correction locus (default: ‘TANGENT POINT’). Used only if
limb=True
.method (str, optional) – Computation method to be used. (See NAIF
spiceypy.spiceypy.sincpt()
for more details).
- Returns
Field of View intersection XYZ positions on the target surface body fixed frame (expressed in km).
If a list of time were provided, the results will be stored in a (3, N, M) array. M being the number of bound in the FOV.
- Return type
(float, float, float) or numpy.ndarray
See also
Note
In the general case, the last point should be different from the 1st one. You need to add the 1st point to the end of the list if you want to close the polygon of the footprint.
target_separation()
#
- planetary_coverage.spice.toolbox.target_separation(time, observer, target_1, target_2, *, shape_1='POINT', shape_2='POINT', abcorr='NONE')[source]#
Angular target separation between two bodies seen from an observer.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the observer location.
observer (str or SpiceSpacecraft or SpiceInstrument) – Spacecraft or instrument name.
shape_1 (str, optional) – First target body shape model. Only
'POINT'
and'SPHERE'
are accepted. If POINT selected (default) the target is considered to have no radius. If SPHERE selected the calculation will take into account the target radii (max value used).shape_2 (str, optional) – Second target body shape model. See
shape_1
for details.target_2 – Second target body name.
abcorr (str, optional) – Aberration correction (default: ‘NONE’),
- Returns
Angular separation between the two targets (in degrees).
If a list of
time
was provided, the results will be stored in an array.- Return type
Note
At the moment (N0067), DSK shape are not supported and
frame_1
andframe_2
are always set to'NULL'
.See also
local_time()
#
- planetary_coverage.spice.toolbox.local_time(time, lon, target, lon_type='PLANETOCENTRIC')[source]#
Local solar time.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the target surface point location.
lon (float or list or tuple) – Longitude of surface point (degree).
target (str) – Target body name.
lon_type (str, optional) –
Form of longitude supplied by the variable
lon
. Possible values:PLANETOCENTRIC (default)
PLANETOGRAPHIC
(See NAIF
spiceypy.spiceypy.et2lst()
for more details).
- Returns
Local solar time (expressed in decimal hours).
If a list of
time
orlon
were provided, the results will be stored in an array.- Return type
- Raises
ValueError – If the
time
andlon
are both arrays but their size don’t match.
See also
illum_angles()
#
- planetary_coverage.spice.toolbox.illum_angles(time, spacecraft, target, pt, abcorr='NONE', method='ELLIPSOID')[source]#
Illumination angles.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the target surface point location.
spacecraft (str) – Spacecraft name.
target (str) – Target body name.
pt (numpy.ndarray) – Surface point (XYZ coordinates).
abcorr (str, optional) – Aberration correction (default: ‘NONE’)
method (str, optional) –
Form of longitude supplied by the variable
lon
. Possible values:ELLIPSOID (default)
DSK/UNPRIORITIZED[/SURFACES = <surface list>]
(See NAIF
spiceypy.spiceypy.ilumin()
for more details).
- Returns
Solar incidence, emission and phase angles at the surface point (degrees).
If a list of time were provided, the results will be stored in a (3, N) array.
- Return type
- Raises
ValueError – If the
time
andlon
are both arrays but their size don’t match.
See also
solar_longitude()
#
- planetary_coverage.spice.toolbox.solar_longitude(time, target, abcorr='NONE')[source]#
Seasonal solar longitude (degrees).
Compute the angle from the vernal equinox of the main parent body.
- Parameters
- Returns
Solar longitude angle(s) (degrees).
If a list of
time
were provided, the results will be stored in an array.- Return type
Note
If the target parent is not the SUN the target will be change for its own parent.
See also
true_anomaly()
#
- planetary_coverage.spice.toolbox.true_anomaly(time, target, abcorr='NONE', frame='ECLIPJ2000')[source]#
Target orbital true anomaly (degrees).
The angular position of the target in its orbit compare to its periapsis.
- Parameters
time (float or list or tuple) – Ephemeris Time or UTC time input(s). It refers to time at the target’s center location.
target (str) – Target body name.
abcorr (str, optional) – Aberration correction (default: ‘NONE’)
frame (str, optional) – Inertial frame to compute the state vector (default: ECLIPJ2000).
- Returns
True anomaly angle (degrees).
If a list of
time
were provided, the results will be stored in an array.- Return type
groundtrack_velocity()
#
- planetary_coverage.spice.toolbox.groundtrack_velocity(target, state)[source]#
Groundtrack velocity (km/s).
Speed motion of the sub-observer point along the groundtrack.
Changed in version 1.1.0: Fix the formula. The previous one was incorrect. See issue #35 for details.
Caution
This speed does not correspond to the norm of the rejection of the velocity vector of the observer in the target fixed frame.
Warning
This formula is only valid for a spheroid elongated along the axis of rotation (
c
). It is not correct for a generic ellipsoid.No aberration correction is applied.
- Parameters
- Returns
Ground track velocity (km/s).
If a list of
state
is provided, the results will be stored in an array.- Return type
- Raises
ValueError – If the
state
arrays doesn’t have the good shape.
Note
The tangential speed is obtained as product of the local radius of the observed body with the tangential angular speed:
latitudinal component ^ x | / | / <- tangential component |/ o----> longitudinal component (the cos is to compensate the 'shrinking' of longitude increasing the latitude)
pixel_scale()
#
- planetary_coverage.spice.toolbox.pixel_scale(inst, target, emi, dist)[source]#
Instrument pixel resolution (km/pixel).
Only the cross-track iFOV is used and projected on the target body in spherical geometry (corrected from the local emission angle).
- Parameters
inst (str or SpiceInstrument) – Instrument name.
emi (float, list or numpy.ndarray) – Local emission angle (in degrees).
dist (float, list or numpy.ndarray) – Distance from the observer to the target body center (in km).
- Returns
Local instrument pixel resolution (km/pix).
- Return type
SPICE CLI#
kernel-download
#
- planetary_coverage.cli.cli_kernel_download(argv=None)[source]#
CLI to download kernel(s) from a kernel registry.
The user can provide an agency + mission argument (eg. –esa JUICE) to point to the known kernel registry or provide directly the URL (-r/–remote). If none is provided, the cli will attempt to download it from NAIF generic kernels.
Note: only one remote is accepted. Otherwise an ERROR is raised.
The user can also specify where to store the kernels (with -o/–kernels-dir).
If the requested kernel is already present locally, the cli will raise an ERROR, unless the user provide a -f/–force flag (to overwrite it) or -s/–skip flag (to continue).
Hint: the user can provide a list a kernels to download them in a batch.
Tip: if no kernels is provided, the cli will return the remote location url.
metakernel-download
#
- planetary_coverage.cli.cli_metakernel_download(argv=None)[source]#
CLI to download the missing kernel in a metakernel.
If a remote location is provided in the file header it will be used by default, unless if the user provide a custom -r/–remote location.
By default, the kernels will be stored at the location defined in the metakernel. This parameter can be override with -o/–kernels-dir.