Healpy: изменение координат на карте и сохранение новой

У меня есть карта в галактических координатах, и мне нужно сохранить ее в экваториальных координатах в другом файле. Я знаю, что могу использовать:

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

и это должно вернуть 2D numpy массив хранится в map_rot, Но когда я читаю map_rotЯ узнал, что это маска_карта, заполненная ТОЛЬКО -inf ценности и mask=False, fill_value=-1.6735e+30 (так, по-видимому, -inf это не маска). Причем общее количество элементов map_rot не совпадают с количеством пикселей, которое я ожидаю для карты (npix=12*nside**2). Например, если nside=256 Я бы ожидал получить npix=786432, в то время как map_rot имеет 400*800=320000 элементы. В чем дело?

(Я уже видел этот пост, но у меня есть карта в поляризации, поэтому мне нужно повернуть параметры Стокса. mollview знает, как это сделать, я пытался получить новую карту прямо из mollview,)

1 ответ

Один из способов обойти это - сохранить результат, например, с помощью pickle.

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

Возвращаемое значение hp.mollview() имеет формат, который можно отобразить с помощью стандартной функции imshow(). Так что в следующий раз, когда вы хотите построить его, просто сделайте следующее

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

map_rot описывает пиксели во всем окне matplotlib, включая белую область (с цветовой кодировкой белого цвета) вокруг эллипсоида.

Напротив, mollview() принимает только массив пикселей, которые находятся в эллипсоиде, то есть массив длины.

 len(hp.pixelfunc.nside2npix(NSIDE))
Другие вопросы по тегам