feat(data): add 5 modern scintillators (GAGG, LSO:Ce, LaBr3:Ce, CeBr3, SrI2:Eu) (#115, #116, #122, #123, #124)#206
Merged
Conversation
…, 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
6 tasks
Merged
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.
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds five modern scintillators with primary-paper-cited values to
src/pymat/data/scintillators.toml:gagg.Ce) — Kamada et al. 2011 (DOI10.1021/cg200694a)lso.Ce, sibling oflyso) — Melcher & Schweitzer 1992 (DOI10.1109/23.159655)labr3.Ce, composition-only sibling oflabr3) — production formulation; van Loef 2001 measured 0.5% Ce so no 5%-specific scalars are attachedcebr3) — Shah et al. 2005 (DOI10.1109/TNS.2005.860155)sri2.Eu) — Cherepy et al. 2008 (DOI10.1063/1.2885728)Every numeric value transcribed here is taken verbatim from the cited primary paper's abstract. Each material also carries an
optical._reviewentry pointing to the LBNL Scintillator Library overview (Shook, Laplace et al. 2025, NIM A 1075, 170389, DOI10.1016/j.nima.2025.170389) for cross-cuts — flagged as a review only, no values extracted from it.10.1021/cg200694a10.1109/23.159655labr3cites10.1063/1.1385342)10.1109/TNS.2005.86015510.1063/1.2885728Intentionally omitted (not stated as scalars in the cited primary paper)
labr3retains the van Loef 2001 0.5%-Ce values.Provenance precision
_sourcesentries usekind = "doi", bare DOI inref,license = "proprietary-reference-only"(none of these journals are open-access)._sources.ref— only as a discovery index per LBNL Scintillator Library — discovery index (cite primary) #170 policy.Test plan
python -c "import tomllib; tomllib.loads(open('src/pymat/data/scintillators.toml').read())"— parses cleanlypython scripts/check_licenses.py— passed (7 TOML files scanned)uv run pytest tests/test_toml_integrity.py tests/test_sources.py -v— 43 passeduv run pytest— full suite: 714 passed, 18 skipped, 0 faileduv run ruff check . && uv run ruff format --check .— cleanmaterial.properties.optical/mechanical.<field>returns the expected value, andmaterial.source_of("<group>.<field>")resolves to the correct primary DOI.Closes #115
Closes #116
Closes #122
Closes #123
Closes #124