先认出表里的四个空腔
表A1的Perseus共有四行。前两行投影中心距离约为九点四和六点五千秒差距,对应本次选取的内侧一对;后两行约在二十八和三十九千秒差距。本教程以表中行次命名,不自行补上原表未标出的方位。所有四行都存进输入文件,默认只选前两行。
压强乘体积一列已经包含论文对几何和周围压强的估计。数值误差还含投影影响。我们直接读取这列,不把图上的椭圆重新画成一个未经说明的三维体积。论文采用的宇宙学参数也保留在输入中,沿用原表尺度。
| 内侧空腔 | 投影半径(千秒差距) | 压强乘体积(十的五十八次方尔格) | 浮升年龄(百万年) |
|---|---|---|---|
| 表中第一行 | 9.4 | 16 | |
| 表中第二行 | 6.5 | 11 |
先把能量单位换好
一尔格等于千万分之一焦耳,所以表中的一个能量单位就是十的五十一次方焦耳。采用相对论性空腔的四倍系数,内侧两腔的焓相加如下。
冷却光度那一列容易读反
表2依次给出总空腔能量、空腔功率、X射线光度、质量冷却率、冷却到低温那部分气体的光度,以及孔径。英仙座行中的二十是质量冷却率,单位是每年太阳质量;二十一才是后面那列光度,单位是十的四十二次方尔格每秒。
按论文3.1.3节,需要补充的加热功率取总X射线光度,减去冷却到低温那部分气体所带走的光度。两项都采用相同的孔径与全波段约定。
九十千秒差距后面的星号不能删
论文通常把冷却时间短于七十七亿年的区域称作冷却区。但表2中英仙座的九十千秒差距带星号:这里采用的是探测器芯片边缘,冷却区延伸到了覆盖范围之外。
这次比较只谈原文这个被截断孔径里的光度。它没有把没有观测到的外层继续积分,也没有把九十千秒差距说成整个星系团的真实冷却半径。输入中的孔径标记若被改成完整冷却半径,脚本会拒绝继续。
选择一个年龄,就选择了一种功率估算
本教程明确采用一个条件估算:对内侧每个空腔,用各自焓除以各自表列年龄,再把两项相加。浮升年龄下得到约四点七七乘十的三十七次方瓦,是补热需求的约零点八九六倍。两腔能量若全部用于这项损失,可以抵偿约一千二百六十万年的辐射。
表中还有声速年龄和回填年龄。前者估算按当地声速走到该位置所需时间,后者估算气泡上升后周围介质填回其体积的时间。换用这些年龄,结果会明显改变。
| 表列年龄 | 内腔条件功率(瓦) | 相对补热需求 |
|---|---|---|
| 浮升 | 0.896 | |
| 声速 | 1.42 | |
| 回填 | 0.285 |
把区间与未复现的总量留下来
输入保留了不对称的压强乘体积误差。先固定年龄,把两个空腔分别取低端或高端,再与光度的相反端点组合,浮升功率比的范围约为零点六一一至一点八四五。这个范围跨过一,但它只是端点敏感性范围:原表没有提供这些量的联合概率分布,年龄误差也没有包含进去。
论文表2还给出一个覆盖其整体空腔选择和时间约定的已发表功率,一点五零乘十的三十七次方瓦。它与这里的内腔条件估算不同。脚本把两项及差异一起写出,明确没有复现那项聚合功率。若目标是复现整项结果,下一步必须追溯所选空腔代次和采用的爆发间隔。
这些数值说明,当前一对气泡的能量与孔径内损失处于值得比较的量级。单次能量、年龄代理量和重复爆发的时间分布仍需分别检查,才能讨论长期的局部平衡。
运行脚本,再故意放入一个错误
下载文后的输入、脚本、期望输出与说明,放在同一目录。脚本采用五十位十进制运算,记录输入与源码哈希;换一台电脑,Python版本字符串可以不同,物理结果应一致。
十四项独立有理数与错误输入检查已实际通过。可以先复制输入,把一个年龄改成零再运行;它应当以年龄错误停止。把光度单位换成质量率、混入外侧一代气泡、删去芯片边缘标记或改掉焓系数,也都应被拒绝。
python3 reproduce-perseus.py --input perseus-input.json --output local-results.json
python3 test-perseus-inputs.py