近日为一个项目做天体证认,要根据候选天体的座标查找临近天体。Simbad支持座标文件查询,但因为目标很多,返回的页面内容太多,不便查看;但可以提交脚本来定制输出格式,但是脚本查询的返回结果中不区分座标来源,也就是说所有座标的全部查询结果都顺次输入,完全不做区分也没有标记,这样对应关系就全乱了。在问过CDS的Marc Wenger之后,得知系统可以用echodata来人工插入注释。但我有几百个目标写起来太麻烦了,于是写了段python脚本,直接从文件中读取座标,转换为链接格式提交查询,并将结果返回终端,按指定格式写入文件保存,一键完成。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#Simbad coordinates query script #coding=utf-8 #henrysting 2010-01-26 import urllib lines = open('list.dat','r').read() # data format (degree) # 83.633212 22.014460 line = lines.split('\n') n=len(line) # search radius (unit:arcsecond) search_rad = str(10.) ## formatting shead = """echo My first Simbad4 script format object form1 '%#IDLIST : %IDLIST(1) : %COO(d;C) : %otype ' """ radius='set radius '+search_rad+'s\n' query='' for i in range(0,n): ra,dec = line[i].split(' ') query = query+"echodata "+str(i)+"\n" query = query+"query coo "+ra+"d "+dec+"d\n" script=shead+radius+query ## submitting url='http://simbad.u-strasbg.fr/simbad/sim-script?submit=submit+script&script='+urllib.quote_plus(script) page = urllib.urlopen(url) data = page.read() page.close() print data ## saving result = open('data.simba','w') result.writelines(data) result.close() |