Columns: Isotope, HalfLife, Decay, PrimaryGammas_keV (list), PrimaryFrequencies_Hz (list), AtmosphericForm, Pathway/Notes
import pandas as pd
import math
h = 6.62607015e-34 # Planck J*s
eV = 1.602176634e-19 # J per eV
def keV_to_Hz(kev):
# frequency f = E/h = (keV * 1e3 * eV)/h
return (kev * 1e3 * eV) / h
data = [
# Isotope, Half-life, Decay, Gamma energies (keV), Atmospheric form, Pathway/Notes
(“³H”, “12.32 y”, “β⁻ (Emax 18.6 keV), no γ”, [], “H₂O/HTO vapor, water”, “Cosmogenic & reactor; mixes with water; β soft, no penetrating γ”),
(“¹⁴C”, “5,730 y”, “β⁻ (Emax 156 keV), no γ”, [], “CO₂ (atmosphere), organics”, “Cosmogenic ¹⁴C; used in dating; no primary γ”),
(“²²Na”, “2.602 y”, “β⁺/EC → 1274.5 keV γ + 2×511 keV”, [511.0, 1274.5], “solid/aerosol source”, “Activation; PET calibration line at 511 keV”),
(“⁴⁰K”, “1.248×10⁹ y”, “β⁻/EC; 1460.8 keV γ (10.7%)”, [1460.8], “crustal/particulate”, “Natural background; strong environmental γ line”),
(“³⁹Ar”, “269 y”, “β⁻ (no principal γ)”, [], “noble gas (Ar)”, “Cosmogenic; groundwater & ice dating; β emits weak bremsstrahlung”),
(“⁴¹Ar”, “1.83 h”, “β⁻; 1293.6 keV γ”, [1293.6], “noble gas (Ar)”, “Neutron activation product in reactors/air; airborne γ detectable”),
(“⁸⁵Kr”, “10.76 y”, “β⁻; weak γ ~514 keV”, [514.0], “noble gas (Kr)”, “Reprocessing tracer; long-range atmospheric transport”),
(“²²²Rn”, “3.82 d”, “α; progeny γ via ²¹⁴Pb/²¹⁴Bi”, [295.2, 351.9, 609.3, 1120.3, 1764.5], “noble gas (Rn)”, “Emanates from soil; daughters attach to aerosols; key γ lines from ²¹⁴Pb/²¹⁴Bi”),
(“⁹⁰Sr”, “28.8 y”, “β⁻ (pure); no γ”, [], “aerosol/particulate”, “Fission product; bone seeker; no primary γ”),
(“⁹⁰Y”, “64.1 h”, “β⁻ (Emax 2.28 MeV); no γ”, [], “aerosol/particulate”, “Daughter of ⁹⁰Sr; therapeutic β emitter”),
(“¹³¹I”, “8.02 d”, “β⁻; 364.5 keV γ (primary)”, [364.5], “iodine gas/aerosol”, “Volatile; attaches to aerosols & thyroid uptake; environmental monitoring line”),
(“¹³⁷Cs”, “30.17 y”, “β⁻ → ¹³⁷ᵐBa → 661.7 keV γ”, [661.7], “aerosol/particulate”, “Global fallout tracer; persistent; key 662 keV γ”),
(“⁶⁰Co”, “5.27 y”, “β⁻ → 1173.2 & 1332.5 keV γ”, [1173.2, 1332.5], “solid/particulate”, “Powerful γ source; industry & medicine”),
(“⁹⁹ᵐTc”, “6.01 h”, “IT → 140.5 keV γ”, [140.5], “medical (aerosol/liquid)”, “Medical imaging workhorse; low-energy γ”),
(“²¹⁴Pb”, “26.8 min”, “β⁻; 295 & 352 keV γ”, [295.2, 351.9], “aerosol (radon daughter)”, “Air/indoor radon progeny; strong short-range γ”),
(“²¹⁴Bi”, “19.9 min”, “β⁻; 609/1120/1764 keV γ”, [609.3, 1120.3, 1764.5], “aerosol (radon daughter)”, “Outdoor/indoor γ backgrounds”),
(“²⁰⁸Tl”, “3.05 min”, “β⁻; 2614.5 keV γ”, [2614.5], “aerosol (Th chain)”, “Th-232 chain; high-energy γ benchmark”),
(“²³⁹Pu”, “24,110 y”, “α; weak ~51.6 keV γ”, [51.6], “particulate”, “Weapons/fuel; detected via α/low-energy γ/X-rays”),
(“²³²Th”, “1.40×10¹⁰ y”, “α; γ via daughters (e.g., ²⁰⁸Tl 2614.5 keV)”, [2614.5], “mineral dust”, “Natural series; daughter γ dominates”),
(“²³⁸U”, “4.47×10⁹ y”, “α; γ via daughters (²¹⁴Pb/²¹⁴Bi)”, [295.2, 351.9, 609.3, 1120.3, 1764.5], “mineral dust”, “U-series; ambient γ via radon daughters”),
]
Compute frequencies table
records = []
for iso, hl, decay, gammas, form, notes in data:
freqs = [keV_to_Hz(g) for g in gammas]
freq_str = “; “.join([f”{g:.1f} keV → {f:.3e} Hz” for g, f in zip(gammas, freqs)]) if gammas else “”
records.append({
“Isotope”: iso,
“HalfLife”: hl,
“Decay”: decay,
“PrimaryGammas_keV”: “, “.join([str(g) for g in gammas]) if gammas else “”,
“PrimaryFrequencies_Hz”: freq_str,
“AtmosphericForm”: form,
“Atmosphere_Notes”: notes
})
df = pd.DataFrame(records)
csv_path = “/mnt/data/isotope_emission_atmosphere_mapping.csv”
md_path = “/mnt/data/isotope_emission_atmosphere_mapping.md”
df.to_csv(csv_path, index=False)
with open(md_path, “w”, encoding=”utf-8″) as f:
f.write(“# Isotope → Emission & Atmosphere Mapping (Curated Set)\n\n”)
f.write(df.to_markdown(index=False))
from caas_jupyter_tools import display_dataframe_to_user
display_dataframe_to_user(“Emission & Atmosphere Mapping (Curated Set)”, df)
csv_path, md_path