Astronomija

Dobijte vidljive galaktičke dužine u astropiji

Dobijte vidljive galaktičke dužine u astropiji

Volio bih znati koji je dio Mliječne staze trenutno na snazi. Po mogućnosti koristeći astropiju. Sastojci koje imam su trenutno vrijeme i moj trenutni položaj na zemlji. Kako bih ih koristio da dobijem trenutno minimalnu i maksimalnu galaktičku dužinu?

(Znam kako pretvoriti iz Alt-Az u galaktičke koordinate, ali ne znam kojim azimutom galaktička ravnina prelazi horizont na nadmorskoj visini = 0.)


Sljedeće mi odgovara; koristi rootfinder iz scipyja za pronalaženje nule.

from astropy.coordinates import EarthLocation, AltAz, Galactic from astropy.time import Time from scipy.optimize import newton import astropy.units as u dwl = EarthLocation (lat = 6.39688 * u.deg, lon = 52.6275 * u.deg) mytime = Vrijeme ('2017-09-16T21: 00: 00') def altitude_of_ longitude (longitude): "Give visina (u stupnjevima) galaktičke dužine (u stupnjevima)" return Galactic (l = longitude * u.deg, b = 0 * u.deg) .transform_to (AltAz (mjesto = dwl, obstime = moje vrijeme)). Alt.value

Sada upotrijebite pronalazač iz scipy-a, s dva različita početna nagađanja, nadajući se da će završiti u dva različita rješenja tamo gdje galaktička ravnina prelazi horizont. To daje:

njutn (nadmorska visina_dužine, 0) >>> 16.231753986033333 njutn (nadmorska visina_dužine, 180) >>> 196.23547201834657

Preostaje samo provjeriti koji je dio vidljiv:

altaz = Galaktički (l = 0 * u.deg, b = 0 * u.deg) .transform_to (AltAz (mjesto = dwl, obstime = moje vrijeme)) altaz.alt >>> −9 ° 08'51.8623 "

Očito je zemljopisna dužina na 0 ° ispod (negativna nadmorska visina), pa je vidljivi dio između 16 ° i 196 ° galaktičke dužine.


Rad s FITS-kockama¶

U ovom uputstvu vizualizirat ćemo 2D i 3D skupove podataka u galaktičkim i ekvatorijalnim koordinatama.

Vodič će vas provesti kroz vizualnu analizu Malog magelanskog oblaka (SMC) pomoću emisije HI 21 cm i Herschelove mape od 250 mikrona. Naučit ćemo kako čitati podatke iz datoteke, postavljati upite i preuzimati odgovarajuće podatke iz Herschela pomoću astroqueryja te na više načina nacrtati rezultirajuće slike.

Mogu se instalirati pomoću conda:

Ako ne upotrebljavate conda, možete koristiti i pip.


Oznake osi¶

Oznake osi mogu se dodati metodom set_axislabel ():

Padding naljepnice osi s obzirom na osi također se može podesiti pomoću opcije minpad. Zadana vrijednost za minpad je 1 i odnosi se na veličinu fonta teksta naljepnice osi. Dopuštene su i negativne vrijednosti.


SkyCoord¶

Objekt na visokoj razini koji pruža fleksibilno sučelje za predstavljanje nebeskih koordinata, manipulaciju i transformaciju između sustava.

The SkyCoord klasa prihvaća širok izbor ulaza za inicijalizaciju. Oni najmanje moraju pružiti jednu ili više nebeskih koordinatnih vrijednosti s jednoznačnim jedinicama. Tipično se navodi i koordinatni okvir, iako to nije potrebno. Općeniti obrazac za sferne prikaze je:

Također je moguće unijeti vrijednosti koordinata u druge prikaze kao što su kartezijanski ili cilindrični. U ovom slučaju jedan uključuje argument ključne riječi reprezentacija = 'kartezijanska' (na primjer) zajedno s podacima u x , g , i z .

okvir : BaseCoordinateFrame klasa ili niz, nije obavezno

Vrsta koordinatnog okvira ovo SkyCoord treba predstavljati. Zadane vrijednosti ICRS-a ako se ne daju ili se daju kao Ništa.

jedinica : Jedinica , niz ili koru od Jedinica ili str, nije obavezno

Jedinice za isporuku LON i LAT vrijednosti. Ako je isporučena samo jedna jedinica, to vrijedi za obje LON i LAT .

napornost : vrijedi Vrijeme inicijalizator, neobavezno

ravnodnevnica : vrijedi Vrijeme inicijalizator, neobavezno

zastupanje : str ili Klasa reprezentacije

Određuje prikaz, na pr. & # 8216sferični & # 8217, & # 8216 kartezijanski & # 8217, ili & # 8216cilindrični & # 8217. To utječe na pozicijske argumente i ostale argumente ključnih riječi koji moraju odgovarati danom predstavljanju.

