求助:如何从SDSS数据库获取恒星B/V星等并实现温度计算代码
解决方案:获取恒星B/V星等并处理异常
核心前提:SDSS原生无B/V星等
SDSS巡天的测光系统仅覆盖u、g、r、i、z波段,没有直接的B、V星等数据。如果必须基于SDSS数据计算,需通过转换公式从g、r星等推导,针对恒星的常用转换关系为:
- B = g - 0.31*(g - r) + 0.24
- V = g - 0.57*(g - r) + 0.01
方案1:基于astroquery+SDSS查询并转换
结合你已有的坐标获取逻辑,查询SDSS的g、r星等后转换为B、V,同时处理各类异常情况:
from astropy.coordinates import SkyCoord from astroquery.sdss import SDSS import astropy.units as u def get_sdss_bv_magnitudes(star_name): # 解析恒星坐标 try: coord = SkyCoord.from_name(star_name) except Exception as e: return f"错误:无法解析恒星名称 - {str(e)}" # 查询SDSS测光数据(缩小半径避免匹配邻近天体) try: result = SDSS.query_region(coord, radius=1*u.arcsec, photobj_fields=['ra', 'dec', 'g', 'r']) if result is None or len(result) == 0: return f"错误:SDSS数据库中未找到该恒星的测光数据" # 提取匹配度最高的第一条数据 obj = result[0] g_mag = obj['g'] r_mag = obj['r'] # 转换为B、V星等 b_mag = g_mag - 0.31*(g_mag - r_mag) + 0.24 v_mag = g_mag - 0.57*(g_mag - r_mag) + 0.01 return { "B星等": round(b_mag, 2), "V星等": round(v_mag, 2), "SDSS g星等": round(g_mag, 2), "SDSS r星等": round(r_mag, 2) } except Exception as e: return f"查询SDSS时出错 - {str(e)}" # 示例调用 star_name = "天狼星" result = get_sdss_bv_magnitudes(star_name) print(result)
方案2:直接查询SIMBAD获取原生B/V星等(更可靠)
如果不局限于SDSS数据,SIMBAD数据库整合了多巡天的B、V星等数据,支持直接通过恒星名称查询,流程更简单:
from astroquery.simbad import Simbad # 配置SIMBAD查询字段,添加B、V星等 Simbad.add_votable_fields('flux(B)', 'flux(V)') def get_simbad_bv_magnitudes(star_name): try: result_table = Simbad.query_object(star_name) if result_table is None or len(result_table) == 0: return f"错误:SIMBAD数据库中未找到该恒星" # 提取星等并处理缺失情况 b_flux = result_table['FLUX_B'][0] v_flux = result_table['FLUX_V'][0] missing = [] if b_flux is None: missing.append("B星等") if v_flux is None: missing.append("V星等") if missing: return f"错误:该恒星的{'、'.join(missing)}数据缺失" return { "B星等": round(b_flux, 2), "V星等": round(v_flux, 2) } except Exception as e: return f"查询SIMBAD时出错 - {str(e)}" # 示例调用 star_name = "北极星" result = get_simbad_bv_magnitudes(star_name) print(result)
异常处理说明
- 恒星名称无效:捕获坐标解析或SIMBAD查询的异常,返回明确提示
- 无匹配数据:判断查询结果是否为空,告知用户数据库中不存在目标天体的测光数据
- 星等缺失:针对SDSS转换或SIMBAD的缺失值,明确说明缺失的波段数据
内容的提问来源于stack exchange,提问作者yoongified
相关产品推荐
相关产品推荐

