Jedną z rzeczy, która sprawia, że Python jest tak potężny jest to, że posiada moduły prawie na wszystko. W tym artykule omówię Astropy, który został opracowany przez Space Telescope Science Institute. Narzędzie zajmuje się między innymi wykonywaniem astronomicznych obliczeń przetwarzania obrazu.
Ponieważ mówimy o programowaniu w języku Python, można ten moduł zainstalować albo za pomocą komendy pip
lub easy_install
. Większość dystrybucji Linuksa powinno być wyposażonych w pakeit Astropy.
Przykładowo w systemach opartych na Debianie, wystarczy wydać polecenie:
sudo apt-get install python-astropy
Istnieje również oddzielny pakiet python-astropy-doc
, który zawiera dodatkową dokumentację Astropy. Ponieważ jest on dość dużym systemem, został podzielony na sub-pakiety. Powinno to być znane każdemu, kto pracował wcześniej z oprogramowaniem, takim jak scipy lub NumPy.
Tak więc użycie następującego polecenia, może nie być za bardzo przydatne:
import astropy
Bardziej potrzebne będzie zaimportowanie sub-pakietów:
from astropy.io import fits
Istnieją sub-pakiety do obsługi plików IO, kosmologicznych obliczeń oraz koordynacji systemów i wiele wiele innych. Postaram się wprowadzić Państwa do niektórych z dostępnych funkcjonalności.
Najpierw przyjrzyjmy się, jak sobie radzić z plikami danych, ich wspólny format używany w astrofizyce i astronomii jest formatem FITS. Pakiet pyFITS dla Pythona został napisany dla odczytu i zapisu owych plików. Kod ten jest aktualnie taki sam jak ten z sub-pakietów astropy.io.fits
, więc można go używać w taki sam sposób.
from astropy.io import fits as pyfits
W tej formie można korzystać z istniejącego kodu, stosowanego do zarządzania plikami i to bez konieczności dodawania nowych zmian. Pierwszą rzeczą, którą trzeba zrobić to otworzyć plik danych z:
from astropy.io import fits
hdulist = fits.open("My_File.fit")
To zwraca obiekt, który zachowuje się jak lista. Każdy element zwróconego obiektu mapy do nagłówków danych w pliku. Można uzyskać więcej informacji na temat pliku, za pomocą polecenia:
hdulist.info()
Każdy z poszczególnych elementów ma część nagłówka i danych. Można z nich korzystać, aby zobaczyć szczegółowe informacje na temat danych, które znajdują się w przetwarzaniu. Oprócz funkcji bibliotecznych, Astropy zawiera szereg narzędzi wiersza polecenia do pracy z plikami FITS, np. nagłówki można sprawdzić za pomocą fitsheader
.
Również można sprawdzić swój FITS z fitscheck
, oraz znaleźć różnice między dwoma plikami z fitsdiff
. Częstym procesem obliczeniowym w astronomii jest przetwarzanie obrazu. Splot sub-pakietu zawiera dwa rodzaje operacji: bezpośredni i FFT,można zrobić jedno-, dwu- i trójwymiarowe sploty. Pod pakiet wizualizacji zajmuje się bardziej podstawowym przetwarzaniem obrazu, takim jak normalizacja i rozciąganie. Można połączyć kilka transformacji bardzo łatwo, operator + jest przeciążony, aby zastosować te, które są dodane razem w cyklu, polecenie powinno być wpisane w ten sposób:
transform = SqrtStretch() + PercentileInterval(90.)
I daje nam to nową funkcje, przekształcenie, które łączy dwie oddzielne przemiany w jednym etapie. Ta część sub-pakietu zawiera również skrypt, który może zrobić konwersje pomiędzy dwoma różnymi formatami plików.
Kolejnym typowym zadaniem obliczeniowym w astronomii są statystyki oparte na obserwacji. Astropy zapewnia sub-pakiet o nazwie stats, chociaż sub-pakiet scipy.stats zawiera wiele funkcji, niektórych z nich brakuje, więc astropy-stats wypełnia te luki.
Kiedy już dane są załadowane, można użyć pod pakietu do modelowania, przykładowo modelowanie 1D i 2D z astropy.modeling
, obejmuje dopasowanie krzywej w funkcjonalności, gdzie można zrobić dopasowanie funkcji liniowej i nieliniowej. Nie ma wbudowanej funkcji, aby móc dopasować krzywe Gaussa oraz wielomiany, ta możliwość montażu jest obsługiwana z metody najmniejszych kwadratów. W wersji 1.0 można budować złożone modele poprzez łączenie dotychczasowych modeli z operatorami arytmetycznymi.
Gdy wszystko już jest gotowe do tego aby móc robić obliczenia, należy użyć stałych, zamiast zapamiętywać je i wykorzystywać z potencjalnymi literami, Astropy zawiera kompletną listę wszystkich standardowych stałych naukowych, które będą potrzebne podczas wykonywania pracy numerycznej. Można zaimplementować całą listę z:
from astropy import constants
Jeżeli potrzeba jest użycia tylko kilku z nich, to można bardzo szybko zaimportować je z tego:
from astropy.constants import c
Naprawdę świetną sprawą o stałych tych jest to, że są one w rzeczywistości obiektami „Quantity”. Oznacza to zmianę jednostek, używa się to za pomocą polecenia:
c.to('km/s')
Jest to bardzo powszechne, można użyć jednostek CGS z c.cgs
. Istnieją również dwa sub-pakiety do obsługi układów współrzędnych, systemy układu współrzędnych astronomicznych są obsługiwane przez sub-pakiet układu współrzędnych, systemy układu współrzędnych są obsługiwane poprzez sub-pakiet wcs. W sub-pakiecie tym, głównym obiektem jest SkyCoord. Metody w nim zawarte zajmują się konwersją pomiędzy układami współrzędnych, oraz obliczaniem odległości od zadanego punktu do źródła w danym systemie współrzędnych. Sub-pakiet wcs pozwala na mapowanie danych z pliku na układach tych „rzeczywistego świata”, w celu ich poprawnej analizy. Zawiera to funkcje, które pozwalają poradzić sobie z komplikacjami, jak na przykład rzutowanie na sferę niebieską. Co ciekawe można nawet zrobić obliczenia związane z kosmologią w Astropy. Sub-pakiet kosmologii zawiera funkcje do modelowania ewolucji całego wszechświata w oparciu o zestaw początkowych warunków, które zresztą można wybierać. Chociaż można wybrać ustawienia własne, dostępnych jest kilka wbudowanych opcji związanych z kosmologią. Są one oparte na WMAP oraz Planck danych satelitarnych. Większość funkcji jest zbudowanych od obiektu rdzenia FLRW, który reprezentuje jednorodną, izotropową kosmologię, zdefiniowaną przez metrykę Friedmann-Lemaitre-Robertsona-Walkera z ogólnej teorii względności. Jednakże nie może być on stosowany bezpośrednio, potrzebne jest użycie sub-klasy.
Uważam, że warto poświęcić chwile, żeby spojrzeć na rozszerzony świat, pełny dostępnych pakietów.