将像素转换为波长,使用 2 个 FITS 文件

3

我是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中同时包含波长和计数。

1个回答

0

如果您正在处理光谱数据,那么研究一下specutils可能会很有用,它专门设计用于读取/写入/操作光谱相关的常见任务。

通常使用表格而不是图像将光谱数据存储在FITS文件中。例如,您可以创建一个包含波长、流量和计数列的表格,并在列元数据中包括相关单位。

文档中包括一个示例,介绍如何创建具有波长和流量列的通用“FITS表”编写器。您可以从这个示例开始,根据您的确切需求进行修改(因为情况因案而异,这可能是为什么没有内置“通用”FITS编写器的原因)。

您还可以尝试使用fits-wcs1d格式。

如果您不想使用specutils,那么这个示例仍然可能很有用,因为它演示了如何从您的数据创建一个Astropy Table并将其输出到格式良好的FITS文件。


谢谢。我会查看文档。 - pixel_image

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接