钟文杰,邓 辉,刘应波 ,袁聿海,李长华,黄伟荣,付 泰,王 锋,2
(1. 广州大学天体物理中心,广东 广州 510006;2. 中国科学院云南天文台,云南 昆明 650011,3. 中国科学院国家天文台,北京 100101)
1.26 m红外望远镜①http://121.26.254.21/html/gcyq/126/detail-20.html是由中国科学院南京天文光学技术研究所研制,于1985年安置在兴隆基地并投入使用,并在近几年进行了全面升级改造。目前1.26 m红外望远镜不仅配备有近红外成像系统, 还配备有三通道光学成像系统,该系统包含3个CCD相机,分别对应g、r、i 3个波段,适应望远镜焦比为F/8,分辨率达到0.117角秒/像素。
目前,绝大部分台站对测光数据处理仍然依赖于手动,效率低下,无法满足科研工作者的需求。当前测光数据处理一般采用国际流行的测光软件IRAF中APPHOT或DAOPHOT包[1]进行。首先通过获取本底、平场、暗场和目标图像等信息,对目标图像进行预处理后,在IRAF中通过imexa命令获得合适的半宽和标准差,然后进行相关参数的设定,最后进行测光操作,就可以得到一张图像的星等、通光流量等信息。在处理中不断重复以上步骤,直到处理完所有目标图片后,把所有图像中的星等信息绘制成光变曲线。在数据处理过程中,观测目标星和标准星都需要手工选定,如果一次处理几十上百幅图像,数据处理人员会感到非常疲劳,也容易出错。
针对这种情况,对特定的望远镜系统研制一套测光处理管线,能够基本自动完成数据处理,提交准确的结果供后续处理分析,大幅降低人工投入,加快科学数据产出,具有明显的应用价值。
天体测光,即对天体光亮度的测量,天文学中用CCD相机把天体的光亮度信息记录下来,保存为FITS图像,方便进行后续的研究。CCD相机于1969年问世,并于20世纪90年代初被广泛用于天体测光,文[2]研究了CCD的平场改正精度对测光精度的影响,得出平场改正精度与测光精度成正比关系的结论。文[3]在对BLLac天体3C66A进行测光研究时,获得了孔径参数的设定与仪器星等误差的关系。
测光处理是天文数据处理中的常用功能。多年来很多天文学家开发了相应的测光软件,如当前最为普及的IRAF,IDL等软件中均有成熟的测光软件模块。近几年来,随着Python在天文软件中普及使用,Photutils[注]http://photutils.readthedocs.io/en/stable/软件包被开发出来,并集成到Astropy软件包中,进一步推动了Python的发展。
针对具体的测光处理,国内外均对测光数据处理的效率与精度开展了前期研究。如文[4]在研究星团NGC1664和星团NGC2168的生长曲线时,把自己设计的软件与IRAF的APPHOT包进行内部精度比较,得出中等亮度的星和暗星在测量的内部精度方面稍优于IRAF的结论。文[5]通过比较两种快速星像匹配算法,得出基于向量的方法更优的结论。
数据的测试与批量处理针对近年来不同的望远镜系统也出现了一些优良的成果。如针对Thacher天文台的测光程序,Michael研发了Photometry Pipeline[6]的相关程序,效率很高,但却因图像预处理、星像匹配等因素影响其精度。这些程序已经具有较完整的功能,可以针对特定的系统进行半自动的数据处理。
参考上述的研究成果,结合已有的软件系统或软件包,针对国家天文台和广州大学共建的1.26 m望远镜的特定需求,开发研制一套完整的数据处理管线是可行的。
近十年来,互联网的快速发展和软件技术的飞速进步为天文软件的开发打下了良好的基础。要开发一套实用的天文测光管线的难度已经大幅下降,基本上每个功能或算法都可以找到相应的软件代码。特别是除了单机上可以运行的软件包(软件系统)以外,目前有大量部署在互联网上的天文应用系统,在线提供相应的天文数据搜索、查询和处理服务。
为此,开发1.26 m红外望远镜的测光处理管线系统,核心在于如何有效集成这些软件资源,通过更为合理的流程与关键技术的实现获得稳定、可靠的软件系统。
为快速地构建数据处理管线,在软件开发中,直接采用了如下软件开发包。
(1)Astropy软件包。其中astropy.io适用于编辑、读取、存储FITS文件的信息,是编写天文软件必不可少的工具包;astropy.wcs(全称World Coordinate System,即世界坐标系)用于管理FITS文件中世界坐标系的转换;
(2)ccdproc[注]http://ccdproc.readthedocs.io/en/latest/包,实现CCD图像的处理,计算增益与读出噪声、合并图像等功能;
(3)SExtractor软件,SExtractor是astromatic中的软件包,具有探测天文图像中的光源、计算天文图像中合适的半宽与背景偏差和孔径测光等功能,它具有较好的分辨和分解能力,能够快速分辨天体与噪声,区分部分重叠的天体[7],适合进行星像提取与图像测光;
(4)SCAMP包[8]可以根据SExtractor包提取的星像信息与已有的星表进行匹配,并得到FITS图像所在的天区信息(即望远镜的指向),它的计算速度快、灵活性好。
(5)在线星表,为了快速实现对数据的处理,系统中采用GAIA星表[注]http://gea.esac.esa.int/archive/作为位置测定星表,采用SDSS-R9为测光星表。在开发中,直接使用astroquery软件包访问在线星表。为了解决观测中经常使用星名,或者不同星表星编号不同的问题,在开发中直接利用Simbad提取相应的观测目标信息。
图1给出了整个系统实现中一个FITS文件的数据处理流程。从图1可以看出,当前的数据处理流程依赖于观测日志文件,根据日志中的数据判断当前需要进行的处理,同时整个数据处理过程完全依赖于FITS文件头中的信息。
图1 数据处理流程示意图
Fig.1 Data processing flow diagram
目前1.26 m望远镜采用观测助手观测模式,在每天观测完成后,由观测助手手工编制一个观测日志文件,这个文件与所有的观测数据存放在同一目录。为适应本处理管线的需要,需要手工生成如下格式的数据文件,结构如表1。
表1 观测日志示意表Table 1 Observational log file format
这个观测日志是标准的CSV格式,前两个数表示编号的起始与结束。后面是观测目标(或者是平场、暗场、本底),随后是曝光时间,最后两个是观测目标的望远镜指向。
根据观测日志的信息,重写观测获得的原始FITS文件是非常必要的。目前,从1.26 m望远镜获得的原始FITS文件存在文件头不规范的问题。最为关键的是缺少数据自动处理所必须的若干重要信息,包括望远镜的粗指向信息(赤经, 赤纬)、观测台址坐标、曝光时间等。这些信息的缺失,一方面影响后续的数据处理,更重要的是对后续的数据归档和其它团队的科研协作等存在明显的影响。
在系统设计中,利用astropy.io软件包打开FITS文件的header,利用read、write等命令读取其中的信息,并对其中缺失的部分进行填补,不合理的部分在咨询后修改。具体修改的字段见表2。
表2 FITS头中写入的字段Table 2 Theheaderinformationin the FITS file
上述信息的补全是整个数据自动处理的关键,比如CTYPE1和CTYPE2定义了CCD与观测天区的对应关系,此外部分数据是在后期经过精确匹配后再填入的值,如CD1_1等。
平场与暗流的改正对测光有一定的影响。在实际处理中,利用ccdproc软件包,实现了图像的改正。程序可以在当天的观测数据中提取两张本底(Bias)与两张平场(Flat)图像,计算得到增益(Gain)与读出噪声(Read Noise)的值。随后将所有本底图像先合并再取平均,得到的图像为合并后的本底。然后把平场图像分别减去合并后的本底图像再合并取平均,得到处理后的图像为合并后的平场。最后把所有目标源的图像先减去合并后本底图像,再除以合并后的平场图像。
需要说明的是,由于CCD的暗流低于0.1电子/像素/s,所以暗场的影响很小,因此不做暗场处理。
SExtractor采用矩方法定心,根据FITS头文件的粗指向、比例尺等信息,把图像中高于背景信噪3sigma光源的像素信息提取出来并记录,然后SCAMP包则根据SExtractor提取的星像信息通过网络与已有的星表GAIA进行图像配对,尽管望远镜有小幅度的偏移和旋转,但在完成图像匹配后,SCAMP包计算出望远镜精确的指向以及CCD准确的比例尺。
如图2,其中红色区域表示星表中应存在的源,绿色区域表示匹配较好的源,背景黑框为实验时几十帧的FITS图像,网格线为天球坐标系,纵坐标为时角,横坐标为赤纬。然后把可以准确定位到视场所在天球坐标系上位置(望远镜指向)的图像进行注册,成功注册的图像文件记为goodfits,部分偏移视场过于严重或双重曝光而导致不能匹配的文件称为badfits。往后的操作只对goodfits进行处理。
另外,SExtractor还计算出图像中最优的半宽,对于暗弱的天体则需要把信噪比参数调低,才能方便后续测光程序的运行。
图2 GAIA星表与FITS图像文件的匹配示意图
Fig.2 GAIA star and FITS image files matching diagram
通过这一处理,完全回避了由于望远镜指向误差或跟踪误差带来的影响。也就是说,只要给出观测目标的赤经和赤纬,就一定可以在观测图像中找到该目标的精确位置,而不再需要人工点击选择。此外,对于这一视场中的标准星,也可以反过来通过星表先查询,再通过位置精确找出这些标准星所在的像素值。
根据测光星的编号,程序可以自动获取其坐标,而标准星需要挑选离测光星较近,且亮度较高的星作为参考(由于图像的偏移与旋转,导致不同图像显示的视场不一样,选取较远的星容易偏离视场,选取较暗的达不到标准星的效果),以1.26 m红外望远镜为例,该探测器CCD阵列为2 536 × 3 358,实际天文观测视场为4.51′ × 5.98′,实际处理中,需要判断这一天区观测的第一张图和最后一张图,判断共同存在的星像位置,再根据星表中的星等信息,自动选择并找出标准星(control_star),这样的模式充分利用了在线的星表服务,避免了人工点击,从而提高了计算效率。
由于计算机性能的显著提高,运行本文的程序并不需要很高的硬件配置。在中国虚拟天文台和阿里云的支持下,程序直接部署在阿里云的云端。硬件配置为4核CPU,内存64 GB。操作系统采用Ubuntu 16.04 LTS。
所有的自行开发程序代码采用Python 3编写完成。为了简化系统部署,Python3的解释器直接采用Anaconda 3.0。
以1.26 m红外望远镜获取的2016年11月1日一天数据中的OJ287为例,实验一共采用g、r、i 3个波段的观测图片57张,总观测时间近4 h 30 min,程序运行的总时间约为7 min 30 s,完成了从FITS头重建、星像坐标搜索、计算最优孔径、孔径测光等全过程,整个过程一次完成,无需人工干预。
部分运行过程说明如下:
(1)最优孔径的选择。根据测光孔径与信噪比的关系,程序采用信噪比最大时的孔径作为测光的最优孔径,如图3,最优孔径的像素不会因太少而失去太多的通光,也不会因太多而把背景流量计算进来(约0.68倍FWHM[9-10]),采用最优孔径的精度最高,但最优孔径不能包含目标源的全部流量(如图4红圈),因此需要孔径校正与测光补偿[9-10]。
(2)测光星与标准星(控制星)的选择。目前,测光星根据FITS文件中的OBJECT字段获得,再通过在线调用SIMBAD的相应服务,获取测光星的赤经和赤纬。标准星是为相对测光使用,程序自动计算中,可以准确地找出测光星和标准星,并完成相应的测光处理。结果如图5。
图3 测光孔径与信噪比的关系
Fig.3 The relationship between Aperture Radius and SNR
图4 采用最优孔径(红圈)的测光星图像
Fig.4 Meteor star image with the best aperture
图5 (a) 标准星的星等随时间的变化;(b) 测光星OJ287的星等随时间的变化,图中竖线为误差棒,表示星等的不确定度
Fig.5 (a) shows the variations of the standard star magnitude; (b) shows the variations of the photometric star OJ287magnitude, vertical line means the error range which express the uncertainty of the magnitude
自动测光处理管线高效便捷,可以给科研工作者带来很多的便利,但在实现与当前应用的过程中,也注意到它的一些局限性。
(1)采用SExtractor和SCAMP进行视场内星像匹配,可以非常准确地判断当前视场中心的赤径和赤纬,同时也可以非常精确地得到像素比例尺、CCD的安装倾斜角度等信息,这为自动数据处理打下了坚实的基础,但相对来说,这样的方式计算相对较慢,对中央处理器要求相对较高。
(2)对部分信噪比较差的或偏移严重的图像没有办法自动处理。这一类数据只能根据观测者的要求进行后续手工处理。
(3)标准星(控制星)的选择目前还是基于星等信息,但在实际处理问题时可能需要固定某一颗星为标准星,这与程序中标准星的选择产生一定的矛盾,需要在后续工作中完善。
本文实现了一个自动测光的管线系统,只需要观测人员生成观测日志,就可以实现对FITS头的完善与部分关键信息的补写,随后所有的测光处理过程由程序自动处理,最终得到科学、有效的数据,这种方式准确高效。整体来看,研究成果达到了原定的需求,取得了较好的运行效果。
致谢:感谢国家天文台-阿里云天文大数据联合研究中心对本项工作的支持。感谢国家天文台吴宏研究员的意见。