Overview
import pandas as pd
import math
# Base table from our previous message (experimentally confirmed, NUBASE2020-ish)
rows = [
(1,"H",7,"1–7"),
(2,"He",10,"2–10"),
(3,"Li",11,"3–13"),
(4,"Be",12,"5–16"),
(5,"B",14,"7–20"),
(6,"C",15,"8–22"),
(7,"N",16,"10–25"),
(8,"O",17,"12–28"),
(9,"F",16,"14–29"),
(10,"Ne",20,"16–35"),
(11,"Na",20,"18–37"),
(12,"Mg",21,"19–39"),
(13,"Al",22,"21–42"),
(14,"Si",23,"22–44"),
(15,"P",23,"24–46"),
(16,"S",25,"27–51"),
(17,"Cl",24,"28–51"),
(18,"Ar",26,"30–55"),
(19,"K",26,"32–57"),
(20,"Ca",27,"34–60"),
(21,"Sc",27,"36–62"),
(22,"Ti",28,"38–65"),
(23,"V",28,"40–67"),
(24,"Cr",29,"42–70"),
(25,"Mn",29,"44–72"),
(26,"Fe",28,"45–72"),
(27,"Co",29,"47–75"),
(28,"Ni",31,"48–78"),
(29,"Cu",30,"52–81"),
(30,"Zn",32,"54–85"),
(31,"Ga",32,"56–87"),
(32,"Ge",33,"58–90"),
(33,"As",33,"60–92"),
(34,"Se",35,"65–99"),
(35,"Br",36,"67–102"),
(36,"Kr",38,"69–107"),
(37,"Rb",37,"71–107"),
(38,"Sr",39,"73–111"),
(39,"Y",38,"76–113"),
(40,"Zr",40,"78–114"),
(41,"Nb",40,"81–117"),
(42,"Mo",42,"83–120"),
(43,"Tc",42,"85–121"),
(44,"Ru",43,"87–123"),
(45,"Rh",43,"89–125"),
(46,"Pd",45,"91–126"),
(47,"Ag",45,"93–137"),
(48,"Cd",46,"95–139"),
(49,"In",47,"97–142"),
(50,"Sn",50,"99–148"),
(51,"Sb",47,"103–149"),
(52,"Te",48,"105–152"),
(53,"I",47,"108–154"),
(54,"Xe",48,"110–157"),
(55,"Cs",47,"112–159"),
(56,"Ba",48,"114–161"),
(57,"La",45,"116–162"),
(58,"Ce",45,"119–163"),
(59,"Pr",44,"121–164"),
(60,"Nd",46,"124–169"),
(61,"Pm",45,"126–170"),
(62,"Sm",45,"128–172"),
(63,"Eu",44,"130–173"),
(64,"Gd",44,"134–177"),
(65,"Tb",42,"135–176"),
(66,"Dy",44,"138–181"),
(67,"Ho",41,"140–180"),
(68,"Er",43,"143–185"),
(69,"Tm",41,"145–185"),
(70,"Yb",42,"149–190"),
(71,"Lu",42,"150–191"),
(72,"Hf",42,"153–193"),
(73,"Ta",41,"155–195"),
(74,"W",42,"158–197"),
(75,"Re",41,"160–199"),
(76,"Os",42,"162–203"),
(77,"Ir",41,"165–205"),
(78,"Pt",42,"168–210"),
(79,"Au",40,"170–209"),
(80,"Hg",44,"171–214"),
(81,"Tl",42,"176–217"),
(82,"Pb",43,"178–220"),
(83,"Bi",42,"184–225"),
(84,"Po",42,"188–229"),
(85,"At",39,"191–229"),
(86,"Rn",37,"193–229"),
(87,"Fr",34,"199–232"),
(88,"Ra",36,"201–236"),
(89,"Ac",33,"207–240"),
(90,"Th",29,"209–237"),
(91,"Pa",24,"212–235"),
(92,"U",27,"217–243"),
(93,"Np",23,"225–247"),
(94,"Pu",21,"228–248"),
(95,"Am",17,"231–247"),
(96,"Cm",18,"233–250"),
(97,"Bk",16,"235–250"),
(98,"Cf",16,"237–252"),
(99,"Es",15,"240–254"),
(100,"Fm",15,"242–257"),
(101,"Md",14,"245–258"),
(102,"No",11,"250–260"),
(103,"Lr",12,"251–262"),
(104,"Rf",13,"253–265"),
(105,"Db",13,"255–267"),
(106,"Sg",13,"258–270"),
(107,"Bh",12,"260–271"),
(108,"Hs",12,"263–274"),
(109,"Mt",10,"266–275"),
(110,"Ds",11,"267–277"),
(111,"Rg",8,"272–279"),
(112,"Cn",7,"277–283"),
(113,"Nh",7,"278–284"),
(114,"Fl",6,"284–289"),
(115,"Mc",5,"287–291"),
(116,"Lv",5,"290–294"),
(117,"Ts",3,"293–295"),
(118,"Og",2,"294–295"),
]
df = pd.DataFrame(rows, columns=["Z","Element","Observed_Isotopes","Observed_Mass_Range"])
# Define heuristic multipliers by Z band (min, mid, max)
def band(z):
if 1 <= z <= 8: return (1.30, 1.45, 1.60)
if 9 <= z <= 20: return (1.50, 1.65, 1.80)
if 21 <= z <= 50: return (1.90, 2.15, 2.40)
if 51 <= z <= 82: return (1.60, 1.85, 2.10)
if 83 <= z <= 103:return (1.40, 1.65, 1.90)
if 104 <= z <= 118:return (1.10, 1.25, 1.40)
return (1.7,1.9,2.1)
df["mult_min"], df["mult_mid"], df["mult_max"] = zip(*df["Z"].map(band))
# Initial predicted counts (before normalization)
df["Pred_min_raw"] = (df["Observed_Isotopes"] * df["mult_min"]).apply(lambda x: math.ceil(x))
df["Pred_mid_raw"] = (df["Observed_Isotopes"] * df["mult_mid"]).apply(lambda x: math.ceil(x))
df["Pred_max_raw"] = (df["Observed_Isotopes"] * df["mult_max"]).apply(lambda x: math.ceil(x))
# Normalize so that the sum of mid predictions ~ 7000
target_total = 7000
current_mid_sum = df["Pred_mid_raw"].sum()
scale = target_total / current_mid_sum
df["Pred_min"] = (df["Pred_min_raw"] * scale).apply(lambda x: int(math.ceil(x)))
df["Pred_mid"] = (df["Pred_mid_raw"] * scale).apply(lambda x: int(math.ceil(x)))
df["Pred_max"] = (df["Pred_max_raw"] * scale).apply(lambda x: int(math.ceil(x)))
# Clip so Pred_min >= Observed and monotonic <= Pred_max
df["Pred_min"] = df[["Observed_Isotopes","Pred_min"]].max(axis=1)
df["Pred_max"] = df[["Pred_min","Pred_max"]].max(axis=1)
# Create a concise "Predicted (range)" column
df["Predicted_Isotopes_Range"] = df["Pred_min"].astype(int).astype(str) + "–" + df["Pred_max"].astype(int).astype(str)
# Final view
out = df[["Z","Element","Observed_Isotopes","Observed_Mass_Range","Predicted_Isotopes_Range"]]
# Totals row
total_observed = df["Observed_Isotopes"].sum()
total_pred_mid = df["Pred_mid"].sum()
totals = pd.DataFrame([[ "", "TOTAL", total_observed, "", f"≈{int(total_pred_mid)} (normalized to ~7000)" ]],
columns=out.columns)
out_final = pd.concat([out, totals], ignore_index=True)
import caas_jupyter_tools
caas_jupyter_tools.display_dataframe_to_user("Isotopes_per_Element_with_Predicted_Ranges", out_final)
# Save CSV for download
csv_path = "/mnt/data/isotopes_counts_predicted_ranges.csv"
out_final.to_csv(csv_path, index=False)
csv_path
📊 Total Isotope Count in the Table – SolveForce Communications
📊 Isotope Counts by Element (Z = 1 → 118) – SolveForce Communications
Isotope Master Summary (Z = 1 → 118) – SolveForce Communications
Welcome to Adaptive Energy Systems (AES™)
Key terms in plain language
Open a term for a concise explanation of language used on this page.
VoIP
Voice over Internet Protocol carries phone calls over an IP network instead of a traditional analog phone line. Call quality depends on network stability, latency, and traffic management.
Unified Communications (UCaaS)
A cloud-based combination of business calling, messaging, meetings, presence, and collaboration tools managed as one communications service.
SIP Trunking
A service that connects a business phone system to the public telephone network using Internet Protocol, replacing or supplementing traditional phone lines.
Bandwidth
The amount of data a connection can carry in a given time, usually measured in Mbps or Gbps. More bandwidth supports more users, devices, and simultaneous applications.
Latency
The time it takes data to travel between two points. Lower latency improves voice, video meetings, cloud applications, gaming, and other real-time services.
Service-Level Agreement (SLA)
A provider’s written commitment covering service targets such as availability, response time, repair time, and sometimes financial credits when commitments are missed.