先固定数据,而不是每次重查天空
输入文件叫 gaia-dr3-sample.csv,下载于二〇二六年十月二十八日。数据来自 ARI 的 Gaia TAP 服务,并与 ESA 服务返回的同一查询交叉检查。query.adql 保存查询:在固定源编号区间内,按源编号取前二十四个具有五参数解的源。没有按视差正负或 RUWE 删行。
这种取法是为了得到一个小而确定的练习样本,不能用来估计银河恒星数量、距离分布或负视差的总体比例。样本包含三行负视差;它们从输入一路保留到输出。
先把 CSV、脚本和随页的来源说明下载到一个目录。输入的 SHA-256 校验值保存在 provenance.json 和结果文件中。脚本也会检查行数、负视差数量及五参数协方差的正定性。
python3 reproduce-gaia-distances.py --data-dir . --check
# In the repository checkout:
python3 scripts/astronomy/ac01/reproduce-gaia-distances.py
python3 scripts/astronomy/ac01/reproduce-gaia-distances.py --check
对应阅读:ARI Gaia Services — TAP documentation · Lindegren et al.
星表的一行里,有数值,也有它们的关联
source_id 是标识符,请按字符串保存。它的位数很多,不能交给精度不足的浮点类型。ra 和 dec 是国际天球参考系中的方向角,以度计,参考历元为 J2016.0。parallax 及其误差用毫角秒;pmra、pmdec 用毫角秒每年。
pmra 已含赤纬余弦因子。ra_error 描述切向位置误差 ,也用毫角秒;不能直接与以度计的赤经数值相加。十个相关系数配合五个标准差,可重建完整五参数协方差矩阵。
例如东向位置传播二十年后的方差,要把位置误差、二十倍自行误差,以及两者的交叉项都算进去。输出同时保存完整结果和忽略相关后的结果。比较二者,可以看到“只留对角线”到底改变了多少。这里只做线性切向传播,不加入径向加速。
对应阅读:Lindegren et al.
高信噪比下,先试一次倒数
源 3200000263315829632 的测得视差约为 。直接倒数给约一百七十九点八秒差距。误差相对视差很小,先验选择对这颗源的距离结果影响也小。
另一颗源 3200000224659857664 只有 。直接倒数会给出约二万二千八百六十秒差距。这个数看起来精确,其实对视差的微小变化极其敏感:把测量稍稍推到零,倒数就发散,推过零又会变号。
遇到后一种测量,要直接在视差空间描述噪声。给定一个正距离,预测视差,再问这种带误差测量有多可能出现。这个“给定参数时观测的概率密度”叫似然。
对应阅读:Bailer-Jones
给每个正距离一个权重,再看先验敏感性
脚本采用一个便于检验的教学先验:距离密度正比于 。平方项来自球壳体积,指数项让很远距离的权重逐渐衰减。它不是二〇二一年 Bailer-Jones 距离星表所用的方向相关银河模型。
把先验与高斯视差似然相乘,再归一化,就得到后验距离分布。脚本分别取 ,保存每一组的百分之十六、中位数和百分之八十四分位点。分位点是累计概率到指定比例时的距离,可以保留分布的不对称性。
脚本在对数距离网格上求积。网格间隔相同不表示每格有相同距离宽度,因此积分权重必须包含 。漏掉这个因子会悄悄换成另一套先验。
检查负视差和三维位置输出
源 3200000259019600000 的测得视差约为负零点一三一毫角秒,标准差约零点四二五毫角秒。脚本给它的倒数距离填空值,仍照常计算正距离后验。在尺度一千三百五十秒差距的教学先验下,中位数约四千四百六十三秒差距,中央百分之六十八区间约二千七百四十一至七千零六十秒差距。换先验尺度时,这个结果会明显移动。
输出还把每颗源的后验距离中位数沿其 ICRS 方向投成三个空间坐标。它们是所选径向中位数对应的位置,不是无误差真值,也不是三维联合分布的完整描述。需要总体地图时,应保留距离分布和观测选择,而不只画二十四个点。
最后运行 --check。它会将重算结果与冻结结果逐字比较,并把网格点数减半检查数值收敛。在测量几乎没有信息的极限,后验应退回形状参数为三的 Gamma 分布;脚本用该分布的解析累计概率独立检查分位点。
换到另一份 Gaia 数据时,先检查版本、历元、单位和参数解类型;再看协方差、零点修正的适用范围和选择条件。距离图上的一点,背后始终连着这些信息。
对应阅读:Bailer-Jones · Lindegren et al.