2016-03-28 1 views
1

J'ai une carte en coordonnées galactiques et j'ai besoin de la sauvegarder en coordonnées équatoriales dans un autre fichier. Je sais que je peux utiliser:Healpy: changer les coordonnées d'une carte et enregistrer la nouvelle

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

et cela devrait retourner un tableau 2D numpy stocké dans map_rot. Mais quand j'ai lu map_rot, j'ai découvert que c'est un masked_array rempli seulement avec -inf valeurs, et mask=False, fill_value=-1.6735e+30 (donc, apparemment, -inf n'est pas un masque). De plus, le nombre total d'éléments de map_rot ne correspond pas au nombre de pixels que j'attendrais pour une carte (npix=12*nside**2). Par exemple si nside=256 je m'attendrais à obtenir npix=786432, tandis que map_rot a 400*800=320000 éléments. Que se passe-t-il?

(je l'ai déjà vu this post, mais j'ai une carte en polarisation, donc je dois tourner les paramètres de Stokes. Comme mollview sait comment faire, je tentais d'obtenir la nouvelle carte directement à partir mollview.)

Répondre

0

une façon de contourner cela est d'enregistrer la sortie, par exemple avec des conserves au vinaigre

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")) 

la valeur de retour de hp.mollview() a un format qui peut être affiché à l'aide de la fonction imshow standard(). Alors, la prochaine fois que vous voulez tracer, juste procédez comme suit

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

map_rot décrit les pixels dans la fenêtre entière matplotlib, y compris la zone blanche (-inf code couleur avec le blanc) autour de l'ellipsoïde. Par contre, mollview() n'accepte qu'un tableau de pixels qui résident dans l'ellipsoïde, c'est-à-dire un tableau de la longueur.

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

Merci beaucoup Alex, ceci résout en partie mon problème. J'ai besoin de la nouvelle carte au format .fits aussi. –

+0

Avez-vous essayé l'astrophotographie? Consultez la section "Créer un fichier FITS à partir de rien" ici: https://python4astronomers.github.io/astropy/fits.html. Convertir map_rot en un fichier .fits devrait être faisable en quelques lignes (avec un en-tête de votre choix). – Alex