** ključne riječi_args

Ostali argumenti ključnih riječi primjenjivi za korisnički definirane koordinatne okvire. Uobičajene opcije uključuju:

ra, dec: vrijedi Kut inicijalizator, neobavezno

RA i Dec za okvire gdje ra i dec su ključevi u okviru & # 8217s imena_komponenata_zastupljenosti , uključujući ICRS , FK5 , FK4 , i FK4NoETerms .

l, b: vrijedi Kut inicijalizator, neobavezno

Galaktički l i b za za okvire gdje l i b su ključevi u okviru & # 8217s imena_komponenata_zastupljenosti , uključujući Galaktički okvir.

x, y, z: plutajuće ili Količina , neobavezno

Vrijednosti kartezijanskih koordinata

w, u, v: plutajuće ili Količina , neobavezno

Vrijednosti kartezijanskih koordinata za galaktički okvir.

Primjeri u nastavku ilustriraju uobičajene načine inicijalizacije a SkyCoord objekt. Cjelovit opis dopuštene sintakse potražite u kompletnoj dokumentaciji o koordinatama. Prvo nekoliko uvoza:

Vrijednosti koordinata i specifikacija okvira sada se mogu pružiti pomoću pozicijskih i ključnih argumenata:

Kao što je prikazano, okvir može biti a BaseCoordinateFrame klase ili odgovarajućeg pseudonima niza. Klase okvira koje su ugrađene u astropiju jesu ICRS , FK5 , FK4 , FK4NoETerms , i Galaktički . Pseudonimi niza su jednostavno male verzije naziva klase i omogućuju stvaranje a SkyCoord objekt i transformiranje okvira bez izričitog uvoza klasa okvira.

od_ime (ime [, okvir]) S obzirom na ime, zatražite od rješivača imena CDS-a pokušaj dohvaćanja informacija o koordinati za taj objekt.
match_to_catalog_3d (catalogcoord [, nthneighbor]) Pronalazi najbliža trodimenzionalna poklapanja ove koordinate skupu kataloških koordinata.
match_to_catalog_sky (catalogcoord [, nthneighbor]) Pronalazi najbliže podudaranje ove koordinate na nebu u nizu koordinata kataloga.
položaj_kut (ostalo) Izračunava kut položaja na nebu (istočno od sjevera) između ovog SkyCoord i drugi.
razdvajanje (ostalo) Izračunava razdvajanje na nebu između ove koordinate i druge.
odvajanje_3d (ostalo) Izračunava trodimenzionalno razdvajanje između ove koordinate i druge.
do_niza ([stil]) Nizni prikaz koordinata.
transformirati_ u (okvir) Pretvorite ovu koordinatu u novi okvir.

S obzirom na ime, zatražite od rješivača imena CDS-a pokušaj dohvaćanja informacija o koordinati za taj objekt. Baza podataka pretraživanja, URL sezama i vremensko ograničenje upita mogu se postaviti putem stavki konfiguracije u astropy.coordinates.name_resolve & # 8211 vidi docstring za get_icrs_coordinate za više informacija.

Naziv objekta za koji se dobivaju koordinate, npr. "M42" .

okvir : str ili BaseCoordinateFrame klase ili instance

Okvir za pretvaranje objekta.

koord : SkyCoord

Instanca klase SkyCoord.

Pronalazi najbliža trodimenzionalna poklapanja ove koordinate skupu kataloških koordinata.

Ovo pronalazi trodimenzionalnog najbližeg susjeda, koji se razlikuje samo od udaljenosti na nebu ako udaljenost je postavljen u ovaj objekt ili kataloškakoordina objekt.

Osnovni katalog u kojem se mogu tražiti podudaranja. To će obično biti koordinatni objekt koji je niz (tj. catalogcoord.isscalar == Netačno )

nti susjeda : int, neobavezno

Koga najbližeg susjeda tražiti. Tipično 1 ovdje je poželjno, jer je to točno za podudaranje jednog skupa koordinata s drugim. Sljedeći vjerojatni slučaj upotrebe je 2 , za podudaranje koordinatnog kataloga protiv sebe ( 1 je neprikladno jer će se svaka točka naći kao najbliže podudaranje).

idx : čitav niz

Indeksi u kataloškakoordina da biste dobili usklađene točke za svaki od koordinata ovog objekta. Oblik odgovara ovom objektu.

Nebesko razdvajanje između najbližeg podudaranja za svaki element u ovom objektu u kataloškakoordina . Oblik odgovara ovom objektu.

3D udaljenost između najbližeg podudaranja za svaki element u ovom objektu u kataloškakoordina . Oblik odgovara ovom objektu.

Ova metoda zahtijeva instaliranje SciPy ili neće uspjeti.

