写在前面的话:
最近导师让我统计一下对于一个AGN样本,它的WISE的颜色是如何分布的?为了获取一个AGN样本,我从SDSS天文数据网站下载了DR14释放的数据,其中被归类为QSO的源我当作一个AGN样本。如果单个源去WISE上面下载,用时角坐标或以度为单位的坐标都行。然而,如果想以列表的形式一次性下载多个源的WISE数据,必须采用以度为单位,列表格式也有特定的要求。而列表格式的特定要求直接反映在如何取数据的精度问题上。尝试了诸多方法后最终成功,现记录如下。
WISE格式解读:
以txt文档方法一次性输入多个源坐标,格式要求见下图:
前面6行是必须有的(自己杜撰的,但是输入格式必须有这6行),而且这6行的竖线|的间距是不可更改,所有的输入的数据还必须满足都在两个竖线|的间隔内(在轴向数字也不能与竖线|重叠),但是只要在两个竖线|内,数字精度(长度)为多少不做要求。
- 既然数据在轴向不能与竖线|重叠,首先要保证每一行数据(ra)首端必须有一个空格的缩进,那该如何保证每一行ra末端在第二个竖线|内,且dec数据也满足前面要求呢?
- 因为竖线|之间的间隔是不可变的,所以意味着两个竖线|之间容纳的数字个数是有一个上限的,即有一个。经验证,这个最大值为11。,,,。
- 如何保证ra,dec的数据长度呢?自然而然想到的便是。
数据精度:
要给出数据精度,首先想到的便是与。
round()函数:
语法(Syntax):
round(number, number of digits)
参数 | 含义 |
---|---|
number | 待round的数 |
number of difits | 如果没有,对number四舍五入取整,如果有比如3,四舍五入取小数点后3位,后面有零(0)舍掉 |
第二个参数看起来有点晕,直接看例子:
#没有第二个参数,四舍五入取整
round(1.234)
1
#第二个参数为3,保留小数点后3位,而且四舍五入后第3位不是0
round(1.2355,3)
1.236
#rounded后,四舍五入后第3位是0,舍掉
round(1.23005,3)
1.23
#保留的小数点后的位数超出数字长度,则直接输入原number,后面不自动添0
round(1.23005,11)
1.23005
字符串格式化:
关于字符串格式化的介绍可以参考我这篇文章:字符串格式化
b = '%011.7f' % 1.35003
b
'001.3500300'
len(b)
11
可见,字符串格式化不仅可以满足长度为11,而且如果原数字长度小于11,还可以向前向后自动补零。
代码如下:
#这篇代码是针对利用WISE搜索目标源时,如何输出WISE要求的列表格式
#首先这些初步的数据源来自SDSS DR14 QSO,fits格式
from astropy.io import fits
#import pandas as pd
#读取头文件信息
hdulist = fits.open('/Users/huangyulong/Desktop/sdss_qso/DR14Q_v4_4.fits')
#数据在hdulit[1]中存放
data = hdulist[1].data
#提取出源的RA,DEC,和红移Z的信息
ra = data['RA']
dec = data['DEC']
z = data['Z']
#
file = open('ex211111.txt','w')
i = 0
while i < len(data):
a = ra[I]
b = dec[I]
a1 = '%011.7f' % a
b1 = '%011.7f' % b
file.write(' ' + a1 + ' ' + b1 + '\n')
i += 1
file.close()
结果:
Screen Shot 2019-06-19 at 15.51.13.png最后的头文件是加上去的。完美在所有竖线|的下面!!!!
2019-06-19
网友评论