gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:49:41 24 4
gpt4 key购买 nike

我是 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

最佳答案

如果您正在处理光谱数据,查看 specutils 可能会有用。它专为与读/写/操作光谱相关的常见任务而设计。

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

文档包括 example关于如何创建具有波长和通量列的通用“FITS 表”编写器。您可以从这个示例开始并修改它以满足您的确切需求(根据具体情况可能会有很大差异,这可能就是为什么没有内置“通用”FITS 编写器的原因)。

您也可以使用 fits-wcs1d 格式。

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

关于python - 使用 2 个 FITS 文件将像素转换为波长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66561777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com