この記事の Awkward のバージョンは1.X.Xです
単一原子の基底状態のイオンの質量をPythonで求める。データは nds.iaea.org から引っ張ってきた。APIの説明。
def get_ion_mass(z, a, q): import os gs_filename = "ground_states.csv" if not os.path.exists(gs_filename): import urllib.request url = "https://nds.iaea.org/relnsd/v0/data?fields=ground_states&nuclides=all" req = urllib.request.Request(url) with urllib.request.urlopen(req) as web_file: data = web_file.read() with open(gs_filename, mode='wb') as local_file: local_file.write(data) import csv reader = csv.reader(open(gs_filename)) lines = tuple(reader) legends = list(lines[0]) obj={} for legend in legends: obj[legend] = [] for line in lines[1:]: if len(line)!=len(legends):continue for i in range(len(legends)): try: obj[legends[i]].append(float(line[i])) except: if line[i] ==" ": obj[legends[i]].append(float("nan")) else: obj[legends[i]].append(line[i]) import awkward as ak gs_table = ak.Array(obj) e_mass = 0.00054858 if len(gs_table[(gs_table["z"]==z)&(gs_table["n"]==a-z)])==0: print((f"Not found nuclide with z={z} a={a}")) raise atomic_mass = gs_table[(gs_table["z"]==z)&(gs_table["n"]==a-z)][0]["atomic_mass"]/1000000 return atomic_mass - q*e_mass # 238U90+ z,a,q=92,238,90 print(f"Z={z}, A={a}, Q={q}+, Mass={get_ion_mass(z,a,q):.4f} amu")
出力
Z=92, A=238, Q=90+, Mass=238.0014 amu
似た記事