Pronalazi najbliže podudaranje ove koordinate na nebu u nizu koordinata kataloga.

Osnovni katalog u kojem se mogu tražiti podudaranja. To će obično biti koordinatni objekt koji je niz (tj. catalogcoord.isscalar == Netačno )

nti susjeda : int, neobavezno

Koga najbližeg susjeda tražiti. Tipično 1 ovdje je poželjno, jer je to točno za podudaranje jednog skupa koordinata s drugim. Sljedeći vjerojatni slučaj upotrebe je 2 , za podudaranje koordinatnog kataloga protiv sebe ( 1 je neprikladno jer će se svaka točka naći kao najbliže podudaranje).

idx : čitav niz

Indeksi u kataloškakoordina da biste dobili usklađene točke za svaki od koordinata ovog objekta. Oblik odgovara ovom objektu.

Nebesko razdvajanje između najbližeg podudaranja za svaki element u ovom objektu u kataloškakoordina . Oblik odgovara ovom objektu.

3D udaljenost između najbližeg podudaranja za svaki element u ovom objektu u kataloškakoordina . Oblik odgovara ovom objektu.

Ova metoda zahtijeva instaliranje SciPy ili neće uspjeti.

Izračunava kut položaja na nebu (istočno od sjevera) između ovog SkyCoord i drugi.

Druga koordinata za izračunavanje položaja kuta. Tretira se kao & # 8220head & # 8221 vektora pozicijskog kuta.

Kut (pozitivnog) položaja vektora koji pokazuje iz sebe do drugo . Ako bilo koji sebe ili drugo sadrže nizove, ovo će biti niz koji slijedi odgovarajući numpy pravila emitiranja.

Izračunava razdvajanje na nebu između ove koordinate i druge.

Koordinata do koje se dolazi do razdvajanja.

Odvojenost na nebu između ovoga i drugo Koordinirati.

Odvajanje se izračunava pomoću Vincentyjeve formule, koja je stabilna na svim mjestima, uključujući polove i antipode [R4].

Izračunava trodimenzionalno razdvajanje između ove koordinate i druge.

Koordinata do koje se dolazi do razdvajanja.

Udaljenost u stvarnom prostoru između ove dvije koordinate.

Ako ova ili druga koordinata nemaju udaljenosti.

Nizni prikaz koordinata.

Zadane definicije stilova su:

Vidjeti to_string () za detalje i argumente ključnih riječi (oba su kuta koji tvore koordinate oba Kut instance). Argumenti ključnih riječi imaju prednost nad zadanim postavkama stila i prosljeđuju im se to_string () .

Specifikacija formatiranja koja se koristi. Oni kodiraju tri najčešća načina predstavljanja koordinata. Zadana vrijednost je decimal .

Pretvorite ovu koordinatu u novi okvir.

okvir : str ili BaseCoordinateFrame klasa / instanca ili SkyCoord primjer

Okvir za pretvaranje ove koordinate u.

Novi objekt s ovom koordinatom predstavljen u okvir okvir.


Preuzimanje podataka¶

ALMA podatke možete preuzeti s astroqueryjem, ali budite upozoreni, skupovi podataka ciklus 0 i ciklus 1 obično imaju & gt100 GB!

Novost u najnovijim verzijama knjižnice je da podatke više nije potrebno inscenirati. Metoda `stage_data` je zastarjela, ali nova metoda` get_data_info` može se koristiti umjesto nje za dobivanje podataka o podacima kao što su datoteke, njihovi URL-ovi, veličine itd .:

Prema zadanim postavkama, podaci ALMA isporučuju se kao tarball datoteke. Međutim, sadržaj nekih od tih datoteka može se navesti i pristupiti im pojedinačno. Da biste dobili informacije o pojedinačnim datotekama:

Zatim možete nastaviti s preuzimanjem tih podataka. Preuzimanje će biti predmemorirano, tako da ponovljeni upiti iste datoteke neće ponovno preuzeti podatke. Zadani direktorij predmemorije je

/.astropy/cache/astroquery/Alma/, ali to se može promijeniti promjenom varijable cache_location:

Također možete preuzeti sve u jednom koraku:


Zyro9922 / GSOC2020.md

Pozdrav, moje ime je Syed Ali Hasan i surađujem s Boost C ++ na projektu Boost.Astronomy u pravcu razvoja generičkog i dinamičkog sustava za međusobnu konverziju koordinatnih sustava.

Da bismo popravili položaj bilo kojeg astronomskog objekta, moramo imati referentni okvir ili koordinatni sustav koji svakoj točki na nebu dodjeljuje različiti par brojeva. Dva broja ili koordinate obično se odnose na "koliko daleko" i "koliko gore", baš kao i na dužinu i širinu objekta na Zemljinoj površini.

