Navigator / tests / gps_ephm / test_ephemeris_algorathim.py
test_ephemeris_algorathim.py
Raw
import pytest
from navigator.parse import Parser, IParseGPSNav
from navigator.core import Satellite, IGPSEphemeris
from tests.common_fixtures import (
    skydel_sim_nav_filepath,
    skydel_sim_g10_l1c,
)
import numpy as np
import pandas as pd


def test_ephemeris_alograthim(skydel_sim_nav_filepath, skydel_sim_g10_l1c):
    # Unpack the nav_data
    metadata, data = IParseGPSNav().parse(filename=skydel_sim_nav_filepath)
    # Read the true state csv file
    g10_true = pd.read_csv(skydel_sim_g10_l1c)

    # Create a gps ephemris processor
    ephemeris_processor = Satellite(iephemeris=IGPSEphemeris())
    state_cols = ["ECEF X (m)", "ECEF Y (m)", "ECEF Z (m)", "Clock Correction (s)"]

    # Start time of simulation
    startTime = pd.Timestamp.fromisoformat("2024-01-02 10:00:00")
    svTime = [
        startTime + pd.Timedelta(ms, unit="ms")
        for ms in g10_true["PSR satellite time (ms)"]
    ]

    state = []

    for t in svTime:
        state.append(
            ephemeris_processor(
                t=t,
                metadata=metadata,
                data=data.xs("G10", level="sv", drop_level=False),
            )
        )
    # Convert the state to a DataFrame
    state = pd.DataFrame(np.vstack(state), columns=state_cols)

    # Assert the state is equal to the true state
    assert np.allclose(state.values, g10_true[state_cols].values, atol=1e-5)