CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-spiceypy

A Python wrapper for the NAIF CSPICE Toolkit providing essential tools for spacecraft navigation and planetary science calculations

Overview
Eval results
Files

spacecraft-clock.mddocs/

Spacecraft Clock Functions

Time correlation functions for converting between spacecraft clock time and other time systems. Spacecraft clocks provide the primary time reference for mission operations, and these functions enable translation between spacecraft time and standard time systems like Ephemeris Time (ET) and UTC.

Capabilities

Spacecraft Clock to Ephemeris Time

Convert spacecraft clock strings and ticks to ephemeris time.

def scs2e(sc: int, sclkch: str) -> float:
    """
    Convert spacecraft clock string to ephemeris time.
    
    Parameters:
    - sc: int, spacecraft ID
    - sclkch: str, spacecraft clock string
    
    Returns:
    float: ephemeris time (seconds past J2000)
    """

def sct2e(sc: int, sclkdp: float) -> float:
    """
    Convert spacecraft clock ticks to ephemeris time.
    
    Parameters:
    - sc: int, spacecraft ID
    - sclkdp: float, spacecraft clock ticks
    
    Returns:
    float: ephemeris time (seconds past J2000)
    """

Ephemeris Time to Spacecraft Clock

Convert ephemeris time to spacecraft clock format.

def sce2s(sc: int, et: float) -> str:
    """
    Convert ephemeris time to spacecraft clock string.
    
    Parameters:
    - sc: int, spacecraft ID
    - et: float, ephemeris time
    
    Returns:
    str: spacecraft clock string
    """

def sce2t(sc: int, et: float) -> float:
    """
    Convert ephemeris time to spacecraft clock ticks.
    
    Parameters:
    - sc: int, spacecraft ID
    - et: float, ephemeris time
    
    Returns:
    float: spacecraft clock ticks
    """

def sce2c(sc: int, et: float) -> float:
    """
    Convert ephemeris time to continuous spacecraft clock ticks.
    
    Parameters:
    - sc: int, spacecraft ID
    - et: float, ephemeris time
    
    Returns:
    float: continuous spacecraft clock ticks
    """

Spacecraft Clock Formatting

Format and decode spacecraft clock strings.

def scfmt(sc: int, ticks: float) -> str:
    """
    Format spacecraft clock ticks as string.
    
    Parameters:
    - sc: int, spacecraft ID
    - ticks: float, spacecraft clock ticks
    
    Returns:
    str: formatted spacecraft clock string
    """

def scencd(sc: int, sclkch: str) -> float:
    """
    Encode spacecraft clock string to ticks.
    
    Parameters:
    - sc: int, spacecraft ID
    - sclkch: str, spacecraft clock string
    
    Returns:
    float: spacecraft clock ticks
    """

def scdecd(sc: int, sclkdp: float) -> str:
    """
    Decode spacecraft clock ticks to string.
    
    Parameters:
    - sc: int, spacecraft ID
    - sclkdp: float, spacecraft clock ticks
    
    Returns:
    str: spacecraft clock string
    """

Spacecraft Clock Information

Query spacecraft clock parameters and metadata.

def scpart(sc: int) -> Tuple[int, ndarray, ndarray]:
    """
    Get spacecraft clock partition information.
    
    Parameters:
    - sc: int, spacecraft ID
    
    Returns:
    Tuple[int, ndarray, ndarray]: (nparts, pstart, pstop)
    - nparts: number of partitions
    - pstart: partition start times
    - pstop: partition stop times
    """

def sctiks(sc: int, clkstr: str) -> float:
    """
    Convert spacecraft clock string to ticks.
    
    Parameters:
    - sc: int, spacecraft ID
    - clkstr: str, spacecraft clock string
    
    Returns:
    float: number of ticks
    """

def scard(cell: SpiceCell) -> int:  
    """
    Get spacecraft clock cardinality (number of elements).
    
    Parameters:
    - cell: SpiceCell, spacecraft clock cell
    
    Returns:
    int: number of elements in cell
    """

Common Usage Patterns

Basic Time Conversion

import spiceypy as spice

# Load required kernels
spice.furnsh("spacecraft_sclk.tsc")  # Spacecraft clock kernel
spice.furnsh("leapseconds.tls")     # Leap seconds kernel

spacecraft_id = -123

# Convert ephemeris time to spacecraft clock
et = spice.str2et("2023-01-01T12:00:00")
sclk_string = spice.sce2s(spacecraft_id, et)
sclk_ticks = spice.sce2t(spacecraft_id, et)

