.fit文件读取--head信息--修改head--读取csv文件-------ska暑期训练

fit文件是天文中常用的数据存储格式

python读取fit文件

from astropy.io import fits

inten = fits.open("1077910616_deep-MFS-image-pb_warp.fits")

inten.info()

1在这里插入图片描述
可以看到这个fit文件里面有一条数据,并且是400040001*1的矩阵,数据格式是float64双精度型

inten[0].header

或者在终端通过以下命令也可以得到对应的表头信息

more 1077910616_deep-MFS-image-pb_warp.fits

.fit文件读取--head信息--修改head--读取csv文件-------ska暑期训练_第1张图片

  • NAXIS是轴的数量
  • BSCALE是比例尺:实际值=图像值*(BSCALE+BZERO)
  • BMAJ 是beam的大小 (有些fit文件也写作hpbw,resolution(有误))也可以意味是望远镜的分辨率
  • BMIN是波束半短轴
  • BPA是波束位置角
  • BTYPE是数据类型:例如本图就是强度
  • CTYPE1是横坐标的类型(CTYPE2对应的就是纬度)
  • CRPIX1是横坐标的参考像素点
  • CRVAL1是横坐标的参考坐标
  • CDELT1是个横坐标间隔点对应的度数,相当于4000*4000的网格平面,每隔一个点的度数就是CERLT1(CDELT2就是对应的纵坐标)
  • 参考坐标的意思就是:你要确定这张fit图像每个点的坐标,那就需要三个信息,第一个是某个点的像素位置(对应图中的数组坐标),以及这个点的对应的实际坐标(ra,dec)还有每个点直接间隔度数,有这三个信息我们就可以推算是整张图任何一个点的经纬度坐标。

修改header

有些fit文件在写入的时候轴的位置错乱了,导致读取的图片不能够正确显示经纬度,如下:

我们可以看到横坐标是像素点而不是经纬度
查看一下该fit文件的head,发现第三个轴放在了第一个轴上

from astropy.io import fits
from astropy.wcs import WCS
import matplotlib.pyplot as plt
import numpy as np
from astropy.io import fits as pf
from copy import deepcopy

hdu = fits.open('FDF_maxPI.fits')[0]
hdr0 = deepcopy(hdu.header)                 #深拷贝,改变hdu的值不会对hdr0产生改变
print(hdr0)

.fit文件读取--head信息--修改head--读取csv文件-------ska暑期训练_第2张图片
修改一个head并且生成新的fit文件

hdr = pf.Header({ 'SIMPLE':   True,
                  'BITPIX':    -32,
                   'NAXIS':       3,
                  'NAXIS1':  hdr0['NAXIS2'],
                  'NAXIS2':  hdr0['NAXIS3'],
                  'NAXIS3':  hdr0['NAXIS1'],
                  'CDELT1':  hdr0['CDELT2'],
                  'CRVAL1':  hdr0['CRVAL2'],
                  'CRPIX1':  hdr0['CRPIX2'],
                  'CTYPE1':  hdr0['CTYPE2'],
                  'CDELT2':  hdr0['CDELT3'],
                  'CRPIX2':  hdr0['CRPIX3'],
                  'CRVAL2':  hdr0['CRVAL3'],
                  'CTYPE2':  hdr0['CTYPE3'],
                  'CDELT3':  hdr0['CDELT1'],
                  'CRPIX3':  hdr0['CRPIX1'],
                  'CRVAL3':  hdr0['CRVAL1'],
                  'CTYPE3':  hdr0['CTYPE1'],
                  'EQUINOX': 2000.00, 
                  'EXTEND':True
                             })
                            
pf.writeto('FDF_maxPI_new.fits', hdu.data, hdr, overwrite=True)    

#也可以把其他信息都写进入,这种写入的方式是完全覆盖,而不是单纯的修改。

读取csv文件

#读取包,有些是非必须的,我只是顺手放进来

from astropy.coordinates import sky_coordinate
from astropy.io import fits
from astropy.utils.console import color_print
import matplotlib.pyplot as plt
import numpy as np
import astropy.units as u
from astropy.wcs import WCS
from astropy import units as u
import csv
from numpy.lib.function_base import append
import pandas as pd
#读取csv文件的ra和dec,panda提供非常方便的读取方式

data= pd.read_csv(r'catalog_comp.csv')
ra = data['ra']
dec = data['dec']

你可能感兴趣的:(笔记,python)