---
title: "A fixed patch of M67"
description: "Fetch a named Gaia cone and native models locally, rerun selections and comparisons, and build verified twelve-age import files."
canonical_url: "https://sandboxphysics.com/stories/cluster-populations/a-fixed-patch-of-m67/"
language: "en"
page_type: "story"
alternate_languages:
  zh-CN: "https://sandboxphysics.com/zh/stories/cluster-populations/a-fixed-patch-of-m67/"
last_modified: "2026-11-03"
---

[Star cluster colours and populations](https://sandboxphysics.com/stories/cluster-populations/)

AC32 · L3

# A fixed patch of M67

Sandbox Physics · 2026-11-03

Begin with the original source rows. Fetch a fixed Gaia DR3 sky patch, execute explicit quality and motion selections, and compare native same-band models. Original rows, real scatter plots and model-import files stay on your computer.

## Before you begin

Read the previous three chapters and know how to run Python commands. Use Python 3.12 with the NumPy, SciPy and Matplotlib versions in requirements.txt. Acquisition uses system curl; scripts install no tools.

## Fix the sky before calling anything a member

The target is a one-degree ICRS cone centred at right ascension 132.85 degrees and declination 11.81 degrees, with G below 18.5. source-recipes.json contains the complete ADQL, explicitly querying gaiadr3.gaia\_source and ordering by source\_id. The cone contains foreground, background and cluster stars. Position inside it is not membership.

The fixed response contains 7494 rows. Preserve source\_id as a string so a floating-point conversion cannot lose its final digits. Positions use degrees, parallax milliarcseconds and proper motions milliarcseconds per year. Gaia pmra already includes the declination cosine. The reference epoch 2016.0 belongs to astrometry, not a single observation date for all mean magnitudes.

Gaia’s dedicated data-license page is distinct from a webpage image footer. The package provides named acquisition steps, not rehosted Gaia rows, individual-source derivatives or real-source scatter. Local outputs remain subject to source terms, and every selection can be traced to the response actually received.

Reading: Gaia DR3 documentation and archive · Official Gaia data license

## Run all five commands

Download the complete ZIP, extract it and enter cluster-populations-local-science. Prepare the exact requirements.txt versions in an environment you manage. Verify package integrity, obtain inputs, produce import files, execute the analysis, then independently check component identities, light and distance. The commands write inputs, local-modelsets and results in separate directories.

```
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
```

The first command verifies members against a hash list; it does not validate every scientific claim. fetch\_inputs uses fixed source entry points and POST recipes. prepare\_modelsets parses complete original tables and independently derives the 98 public nodes from the author ISOA CSV. reproduce calculates selections, comparisons and independent checks. validate rereads original rows and saved components to check identities, geometry and band light.

For an existing original-input cache, replace acquisition with the command below and repeat --cache for additional directories. This is an offline cached-body replay, not fresh HTTP acquisition. Every cached input must still match its direct-body or complete numerical-table identity.

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

Reading: 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

## Make the selection reproducible

Quality cuts require finite key astrometry and three-band magnitudes, positive astrometric errors, at least nine visibility periods, G flux signal-to-noise above 50 and BP/RP above 10 each. They retain 7371 rows. There is no colour-based cleaning toward a preferred theoretical sequence.

The main cut uses a proper-motion circle of radius 0.7 around approximately minus 11 and minus 2.9 milliarcseconds per year, and raw parallax 1.15 plus or minus 0.12 milliarcseconds. It retains 1064 rows. A separately stated sensitivity selection uses the correlated three-dimensional error matrix with declared intrinsic widths and retains 1243. These are conditional candidate sets, not two known-pure membership catalogues.

The main set retains 34 points with RUWE above 1.4. Of 474 candidates with radial velocities, 13 outside 20.4–47.6 km/s are flagged but retained. Binaries can affect astrometry and velocity. Removing them before claiming a narrow single-star sequence would select away part of the question. No global parallax zero-point correction or unbiased inverse-parallax distance is claimed.

Reading: Gaia DR3 documentation and archive

## A temporary URL is not a model identity

CMD and MIST create temporary result pointers. A recorded POST recipe fixes version, composition, ages, passbands and extinction after those pointers expire. The PARSEC request actually returns twelve log-age nodes from 8.6 through 9.7. Its requested upper endpoint 9.8 is not a thirteenth returned node.

MIST receives an explicit list of the same twelve nodes. The script reads the ZIP central directory, requests only exact compressed photometry-member ranges, requires HTTP 206 with matching Content-Range and body lengths, and verifies decompressed length and CRC. An ignored range stops the process; it does not trigger a whole-library fallback. The theory member is unnecessary.

Raw-body hashes and numerical-table hashes are separate. Dates, random filenames and ZIP packaging can change; all original columns and rows must still match the declared float64 numerical-byte digest exactly. There is no rounding tolerance. Version, passband, node or numeric changes fail visibly and require a reviewed input revision.

Select parsec-native12.json or mist-native12.json from local-modelsets in the Lab. The file stays in browser memory with no upload or remote job. Verification enables the age selector and changes the label to EDR3. The public 3.95 Gyr DR2 model remains a separate input and is not overlaid on the real DR3 scatter.

Reading: 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

## Read the failures alongside the result

results/summary.json contains aggregates. selected-gaia-local-only.csv and real-gaia-local-only.png are produced locally. Colour and G coordinate scales of 0.05 and 0.2 magnitudes define a descriptive distance, not measurement errors. Age and distance boundary minima retain explicit flags rather than becoming age intervals.

Three further failures stay visible: withheld native-age interpolation; public ISOA continuous photometry beyond its exploratory gate, leading to discrete default nodes; and the original seed 20261104 Plummer sample outside its 99.9% DKW band. That last sample has 200000 points. Its original random inputs were retained, and independent same-input integration and geometry agree. A new seed does not replace the failure.

A separately predeclared cohort uses two generator families with sixteen seeds each and 128 cumulative-distribution checks, with a stated family confidence bound. It provides context, not a retroactive pass. A zero exit means the workflow calculated and preserved these outcomes correctly, not that every scientific gate passed.

The workflow processes original observations and native tables. It does not rerun stellar evolution, regenerate the protected Engine or refit the eight giants’ spectra. Keeping computed, omitted and refused steps together makes the next possible investigation precise.

Reading: Huang et al. (2024), arXiv2401.17584v1

## Exercises and explanations

1. A regenerated model has a different raw-body SHA but an identical canonical numerical SHA. Is it the same original file?

   Read the explanation

   No. Record both raw response identities and separately report identical numerical tables. Packaging changes do not erase provenance, and numerical identity must not come from a relaxed tolerance.

2. Does a sensitivity selection of 1243 instead of 1064 recover 179 true members?

   Read the explanation

   No. The sets need not be nested. Check added and lost identities, and remember that a selection rule is not membership truth. Contamination, completeness and membership probabilities need independent models.

3. validate exits zero while retaining a failed 99.9% sampling band. Is that contradictory?

   Read the explanation

   No. The software check verifies that the failed statistical outcome was actually computed and retained. The scientific gate remains failed; an exit code does not replace its scope.

## Try the prediction

### [Import both actual sources](https://sandboxphysics.com/labs/star-cluster/?analysis=populations)

1. Import the locally produced PARSEC and MIST files in turn. Check the EDR3 label, source name and all twelve native ages.
2. Select native nodes only. Follow support changes without calling missing phases dark remnants.

### [Preserve the identity chain](https://sandboxphysics.com/labs/star-cluster/?analysis=populations)

1. Save a local synthetic population export with its source-production receipt.
2. Share only your aggregate explanation and materials allowed by their licenses; keep individual real-source products local.

[Previous: An age comparison needs a model](https://sandboxphysics.com/stories/cluster-populations/an-age-comparison-needs-a-model/) [Next: A concentrated core is not a clock](https://sandboxphysics.com/stories/cluster-populations/a-concentrated-core-is-not-a-clock/)

## Standalone fixed-source science files

The package parses the original Gaia and author tables, executes selections and descriptive model comparisons, builds the twelve-age local inputs, and retains independent-check failures. It does not rerun stellar evolution or regenerate the protected Engine.

[Download the complete standalone ZIP](https://sandboxphysics.com/stories/cluster-populations/materials/cluster-populations-local-science.zip)

SHA-256: `fa25eca9498d68e8eae40fcb06b39fb64ed04ce90b174a08233bee19233bd424`

Individual files and exact sizes

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

## Sources and calculation scope

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

   The original ISOA file supplies one 3.95 Gyr age. Our CC BY 4.0slice uses98 monotonic rows with central hydrogen fraction above0.001; its native absolute magnitudes areGaia DR2, notEDR3.

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

   PinnedPARSEC 1.2S, solar-scaled composition, OBC andGaia EDR3Vega, native returned ages andAvnodes. Source labels are approximate; our equal-phase rule prevents bridging labelled boundaries but does not certify continuous evolutionary branches.

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

   The local comparison usesMIST 1.2, MESA 7503, nonrotating, solar iron abundance, Av 0, and the originalGaia EDR3columns. Full original numerical hashes identify the twelve-node file; code licensing does not establish table redistribution permission.

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

   Astrometric reference epoch2016.0 is not a universal epoch for mean photometry. The tutorial uses a fixed cone and explicit astrometric cuts; source rows and real point plots are made only on the reader computer.

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

   The dedicated data-license page specifiesCC BY-NC 3.0 IGO. This package supplies a named upstream recipe, not a rehostedGaia catalogue, individual-source derivative table or real-source scatter plot.

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

   SectionIII/Figure3/Table2 and SectionIV/Figure4/Table3. Eight giant-star abundances and the conditional population-selection argument concern chemical multiple populations, not an unresolved-binary ridge.