Koordinatni sustav i međusobna konverzija temeljni su alat astronomije i stoga ga je trebalo uključiti.

Pregled mog rada / doprinosa

Moj glavni doprinos bio je istraživati ​​na području astronomije i koordinatnih sustava i dati knjižnici smjer prema svom cilju.

Razvio četiri temeljna koordinatna sustava. Svaki sustav uzima svoje ime iz temeljne ravni koju koristi kao referencu. Ovaj okvir sadrži Osnovna klasa coord_sys i četiri koordinatna sustava

  1. Ekvatorijalni koordinatni sustav equatorial_ra_coord.hpp & amp equatorial_ha_coord.hpp
  2. Horizontalni koordinatni sustav horizon_coord.hpp
  3. Ekliptički koordinatni sustav ecliptic_coord.hpp
  4. Galaktički koordinatni sustav galactic_coord.hpp

2. Uslužni programi za pretvorbu koordinatnog sustava

Da bismo postigli generaliziranu transformaciju koordinata, svoje podatke moramo predstaviti u Matricama. Pretvorba između različitih koordinatnih sustava postiže se samo promjenom brojeva u matricama. To je uključivalo primjenu GST-a, LST-a i sljedećih matrica

  • Koordinate vektoru stupca
  • HA deklinacija i vodoravna matrica
  • HA Dec i RA Dec matrica
  • Ekliptična matrica RA Dec
  • RA dec u ekliptičku matricu
  • Galaktička do RA dec matrica
  • RA dec u galaktičku matricu
  • Izdvoj koordinatu iz rezultirajućeg vektora stupca
  • Oblivnost ekliptike

3. Grafikon pretvorbe koordinata

To je uključivalo razvoj generičkog i dinamičkog okvira koji prihvaća potrebne unose od korisnika, tj. Koordinatni sustav s ostalim podacima kao što su Korisnikov zemljopisni položaj, Obliquity i Sidereal Time i Koordinatni sustav u koji želimo pretvoriti. Koristio sam biblioteku Boost Graph za implementaciju okvira i izvođenje pretraživanja širine prvo na grafikonu za prelazak s jednog čvora na drugi. Tijekom prijelaza odgovarajuće se matrice množe pomoću osnovne biblioteke linearne algebre.

Dodavanje koordinatnih okvira.

Napomena budućim programerima

Ovo je sjajan projekt koji leži na sjecištu razvoja C ++ i primijenjene matematike. Od vas se ne očekuje samo dobro poznavanje koncepata na jeziku C ++ kao što je Template Meta Programiranje, ovaj projekt također zahtijeva da imate osnovna znanja iz astronomije.

Ove bi reference mogle biti korisne.

Svom mentoru Pranamu Lashkariju želim zahvaliti što ste mi pružili ovu priliku i podržali projekt i izvan njega. Vaša podrška i savjeti pomogli su mi u oblikovanju karijere. Bila si zaista nevjerojatna.

Mojem kolegi i vrlo dobrom prijatelju Gopiju vaš entuzijazam prema računalstvu, astronomiji i razvoju softvera uistinu nadahnjuje i definitivno ste cijelo ovo putovanje učinili uzbudljivijim.

Iskustvo rada s BoostC ++-om i s tako nevjerojatnim ljudima razvilo me u različitim aspektima razvoja softvera, matematike i rada u timu. Cijelo ovo putovanje bilo je strašno.


Dobijte vidljive galaktičke dužine u astropiji - Astronomija

Zajedničko Python sučelje za svjetske koordinatne sustave

autor: Thomas Robitaille, Erik Tollerud, Stuart Mumford, Adam Ginsburg

datum kreiranja: 2017. 7. studenog

datum zadnje izmjene: 2018. 9. studenog

Napomena: ovaj APE14 izvorno je prihvaćen 2018. do 28. veljače, ali je zbog problema s provedbom značajno revidiran 2018. do 9. studenoga

Astronomskim podacima se često pružaju informacije o koordinatama u "stvarnom svijetu" koje odgovaraju koordinatama piksela. Ovo mapiranje bit je koncepta "Svjetskog koordinatnog sustava (WCS)". Uz FITS WCS (podrijetlo izraza "WCS"), drugi standardi / prikazi WCS-a postaju neophodni za nove misije i zvjezdarnice (npr. Svemirski teleskop James Webb ili Veliki teleskop sinoptičke ankete). Da bi se izgradila funkcionalnost Astropyja i pridruženih paketa koji mogu zahtijevati upotrebu WCS-a, suočavanje s različitim vrstama WCS objekata s različitim API-ima bit će u osnovi nemoguće. Stoga je svrha ovog APE-a definirati standardizirano sučelje za WCS objekte na temelju jednostavnih objekata (nizovi, skalari i nizovi). Paketi koji implementiraju WCS objekte tada će moći ili modificirati svoje klase u skladu s ovdje preporučenim API-jem ili izraditi tanke omote koji odgovaraju API-ju. APE također nudi preporuku za objekt visoke razine koji će se implementirati u Astropy koji razumije poznate Python objekte kao što su SkyCoord, Time i druge klase Astropy.

