Skip to content

EarthSatellite.find_events() can return culmination before rise if they are close in time #559

@bmatthiesen

Description

@bmatthiesen

When using the find_events() function in EarthSatellite, it seems a rise may be reported as culmination if the visibility is very short. This is reproduced in the following script:

import skyfield.api as sf
import numpy as np
import pandas as pd

# timescale
ts = sf.load.timescale()

# location on Earth
groundstation = sf.wgs84.latlon(+53.10373, +8.85132) # NW1

# satellite
line1 = '1 00172U 19029BR  21063.59692852  .00001103  00000-0  33518-4 0  9998'
line2 = '2 00172 53.00000  36.7036 0003481 299.7327  99.3331 15.05527065  1779'
sat = sf.EarthSatellite(line1, line2, 'Starlink 172', ts)

# find rise/set
tspan = (ts.tt_jd(sat.epoch.tt-1), ts.tt_jd(sat.epoch.tt + 31))
t, events = sat.find_events(groundstation, tspan[0], tspan[1], altitude_degrees=25)

e = events[6:12]
t2 = t[6:12]
d = sat - groundstation
df =pd.DataFrame({'event': e,
    'angle': [d.at(t).altaz()[0].degrees for t in t2],
    'time': [pd.Timestamp(t.utc_iso()) for t in t2]})

print(df)

The output is as follows:

   event      angle                      time
0      0  25.002596 2021-03-03 22:38:11+00:00
1      1  68.261852 2021-03-03 22:40:30+00:00
2      2  24.995762 2021-03-03 22:42:49+00:00
3      1  25.000144 2021-03-04 00:19:38+00:00
4      2  24.999859 2021-03-04 00:19:39+00:00
5      0  25.040335 2021-03-04 19:13:42+00:00

The problematic event is at index 3. The exact times (utc_jpl()) at index 3 and 4 are 'A.D. 2021-Mar-04 00:19:38.4819 UTC' and 'A.D. 2021-Mar-04 00:19:39.0614 UTC', respectively. I think the correct behavior should be to report a rise between index 2 and 3.

This might be related to #550.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions