czwartek, 10 grudnia 2015

Obliczanie czasu gwiazdowego LST

Poniżej znajduje się pythonowa funkcja przeliczająca datę podaną jako dzień roku 2015, wraz z odpowiednią godziną podaną jako ułamek tego dnia w UT, na lokalny czas gwiazdowy. Wewnątrz funkcji znajduje się definicja współrzędnych geograficznych radioteleskopu RT4, ale można bez problemu to zmienić na jakieś inne, bądź zrobić tak, by funkcja przyjmowała współrzędne w argumentach wejściowych.


def LST(dzien_roku_2015):
  # Współrzędne radioteleskopu RT4
  Lambda = 18.56406 # 18°33'50.6"
  fi     = 53.09546 # 53°05'43.7" (nie potrzebne tu, ale...)
  #-------------------------------
  liczba_dni = int(dzien_roku_2015)
  ulamek_dnia_ut = (24.0*dzien_roku_2015) % 24
  # GMST Greenwitch 1.01.2015 UT1: 0h
  GMST_2015 = 6.0 + 41.0/60.0 + 19.1318/60.0/60.0                 
  # 6h 41m 19.1318s - żródło: Rocznik Astronomiczny na rok 2015, str 8
  GST_0h = (GMST_2015 + (liczba_dni-1) * 24.06570982441908)% 24   
  # czas gwiazdowy w Greenwith w danym dniu o 0hUT
  GST_UT = GST_0h + (1.0+1.0/365.2422)*ulamek_dnia_ut
  LST_UT = GST_UT + Lambda/360.0*24.0
  print("LST: %f, LST_HMS: %dh%dm%fs" % (LST_UT, int(LST_UT),\
  int(LST_UT*60.0 % 60), LST_UT*60.0*60.0 % 60) )
  return LST_UT

Funkcja działa nie tylko na rok 2015 - jeśli data jest np późniejsza, wystarczy dodać odpowiednią ilość dni, np. 365 dla roku 2016. Zapewne w kolejnych wersjach ją ulepszę. Działania są na tyle proste, że można je szybko przenieść do innych języków.

Do uzyskania podobnego efektu w Pythonie (ale już bez podglądania co się dzieje dokładnie) można wykorzystać moduł ephem.

obserwator = ephem.Observer()  
obserwator.long, obserwator.lat = '18.56406', '53.09546' 
obserwator.date = '2015/1/1 00:00'
LST = obserwator.sidereal_time() 
print LST

Z mojej obserwacji wynika, że oba fragmenty kodu dają zbieżne wyniki z dokładnością do sekundy.

Brak komentarzy:

Prześlij komentarz