Jedna od ključnih osnovnih operacija neophodnih za bilo kakvu astronomsku analizu podataka je povezivanje "piksela" s njihovim koordinatama u "stvarnom svijetu" (i obrnuto). Iako ovaj koncept u osnovi postoji otkad se računala koriste za astronomske podatke, standard FITS WCS (Calabretta & amp Greisen, 2002, A & ampA 395, 1077) dao je ovom konceptu naziv: "Svjetski koordinatni sustav" (WCS). Zbog toga se "WCS" i "FITS-WCS" često tretiraju sinonimi, ali koncept je šire primjenjiv, što dokazuje postojanje formata za serializaciju i Python paketa koji izvršavaju ovaj zadatak (npr. GWCS, pyast). Stoga se izrazom "WCS" koristimo da bismo se pozvali na širi koncept WCS-a, a ne na specifično predstavljanje i provedbu FITS-WCS-a.

Za potrebe ovog APE-a, WCS transformacije definiramo kao preslikavanje piksela u neku svjetsku koordinatu (ili obrnutu). U našoj terminologiji, piksel je generalizirani koncept nekog oblika uređenog pohranjivanja podataka u memoriji (ili na disku). Iako piksele koristimo kao stenografiju, to ne mora biti samo dvodimenzionalno (tipična uporaba piksel) - uključuje jednodimenzionalne (npr. spektralne osi) ili dvodimenzionalne (npr. kocke podataka). Slično tome svijet u ovom je kontekstu generalizirani koncept bilo koje vrste fizičke koordinate koja se koristi u podacima. Precizna fizička interpretacija nije navedena u konceptu WCS-a. Za potrebe ovog APE-a, svijet čak moglo biti srednje stanje znanja. Npr. Za transformaciju jedinstva koordinate svijeta je koordinata piksela, na primjer, ako još nisu utvrđene informacije o kalibraciji. No, u bilo kojoj praktičnoj provedbi WCS-a treba prenijeti određeni smisao za smjer i jezik za fizički tip i prikaz svjetske koordinate. Uobičajeno razumijevanje kako prenijeti te informacije i predstaviti ih na Pythonu primarna je tema ovog APE-a.

Ovaj APE nije namijenjen ograničenju daljnjeg razvoja općenitijih API-ja za pretvorbu koordinata. Budući APE može definirati API za pristup "srednjim okvirima" kako se koristi u gWCS ili LSST sustavima transformacije. Ovaj APE namijenjen je samo definiranju jasnog API-ja za pretvaranje iz koordinata piksela u određeni krajnji skup koordinata "svijeta" (kako je gore definirano). Ovaj se APE ne fokusira na to kako dobiti međuokvire ako su prisutni ili kako kombinirati više koraka transformacije - dok je takva funkcionalnost korisna i trebala bi biti kompatibilan s ovim sučeljem APE-a, API za ove operacije izvan je opsega za ovaj APE. Ovaj APE također se ne odnosi na to kako stvoriti takvih WCS-a. Umjesto da je usmjeren posebno na API za jednostavniji problem zapravo izvođenja "end-to-end" transformacije iz piksela u neki svjetski prostor.

Primjećujemo da, iako smo se potrudili osigurati da ovdje opisani API bude što bliži konačnom implementiranom API-ju, mjerodavnu verziju API-ja dat će osnovne klase koje žive u temeljnom paketu astropije.

Pregled predloženog WCS sučelja

Naš prijedlog u ovom APE-u je sljedeći:

  • Razviti zajednički API koji WCS objekti mogu izložiti, izravno ili putem tankih omotača, a koji će omogućiti funkcionalnost pristupa WCS objektima da bude agnostik stvarne WCS reprezentacije. Želimo da ovaj API bude što jednostavniji i da uglavnom vraća jednostavne Python objekte kao što su nizovi, popisi i nizovi. To nazivamo API-jem 'niske razine'.
  • Razviti zajednički API visoke razine koji će biti pametniji u vezi s vrstama objekata koje korisnik treba prihvatiti ili vratiti (uključujući, na primjer, SkyCoord ili Time objekte)
  • Razviti Astropy WCS objekt koji može zamotati bilo koji objekt niske razine i izložiti WCS API visoke razine.

Ideja ovog višerazinskog pristupa za razliku od jednoslojnog je da ako bismo od različitih WCS objekata tražili da pruže API na visokoj razini, to bi (1) izazvalo puno dupliciranja logike konstrukcije odgovarajućih Astropy objekata i (2) prisiliti te objekte da vraćaju specifično Astropy objekte, dok bi postojanje API-ja neovisnog o paketu bilo bolje jer dopušta ostalim paketima, čak i ne-Pythonovim paketima, da slijede dobro definirani API radi interoperabilnosti.

