---
title: "从一块固定的M67天空开始复算"
description: "在本地获取固定Gaia锥区与具名原生模型，重新选择成员、比较等时线并生成十二年龄导入文件，保留真实失败。"
canonical_url: "https://sandboxphysics.com/zh/stories/cluster-populations/a-fixed-patch-of-m67/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/cluster-populations/a-fixed-patch-of-m67/"
last_modified: "2026-11-03"
---

[星团颜色与恒星群体](https://sandboxphysics.com/zh/stories/cluster-populations/)

AC32 · L3

# 从一块固定的M67天空开始复算

Sandbox Physics · 2026-11-03

这次不从一张整理好的图开始。先取一块固定天空的Gaia DR3表，逐项执行质量与运动筛选，再取同通带原生模型做描述性比较。原始行、真实散点图和本地导入文件都留在你自己的电脑上。

## 开始前需要什么

读过前三章，会在终端运行Python。需要Python 3.12与材料包requirements.txt列出的NumPy、SciPy和Matplotlib；数据获取使用系统curl，脚本不安装工具。

## 先固定天空，再谈成员

目标是M67附近一个半径1度的ICRS锥区，中心赤经132.85度、赤纬11.81度，先限制G视星等小于18.5。材料包source-recipes.json保存完整ADQL，明确读取gaiadr3.gaia\_source，并按source\_id排序。这个锥区里有前景、背景和星团成员，不能把“在这片天空里”直接叫作“属于星团”。

实际固定响应有7494行。source\_id要当字符串保存，避免把长整数经过浮点数后丢掉末位。位置单位是度；视差是毫角秒，自行是每年毫角秒。Gaia的pmra已经含赤纬余弦，不能再乘一次。表内2016.0是天体测量参考历元，不表示所有平均星等都在那一天拍成。

上游Gaia专用许可页与网页图片页脚是两件事。这里提供具名获取步骤，不把Gaia原行、逐行派生表或真实散点图放进公开材料。你本地生成的文件应按源条款使用；这也让每一次筛选都能追溯回实际收到的响应。

对应阅读：Gaia DR3 documentation and archive · Official Gaia data license

## 把五条命令真正跑一遍

下载本页的完整ZIP，解压并进入cluster-populations-local-science目录。在自己管理的Python环境中准备requirements.txt列出的精确版本。先核包内文件，再获取输入，生成可导入模型，运行实际生产链，最后独立核账。默认输出放在当前目录的独立子目录，不回写项目文档。

```
python verify_package.py
python fetch_inputs.py --out inputs
python prepare_modelsets.py --inputs inputs --out local-modelsets
python reproduce.py --inputs inputs --out results
python validate.py --inputs inputs --results results
```

第一条命令只证明包内成员与清单一致，不证明科学结论都成立。fetch\_inputs用原站固定入口和精确POST配方取源；prepare\_modelsets从实际原生行生成两份JSON，同时从作者ISOA CSV重新选出公开98节点，核对它们的身份。reproduce重新计算成员、模型比较和独立检验；validate再直接读原CSV与保存分量，核查身份、几何和光通量。

已有原始缓存时，可以把获取命令换成下方形式，多个缓存目录就重复cache参数。这是离线缓存体重放，不是一次新的网络获取。缓存仍必须通过源哈希或完整模型数值哈希，脚本不会因为文件名正确就放行。

```
python fetch_inputs.py --out inputs --cache /path/to/original-cache
```

对应阅读：PARSEC/CMD3.8 official input help and phase labels · MIST official isochrone interface and user documentation · Reyes et al. (2024), a precise M67 isochrone; native ISOA data

## 留下哪些点，由条件明确决定

质量筛选要求关键天体测量与三波段星等有限，三项天体测量误差为正，visibility\_periods\_used至少9，G通量信噪比大于50，BP与RP分别大于10。固定响应留下7371行。这里没有先按颜色贴近某条理论线来挑星。

主筛选以自行约为每年赤经负11、赤纬负2.9毫角秒为中心，取半径0.7的圆；原始视差取1.15上下0.12毫角秒。结果1064行。另一条独立声明的敏感性路线使用三维误差相关矩阵，并加入给定内在宽度，得到1243行。两者是条件不同的候选集合，不是两份都已知纯净的成员目录。

34个RUWE大于1.4的点仍保留。474个候选有径向速度，其中13个超出20.4至47.6 km/s也只标记，不自动删除。双星可能影响天体测量或速度；把这些点一删再声称样本证明单星图很窄，会把问题先从样本里筛掉。脚本不施加全局视差零点校正，也不把原始视差直接倒数当作无偏距离估计。

对应阅读：Gaia DR3 documentation and archive

## 临时下载地址不是模型身份

CMD和MIST服务会生成临时结果地址。地址过期以后，唯一可执行的入口仍应是记录版本、成分、年龄、通带和消光的POST配方，而不是祈祷某个旧文件名一直活着。PARSEC配方实际返回十二个对数年龄节点8.6至9.7；原请求上端9.8并没有变成第十三个节点。

MIST请求同样显式列出这十二个节点。脚本先读ZIP中央目录，只获取光度成员的精确压缩字节区间，要求HTTP 206、Content-Range与体长一致，再核解压长度和CRC。服务器忽略Range就停止，不退回整库下载。理论成员不需要取得。

原响应体哈希与数值表哈希分开保存。日期头、随机文件名或ZIP包装可以改变；所有原列与原行按声明的float64字节规则规范化后，完整数值仍须精确匹配。这里不四舍五入再说“一样”。版本、通带、节点或数值发生变化，应明确失败并重新审输入。

把local-modelsets中的parsec-native12.json或mist-native12.json选入Lab。文件只进入当前浏览器内存，不上传，也不触发外站请求。只有验证完成后才出现年龄选择；通带标签变成EDR3。公开3.95 Gyr的DR2默认是另一份模型，不拿它覆盖真实DR3散点。

对应阅读：PARSEC/CMD3.8 official input help and phase labels · MIST official isochrone interface and user documentation · Reyes et al. (2024), a precise M67 isochrone; native ISOA data

## 看结果，也看留下来的失败

results/summary.json给聚合结果，selected-gaia-local-only.csv和real-gaia-local-only.png只在本地生成。颜色残差0.05星等、G残差0.2星等是描述坐标尺度，不是测量误差。年龄和距离搜索碰到边界时，结果明确保留边界标志，不转写成年龄区间。

另外三个失败也应看见。原生年龄插值没有通过；公开ISOA的连续光度留出误差超探索门，默认改用离散节点；种子20261104的20万个Plummer点在原定99.9% DKW界外。最后一项还保留了原随机输入。同一输入下，独立积分与几何求解吻合；原失败样本照样留在结果中。

另一个事前写下的独立种子集合，使用两类生成器、各16个种子，检查128条累计分布，并单列多重检验的家族置信界。它能给原异常提供背景，不能回头把原失败改成通过。终端退出码为零，表示生产链正确保留并核验这些结果，不等于每个科学门都过了。

这份复算重新处理真实源行和原生数值表，但不重新运行恒星演化，不重建受保护Engine，也不从八颗巨星的原光谱重拟合丰度。把已算、没算和拒绝的部分放在一起，下一位读者才知道可以从哪里继续。

对应阅读：Huang et al. (2024), arXiv2401.17584v1

## 练习与解释性答案

1. 重新生成模型后，原响应体SHA改变了，规范数值SHA仍完全一致，应把它们写成同一原文件吗？

   展开解释

   不应。分别记录新旧原响应的字节与哈希，再报告数值表身份一致。临时包装变化不能抹去原体来源，数值一致也不能靠放宽容差获得。

2. 主筛选1064行，敏感性筛选1243行，能否说后者找回了179个真正成员？

   展开解释

   不能。两个集合并不一定互相包含，新增与丢失的身份都要核对；选择条件也不是成员真值。还需要独立污染、完备性与成员概率模型。

3. validate命令退出零，但报告里保留一个失败的99.9%抽样界，这是不是自相矛盾？

   展开解释

   不是。软件验收在检查实际失败仍被正确计算和披露；统计门本身继续失败。它们回答不同问题，不能用退出码替代科学范围。

## 动手检验预测

### [实际导入两个源](https://sandboxphysics.com/zh/labs/star-cluster/?analysis=populations)

1. 依次导入本地生成的PARSEC和MIST文件，检查EDR3、完整十二年龄节点及源名。
2. 同一源只选原生年龄。比较有支持系统数的变化，不把缺失阶段当作零光遗骸。

### [保存观测身份链](https://sandboxphysics.com/zh/labs/star-cluster/?analysis=populations)

1. 导出一份本地合成群体，与prepare\_modelsets的源生产回执一起保留。
2. 只公开自己的聚合说明与许可允许的材料，真实逐点结果留在本地。

[上一篇：比较年龄前，先看清模型](https://sandboxphysics.com/zh/stories/cluster-populations/an-age-comparison-needs-a-model/) [下一篇：核心里挤着大星，能读出什么时间](https://sandboxphysics.com/zh/stories/cluster-populations/a-concentrated-core-is-not-a-clock/)

## 独立固定源复算材料

材料包解析原Gaia与作者表，执行选择和描述性模型比较，生成十二年龄本地输入，并保留独立检验的失败。它不重新运行恒星演化，也不重新生成受保护Engine。

[下载完整独立复算ZIP](https://sandboxphysics.com/stories/cluster-populations/materials/cluster-populations-local-science.zip)

SHA-256: `fa25eca9498d68e8eae40fcb06b39fb64ed04ce90b174a08233bee19233bd424`

逐项文件与精确大小

- [README.md](https://sandboxphysics.com/stories/cluster-populations/materials/README.md) · 4,200 字节
- [fetch\_inputs.py](https://sandboxphysics.com/stories/cluster-populations/materials/fetch_inputs.py) · 7,124 字节
- [frontier\_reading.py](https://sandboxphysics.com/stories/cluster-populations/materials/frontier_reading.py) · 3,489 字节
- [isoa-hydrogen-burning.json](https://sandboxphysics.com/stories/cluster-populations/materials/isoa-hydrogen-burning.json) · 21,249 字节
- [model\_io.py](https://sandboxphysics.com/stories/cluster-populations/materials/model_io.py) · 2,294 字节
- [prepare\_modelsets.py](https://sandboxphysics.com/stories/cluster-populations/materials/prepare_modelsets.py) · 2,474 字节
- [projection-cohort-plan.json](https://sandboxphysics.com/stories/cluster-populations/materials/projection-cohort-plan.json) · 1,177 字节
- [projection\_audit.py](https://sandboxphysics.com/stories/cluster-populations/materials/projection_audit.py) · 5,113 字节
- [projection\_cohort.py](https://sandboxphysics.com/stories/cluster-populations/materials/projection_cohort.py) · 1,437 字节
- [public\_nodes.py](https://sandboxphysics.com/stories/cluster-populations/materials/public_nodes.py) · 2,915 字节
- [reproduce.py](https://sandboxphysics.com/stories/cluster-populations/materials/reproduce.py) · 5,651 字节
- [requirements.txt](https://sandboxphysics.com/stories/cluster-populations/materials/requirements.txt) · 46 字节
- [science/comparison.py](https://sandboxphysics.com/stories/cluster-populations/materials/science/comparison.py) · 5,877 字节
- [science/inputs.py](https://sandboxphysics.com/stories/cluster-populations/materials/science/inputs.py) · 1,932 字节
- [science/membership.py](https://sandboxphysics.com/stories/cluster-populations/materials/science/membership.py) · 2,475 字节
- [science/population.py](https://sandboxphysics.com/stories/cluster-populations/materials/science/population.py) · 5,442 字节
- [science/validation.py](https://sandboxphysics.com/stories/cluster-populations/materials/science/validation.py) · 8,613 字节
- [source-recipes.json](https://sandboxphysics.com/stories/cluster-populations/materials/source-recipes.json) · 11,951 字节
- [validate.py](https://sandboxphysics.com/stories/cluster-populations/materials/validate.py) · 3,607 字节
- [verify\_package.py](https://sandboxphysics.com/stories/cluster-populations/materials/verify_package.py) · 567 字节
- [HASHES.json](https://sandboxphysics.com/stories/cluster-populations/materials/HASHES.json) · 3,117 字节
- [cluster-populations-local-science.zip](https://sandboxphysics.com/stories/cluster-populations/materials/cluster-populations-local-science.zip) · 42,387 字节

## 来源与计算范围

1. [Reyes et al. (2024), a precise M67 isochrone; native ISOA data](https://zenodo.org/records/12616441)

   原ISOA文件只有3.95 Gyr一个年龄。公开CC BY 4.0片段选取中心氢质量分数大于0.001的98个单调节点；原生绝对星等使用Gaia DR2，不能混作EDR3。

2. [PARSEC/CMD3.8 official input help and phase labels](https://stev.oapd.inaf.it/cmd_3.8/help.html)

   固定PARSEC 1.2S、太阳比例成分、OBC和Gaia EDR3 Vega，使用实际返回的年龄与消光节点。源标签是近似分类；同标签规则避免跨标记边界，却不证明整条演化支连续。

3. [MIST official isochrone interface and user documentation](https://mist.science/isochrones.html)

   本地比较使用MIST 1.2、MESA 7503、无自转、太阳铁丰度、零消光及原Gaia EDR3列。完整数值哈希识别十二节点文件；代码许可不能替代数值表的再分发许可。

4. [Gaia DR3 documentation and archive](https://www.cosmos.esa.int/web/gaia/dr3)

   天体测量参考历元2016.0不是平均光度的统一观测时刻。教程用固定锥区和明确的天体测量筛选，源行与真实散点图只在读者电脑上生成。

5. [Official Gaia data license](https://www.cosmos.esa.int/web/gaia-users/license)

   专门的数据许可页列明CC BY-NC 3.0 IGO。材料包提供具名上游获取步骤，不转托管Gaia目录、逐源派生表或真实散点图。

6. [Huang et al. (2024), arXiv2401.17584v1](https://arxiv.org/html/2401.17584v1)

   读第III节图3与表2、第IV节图4与表3。八颗巨星的丰度与条件选样论证针对化学多族群，不是颜色图上的未分辨双星脊。
