PyEphem Krzysztof Katarzyński Centrum Astronomii UMK Proponuję opodatkować wszystkich cudzoziemców, którzy nie mieszkaja w naszym kraju! Latajacy Cyrk Monty Pythona
PyEphem Moduł PyEphem (rhodesmill.org/pyephem/) pozwala wykonywać wiele profesjonalnych obliczeń astronomicznych. Można przy jego pomocy: wyliczać pozycje Słońca, Księżyca, planet oraz ich księżyców, ustalać aktualne położenie asteroid, komet oraz sztucznych satelitów (należy podać elementy orbitalne), wyznaczać wschody, zachody różnych obiektów w zależności od pozycji obserwatora na powierzchni Ziemi, odnajdywać w jakim gwiazdozbiorze znajduje się dany obiekt, wyliczać pozycję gwiazd, galaktyk itd. PyEphem bazuje na procedurach napisanych dla programu XEphem (www.clearskyinstitute.com/xephem/), który od wielu lat dostępny jest dla użytkowników systemów Unix-owych. Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 2/52
Jak zainstalować Moduł PyEphem w wersji źródłowej lub dla Windows (32 bit) można pobrać ze strony głównej programu: rhodesmill.org/pyephem/ W systemach Linux opartych o archiwa debianowe można do instalacji modułu użyć programu pip sudo apt - get install pip # jeż eli pip nie jest zainstalowany sudo pip install pyephem Instalator dla Windows 32 i 64 bit można znaleźć również na stronie: www.lfd.uci.edu/ gohlke/pythonlibs/#pyephem Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 3/52
1 Importowanie modułu oraz pozycja obserwatora Moduł PyEphem dostępny jest pod nazwa ephem, która w trakcie importowania warto zmienić na ep aby skrócić programowanie #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * # dla wygody zmieniamy nazw ę ephem na ep import ephem as ep # OBSERWATOR # tworzymy struktur ę, w któ rej przechowywane # będą dane o pozycji obserwatora obs = ep. Observer () obs. lon = " 18.56406 " # dł ugo ść geograficzna obs. lat = " 53.09546 " # szeroko ść geograficzna obs. elevation = 133.61 # wysoko ść n. p. m Funkcje oraz struktury modułu ephem wywołujemy piszac ep.funkcja(). W pierwszej kolejności definiujemy położenie obserwatora (instrumentu obserwacyjnego). W tym celu tworzymy odpowiednia strukturę (struktura = ep.observer()) i wypełniamy jej pola (struktura.pole = wartość). Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 4/52
1 Obiekty oraz ich położenie Wszystkie ważne obiekty astronomiczne takie jak Słońce, Księżyc, planety oraz ich księżyce można tworzyć funkcja struktura = ep.nazwaobiektu(). Obowiazuj a nazwy anglojęzyczne. # OBIEKT # tworzymy struktur ę, w któ rej przechowywane będą dane # o pozycji obiektu ks = ep. Moon () # Ksi ężyc Po utworzeniu obiektu możemy wyliczyć jego aktualne położenie podajac informacje na temat obserwatora, które znajduja się utworzonej wcześniej strukturze obs. # OBLICZENIA # obliczmy aktualn ą pozycj ę obiektu dla utworzonego # wcze ś niej obserwatora ks. compute ( obs ) Jak widać można zdefiniować kilku różnych obserwatorów i policzyć współrzędne wybranego obiektu dla różnych miejsc na Ziemi. Może to być przydatne przy planowaniu kampanii obserwacyjnych prowadzonych przez różne obserwatoria. Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 5/52
1 Odczyt współrzędnych Obliczone współrzędne odczytujemy z pól struktury obiektu # WYLICZONE WSP ÓŁRZĘ DNE print " Aktualna pozycja Ksi ęż yca " print " -------------------------" # wypisujemy rektascensj ę i deklinacj ę print "RA:", ks.ra print " Dec :", ks.dec # oraz wsp ółrzę dne azymutalne print " -------------------------" print "Az:", ks.az print "El:", ks.alt Wyliczone wartości podawane sa w formacie godziny:minuty:sekundy lub stopnie:minuty:sekundy łuku dla aktualnego czasu UT na epokę 2000. Aktualna pozycja Ksi ęż yca ------------------------- RA: 23:42:46.99 Dec : 0:31:15.1 ------------------------- Az: 251:35:22.6 El: 14:02:16.7 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 6/52
1 Współrzędne w stopniach Wszystkie współrzędne wyliczane przez procedury modułu PyEphem podawane sa w radianach. Jednak w momencie gdy chcemy np. wypisać ich wartość, radiany automatycznie zamieniane sa do odpowiedniego formatu (godziny, minuty, sekundy w przypadku rektascensji lub stopnie, minuty, sekundy łuku dla innych współrzędnych). Jeżeli wyliczone współrzędne chcemy wykorzystać na wykresie to warto przeliczyć je na stopnie używajac funkcji degrees. # wsp ółrzę dne azymutalne w stopniach jako liczba rzeczywista print " -------------------------" print "Az:", degrees (ks.az) print "El:", degrees (ks.alt ) Azymut i elewacja w stopniach: Az: 251.589608266 El: 14.0379640039 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 7/52
2 Miasta oraz dowolny czas Jeżeli nie znamy dokładnego położenia obserwatora i równocześnie potrzebujemy jedynie szacunkowe wartości współrzędnych, aby np. ocenić czy dany obiekt jest akurat widoczny, to możemy wykorzystać jedno ze 122 miast, których pozycje zostały zapisane w module Py- Ephem. # OBSERWATOR obs = ep. city (" London ") print "dł ugo ść geograficzna : ", obs. lon print " szeroko ść geograficzna :", obs. lat Każdemu obserwatorowi możemy przypisać dowolna datę i czas: # W Ł ASNA DATA I CZAS UT obs. date = " 2014/05/24 12:00:00 " należy jedynie pamiętać aby cyfry daty były rozdzielone znakiem / a czas dwukropkiem. Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 8/52
3 Ruch dzienny Słońca poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # OBSERWATOR obs = ep. city (" Warsaw ") # OBIEKT sun = ep. Sun () # GODZINA tm = linspace (0, 24, 25) # BIEGUNOWY UKŁAD WSP ÓŁRZĘ DNYCH pt = subplot (111, polar = True ) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 9/52
3 Ruch dzienny Słońca przesilenie letnie # GŁÓ WNA PĘ TLA for t in tm: # PRZESILENIE LETNIE # zmieniamy godzin ę obs. date = " 2014/06/21 %02 d :00:00 " % t # obliczamy wsp ółrzę dne sun. compute ( obs ) # pobieramy wsp ółrzę dne azymutalne - azymut w radianach az = float ( repr ( sun.az )) el = degrees ( float ( repr ( sun. alt ))) # rysowanie - elewacj ę zamieniamy na odleg łość zenitaln ą pt. plot ([ az], [90 - el], ls="", marker ="o", c=" yellow ", \ markersize =10) # czas lokalny UT +2 godziny w lecie if el > 0: pt. text (az, 90 -el, " %02 d" % (t+2), fontsize =10, \ ha= left, va= center ) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 10/52
3 Ruch dzienny Słońca przesilenie zimowe # PRZESILENIE ZIMOWE - powtarzamy obliczenia " w grudniu " obs. date = " 2014/12/22 %02 d :00:00 " % t sun. compute ( obs ) az = float ( repr ( sun.az )) el = degrees ( float ( repr ( sun. alt ))) pt. plot ([ az], [90 - el], ls="", marker ="o", c=" blue ", \ markersize =10) # czas lokalny UT +1 godzina w zimie if el > 0: pt. text (az, 90 -el, " %02 d" % (t+1), fontsize =10, \ ha= left, va= center ) # ograniczamy odleg łość zenitaln ą do 90 stopni - horyzont pt. set_rmax (90.0) # ustawiamy pół noc na gó rze wykresu pt. set_theta_zero_location (" N") savefig (" RuchSlonca. pdf ") show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 11/52
3 Ruch dzienny Słońca rysunek 90 45 05 06 07 08 09 0 90 80 70 60 50 40 30 20 10 10 11 12 13 14 15 315 20 19 18 17 16 270 08 135 09 10 11 12 13 14 15 225 180 W programie warto też zadać inne miasto np. obs = ep.city("cairo") Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 12/52
4 Ruch wsteczny Marsa poczatek programu Już w starożytności zauważono, że ruch niektórych obiektów na niebie ma odmienny charakter od ruchu większości tzw. gwiazd stałych. Obiekty takie nazywano gwiazdami bładz acymi lub wędrowcami (gr. planetami). Dziś wiemy, że bładzenie planet to efekt złożenia ich ruchu z ruchem Ziemi wokół Słońca. Możemy prześledzić to zjawisko na przykładzie Marsa. #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # potrzebne będą dwie dodatkowe funkcje z modu łu datetime from datetime import datetime, timedelta # OBSERWATOR obs = ep. city (" Warsaw ") # MARS mr = ep. Mars () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 13/52
4 Ruch wsteczny Marsa główna pętla for i in range (0, 181): # zmieniamy dat ę co jeden dzie ń przez pół roku dt = datetime (2014, 1, 1) + timedelta ( i) ds = "%d /%02 d /%02 d" % (dt.year, dt.month, dt.day ) print " dzien roku :", i+1, ds # ustawiamy dat ę obserwatora i obliczamy wsp ółrzę dne obs. date = ds mr. compute ( obs ) ra = degrees ( float ( repr (mr.ra ))) de = degrees ( float ( repr (mr.dec ))) # rysujemy pozycje plot ([ ra], [de], c=" orange ", marker ="o") # dodajemy opis daty ś rednio co 10 dni if (dt.day %10) == 0: text (ra, de, ds, fontsize =8) # opis rysunku xlabel ("$\\ alpha$ ") ylabel ("$\\ delta$ ") title (" Ruch wsteczny Marsa w 2014 roku ") savefig (" RuchMarsa. pdf ") show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 14/52
4 Ruch wsteczny Marsa rysunek 2 Ruch wsteczny Marsa w 2014 roku 3 4 2014/05/10 2014/05/20 2014/04/30 2014/05/30 2014/04/20 2014/01/10 2014/06/10 δ 5 2014/04/10 2014/01/20 6 2014/06/20 2014/03/30 2014/01/30 7 2014/06/30 2014/03/20 2014/02/10 2014/02/20 2014/03/10 8 185 190 195 200 205 210 α Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 15/52
5 Ruch wsteczny Marsa zmiana opisu osi # zamiana rektascensji podanej w stopniach # na format godzina, minuta, sekunda def RAd2hms (x, loc ): h = x //15 m = int ((( x- h *15.0)/15.0)*60.0) s = (( x- h*15 - m /4.0)/15.0)*3600.0 return " %02 dh %02 dm %02 ds" % (h, m, s) # zamiana deklinacji podanej w stopniach # na format stopie ń, minuta, sekunda ł uku def DEd2dms (x, loc ): d = int ( fabs (x)) m = int (( fabs (x)-d )*60) s = ( fabs (x)-d-m /60.0)*3600.0 if x <0: d= -1*d return " %02 dd %02 dm %02 ds" % (d, m, s) # opis rysunku xlabel (" $\\ alpha$ ") # poni żej wstawiamy nasz ą funkcj ę gca (). xaxis. set_major_formatter ( FuncFormatter ( RAd2hms )) ylabel (" $\\ delta$ ") # poni żej wstawiamy nasz ą funkcj ę gca (). yaxis. set_major_formatter ( FuncFormatter ( DEd2dms )) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 16/52
5 Zmiana opisu osi rysunek -2d30m00s Ruch wsteczny Marsa w 2014 roku -3d00m00s 2014/05/10 2014/05/20 2014/04/30-3d30m00s 2014/05/30 2014/04/20 δ2014/01/10-4d00m00s -4d30m00s 2014/06/10-5d00m00s -5d30m00s 12h32m00s 12h40m00s 12h48m00s 12h56m00s 13h04m00s 13h12m00s α 2014/06/20 2014/04/10 2014/01/20 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 17/52
6 Ruch księżyców Jowisza poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # TWORZYMY OBIEKTY Io = ep.io () Eu = ep. Europa () Ga = ep. Ganymede () Ca = ep. Callisto () # PUSTE TABLICE DO KTÓ RYCH BĘ DZIEMY # DOPISYWA Ć KOLEJNE WSP ÓŁRZĘ DNE y = [] # wsp ó lna wsp. y xio = [] # wsp ółrzę dna x dla xeu = [] # każ dego ksi ęż yca xga = [] # osobno xca = [] Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 18/52
6 Ruch księżyców Jowisza główna pętla # krok czasowy - godzina dt = ep. hour # czas pocz ą tkowy ts = ep. now () # czas aktualny tm = ts # GŁÓ WNA PĘ TLA OBLICZENIOWA for i in range (2*24): # obliczamy wsp. y- ową y. append ((tm -ts )*24.0) # obliczamy wsp. x- owe Io. compute (tm) Eu. compute (tm) Ga. compute (tm) Ca. compute (tm) # dodajemy wyliczenia do tablic xio. append (Io.x) xeu. append (Eu.x) xga. append (Ga.x) xca. append (Ca.x) # zwi ę kszamy czas o godzin ę tm += dt Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 19/52
6 Ruch księżyców Jowisza wykres # rysujemy wynik plot (xio, y, marker ="o", label ="Io") plot (xeu, y, marker ="o", label =" Europa ") plot (xga, y, marker ="o", label =" Ganimedes ") plot (xca, y, marker ="o", label =" Kallisto ") plot ( zeros ( len (y)), y, marker ="o", markersize =10, label =" Jowisz ", color =" orange ") # opis rysunku xlabel (u" pozycja wzgl ę dem Jowisza ") ylabel (" czas od chwili obecnej \n(ut: %s)"%ts) title ( u" Ruch ksi ężyców galileuszowych ") grid () legend ( loc =1) savefig (" KsiezyceJowisza. pdf ") show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 20/52
6 Ruch księżyców Jowisza rysunek czas od chwili obecnej (UT: 2014/6/16 17:19:00) 50 40 30 20 Ruch ksi yców galileuszowych Io Europa Ganimedes Kallisto Jowisz 10 0 10 5 0 5 10 15 20 25 30 pozycja wzgl dem Jowisza Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 21/52
7 Wyznaczanie zaćmienia Słońca poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # OBSERWATOR obs = ep. city (" Warsaw ") # TWORZYMY OBIEKTY Slonce = ep. Sun () Ksiezyc = ep. Moon () # krok czasowy - godzina dt = ep. hour # czas pocz ą tkowy ts = ep. now () # czas aktualny tm = ts Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 22/52
7 Wyznaczanie zaćmienia Słońca główna pętla Sprawdzamy separację Słońca i Księżyca co godzinę przez następne 10 lat. for i in range (365*24*10): # ustawiamy aktualny czas obs. date = tm # obliczamy wsp ółrzę dne Slonce. compute ( obs ) Ksiezyc. compute ( obs ) # promienie rs = Slonce. radius rk = Ksiezyc. radius # obliczamy odleg łość ką tow ą sp = ep. separation ( Slonce, Ksiezyc ) # sprawdzamy czy suma promieni bę dzie # mniejsza od wyliczonej separacji if sp < rs+rk: # sprawdzamy czy Słońce bę dzie nad horyzontem if Slonce. alt > 0.0: print "UT: ", ep. Date (tm), " separacja :", sp # zwi ę kszamy czas o godzin ę tm += dt Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 23/52
7 Wyznaczanie zaćmienia Słońca wyniki Daty przewidzianego zaćmienia Słońca widocznego z Warszawy w ciagu następnych 10 lat. Należy pamiętać, że czas UT jest zapóźniony w stosunku do czasu lokalnego o godzinę w zimie i o dwie godziny w lecie. UT: 2015/3/20 09:35:55 separacja : 0:13:26.1 UT: 2015/3/20 10:35:55 separacja : 0:20:03.9 UT: 2021/6/10 10:35:55 separacja : 0:25:13.0 UT: 2021/6/10 11:35:55 separacja : 0:27:46.1 UT: 2022/10/25 09:35:55 separacja : 0:24:30.4 UT: 2022/10/25 10:35:55 separacja : 0:16:09.3 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 24/52
8 Przebieg zaćmienia poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # OBSERWATOR obs = ep. city (" Warsaw ") # TWORZYMY OBIEKTY Slonce = ep. Sun () Ksiezyc = ep. Moon () # krok czasowy - 20 minut dt = ep. hour /3.0 # czas pocz ą tkowy ts = ep. Date (" 2015/3/20 09:00:00 ") # ts = ep. Date ("2021/6/10 10:30:00") # ts = ep. Date ("2022/10/25 09:30:00") obs. date = ts Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 25/52
8 Przebieg zaćmienia poczatkowe wyliczenia # obliczamy wsp ółrzę dne Slonce. compute ( obs ) Ksiezyc. compute ( obs ) rs = degrees ( Slonce. radius ) rk = degrees ( Ksiezyc. radius ) # tworzymy wykres przypisuj ąc go do zmiennej pl pl = subplot (111, aspect =" equal ") # tytu ł wykresu z dat ą i czasem pl. set_title (u" pocz ą tek UT: "+ str (ep. Date (ts ))) # rysujemy Słońce w centrum sc = Circle ((0,0), rs, facecolor =" yellow ", edgecolor =" red ", lw =2) pl. add_artist ( sc) # wsp ółrzę dne Słońca pl. text (0, rs +0.1, "Az: %.1f, El: %.1 f" % ( degrees ( Slonce.az), degrees ( Slonce. alt )), ha= center, fontsize =14) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 26/52
8 Przebieg zaćmienia główna pętla # rysujemy kolejne pozycje Ksi ęż yca for i in range (7): print " czas UT: ", ep. Date ( ts) obs. date = ts # obliczamy wsp ółrzę dne Slonce. compute ( obs ) Ksiezyc. compute ( obs ) # obliczamy róż nic ę w pozycji az = degrees ( Slonce. az - Ksiezyc. az) el = degrees ( Slonce. alt - Ksiezyc. alt ) # rysujemy aktualn ą pozycj ę Ksi ęż yca wzgl ę dem Słońca kc = Circle ((az, el), rk, facecolor =" gray ", edgecolor =" black ", lw =2, alpha =0.3) pl. add_artist ( kc) # zwi ę kszamy czas o 20 minut ts += dt pl. set_xlim ( -1.0, 1.0) pl. set_ylim ( -1.0, 1.0) pl. set_xlabel (" stopnie ") pl. set_ylabel (" stopnie ") savefig (" Zacmienie. pdf ") show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 27/52
8 Przebieg zaćmienia rysunek 1.0 pocz tek UT: 2015/3/20 09:00:00 0.5 Az: 148.5, El: 33.2 stopnie 0.0 0.5 1.0 1.0 0.5 0.0 0.5 1.0 stopnie Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 28/52
8 Zaćmienie w czerwcu 2021 roku 1.0 pocz tek UT: 2021/6/10 10:30:00 0.5 Az: 177.4, El: 60.8 stopnie 0.0 0.5 1.0 1.0 0.5 0.0 0.5 1.0 stopnie Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 29/52
8 Zaćmienie w październiku 2022 roku 1.0 pocz tek UT: 2022/10/25 09:30:00 0.5 Az: 166.5, El: 24.8 stopnie 0.0 0.5 1.0 1.0 0.5 0.0 0.5 1.0 stopnie Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 30/52
Najbliższe całkowite zaćmienie W programie pyephem7.py podajemy Oslo zamiast Warszawy # OBSERWATOR obs = ep. city (" Oslo ") albo wybieramy się na jeszcze lepsza pozycję, na Morze Północne obs = ep. Observer () obs. lon = " 10.0 " obs. lat = " 72.0 " podobnie zmieniamy pozycję obserwatora w programie pyephem8.py, w którym ustawiamy też nowa datę # czas pocz ą tkowy ts = ep. Date (" 2015/3/20 09:00:00 ") Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 31/52
Całkowite zaćmienie widoczne z Morza Północnego 1.0 pocz tek UT: 2015/3/20 09:00:00 0.5 Az: 141.8, El: 14.1 stopnie 0.0 0.5 1.0 1.0 0.5 0.0 0.5 1.0 stopnie Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 32/52
9 Koniunkcja Księżyca i planet #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # OBSERWATOR obs = ep. city (" Warsaw ") # TWORZYMY OBIEKTY Slonce = ep. Sun () # sprawdzamy czy jest pod horyzontem Ksiezyc = ep. Moon () Wenus = ep. Venus () Mars = ep. Mars () Jowisz = ep. Jupiter () # krok czasowy - godzina dt = ep. hour # czas pocz ą tkowy ts = ep. now () # czas aktualny tm = ts Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 33/52
9 Koniunkcja Księżyca i planet główna pętla # GŁÓ WNA PĘ TLA PROGRAMU for i in range (365*24*2): # ustawiamy aktualny czas obs. date = tm # obliczamy wsp ółrzędne Slonce. compute (obs ) Ksiezyc. compute (obs ) Wenus. compute (obs ) Mars. compute (obs ) Jowisz. compute (obs ) # obliczamy separacj ę s1 = ep. separation (Wenus, Ksiezyc ) s2 = ep. separation (Mars, Ksiezyc ) s3 = ep. separation (Jowisz, Ksiezyc ) # separacja ma byc mniejsza jak 5 stopni if degrees (s1) < 5: # sprawdzamy czy Ksi ężyc bę dzie nad # horyzontem a Słońce pod horyzontem if degrees ( Ksiezyc.alt ) > 5.0 and degrees ( Slonce.alt ) < -5.0: print " ------------------------------------------------------" print u" poprzedni nów, UT:", ep. previous_new_moon (ep.date (tm )) print u"wenus -Księżyc, UT:", ep.date (tm), " separacja :", s1 print u" poz. Księżyca, Az:", Ksiezyc.az, "El:", Ksiezyc. alt Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 34/52
9 Koniunkcja Księżyca i planet główna pętla, cd. if degrees (s2) < 5: if degrees ( Ksiezyc.alt ) > 5.0 and degrees ( Slonce.alt ) < -5.0: print " ------------------------------------------------------" print u" poprzedni nów, UT:", ep. previous_new_moon (ep.date (tm )) print u"mars -Księżyc, UT:", ep.date (tm), " separacja :", s2 print u" poz. Księżyca, Az:", Ksiezyc.az, "El:", Ksiezyc. alt if degrees (s3) < 5: if degrees ( Ksiezyc.alt ) > 5.0 and degrees ( Slonce.alt ) < -5.0: print " ------------------------------------------------------" print u" poprzedni nów, UT:", ep. previous_new_moon (ep.date (tm )) print u"jowisz -Księżyc,UT:", ep.date (tm), " separacja :", s3 print u" poz. Księżyca, Az:", Ksiezyc.az, "El:", Ksiezyc. alt # zwi ę kszamy czas o godzin ę tm += dt Przykładowe rezultaty wyliczeń: ------------------------------------------------------ poprzedni nów, UT: 2015/9/13 06:41:15 Jowisz - Księżyc,UT: 2015/10/10 03:32:01 separacja : 4:39:14.6 poz. Księżyca, Az: 100:15:36.6 El: 12:31:04.8 ------------------------------------------------------ poprzedni nów, UT: 2015/10/13 00:05:43 Wenus - Księżyc, UT: 2015/11/7 02:32:01 separacja : 4:19:58.5 poz. Księżyca, Az: 105:40:27.4 El: 13:24:08.9 ------------------------------------------------------ poprzedni nów, UT: 2015/10/13 00:05:43 Mars - Księżyc, UT: 2015/11/7 02:32:01 separacja : 3:08:06.4 poz. Księżyca, Az: 105:40:27.4 El: 13:24:08.9 ------------------------------------------------------ Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 35/52
10 Mapa nieba poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep from ephem import stars # KATALOG JASNYCH GWIAZD # OBSERWATOR obs = ep. city (" Warsaw ") # KOLORY PLANET ko = [" yellow ", " grey ", " brown ", " cyan ", " red ", " orange ", " orange ", " cyan ", " blue "] # LISTA OBIEKT ÓW ob = [] ob. append (ep.sun ()) ob. append (ep. Moon ()) ob. append (ep. Mercury ()) ob. append (ep. Venus ()) ob. append (ep. Mars ()) ob. append (ep. Jupiter ()) ob. append (ep. Saturn ()) ob. append (ep. Uranus ()) ob. append (ep. Neptune ()) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 36/52
10 Mapa nieba główna pętla # DODAJEMY KATALOG JASNYCH GWIAZD for x in stars.db. split ("\n"): if x!="": ob. append (ep. readdb (x)) # OBLICZANIE WSP ÓŁRZĘ DNYCH for x in ob: x. compute ( obs ) # GŁÓ WNA PĘ TLA PROGRAMU i = 0 for x in ob: # obliczamy wsp. azymutalne az = degrees ( x. az) el = degrees (x. alt ) # kolory dla planet if i <= 8: plot ([ az], [el], markersize = int (-x. mag +10), ls="", marker ="o", color =ko[i], label =x. name ) else : plot ([ az], [el], markersize = int (-x. mag +10), ls="", marker ="o", color =" yellow ") # opisy obiekt ów text (az, el, x.name, fontsize =10) i += 1 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 37/52
10 Mapa nieba parametry wykresu # szary cie ń pod horyzontem xd = [0, 360] y1 = [ -90, -90] y2 = [0, 0] fill_between (xd, y1, y2, color =" black ", facecolor =" grey ", alpha =0.25) # opis rysunku xlabel (" azymut ") ylabel (" elewacja ") title ("%s, % s - planety oraz jasne gwiazdy " % ( obs.name, ep.now ())) legend ( ncol =3, numpoints =1) xlim (0, 360) ylim ( -90, 90) grid () show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 38/52
10 Mapa nieba Phecda Megrez Alioth Alcor Mizar Thuban Alcaid Warsaw, 2014/6/17 16:10:12 - planety oraz jasne gwiazdy Sun Moon Mercury Venus Mars Jupiter Merak Saturn Uranus Dubhe Neptune elewacja Kochab 50 Alfirk Alderamin Deneb Sadr 0 Scheat Markab Enif Sadalmelik Etamin Vega Sulafat Sheliak Albereo Tarazed Altair Alshain Izar Arcturus Alphecca Unukalhai Rasalgethi Rasalhague Saturn Cebalrai Antares Shaula Nunki Kaus Australis Denebola Vindemiatrix Mars Spica Gienah Corvi Minkar Mimosa Agena Algieba Regulus Pollux Castor Jupiter Menkalinan Capella Alphard Procyon Alhena Mercury Sun Elnath Betelgeuse Bellatrix AldebaranAtlas Alcyone Merope Maia Electra Taygeta Alnitak Alnilam Mintaka Sirius Mirzam Saiph Venus Wezen Rigel Adara Naos Arneb Nihal Menkar Zaurak Canopus Polaris Caph Schedar Algol Almach Mirach Hamal Sirrah Algenib Uranus 50 Neptune Moon Rukbat Arkab Prior Posterior Fomalhaut Peacock Achernar Alnair 0 50 100 150 200 250 300 350 azymut Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 39/52
11 Mapa nieba współrzędne biegunowe # WSP ÓŁRZĘ DNE BIEGUNOWE subplot (111, polar = True ) # GŁÓ WNA PĘ TLA PROGRAMU i = 0 for x in ob: # obliczamy wsp. azymutalne az = x. az # AZYMUT PODAJEMY W RADIANACH! el = degrees (x. alt ) # kolory dla planet if i <= 8: plot ([ az], [90 - el], markersize = int (-x. mag +10), ls="", marker ="o", color =ko[i]) else : plot ([ az], [90 - el], markersize = int (-x. mag +10), ls="", marker ="o", color =" yellow ") # opisy obiekt ów if el > 0: text (az, 90 -el, "\n"+x.name, fontsize =10, ha= center, va= top ) i += 1 # ograniczamy odleg łość zenitaln ą do 90 stopni gca (). set_rmax (90.0) # ustawiamy pół noc na gó rze wykresu gca (). set_theta_zero_location (" N") Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 40/52
11 Mapa nieba współrzędne biegunowe 0 90 45 Alcaid 80 70 60 Etamin Vega Sadr Deneb 315 Denebola Mizar Alcor Alioth Megrez Phecda Merak Dubhe Thuban 50 Kochab 40 30 20 Polaris Alderamin Alfirk Caph Schedar Scheat 10 Markab Sirrah 90 Algieba Regulus Menkalinan Capella Algol Almach Mirach Algenib 270 Moon Alphard Castor Pollux Jupiter Procyon Alhena Sun Mercury Elnath Betelgeuse Bellatrix Aldebaran Alcyone Taygeta Merope Electra Atlas Maia Venus Menkar Hamal Uranus Alnitak Alnilam Mintaka 135 Wezen Adara Sirius Mirzam Saiph Arneb Nihal Rigel Zaurak 225 180 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 41/52
12 Dwie mapy nieba razem Sun Moon Mercury Venus Mars Jupiter Saturn Uranus Neptune Warsaw, 2014/6/19 10:24:30 - planety oraz jasne gwiazdy 0 Menkalinan Capella 90 Vega 50 Dubhe Merak Kochab Megrez Phecda Thuban Alioth Alcor Mizar Alcaid Algieba Denebola Regulus Castor Pollux Jupiter Alphard Procyon Alhena Sun Mercury Elnath Betelgeuse Bellatrix Alnilam Mintaka Alnitak Saiph Rigel Sirius Mirzam Arneb Nihal Wezen Adara Atlas Alcyone Merope Maia Electra Taygeta Aldebaran Zaurak Venus Menkar Algol Hamal Almach Mirach Sirrah UranusAlgenib Scheat Markab Schedar Caph Alderamin Deneb Sadr Alfirk Polaris Etamin 45 Denebola Alcaid Mizar Alcor Alioth Megrez Phecda 80 Merak Dubhe 70 60 Thuban50 Kochab 40 30 20 10 Etamin Polaris Alderamin Alfirk Caph Schedar Sadr Deneb Sirrah 315 Scheat Markab elewacja 0 50 Izar Vindemiatrix AlpheccaArcturus Rasalgethi Rasalhague Unukalhai Saturn Mars Spica Gienah Corvi Minkar Mimosa Naos Canopus Achernar Alnair Moon Fomalhaut Enif Sadalmelik Neptune Altair Tarazed Alshain Vega Sulafat Sheliak Albereo 90 Cebalrai Algieba Regulus Alphard Jupiter Procyon Castor Pollux Alhena Menkalinan Capella Sun Mercury Elnath Betelgeuse Bellatrix Alnitak Alnilam Mintaka Aldebaran Algol Alcyone Taygeta Merope Electra Atlas Maia Venus Almach Mirach Hamal Menkar Algenib Uranus 270 Shaula Antares Agena Peacock Rukbat Arkab Posterior Prior Nunki Kaus Australis 135 Wezen Adara Sirius Mirzam Saiph Arneb Nihal Rigel Zaurak 225 0 50 100 150 200 250 300 350 azymut 180 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 42/52
Wczytywanie katalogów Moduł PyEphem pozwala wczytywać katalogi rożnych obiektów sporza- dzone jako pliki tekstowe, w formacie przyjętym dla programu Xephem (www.clearskyinstitute.com/xephem/help/xephem.html) M42 NGC 1976 LBN 974 Orion nebula,f N EN,5:35:17.1, -5:23:25,4,2000,3900 M43 NGC 1982 CED 55G,f N EN,5:35:31.3, -5:16:3,9,2000,1200 M44 NGC 2632 OCL 507 Praesepe,f O T2,8:39:57.2,19:40:21,3.1,2000,4200 M45,f U,03:47:0,24:07,1.6,2000,6600 Jedna linia katalogu opisuje jeden obiekt dla którego podana jest nazwa lub kilka nazw, typ, rektascensja, deklinacja, jasność widoma, epoka oraz dodatkowy parametr zależny od typu obiektu, np. rozmiar w milisekundach łuku. Źródła programu Xephem rozpowszechniane sa z dwoma katalogami Messier.edb oraz SKY2k65.edb. Pierwszy z plików zawiera katalog obiektów Messier a, natomiast drugi jest okrojona (obiekty do 6.5 mag) wersja katalogu SKY2000 (Myers J.R. et al. 2002). Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 43/52
13 Wczytanie katalogu Wczytujemy katalog z pliku tekstowego Messier.edb i linia po linii dodajemy obiekty do naszej listy obiektów ob. # WCZYTUJEMY KATALOG MESSIERA plik = open (" Messier. edb ", "r") for linia in plik : # ignorujemy linie komentarza # zaczynaj ą ce si ę znakiem # if linia [0]!= "#": ob. append (ep. readdb ( linia )) plik. close () Możemy też dodać własny obiekt do listy obiektów. # DODAJEMY WŁ ASNY OBIEKT ob. append (ep. readdb (" Centrum Galaktyki,f,17:45:40.04, -29:00:28.1, -1,2000,1200 ")) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 44/52
13 Mapa nieba z obiektami Messier a elewacja 50 0 Etamin M92 Kochab M13 Rasalgethi Rasalhague M82 M81 Dubhe M108 Merak M97 M40 Megrez M109 Phecda Thuban Alioth M106 Alcor Mizar M101 M102 Alcaid M51 M94 M63 Izar Alphecca Unukalhai M5 M3 Arcturus M105 M96 M95 M66 M65 Denebola M85 M64 M100 M99 M98 M91 M88 M86 M84 M53 M90 M60 M59 M89 M58 M87 M49 Vindemiatrix M61 Mars M104 Spica Algieba Regulus Gienah Corvi Minkar M68 Warsaw, 2014/6/19 10:52:20 - planety oraz jasne gwiazdy M44 M67 Castor Pollux Alphard Jupiter M48 Procyon M46 M47 M93 Naos M50 Alhena Sirius Mirzam M41 Wezen Adara M35 Canopus Menkalinan M37 Sun M1 Mercury Betelgeuse Bellatrix M78 Alnitak Alnilam Mintaka M43 M42 Saiph Rigel Arneb Nihal M79 M36M38 Elnath Aldebaran Zaurak Capella Atlas Alcyone M45 Merope Maia Electra Taygeta Venus Menkar M77 Hamal M74 Algol Uranus Sun Moon Mercury M34 M33 Algenib Moon Almach MirachM32 M31 M110 Sirrah M76 Markab Scheat Sadalmelik Neptune M2 Venus Mars Jupiter M103 Schedar Caph M52 Enif M15 M39 Alderamin Deneb M29 Sadr Vega Sulafat M57 Sheliak M56 Albereo M27 M71 Altair Tarazed Alshain Saturn Uranus Neptune Alfirk Polaris Cebalrai M12 M14 M10 M107 50 M9 M80 M23 Antares M4 M21 M8 M20 M19 M62 M6 M7 Shaula Saturn M83 Mimosa Agena Achernar Peacock Alnair Fomalhaut M30 M73 M72 Rukbat Arkab Posterior Prior M75 M55 M11 M26 M16 M17 M18 M25M24 Nunki M22 M28 M54 M70 M69 Kaus Australis 0 50 100 150 200 250 300 350 azymut Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 45/52
14 Katalog SKY 2000 Warsaw, 2014/6/19 12:09:17 - planety oraz katalog SKY 2000 Sun Moon Mercury Venus Mars Jupiter Saturn Uranus Neptune Centrum Galaktyki 50 Jupiter Sun Mercury Venus elewacja 0 Mars Uranus Moon Saturn Neptune 50 Centrum Galaktyki 0 50 100 150 200 250 300 350 azymut Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 46/52
15 Układ słoneczny poczatek programu #!/ usr / bin / env python # -*- coding : utf -8 -*- # IMPORTOWANIE from pylab import * import ephem as ep # OBIEKTY Merkury = ep. Mercury () Wenus = ep. Venus () Mars = ep. Mars () # CZAS tm = ep.now () # pocz ą tek dt = ep. hour *24*5 # krok # WSP ÓŁRZĘ DNE BIEGUNOWE subplot (111, polar = True ) # SŁOŃCE plot ([0], [0], marker ="o", color =" yellow ", markersize =20) Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 47/52
15 Układ słoneczny główna pętla # GŁÓ WNA PĘ TLA for i in range (140): # obliczenia Merkury. compute (tm) Wenus. compute (tm) Mars. compute (tm) # punkty na wykresie plot ([ Merkury. hlong ], [ Merkury. sun_distance ], ls="", marker ="o", c=" red ") plot ([ Wenus. hlong ], [ Wenus. sun_distance ], ls="", marker ="o", c=" blue ") plot ([ Mars. hlong ], [ Mars. sun_distance ], ls="", marker ="o", c=" orange ") # zwi ę kszamy krok czasowy tm += dt show () Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 48/52
15 Planety wewnętrzne 90 135 45 180 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 0 225 315 270 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 49/52
16 Planety zewnętrzne 90 135 45 5 10 15 20 25 30 35 180 0 225 315 270 Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 50/52
Lista programów 1./python/pyephem1.py 2./python/pyephem2.py 3./python/pyephem3.py 4./python/pyephem4.py 5./python/pyephem5.py 6./python/pyephem6.py 7./python/pyephem7.py 8./python/pyephem8.py 9./python/pyephem9.py 11./python/pyephem11.py 12./python/pyephem12.py 13./python/pyephem13.py./python/Messier.edb 14./python/pyephem14.py./python/SKY2k65.edb 15./python/pyephem15.py 16./python/pyephem16.py 10./python/pyephem10.py Krzysztof Katarzyński Centrum Astronomii UMK PyEphem, strona 51/52
Wszelkie prawa zastrzez one! Rozpowszechnianie oraz wykorzystywanie kursu i programów do niego dołaczonych, w całos ci lub fragmentach bez zgody autora jest zabronione!