Skip to main content
Sandbox Physics
Galactic chemical evolution

Galactic chemical evolution · L3

Recompute a fixed Sculptor abundance sample

This tutorial asks a reproducible, limited question: what abundance populations follow from four prescribed formation histories under the same effective yields? We first calculate everything with an original synthetic sample. Then an optional local step extracts the fixed Hill catalogue and compares its measured abundance pairs. Neither ranking is a reconstruction of a unique Sculptor history: red-giant selection and complete stellar error covariances have not been supplied.

Begin outside the repository

Download the independent Python package and unpack it into a new directory. It contains original scientific programs, fixed scalar inputs, synthetic measurements and documentation. It contains no interactive Engine, original PDF or observed-star table. Verify its inventory before running a producer. Each output command requires a new filename, preserving earlier results for comparison.

python science/verify_package.py
python science/make_records.py --save-every .005 --output results/records

Reading: Independent one-zone chemical-evolution Python materials

Separate physical snapshots from birth integration

The first producer actually solves four specified histories. Its fourteen state fields follow gas, locked stellar mass, wind, and magnesium and iron inventories. Time is in gigayears and the mass scale corresponds to an initial billion solar masses. Full physical snapshots are stored every 0.05 gigayears; every 0.005-gigayear stellar birth interval is retained separately.

The reference producer solves again with tighter differential-equation tolerances and 0.0025-gigayear birth intervals. It computes the full fine trajectory in memory, then archives all fine birth groups, actual per-field maxima and a hash of that full fine record. It does not label an archive of maxima as an archive of the complete fine bulk arrays.

Positive four-point and eight-point Gaussian time integrals provide a separate check of the observation operator. They interpolate fine gas and element masses before taking logarithms, and use the analytic formation-rate weights. This checks the observation integration over that chemical solution; it is not a third independently solved galaxy model.

python science/make_reference.py --records results/records --output results/reference
python science/validate.py --records results/records --reference results/reference --output results/validation.json

Reading: Independent one-zone chemical-evolution Python materials

Read a failure before reading a pass

Earlier 0.02 and 0.01-gigayear birth intervals changed the per-star log densities by a mean absolute value up to 0.08499, exceeding the preregistered 0.01 gate. Inventory conservation passed, but the observation integral did not. That failure is retained.

With the same histories and declared error scenarios, the 0.005 versus 0.0025 comparison gives a maximum about 0.00549 in the finite synthetic and real-sample checks. Four-point to eight-point positive integration changes are of order a few parts in ten million. These are tests of those histories and scenarios, not a uniform certificate for every continuous formation history.

The validator also checks the normalized delay kernel, independent source integrals, an analytic gas solution, gas and element inventories, and mathematical wind and mixing controls. The output names each check and the calculation it tests; the finite-history scope is recorded with the result.

Reading: Independent one-zone chemical-evolution Python materials

Compare saved measurements with saved populations

The supplied file contains 96 original synthetic measurements. The comparison program receives neither their generating ages nor a truth label identifying a candidate. It calculates normalized two-dimensional mixture densities from the four saved birth distributions.

Each candidate is evaluated for three assumed correlations and for zero shift or a separate 0.1-dex shift in one model axis at a time. The measurements themselves are preserved. A fixed identifier rule reserves suffixes divisible by five: the synthetic sample has 77 training and 19 withheld measurements. This reproducible partition is not a coverage calibration. There is no parameter optimizer or posterior model probability in this four-candidate comparison.

python science/compare.py --records results/records --output results/synthetic-comparison.json

Reading: Independent one-zone chemical-evolution Python materials

Fetch and extract the exact source locally

The optional source is Hill and collaborators, arXiv:1812.01486v2. The named downloader checks the actual body size and SHA-256 and has no automatic retry, mirror or upload. An explicitly supplied matching cache can test the offline extraction path; that is not evidence of a new network fetch.

The extractor reads Table C5 in both layout and raw text modes. It requires the same 99 unique stellar identifiers and the same values in every extracted field. Ninety-six rows have finite iron abundance, magnesium-to-iron ratio and positive errors in both coordinates. The missing-value markers remain in the other three rows, leaving a complete local table of 99 stars.

