Извлечение значений проекции из графика matplotlib с данными астропии / подгонки - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно получить преобразованные значения пикселей x, y для проекции matplotlib.В частности, это преобразование мировой системы координат астропии из файла данных.Файл данных содержит заголовок, который предоставляет информацию о проекции, но я не знаю никого, кто мог бы использовать его напрямую, не зная информации, которой у меня нет.Вот текущий код:

image_detection = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI'].data

wlist = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI']

w = wcs.WCS(wlist.header)
mean, median, std = sigma_clipped_stats(image_detection, sigma=3.0)

iraffind = IRAFStarFinder(fwhm=3.0, threshold=5*std, exclude_border=True)
sources = iraffind(image_detection - median)

positions = (sources['xcentroid'], sources['ycentroid'])
apertures = CircularAperture(positions, r = 4.0)

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection = w)
ax.imshow(transform(image_detection), cmap='gray_r', origin='lower')
# ax.colorbar()
apertures.plot(color='blue', lw=1.5, alpha=0.5)
plt.savefig("apertures.pdf")
ax.xlabel('Right Ascension')
ax.ylabel('Declination')
plt.show()

Что мне нужно, так это те значения положения, которые даны в x, y, преобразованные в мировые координаты, которые нанесены на проекцию.Я проверил документацию по астропии в WCS, и не ясно, как получены определенные значения, например, связанные с источником.Используемый файл подгонки находится в свободном доступе из старого архива Хаббла, хотя любые данные x, y должны быть технически приемлемыми.Заголовок соответствия содержит все значения для преобразования, как упомянуто, хотя я не полностью понимаю их использование.Думаю, это немного длинно, но спасибо, если вы можете помочь.

1 Ответ

0 голосов
/ 25 марта 2019

Получив объект WCS, вы можете использовать два метода для преобразования из x, y-> RA, Dec или наоборот.Это w.all_pix2world() и w.all_world2pix() соответственно, например,

from astropy.io import fits
from astropy import wcs

wlist = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI']
w = wcs.WCS(wlist.header)

# Convert chip center from pixels to RA, Dec
radec_coords = w.all_pix2world(3057, 3045, 1)
print("RA, Dec=", radec_coords[0], radec_coords[1])

# Convert a RA, Dec pair to x,y
coords = [(279.1017383673262, -23.90274423755417)] # CRVAL1, 2 from header
pix_coords = w.all_world2pix(coords, 1)
print("X,Y=", pix_coords[0][0], pix_coords[0][1])

. Это даст выход (с разрешением на округление ...)

 RA, Dec= 279.10174439, -23.90274424
 X,Y= 3057.5, 3045.0

, где RA, Dec в градусах.Лучше использовать all_pix2world, а не wcs_pix2world, чтобы применить все преобразования (основное преобразование WCS из пикселей в RA, Dec, заданное матрицей CDi_j и CRPIXi/CRVALi, вместе с любыми полиномами -SIP), еслина изображении могут быть искажения изображения (как правило, в случае инструментов Хаббла)

...