我是Python和FITS图像文件的新手,因此遇到了问题。 我有两个FITS文件;第一个FITS文件是像素/计数,第二个FITS文件(校准文件)是像素/波长。 我需要将像素/计数转换为波长/计数。 这样做后,我需要将波长/计数输出为新的FITS文件以供进一步分析。 到目前为止,我已经按照以下代码中所示的方式排列了所需的数据。
import numpy as np
from astropy.io import fits
# read the images
image_file = ("run_1.fits")
image_calibration = ("cali_1.fits")
hdr = fits.getheader(image_file)
hdr_c = fits.getheader(image_calibration)
# print headers
sp = fits.open(image_file)
print('\n\nHeader of the spectrum :\n\n', sp[0].header, '\n\n')
sp_c = fits.open(image_calibration)
print('\n\nHeader of the spectrum :\n\n', sp_c[0].header, '\n\n')
# generation of arrays with the wavelengths and counts
count = np.array(sp[0].data)
wave = np.array(sp_c[0].data)
我不明白如何将两个单独的数组保存到一个FITS文件中。我尝试了一种替代方法,通过创建列表来实现,代码如下所示:
file_list = fits.open(image_file)
calibration_list = fits.open(image_calibration)
image_data = file_list[0].data
calibration_data = calibration_list[0].data
# make a list to hold images
img_list = []
img_list.append(image_data)
img_list.append(calibration_data)
# list to numpy array
img_array = np.array(img_list)
# save the array as fits - image cube
fits.writeto('mycube.fits', img_array)
然而,我只能保存为一个立方体,这是不正确的,因为我只需要波长和计数数据。此外,我在新创建的FITS文件中丢失了所有标题。说我迷失了方向还言之过早!请问有人能指点我正确的方向吗?谢谢。
我仍在解决这个问题。我现在已经使用这个网站成功(我想)生成了一个包含波长和计数的FITS文件:
https://www.mubdirahman.com/assets/lecture-3---numerical-manipulation-ii.pdf
这是我的代码:
# Making a Primary HDU (required):
primaryhdu = fits.PrimaryHDU(flux) # Makes a header # or if you have a header that you’ve created: primaryhdu = fits.PrimaryHDU(arr1, header=head1)
# If you have additional extensions:
secondhdu = fits.ImageHDU(wave)
# Making a new HDU List:
hdulist1 = fits.HDUList([primaryhdu, secondhdu])
# Writing the file:
hdulist1.writeto("filename.fits", overwrite=True)
image = ("filename.fits")
hdr = fits.open(image)
image_data = hdr[0].data
wave_data = hdr[1].data
我确信这不是波长/计数的正确格式。我需要在hdr[0].data中同时包含波长和计数。