print(f"ET: {et}")
print(f"SCLK string: {sclk_string}")
print(f"SCLK ticks: {sclk_ticks}")

# Convert spacecraft clock back to ephemeris time
et_converted = spice.scs2e(spacecraft_id, sclk_string)
et_from_ticks = spice.sct2e(spacecraft_id, sclk_ticks)

print(f"ET from string: {et_converted}")
print(f"ET from ticks: {et_from_ticks}")

Working with Spacecraft Clock Partitions

import spiceypy as spice

# Get spacecraft clock partition information
spacecraft_id = -123
nparts, pstart, pstop = spice.scpart(spacecraft_id)

print(f"Spacecraft {spacecraft_id} has {nparts} clock partitions:")

for i in range(nparts):
    start_et = spice.sct2e(spacecraft_id, pstart[i])
    stop_et = spice.sct2e(spacecraft_id, pstop[i]) 
    
    start_utc = spice.et2utc(start_et, "C", 0)
    stop_utc = spice.et2utc(stop_et, "C", 0)
    
    print(f"  Partition {i}: {start_utc} to {stop_utc}")
    print(f"    Ticks: {pstart[i]} to {pstop[i]}")

Formatting Spacecraft Clock Times

import spiceypy as spice

spacecraft_id = -123

# Get current spacecraft clock time
et_now = spice.str2et("2023-06-15T14:30:00")
sclk_ticks = spice.sce2t(spacecraft_id, et_now)

# Format in different ways
sclk_string = spice.scfmt(spacecraft_id, sclk_ticks)
decoded_string = spice.scdecd(spacecraft_id, sclk_ticks)

print(f"SCLK ticks: {sclk_ticks}")
print(f"Formatted SCLK: {sclk_string}")
print(f"Decoded SCLK: {decoded_string}")

# Parse spacecraft clock string to ticks
parsed_ticks = spice.scencd(spacecraft_id, sclk_string)
ticks_from_sctiks = spice.sctiks(spacecraft_id, sclk_string)

print(f"Parsed ticks (scencd): {parsed_ticks}")
print(f"Parsed ticks (sctiks): {ticks_from_sctiks}")

Continuous Clock Conversion

import spiceypy as spice

spacecraft_id = -123

# Convert to continuous spacecraft clock (handles partition boundaries)
et = spice.str2et("2023-01-01T12:00:00")
continuous_ticks = spice.sce2c(spacecraft_id, et)

print(f"ET: {et}")
print(f"Continuous SCLK ticks: {continuous_ticks}")

# Note: Continuous ticks can span partition boundaries
# unlike regular ticks which reset at each partition

Batch Time Conversion

import spiceypy as spice
import numpy as np

spacecraft_id = -123

# Convert multiple times
times_utc = [
    "2023-01-01T00:00:00",
    "2023-01-01T06:00:00", 
    "2023-01-01T12:00:00",
    "2023-01-01T18:00:00",
    "2023-01-02T00:00:00"
]

print("Time conversion table:")
print("UTC                   ET           SCLK String    SCLK Ticks")
print("-" * 70)

for utc_str in times_utc:
    et = spice.str2et(utc_str)
    sclk_str = spice.sce2s(spacecraft_id, et)
    sclk_ticks = spice.sce2t(spacecraft_id, et)
    
    print(f"{utc_str}  {et:12.3f}  {sclk_str:12s}  {sclk_ticks:12.3f}")

Error Handling for Clock Conversions

import spiceypy as spice

spacecraft_id = -123

try:
    # Attempt conversion that might fail
    et = spice.str2et("2025-01-01T12:00:00")  # Future time
    sclk_string = spice.sce2s(spacecraft_id, et)
    print(f"Conversion successful: {sclk_string}")
    
except spice.SpiceyError as e:
    print(f"Clock conversion failed: {e}")
    print("This might happen if:")
    print("  - SCLK kernel doesn't cover the requested time")
    print("  - Spacecraft ID is invalid")
    print("  - Required kernels aren't loaded")

Install with Tessl CLI

npx tessl i tessl/pypi-spiceypy

docs

ck-orientation.md

coordinate-systems.md

data-structures.md

dsk-shape-models.md

e-kernels.md

ephemeris-trajectories.md

error-handling.md

event-finding.md

geometry-surface.md

index.md

kernel-management.md

low-level-file-access.md

physical-constants.md

reference-frames.md

spacecraft-clock.md

time-systems.md

vector-matrix.md

tile.json