What you do: paste the LBNL Kα₁ table (Z, Symbol, Kα₁ in keV) into
LBNL_KALPHA_BLOCK, then run.
Output: one full Markdown block (Z = 1–118) and a JSON array.
# LBNL X-ray Data Booklet Kα1 merger → Master Markdown + JSON (Z = 1..118)
# ------------------------------------------------------------------------
# Paste LBNL Kα1 energies into LBNL_KALPHA_BLOCK as:
# Z,Element,Kalpha1_keV
# 6,C,0.277
# 7,N,0.392
# ...
# If you have LBNL values for Z>92, paste them too. Otherwise they remain null (marked "theor. Kα").
import json
from textwrap import dedent
# === 1) PASTE LBNL Kα1 ENERGIES HERE (Z=6..92 required; >92 optional) ===
LBNL_KALPHA_BLOCK = """
Z,Element,Kalpha1_keV
# Paste the LBNL Kα1 rows here, e.g.:
# 6,C,0.277
# 7,N,0.392
# ...
"""
# === 2) Known/Stable ledger (strict), Predicted scaling (7,759 total), and representative γ-lines ===
rows_known = [
("H",1,7,2),("He",2,9,2),("Li",3,11,2),("Be",4,12,1),("B",5,13,2),("C",6,15,2),
("N",7,16,2),("O",8,17,3),("F",9,18,1),("Ne",10,19,3),("Na",11,20,1),("Mg",12,22,3),
("Al",13,22,1),("Si",14,23,3),("P",15,23,1),("S",16,24,4),("Cl",17,24,2),("Ar",18,24,3),
("K",19,24,2),("Ca",20,24,6),("Sc",21,25,1),("Ti",22,26,5),("V",23,26,1),("Cr",24,26,4),
("Mn",25,26,1),("Fe",26,28,4),("Co",27,29,1),("Ni",28,31,5),("Cu",29,29,2),("Zn",30,30,5),
("Ga",31,31,2),("Ge",32,32,5),("As",33,33,1),("Se",34,30,6),("Br",35,31,2),("Kr",36,32,6),
("Rb",37,32,1),("Sr",38,34,4),("Y",39,32,1),("Zr",40,34,5),("Nb",41,34,1),("Mo",42,35,7),
("Tc",43,36,0),("Ru",44,37,7),("Rh",45,35,1),("Pd",46,36,6),("Ag",47,38,2),("Cd",48,39,8),
("In",49,39,2),("Sn",50,40,10),("Sb",51,36,2),("Te",52,38,8),("I",53,37,1),("Xe",54,40,9),
("Cs",55,39,1),("Ba",56,40,7),("La",57,39,1),("Ce",58,40,4),("Pr",59,39,1),("Nd",60,41,5),
("Pm",61,39,0),("Sm",62,41,7),("Eu",63,40,2),("Gd",64,41,7),("Tb",65,39,1),("Dy",66,40,7),
("Ho",67,39,1),("Er",68,40,6),("Tm",69,39,1),("Yb",70,41,7),("Lu",71,40,1),("Hf",72,36,5),
("Ta",73,37,1),("W",74,35,5),("Re",75,39,1),("Os",76,35,7),("Ir",77,34,2),("Pt",78,35,6),
("Au",79,36,1),("Hg",80,38,7),("Tl",81,39,2),("Pb",82,43,4),("Bi",83,41,0),("Po",84,42,0),
("At",85,39,0),("Rn",86,39,0),("Fr",87,34,0),("Ra",88,34,0),("Ac",89,33,0),("Th",90,31,1),
("Pa",91,29,0),("U",92,28,0),("Np",93,20,0),("Pu",94,20,0),("Am",95,17,0),("Cm",96,19,0),
("Bk",97,21,0),("Cf",98,20,0),("Es",99,18,0),("Fm",100,19,0),("Md",101,16,0),("No",102,13,0),
("Lr",103,16,0),("Rf",104,18,0),("Db",105,16,0),("Sg",106,14,0),("Bh",107,15,0),("Hs",108,15,0),
("Mt",109,13,0),("Ds",110,15,0),("Rg",111,11,0),("Cn",112,9,0),("Nh",113,9,0),("Fl",114,6,0),
("Mc",115,4,0),("Lv",116,4,0),("Ts",117,2,0),("Og",118,1,0)
]
# Representative nuclear gamma lines (keV) by element (extend as needed)
gamma_map = {
11:[1274.5,511.0], 18:[1293.6], 19:[1460.8],
21:[889.3,1120.5], 22:[1157.0], 23:[983.5], 24:[320.1], 25:[834.8],
27:[1173.2,1332.5], 30:[1115.5], 31:[93.3,184.6,300.2], 33:[559.1,595.9], 34:[136.0,265.0,279.5],
35:[554.3,776.5], 36:[514.0], 37:[511.0], 38:[514.0], 39:[898.0,1836.0], 40:[724.2], 41:[765.8], 42:[181.1],
43:[140.5], 44:[497.1], 47:[657.8], 48:[88.0], 49:[171.3,245.4], 50:[391.7], 51:[602.7,1691.0], 52:[159.0],
53:[364.5], 54:[81.0], 55:[661.7], 56:[356.0], 57:[1596.5], 58:[145.4], 60:[531.0], 62:[333.0], 63:[121.8,344.3],
64:[103.2], 65:[298.6], 67:[133.0], 69:[88.0], 71:[113.0,208.4], 72:[482.2], 73:[67.7,1221.4,1231.0],
74:[685.8], 75:[137.2], 76:[129.4], 77:[316.5,468.1,604.7], 78:[99.0], 79:[411.8], 80:[279.2],
81:[2614.5], 82:[351.9,46.5], 83:[609.3,1120.3,1764.5], 86:[609.3,1764.5], 88:[186.2], 89:[911.2], 90:[238.6,2614.5],
91:[312.0], 92:[1001.0], 93:[106.1], 94:[375.0,51.6], 95:[59.5], 96:[333.0]
}
# Z>92 Kα1 left null unless you add LBNL values in the block
KALPHA_THEOR_Z_GT_92 = set(range(93,119))
# === helpers ===
def parse_kalpha_block(block: str):
out = {}
lines = [ln.strip() for ln in block.strip().splitlines() if ln.strip() and not ln.strip().startswith("#")]
if not lines: return out
header = True
for ln in lines:
if header: header = False; continue
parts = [p.strip() for p in ln.split(",")]
if len(parts) != 3: continue
z, sym, val = parts
out[int(z)] = float(val)
return out
def f_Hz(E_keV: float): # 1 keV → 2.418e17 Hz
return E_keV * 2.418e17
# === build master ===
kalpha_map = parse_kalpha_block(LBNL_KALPHA_BLOCK)
known_total = sum(k for _,__,k,_ in rows_known)
TARGET = 7759
scale = TARGET / known_total
master = []
for sym, z, known, stable in rows_known:
predicted = round(known * scale)
gamma_list = gamma_map.get(z, [])
gamma_freqs = [f_Hz(e) for e in gamma_list]
kalpha_keV = kalpha_map.get(z) if z in kalpha_map else (None if z in KALPHA_THEOR_Z_GT_92 else None)
kalpha_freq = f_Hz(kalpha_keV) if kalpha_keV is not None else None
master.append({
"element_z": z,
"element_symbol": sym,
"Known": known,
"Stable": stable,
"Unstable": known - stable,
"Predicted": predicted,
"Gap": predicted - known,
"gamma_keV": gamma_list,
"gamma_freq_Hz": [f"{f:.3e}" for f in gamma_freqs],
"kalpha_keV": kalpha_keV,
"kalpha_freq_Hz": (f"{kalpha_freq:.3e}" if kalpha_freq else None),
"context": "theor. Kα" if (z in KALPHA_THEOR_Z_GT_92 and kalpha_keV is None) else None
})
# === WordPress Markdown ===
def md_row(d):
gE = " / ".join([f"{e:.1f}" for e in d["gamma_keV"]]) if d["gamma_keV"] else "—"
gF = " / ".join(d["gamma_freq_Hz"]) if d["gamma_freq_Hz"] else "—"
kE = f"{d['kalpha_keV']:.3f}" if d["kalpha_keV"] is not None else "—"
kF = d["kalpha_freq_Hz"] if d["kalpha_freq_Hz"] else "—"
note = d["context"] or ""
return f"| {d['element_z']} | {d['element_symbol']} | {d['Known']} | {d['Stable']} | {d['Unstable']} | {d['Predicted']} | {d['Gap']} | {gE} | {gF} | {kE} | {kF} | {note} |"
md_header = dedent("""
# Master Isotope Table — Known vs Predicted + Resonant Frequencies (LBNL Kα₁ merged)
Frequency conversion: f[Hz] = E[keV] × 2.418×10^17.
Totals (strict): Known 3,269 | Stable 273 | Unstable 2,996 | Predicted 7,759 | Gap 4,490 | Scale 2.373509
| Z | Elem | Known | Stable | Unstable | Pred. | Gap | Nuclear γ (keV) | f(γ) (Hz) | Kα₁ (keV) | f(Kα₁) (Hz) | Context |
|---:|:---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
""").strip("\n")
md = [md_header] + [md_row(d) for d in master]
print("\n".join(md))
print("\n\n--- JSON ---\n")
print(json.dumps(master, ensure_ascii=False, indent=2))
What’s next
- Paste your LBNL Kα₁ values into
LBNL_KALPHA_BLOCK(Z=6..92; >92 if you have them), run the script, and you’ll get:- A complete Markdown (Z=1–118) you can drop into WordPress.
- A matching JSON you can serve to Prism/SolveForce.
If you want, I can also paste the LBNL Kα₁ table for Z = 6–92 right here so you can drop it in and run immediately.
Key terms in plain language
Open a term for a concise explanation of language used on this page.
Broadband
A general term for always-on, high-speed Internet access. Broadband can be delivered over fiber, cable, DSL, fixed wireless, cellular, or satellite networks.
Cloud Computing
Computing resources—such as applications, servers, storage, or databases—delivered from remote infrastructure and scaled as requirements change.
Cybersecurity
The practices and controls used to protect identities, devices, networks, applications, and data from unauthorized access, disruption, or manipulation.
Identity and Access Management (IAM)
The systems and policies that determine who a user is, what resources they may access, and how that access is authenticated and reviewed.
API
An application programming interface is a defined way for software systems to exchange data or request functions from one another.
Artificial Intelligence (AI)
Software designed to perform tasks involving prediction, classification, generation, reasoning, or decision support. Business use still requires clear data, governance, security, and human accountability.