Točan izbor koja vrijednost predstavlja "rub" piksela proizvoljan je i potencijalno se može razlikovati u različitim implementacijama WCS-a. Zapravo, astropy.wcs API izričito podržava više interpretacija zbog proturječnih očekivanja Pythona i drugih starijih alata. Međutim, API koji ovaj APE predlaže nudi opciju korištenja jednog izbora za pojednostavljivanje korisničkog koda. Budući da su ove definicije jednostavno pomaci na razini piksela, implementacije mogu izravno imati vlastite interne konvencije i jednostavno ih nadoknaditi kako bi se podudarale s ovom definicijom. Stoga specifična konvencija korištena za ovaj APE odražava filozofiju "vrijednost piksela je središte piksela" u FITS-WCS standardu (odjeljak 2.1.4 Greisen i sur., 2002, A & ampA 446, 747), dok istodobno podudaranje filozofije Python 0-indeksa. Odnosno, prvi se piksel smatra pikselom 0, ali vrijednost piksela (0, 0) je to centar tog piksela. Dakle, prvi piksel obuhvaća vrijednosti piksela -0,5 do 0,5.

Eksplicitno ne obuhvaćena ovom specifikacijom je definicija koja je dimenzija u prostornom WCS-u "x" u odnosu na "y". Previše je sukobljenih konvencija (kao i dobro utemeljenih tehničkih razloga za različite izbore), pa bi stoga ti podaci trebali biti ugrađeni u atribute koji opisuju dimenzije.

Predloženi API niske razine mogao bi se implementirati kao apstraktna osnovna klasa, ali ne bismo zahtijevali da ga sve implementacije nasljeđuju (ako ga ne naslijede, tada bi se i dalje trebali registrirati kod ABC-a kako bi omogućili kodu da provjeri jeste li (objekt) , LowLevelWCSAPI). Postojeće klase WCS-a tada mogu bilo implementirati to sučelje ili pružiti tanke omote koji pružaju to sučelje. Filozofija vodilja ovog sučelja je korištenje relativno primitivnih python objekata (skalari, nizovi i nizovi), koji se mogu „promovirati "Složenijim i korisnijim Python objektima u sučelju visoke razine. To omogućuje izravnu implementaciju ovog sučelja čak i u Python objektima implementiranim na C, bez vezivanja za sučelje visoke razine.

Imajte na umu da u ovom APE-u, misleći na nizove, mislimo na bilo koji Python objekt koji slijedi protokol međuspremnika opisan u PEP3118, a ne samo na posebno Numpy-ove nizove (koji slijede protokol međuspremnika). To omogućuje druge vrste polja, poput ugrađenih objekata niza Python ili budućih naprednih struktura podataka.

Sljedeća klasa prikazuje potrebna svojstva i metode za jedinstveni API niske razine:

Sada ćemo pogledati primjer upotrebe komponenata_svijeta_obje_objekata s klasama_osovine_objekta_. Primjer izlaza iz obje metode na istom WCS objektu je:

To ukazuje na to da se prva i treća svjetska os mogu koristiti za instanciranje objekta Astropy SkyCoord s ra = postavljeno na prvu svjetsku os, a dec = postavljeno na treću os, a frame = fk5 i equinox = J2005, dok argumenti os drugog svijeta može se koristiti za instanciranje objekta Astropy Time kao prvog pozicijskog argumenta i s argumentom ključne riječi scale = tai. Imajte na umu da bi klase okvira koordinata mogle biti prilagođene podklase ako je potrebno.

Jednostavan 1D spektar - 1D mapiranje od piksela do valne duljine:

Jednostavno preslikavanje 2D slika gdje su osi piksela poredane s RA i Dec (u FITS-WCS-u ovo bi bio CAR)

Izuzetno složena kocka spektralnih podataka sa 3 piksel dimenzije i 4 svijet dimenzije. Prva dva piksel dimenzije kodiraju mješoviti skup prostornih dimenzija i treću dimenziju koja je potpuno spektralna (tj. izlaz IFU detektora), a treću dimenziju piksel dimenzija je odvojiva dimenzija četvrtog svijeta koja kodira vrijeme promatranja.

Transformacija identiteta za 1D niz (tj. piksel - & gt piksel):

Poredak piksela i svjetskih koordinata