python science/fetch_hill.py --output reader-private/hill-v2.pdf
python science/extract_hill.py --pdf reader-private/hill-v2.pdf --output reader-private/hill-observations.json

Reading: Hill et al., VLT/FLAMES high-resolution chemical abundances in Sculptor, arXiv:1812.01486v2 · Independent one-zone chemical-evolution Python materials

Keep the real-sample assumptions visible

The observing methods describe a central FLAMES field 25 arcminutes in diameter and upper red-giant targets brighter than II-band magnitude 17.5, followed by membership and spectral-quality selection. A radius description in the conclusions differs from that wording. The observing-method definition supplies the selection description used here.

Birth-mass weighting is not a recovered present-day red-giant selection function. The paper also does not supply the full per-star covariance required for this two-coordinate comparison. The three correlations remain assumptions. The preceding chapter explains why shared iron errors can cause negative correlation, but does not manufacture a measured covariance for these stars.

The model solar fractions use the fixed VICE/Asplund convention. A numerical Hill-to-model solar-zero-point transformation has not been established here. We keep the original coordinates and display zero shift alongside separate model-axis sensitivity shifts. The same identifier rule splits the real 96 rows into 80 training and 16 withheld measurements. Scores under these assumptions are conditional descriptive densities, not calibrated likelihoods or uniquely recovered ages.

python science/compare.py --records results/records --data reader-private/hill-observations.json --output reader-private/hill-comparison.json
python science/make_reference.py --records results/records --real-data reader-private/hill-observations.json --output reader-private/reference-with-hill

Reading: Hill et al., VLT/FLAMES high-resolution chemical abundances in Sculptor, arXiv:1812.01486v2 · VICE v1.3.1 fixed effective yields and solar reference · Independent one-zone chemical-evolution Python materials

What to preserve for the next investigation

Keep the inputs, verified code inventory, four saved records and the validation and comparison outputs. They contain the inputs needed to recompute every reported score. Any observed-star plot should be produced locally from the extracted measurements; this public reader only displays original synthetic figures.

The useful next step is a testable red-giant selection model, shared abundance errors and an explicit solar-reference conversion. Those ingredients are needed to calibrate a comparison across a broader family of histories.

Reading: Independent one-zone chemical-evolution Python materials

Exercises and explained answers

  1. Why keep all 99 extracted rows but use only 96 in the comparison?

    Read the explanation

    The present Gaussian density requires both measured coordinates and positive marginal errors. Filling missing values with zero creates measurements that were never made. Keeping the complete table records the selection into the valid subset.

  2. Inventory errors pass while the birth-mixture change exceeds 0.01. Which result applies?

    Read the explanation

    The inventory gate passes and the observation-integration gate fails. They assess different calculations. Preserve the failure and refine the birth integration under the same gate before interpreting the density.

Try the prediction

Compare histories in one gas reservoir

  1. Export a full history and distinguish physical snapshot spacing from stellar birth-bin spacing.
  2. Compare renewed and uninterrupted gas supply. Relate each segment’s extent in abundance space to the mass of stars born there.

Standalone scientific materials

Download the scientific ZIP · Read setup and calculation scope

The offline calculation needs Python, NumPy and SciPy. It solves four histories and compares saved synthetic measurements. Optional fixed Hill extraction runs locally with pdftotext; the ZIP has no original observations, paper or browser Engine.

