Skip to content

feat(data): add 5 modern scintillators (GAGG, LSO:Ce, LaBr3:Ce, CeBr3, SrI2:Eu) (#115, #116, #122, #123, #124)#206

Merged
gerchowl merged 1 commit into
mainfrom
feature/phase5-batch1-modern-scintillators
May 6, 2026
Merged

feat(data): add 5 modern scintillators (GAGG, LSO:Ce, LaBr3:Ce, CeBr3, SrI2:Eu) (#115, #116, #122, #123, #124)#206
gerchowl merged 1 commit into
mainfrom
feature/phase5-batch1-modern-scintillators

Conversation

@gerchowl
Copy link
Copy Markdown
Contributor

@gerchowl gerchowl commented May 6, 2026

Summary

Adds five modern scintillators with primary-paper-cited values to src/pymat/data/scintillators.toml:

  • GAGG:Ce (gagg.Ce) — Kamada et al. 2011 (DOI 10.1021/cg200694a)
  • LSO:Ce (lso.Ce, sibling of lyso) — Melcher & Schweitzer 1992 (DOI 10.1109/23.159655)
  • LaBr3:Ce 5% (labr3.Ce, composition-only sibling of labr3) — production formulation; van Loef 2001 measured 0.5% Ce so no 5%-specific scalars are attached
  • CeBr3 (cebr3) — Shah et al. 2005 (DOI 10.1109/TNS.2005.860155)
  • SrI2:Eu (sri2.Eu) — Cherepy et al. 2008 (DOI 10.1063/1.2885728)

Every numeric value transcribed here is taken verbatim from the cited primary paper's abstract. Each material also carries an optical._review entry pointing to the LBNL Scintillator Library overview (Shook, Laplace et al. 2025, NIM A 1075, 170389, DOI 10.1016/j.nima.2025.170389) for cross-cuts — flagged as a review only, no values extracted from it.

Material Density (g/cm^3) Light yield (ph/MeV) Decay (ns) Emission peak (nm) Refractive index Primary DOI
GAGG:Ce 40000 53 10.1021/cg200694a
LSO:Ce 7.4 42 (mean); components [12@30%, 42@70%] 10.1109/23.159655
LaBr3:Ce 5% (parent labr3 cites 10.1063/1.1385342)
CeBr3 5.2 68000 17 370 10.1109/TNS.2005.860155
SrI2:Eu 115000 1000 435 10.1063/1.2885728

Intentionally omitted (not stated as scalars in the cited primary paper)

  • GAGG:Ce — density, refractive index, emission peak, hygroscopic.
  • LSO:Ce — refractive index, emission peak (~420 nm widely cited but loosely worded in the 1992 abstract; left to a tighter citation).
  • CeBr3 — hygroscopic flag (well-known true; not quantified in the 2005 abstract).
  • SrI2:Eu — density, hygroscopic flag, Eu doping % (Cherepy 2008 studies 0.5-8%; no single canonical scalar in the abstract).
  • LaBr3:Ce 5% — entire scalar set; sibling exists for namespace completeness only. The parent labr3 retains the van Loef 2001 0.5%-Ce values.

Provenance precision

Test plan

  • python -c "import tomllib; tomllib.loads(open('src/pymat/data/scintillators.toml').read())" — parses cleanly
  • python scripts/check_licenses.py — passed (7 TOML files scanned)
  • uv run pytest tests/test_toml_integrity.py tests/test_sources.py -v — 43 passed
  • uv run pytest — full suite: 714 passed, 18 skipped, 0 failed
  • uv run ruff check . && uv run ruff format --check . — clean
  • Spot-check via Python: each new material's material.properties.optical/mechanical.<field> returns the expected value, and material.source_of("<group>.<field>") resolves to the correct primary DOI.

Closes #115
Closes #116
Closes #122
Closes #123
Closes #124

…, SrI2:Eu)

Adds primary-paper-cited entries for five modern scintillators that were
missing from the catalog. Every numeric value carries a `_sources` entry
pointing to the discovery / reference paper for that material.

New entries (lowercase parent + grade convention):

- `gagg.Ce` — Gd3Al2Ga3O12:Ce garnet (Kamada et al. 2011, Cryst.
  Growth Des., DOI 10.1021/cg200694a). light_yield = 40000 ph/MeV,
  decay_time = 53 ns from the cited abstract.

- `lso.Ce` — Lu2SiO5:Ce (Melcher & Schweitzer 1992, IEEE TNS,
  DOI 10.1109/23.159655). density = 7.4 g/cm^3, decay_components =
  [12 ns @ 30%, 42 ns @ 70%]. Sibling of `lyso` (the Y-co-doped variant).

- `labr3.Ce` — composition-only sibling for the 5%-Ce production
  formulation. No scalar overrides: van Loef 2001 (parent `labr3`)
  measured 0.5%-Ce; the 5% values need a separate primary citation.

- `cebr3` — Shah et al. 2005, IEEE TNS 52(6) 3157 (DOI
  10.1109/TNS.2005.860155). density = 5.2 g/cm^3, light_yield =
  68000 ph/MeV, decay_time = 17 ns, emission_peak = 370 nm,
  intrinsic_resolution_pct_at_662keV = 4.0.

- `sri2.Eu` — Cherepy et al. 2008, Appl. Phys. Lett. 92, 083508
  (DOI 10.1063/1.2885728). light_yield = 115000 ph/MeV (small-sample
  scalar), decay_time = 1000 ns, emission_peak = 435 nm.

Each material also carries an `optical._review` entry pointing to the
LBNL Scintillator Library overview (Shook, Laplace et al. 2025, NIM A
1075, 170389, DOI 10.1016/j.nima.2025.170389) — flagged as a review
only; no values are extracted from it.

Intentionally omitted (not stated as scalars in the cited primary
paper — would require a separate citation):
- GAGG:Ce: density, refractive index, emission peak, hygroscopic.
- LSO:Ce: refractive index, emission peak (~420 nm widely cited but
  loosely worded in the Melcher 1992 abstract).
- CeBr3: hygroscopic flag.
- SrI2:Eu: density, hygroscopic flag, Eu doping % (paper studies
  range 0.5-8%; no single canonical scalar in the abstract).

Closes #115
Closes #116
Closes #122
Closes #123
Closes #124
@gerchowl gerchowl enabled auto-merge (squash) May 6, 2026 23:07
@gerchowl gerchowl merged commit 4d92f49 into main May 6, 2026
19 checks passed
@vig-os-release-app vig-os-release-app Bot mentioned this pull request May 6, 2026
6 tasks
gerchowl added a commit that referenced this pull request May 7, 2026
…#134, #135, #136, #137) (#208)

* feat(data): add 4 technical ceramics (AlN, LTCC 951, sapphire, Si3N4)

Adds four primary-source-cited ceramic entries to
`src/pymat/data/ceramics.toml`, with `_sources` provenance per property:

- Aluminum nitride (AlN) — sintered AlN-170 grade. Vendor scalars from
  CoorsTek; Slack 1987 (DOI 10.1016/0022-3697(87)90153-3) cited as the
  intrinsic-thermal-conductivity review (~285 W/(m·K) single-crystal
  upper bound vs the 170 W/(m·K) commercial scalar). Anisotropic CTE
  [a,a,c] = [4.2e-6, 4.2e-6, 5.3e-6] / K. Closes #134.

- LTCC DuPont 951 — DuPont GreenTape 951 public TDS (MCM951, 7/2011).
  All scalars verbatim from the "Typical Tape Properties" table.
  Includes x/y shrinkage 12.7 %, z shrinkage 15 %, dielectric constant
  at 10 GHz, and surface roughness in a `[ltcc951.custom]` block since
  the schema has no shrinkage field. License = proprietary-reference-only.
  Closes #135.

- Sapphire (single-crystal Al2O3) — distinct entry from polycrystalline
  `alumina`. Refractive index n_o = 1.768 at sodium D-line from Malitson
  & Dodge 1972 (DOI 10.1364/JOSA.62.001405). Mechanical and thermal
  scalars from Crystran technical brief; hardness/toughness from
  Dobrovinskaya 2009 textbook (Springer ISBN 978-0-387-85695-7).
  Anisotropic CTE [a,a,c] = [5.0e-6, 5.0e-6, 5.6e-6] / K. Canonical
  scalars favor c-axis where the schema accepts a single value;
  perpendicular-c values documented in source notes. No
  refractive_index_dispersion populated — that's #201's enricher
  territory. Closes #136.

- Silicon nitride (Si3N4) — sintered SSN/DPSSN grade, the most common
  engineering Si3N4. All scalars verbatim from the Superior Technical
  Ceramics 2021 datasheet (ASTM-method-stamped). Riley 2000 (DOI
  10.1111/j.1151-2916.2000.tb01182.x) cited as the materials-class
  review. Closes #137.

Each `_sources` entry uses the standard kind (doi/handbook/vendor) and
license (proprietary-reference-only / CC-BY-SA-4.0 for Wikipedia).
`note` fields document conditions (room temperature, polycrystalline vs
single-crystal, grade designation) and any unit conversions.

Updates `_CATEGORY_BASES["ceramics"]` in `src/pymat/__init__.py` to
include the new top-level keys (mirrors PR #206 pattern).

Validation:
- `python -c "import tomllib; tomllib.loads(...)"` parses cleanly
- `python scripts/check_licenses.py` passes (7 TOMLs scanned)
- `pytest` — 627 passed, 25 skipped
- `ruff check . && ruff format --check .` — all clean
- Spot-check: each material's properties load and source_of() returns
  the cited primary source.

* chore(typos): allowlist DuPont brand name (#135)

`typos` was rewriting "DuPont" → "DuPoint" inside ceramics.toml
citation notes for LTCC 951. Adding the brand to the allowlist;
same pattern as the LSO and ANID entries above.

* chore(typos): allowlist Pont substring (#135)

`typos` 1.46 matches the substring "Pont" → "Point" inside any
word, so allowlisting just "DuPont" doesn't suppress the rewrite —
need to allowlist "Pont" itself. Verified locally that ceramics.toml
no longer trips the hook.
@vig-os-release-app vig-os-release-app Bot mentioned this pull request May 7, 2026
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add SrI2:Eu scintillator Add CeBr3 scintillator Add LaBr3:Ce (5%) scintillator Add LSO:Ce scintillator Add GAGG:Ce scintillator

1 participant