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