Individual scripts, sizes and SHA-256
  • README.md (5754 B)
    5a638f0c540b5d489ab149d2af7b8713a376a85a66f6a1a241a57052fee5ea1a
  • LICENSE.txt (1271 B)
    c8d56106a2c4041b440e94509790c6403bbad8908db7efdbf09bbfe4c893ce82
  • requirements.txt (27 B)
    39b93fa1b8397265839a510ca7601608248a7f3524067b61667e977bf4351475
  • source-identities.json (1618 B)
    f7d7dc4c91ee350ab7f809a2c4c54c7f2e6c650a87e3b4b7476cdaa1c59ed127
  • fixed-inputs.json (533 B)
    98aaf54949a88e6ee5e4697b5ff25050bfff5790faa17d6d6ee5b7b02f9f1ac2
  • model-family.json (537 B)
    58dac14f9a01ed44a43c4d45dc88e12aa76c9a26c5fd977940099811242751a4
  • own-observations.json (10029 B)
    3c2f318702cf26a370d4d298b8e4ed37da26e19c5052d51ef9a0daee06dba2f0
  • compare.py (3237 B)
    785b41dd356c57e90165197b70ec11adf6271daafe85e096e793f237bcc2c860
  • evolution.py (4572 B)
    4deabefc6e7087e882bf44fe43b582762ba461d08c634d7e5237615760fcf108
  • extract_hill.py (2549 B)
    59aa4cd821574c65110549c41e513fe7161210789c319eeb9342b26d659598d3
  • fetch_hill.py (1705 B)
    d31ccb38d10b8cd8a90194ba6a6d5b3e97af81b41c3dbef903c48ecc9b413696
  • io_helpers.py (1894 B)
    2a07f3ab2f0792f19d5575e5fbb38a6d1370df6e01c20c1cde0a3e2fa072a959
  • make_observations.py (1327 B)
    5498e13a03606dc0adf97488f0f1d1bef92f04ed275aa16f7fe111a0d5683e79
  • make_records.py (1461 B)
    3f25e9ee127836c6e2ade3f922de38941ca941bf26ebd9c85bf21538655b611a
  • make_reference.py (4034 B)
    cb0b779f168fe6e8ec93614da0eae1de7f82c37d61a632f05b5e987fe4e14f69
  • observation_quadrature.py (1662 B)
    5b1ad8917ef50bff8a63248c883e5b56f72875eaa49470b41d98db44ca21186a
  • plot.py (3976 B)
    55f9242160e7bd86321117136b5fc12a735c39cb1d5ae2ccd57481f76fb2ec6d
  • validate.py (7153 B)
    1e089465eae28b0bcbf8bf9e696c3ccd7e07a645bcf7173cb536c72e878e5c00
  • verify_package.py (926 B)
    16d0c1b6185e7107b33fd33639456aa4806f3984269ca671f9b1b70bf487cd3d
  • SHA256SUMS.json (3112 B)
    28a1797407ef24a767fde830473a49ca5d8ddb675f13ce03135ba1a2fe4b567a
  • chemical-evolution-science-v1.zip (26888 B)
    63dc82bb31bcd276c9abc76191e3201804d13d068811c5ff27bd244b17dcc06d

Sources and calculation scope

  1. Hill et al., VLT/FLAMES high-resolution chemical abundances in Sculptor, arXiv:1812.01486v2

    Main sections 1–7 and appendices A/B read again; Table C5 extracted in two text modes with exact agreement on 99 rows and 96 finite Mg/Fe pairs. Methods specify the 25-arcminute-diameter field and upper-RGB selection; conclusions use inconsistent radius wording. Full per-star covariance and a numerical model-solar harmonization are not established here. Original observations, PDF and measured-derived figures remain local.

  2. VICE v1.3.1 fixed effective yields and solar reference

    Previously frozen native defaults: Kroupa convention, effective net core-collapse and Type Ia magnesium/iron yields, Asplund 2009 reference and the declared hydrogen conversion. Public materials contain scalar values and identities, not a new yield grid or VICE executable. The independent Python does not execute VICE.

  3. Independent one-zone chemical-evolution Python materials

    Original continuous convolution/DOP853 producers, saved fourteen-field inventories and birth populations, finite refinement, normalized conditional mixtures and mathematical limits. Public inputs and figures are original synthetic data. Default is offline; optional fixed Hill source is fetched and analyzed on the reader’s computer. No App/Engine, original paper, observed rows or measured-derived plot is included.

FeedbackSomething broken, confusing, or missing on this page?Tell us
What kind of feedback?

Sent with this page’s address, its Lab ID, the site language and your device type. Please leave out personal details. Feedback is kept for up to 12 months.Privacy policy