Gornji API pruža način za razlikovanje koordinata piksela definiranih pomoću standardnog kartezijanskog poredavanja (x, y) i indeksa polja definiranih pomoću redoslijeda glavnih redova (tj. Redaka, stupca). Na primjer, vrijednosti vraćene iz world_to_pixel_values ​​bile bi u ispravnom redoslijedu za korištenje za crtanje pomoću npr. Matplotlib, dok bi vrijednosti vraćene iz world_to_array_index_values ​​bile u ispravnom redoslijedu za upotrebu za indeksiranje, npr. Numpyjev niz. Obje vrijede u različitim kontekstima, pa zato pružamo dvije metode za svaku transformaciju.

Ne određujemo određeni poredak za svjetske koordinate. Iako bi moglo biti primamljivo pretpostaviti 'isti' redoslijed kao i za koordinate piksela, ovo ima smisla samo za jednostavne slučajeve (na primjer slika neba gdje su ra / dec približno poredani s x / y). U generaliziranom sustavu WCS-a takva korespondencija ne postoji. Kao primjer, razmotrite ekvatorijalni koordinatni sustav rotiran za 45 stupnjeva od koordinata piksela. Takav sustav mogao bi biti predstavljen sljedećim:

Nijedno od ovih nije ispravnije od drugog, jer ra / dec nije preferencijalno poredan sa x / y, pa moramo dopustiti oboje.

Također je moguće imati različit broj svjetskih koordinata u odnosu na koordinate piksela. Na primjer, mogli bismo zamisliti da imamo 1D niz vrijednosti određenih praćenjem nelinearnog puta kroz spektralnu kocku. WCS bi izgledao ovako:

ali redoslijed koordinata je naravno proizvoljan i ne može se jednostavno pozvati na redoslijed koordinata piksela, jer postoji samo jedna koordinata piksela koja je u korelaciji sa sve tri svjetske koordinate. Stoga bi se WCS mogao jednako predstavljati kao:

i ne postoji 'pravi' redoslijed.

Primjećujemo da API koji ovdje predstavljamo olakšava stvaranje WCS-a s preuređenim svjetskim koordinatama - to bi podrazumijevalo promjenu redoslijeda world_axis_physical_types, world_axis_units i world_axis_object_components, promjenu redoslijeda matrice matrice duž prve dimenzije i promjenu reda ulazi metoda world_to_pixel / array_index_values ​​i redoslijed izlaza metoda pixel / array_index_to_world_values. Stoga bi implementacije API-ja niske ili visoke razine mogle pružiti praktične metode za preuređivanje ili sortiranje svjetskih osi.

Međutim, ta se fleksibilnost ne proteže na koordinate piksela. Na primjer, za zadani niz s pridruženim WCS-om, izlaz world_to_array_index_values ​​mora dosljedno vraćati vrijednosti redoslijedom koji se može koristiti za indeksiranje niza, tako da indeksi / koordinate piksela WCS-a ne mogu biti ponovno poredani ako podaci ostaje nepromijenjen.

Radi dosljednosti s postojećim WCS knjižnicama, preporučujemo da implementacije temeljene na FITS-WCS odluče naručiti world_axis_physical_types istim redoslijedom kao vrijednosti CTYPE, ali mi to ne zahtijevamo.

Uobičajeni UCD1 + nazivi za fizičke tipove

Kao što je gore navedeno, atribut world_axis_physical_types trebao bi sadržavati nizove koji slijede VO UCD1 + rječnik za definiranje fizičkih tipova. Cjelokupni rječnik UCD1 + uključuje velik broj opcija, ali ovdje sažimamo neke od najčešćih koje će se vjerojatno koristiti:

Cijeli rječnik UCD1 + ne uključuje sva moguća imena tipova koja bi bila potrebna za predstavljanje svi WCS-ovi (na primjer, ne postoje ključne riječi za helioprojektivne koordinate). U ovom slučaju, element world_axis_physical_types za te koordinate trebao bi biti niz s prefiksom custom:. To bi također trebalo shvatiti kao poziv na suradnju s Međunarodnim savezom virtualnih opservatorija (IVOA) na primjeni novih tipova imena, koja će Astropy Project po potrebi olakšati. Ako je potrebno prilagođeno ime tipa, preporučujemo da se oni što više koordiniraju i dogovore između različitih paketa kako bi bili sigurni da mogu biti korisni (što ne bi bio slučaj da je svaki paket kreirao vlastiti skup prilagođenih imena tipova ).

Primarna svrha API-ja visoke razine je pružiti sučelje za dobivanje potpuno opremljenih Python objekata za svjetske koordinate - na primjer za vraćanje SkyCoord, Time itd. Objekata iz piksela u svjetsku pretvorbu, i obrnuto, za pretvaranje SkyCoord-a , Vrijeme itd. Na vrijednosti piksela. Razlikuje se od stvarne implementacije koja je osigurana u osnovnom paketu astropija (o kojem ćemo raspravljati u nastavku), tako da programeri koji nude vlastite WCS objekte mogu samostalno implementirati API visoke razine. U tom smislu, provedba koju pruža astropija može se smatrati referentnom provedbom. API visoke razine uključuje sljedeće četiri metode:

Budući da bi jedan objekt Astropy mogao odgovarati dvjema susjednim dimenzijama u WCS-u (na primjer dimenzijama prvog i trećeg svijeta), moramo odrediti pravila za redoslijed kojim se objekti Astropy vraćaju s metode visoke razine pixel_to_world, i kojim redoslijedom ih treba dati metodi na visokoj razini world_to_pixel. Standardni redoslijed trebao bi biti takav da se uzima u obzir samo prvo pojavljivanje niza koordinatnih aliasa u komponentama world_axis_object_components. Na primjer, ako je world_axis_object_components

Tada bi redoslijed objekata Astropija trebao biti SkyCoord, a zatim Vrijeme (u osnovi zanemarujemo ('skycoord', 'dec')). Ovo će se pravilo uvijek poštivati ​​za pixel_to_world, ali s druge strane pod uvjetom da nema dvosmislenosti, world_to_pixel bi mogao biti opraštajući ako su koordinate navedene u pogrešnom redoslijedu (premda bi se trebala pojaviti pogreška ako postoje nejasnoće i poredak je ne onaj standardni).

Imajte na umu da će API-ji niske i visoke razine biti definirani kao osnovne klase koje će biti dizajnirane na takav način da prilagođena WCS klasa može naslijediti i osnovnu klasu niske i visoke razine. Osnovna klasa visoke razine implementirat će se s metodama koje će prema zadanim postavkama koristiti podatke u world_axis_object_components i world_axis_object_classes da bi radile - stoga bi jednostavno nasljeđivanje iz osnovne razine visoke razine trebalo biti dovoljno za izlaganje API-ja visoke razine.

Konačno, razvit ćemo klasu iz astropije koja nasljeđuje API visoke razine, a može je inicijalizirati objekt niske razine API-ja, koji zatim omota.

Ova će klasa definirati svojstva koja se podudaraju sa svim onima u API-ju niske razine (samo svojstva, a ne metode), s izuzetkom world_axis_object_components i world_axis_object_classes, a ta će svojstva jednostavno poslati poziv svojstvu low- objekt na razini.

Objekt niske razine bit će dostupan pod imenom atributa low_level_wcs, a metode niske razine poput pixel_to_world_values ​​bit će tako dostupne na sljedeći način:


1. opcija: omotnica

  • Ispišite ploču na karton (ili otisnite na papir i zalijepite na karton) izrezanu uz vanjski krug.
  • Ispišite pravilo o prozirnosti izrezanoj duž vanjskog kruga.
  • Ispišite rete na prozirnosti - nemojte rezati.
  • Na zadnjem dijelu označite da ćete preklopiti (npr. Mrtvom kemijskom olovkom ili tupim nožem - nemojte rezati) 3 stranice kvadrata (plavim na slici) koji ograđuju vanjski krug. 4 vrha trga označena su malim križićima blizu ruba turpije. Izrežite uzduž jedne strane kartona (crvena). Izrežite dva suprotna kuta (crvena) na 45 stupnjeva kako biste stvorili 3 preklopa. Preklopite 3 preklopa natrag duž linija.
  • Cut a square of the same size in cardboard. Tape the rete on the cardboard square to form an envelope. At this stage, just put little pieces of tape, as you may need to adjust.
  • Put the rule and plate in the envelope - it should just fit you may want to adjust the 3 flaps. The two disks should have just enough space so that they can be rotated in the envelope, but still be well centred on the rete.

What I am doing right now

After writing this program, I took time to get aquainted with the program that allows the user to display the actual photos of the Milky Way in H&alpha with given latitude and longitude ranges. A picture of one of these maps is shown below. Fig. 2. A map of H&alpha distribution in IDL (v=50 ± 10 km/s, l=10°-90°, b=-40°-40°)

When this was done, I started writing a new program which plots the H&alpha intensity as a function of galactic latitude over an integrated velocity. The program allows you to input minimum and maximum velocities to integrate over, minimum and maximum galactic longitudes to survey, as well as minimum and maximum galactic latitudes to display on the plots. A picture of one of the plots is shown below.
Fig. 3. H&alpha Intensity v. Galactic Latitude in IDL (vmin= 40km/s, vmax=60 km/s, l=20°-27°, b=10°-70°)


Creating a great circle frame from two points¶

It is sometimes convenient to specify two endpoints that define a great circle instead of the pole. For such use cases, the GreatCircleICRSFrame has a convenience method for creating a class from two endpoints of an arc that define a great circle:

Without specifying a longitude zeropoint, the default behavior of the above method is to take the spherical midpoint of the two points as the zeropoint. However, a custom zeropoint can be specified using the ra0 or rotation keyword arguments. For example: