Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix(events): prevent false detection of conjunctions
  • Loading branch information
Jérôme Deuchnord committed Mar 8, 2020
1 parent 8c1632b commit c7bc757
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
19 changes: 9 additions & 10 deletions kosmorrolib/events.py
Expand Up @@ -20,6 +20,7 @@

from skyfield.timelib import Time
from skyfield.searchlib import find_discrete, find_maxima
from numpy import pi

from .data import Event, Planet, ASTERS
from .core import get_timescale, get_skf_objects, flatten_list
Expand All @@ -32,15 +33,12 @@ def _search_conjunction(start_time: Time, end_time: Time) -> [Event]:

def is_in_conjunction(time: Time):
earth_pos = earth.at(time)
aster1_pos = earth_pos.observe(get_skf_objects()[aster1.skyfield_name]).apparent()
aster2_pos = earth_pos.observe(get_skf_objects()[aster2.skyfield_name]).apparent()
_, aster1_lon, _ = earth_pos.observe(aster1.get_skyfield_object()).apparent().ecliptic_latlon()
_, aster2_lon, _ = earth_pos.observe(aster2.get_skyfield_object()).apparent().ecliptic_latlon()

aster_1_right_ascension, _, _ = aster1_pos.radec()
aster_2_right_ascension, _, _ = aster2_pos.radec()
return ((aster1_lon.radians - aster2_lon.radians) / pi % 2.0).astype('int8') == 0

return aster_1_right_ascension.hours - aster_2_right_ascension.hours < 0

is_in_conjunction.rough_period = 1.0
is_in_conjunction.rough_period = 60.0

computed = []
conjunctions = []
Expand All @@ -54,10 +52,11 @@ def is_in_conjunction(time: Time):
if not isinstance(aster2, Planet) or aster2 == aster1 or aster2 in computed:
continue

times, _ = find_discrete(start_time, end_time, is_in_conjunction)
times, is_conjs = find_discrete(start_time, end_time, is_in_conjunction)

for time in times:
conjunctions.append(Event('CONJUNCTION', [aster1, aster2], time.utc_datetime()))
for i, time in enumerate(times):
if is_conjs[i]:
conjunctions.append(Event('CONJUNCTION', [aster1, aster2], time.utc_datetime()))

computed.append(aster1)

Expand Down
15 changes: 10 additions & 5 deletions test/events.py
Expand Up @@ -29,11 +29,16 @@ def test_find_oppositions(self):
self.assertEqual('Mars is in opposition', o[0].get_description())

def test_find_conjunctions(self):
# Test case: Mars opposition
# Source of the information: https://promenade.imcce.fr/en/pages6/887.html#mar
c1 = (events.search_events(date(2020, 1, 2)), [(['MERCURY', 'JUPITER BARYCENTER'], '^2020-01-02T15:20')])
c2 = (events.search_events(date(2020, 1, 12)), [(['MERCURY', 'SATURN BARYCENTER'], '^2020-01-12T04:34'),
(['MERCURY', 'PLUTO BARYCENTER'], '^2020-01-12T06:56')])
MERCURY = 'MERCURY'
JUPITER = 'JUPITER BARYCENTER'
SATURN = 'SATURN BARYCENTER'
PLUTO = 'PLUTO BARYCENTER'

c1 = (events.search_events(date(2020, 1, 2)), [([MERCURY, JUPITER], '^2020-01-02T16:41')])
c2 = (events.search_events(date(2020, 1, 12)), [([MERCURY, SATURN], '^2020-01-12T09:51'),
([MERCURY, PLUTO], '^2020-01-12T10:13'),
([SATURN, PLUTO], '^2020-01-12T16:57')])
c3 = (events.search_events(date(2020, 2, 7)), [])

for (c, expected_dates) in [c1, c2]:
self.assertEqual(len(expected_dates), len(c),
Expand Down

0 comments on commit c7bc757

Please sign in to comment.