2016-03-28 5 views
1

Ich habe eine Karte in galaktischen Koordinaten und ich muss es in äquatorialen Koordinaten in einer anderen Datei speichern. Ich weiß, dass ich verwenden können:Healpy: Ändern der Koordinaten in eine Karte und Speichern der neuen

import healpy as hp 
map=hp.read_map('file.fits') 
map_rot=hp.mollview(map, coord=['G','C'], return_projected_map=True) 

und dies sollte ein 2D-Array numpy in map_rot gespeichert zurückzukehren. Aber wenn ich map_rot lese, fand ich heraus, dass es ein masked_array ist, das NUR mit -inf Werten gefüllt wird, und mask=False, fill_value=-1.6735e+30 (so anscheinend ist -inf keine Maske). Darüber hinaus stimmt die Gesamtzahl der Elemente von map_rot nicht mit der Anzahl der Pixel überein, die ich für eine Karte erwarten würde (npix=12*nside**2). Zum Beispiel wenn nside=256 würde ich erwarten, npix=786432 zu erhalten, während map_rot400*800=320000 Elemente hat. Was ist los?

(ich habe schon this post gesehen, aber ich habe eine Karte in der Polarisation, also muß ich Stokes' Parameter drehen. Da mollview weiß, wie das zu tun, ich habe versucht, die neue Karte von mollview direkt zu erhalten.)

Antwort

0

ein Weg, um dies zu realisieren ist mit Gurke die Ausgabe, zum Beispiel zu speichern

import healpy as hp, pickle 
map=hp.read_map('file.fits') 
map_rot=hp.mollview(map, coord=['G','C'], return_projected_map=True) 
pickle.dump(map_rot, open("/path/map.p", "wb")) 

der Rückgabewert von hp.mollview() hat ein Format, das mit dem Standard imshow() Funktion angezeigt werden kann. Also das nächste Mal, wenn Sie es zeichnen, nicht nur die folgende

map_rot = pickle.load(open("/path/map.p"), 'rb')) 
plt.imshow(map_rot) 

map_rot die Pixel im gesamten matplotlib Fenster beschreibt, einschließlich der weißen Bereich (-inf farbcodiert mit weißen) um das Ellipsoid.

Im Gegensatz dazu akzeptiert mollview() nur ein Array von Pixeln, die sich in dem Ellipsoid befinden, d. H. Array der Länge.

len(hp.pixelfunc.nside2npix(NSIDE)) 
+0

Vielen Dank Alex, das löst teilweise mein Problem. Ich brauche auch die neue Karte im .fits-Format. –

+0

Haben Sie Astropie versucht? Sehen Sie sich den Abschnitt "Erstellen einer FITS-Datei von Grund auf neu" an: https://python4astronomers.github.io/astropy/fits.html. Map_rot in eine .fits-Datei umzuwandeln, sollte in ein paar Zeilen (mit einem Header Ihrer Wahl) machbar sein. – Alex