nds-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +186 -0
  2. package/bin/nds-mcp.js +33 -0
  3. package/dist/constants.d.ts +14 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +13 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/db/chargeRadii.d.ts +22 -0
  8. package/dist/db/chargeRadii.d.ts.map +1 -0
  9. package/dist/db/chargeRadii.js +75 -0
  10. package/dist/db/chargeRadii.js.map +1 -0
  11. package/dist/db/decayFeedings.d.ts +31 -0
  12. package/dist/db/decayFeedings.d.ts.map +1 -0
  13. package/dist/db/decayFeedings.js +41 -0
  14. package/dist/db/decayFeedings.js.map +1 -0
  15. package/dist/db/ensureDb.d.ts +20 -0
  16. package/dist/db/ensureDb.d.ts.map +1 -0
  17. package/dist/db/ensureDb.js +148 -0
  18. package/dist/db/ensureDb.js.map +1 -0
  19. package/dist/db/gammas.d.ts +39 -0
  20. package/dist/db/gammas.d.ts.map +1 -0
  21. package/dist/db/gammas.js +53 -0
  22. package/dist/db/gammas.js.map +1 -0
  23. package/dist/db/levels.d.ts +68 -0
  24. package/dist/db/levels.d.ts.map +1 -0
  25. package/dist/db/levels.js +121 -0
  26. package/dist/db/levels.js.map +1 -0
  27. package/dist/db/masses.d.ts +16 -0
  28. package/dist/db/masses.d.ts.map +1 -0
  29. package/dist/db/masses.js +22 -0
  30. package/dist/db/masses.js.map +1 -0
  31. package/dist/db/ndsDb.d.ts +10 -0
  32. package/dist/db/ndsDb.d.ts.map +1 -0
  33. package/dist/db/ndsDb.js +61 -0
  34. package/dist/db/ndsDb.js.map +1 -0
  35. package/dist/db/nubase.d.ts +21 -0
  36. package/dist/db/nubase.d.ts.map +1 -0
  37. package/dist/db/nubase.js +61 -0
  38. package/dist/db/nubase.js.map +1 -0
  39. package/dist/db/reactions.d.ts +11 -0
  40. package/dist/db/reactions.d.ts.map +1 -0
  41. package/dist/db/reactions.js +54 -0
  42. package/dist/db/reactions.js.map +1 -0
  43. package/dist/db/references.d.ts +11 -0
  44. package/dist/db/references.d.ts.map +1 -0
  45. package/dist/db/references.js +24 -0
  46. package/dist/db/references.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +55 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/ingest/buildDb.d.ts +36 -0
  52. package/dist/ingest/buildDb.d.ts.map +1 -0
  53. package/dist/ingest/buildDb.js +933 -0
  54. package/dist/ingest/buildDb.js.map +1 -0
  55. package/dist/ingest/parseAme.d.ts +79 -0
  56. package/dist/ingest/parseAme.d.ts.map +1 -0
  57. package/dist/ingest/parseAme.js +186 -0
  58. package/dist/ingest/parseAme.js.map +1 -0
  59. package/dist/ingest/parseEnsdf.d.ts +210 -0
  60. package/dist/ingest/parseEnsdf.d.ts.map +1 -0
  61. package/dist/ingest/parseEnsdf.js +469 -0
  62. package/dist/ingest/parseEnsdf.js.map +1 -0
  63. package/dist/ingest/parseLaserRadii.d.ts +33 -0
  64. package/dist/ingest/parseLaserRadii.d.ts.map +1 -0
  65. package/dist/ingest/parseLaserRadii.js +210 -0
  66. package/dist/ingest/parseLaserRadii.js.map +1 -0
  67. package/dist/ingest/parseNubase.d.ts +40 -0
  68. package/dist/ingest/parseNubase.d.ts.map +1 -0
  69. package/dist/ingest/parseNubase.js +146 -0
  70. package/dist/ingest/parseNubase.js.map +1 -0
  71. package/dist/ingest/parseRadii.d.ts +17 -0
  72. package/dist/ingest/parseRadii.d.ts.map +1 -0
  73. package/dist/ingest/parseRadii.js +42 -0
  74. package/dist/ingest/parseRadii.js.map +1 -0
  75. package/dist/ingest/parseTunl.d.ts +48 -0
  76. package/dist/ingest/parseTunl.d.ts.map +1 -0
  77. package/dist/ingest/parseTunl.js +773 -0
  78. package/dist/ingest/parseTunl.js.map +1 -0
  79. package/dist/shared/errors.d.ts +20 -0
  80. package/dist/shared/errors.d.ts.map +1 -0
  81. package/dist/shared/errors.js +45 -0
  82. package/dist/shared/errors.js.map +1 -0
  83. package/dist/shared/index.d.ts +4 -0
  84. package/dist/shared/index.d.ts.map +1 -0
  85. package/dist/shared/index.js +3 -0
  86. package/dist/shared/index.js.map +1 -0
  87. package/dist/shared/sqlite3Cli.d.ts +3 -0
  88. package/dist/shared/sqlite3Cli.d.ts.map +1 -0
  89. package/dist/shared/sqlite3Cli.js +106 -0
  90. package/dist/shared/sqlite3Cli.js.map +1 -0
  91. package/dist/tooling.d.ts +2 -0
  92. package/dist/tooling.d.ts.map +1 -0
  93. package/dist/tooling.js +2 -0
  94. package/dist/tooling.js.map +1 -0
  95. package/dist/tools/dispatcher.d.ts +11 -0
  96. package/dist/tools/dispatcher.d.ts.map +1 -0
  97. package/dist/tools/dispatcher.js +64 -0
  98. package/dist/tools/dispatcher.js.map +1 -0
  99. package/dist/tools/index.d.ts +3 -0
  100. package/dist/tools/index.d.ts.map +1 -0
  101. package/dist/tools/index.js +3 -0
  102. package/dist/tools/index.js.map +1 -0
  103. package/dist/tools/mcpSchema.d.ts +3 -0
  104. package/dist/tools/mcpSchema.d.ts.map +1 -0
  105. package/dist/tools/mcpSchema.js +21 -0
  106. package/dist/tools/mcpSchema.js.map +1 -0
  107. package/dist/tools/registry.d.ts +22 -0
  108. package/dist/tools/registry.d.ts.map +1 -0
  109. package/dist/tools/registry.js +309 -0
  110. package/dist/tools/registry.js.map +1 -0
  111. package/dist/utils/stdioHygiene.d.ts +7 -0
  112. package/dist/utils/stdioHygiene.d.ts.map +1 -0
  113. package/dist/utils/stdioHygiene.js +16 -0
  114. package/dist/utils/stdioHygiene.js.map +1 -0
  115. package/package.json +64 -0
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Parser for Li et al., ADNDT 140 (2021) 101440 — laser spectroscopy charge radii.
3
+ *
4
+ * Parses the LaTeX longtable from Radii.tex (lines ~399-685) containing 257 data rows
5
+ * for 21 elements (Z=4 to Z=88).
6
+ */
7
+ // ── Reference isotope map (Z → A_ref) ───────────────────────────────────────
8
+ export const REFERENCE_ISOTOPES = new Map([
9
+ [4, 9], // Be-9
10
+ [12, 26], // Mg-26
11
+ [19, 39], // K-39
12
+ [20, 40], // Ca-40
13
+ [25, 55], // Mn-55
14
+ [26, 54], // Fe-54
15
+ [28, 60], // Ni-60
16
+ [29, 65], // Cu-65
17
+ [30, 68], // Zn-68
18
+ [31, 71], // Ga-71
19
+ [37, 87], // Rb-87
20
+ [47, 109], // Ag-109
21
+ [48, 114], // Cd-114
22
+ [50, 124], // Sn-124
23
+ [70, 176], // Yb-176
24
+ [80, 198], // Hg-198
25
+ [81, 205], // Tl-205
26
+ [83, 209], // Bi-209
27
+ [84, 210], // Po-210
28
+ [87, 221], // Fr-221
29
+ [88, 214], // Ra-214
30
+ ]);
31
+ const FOOTNOTE_CITATIONS = [
32
+ { Z: 4, citekeys: ['c4Be'] },
33
+ { Z: 12, citekeys: ['c12Mg'] },
34
+ { Z: 19, citekeys: ['c19K'] },
35
+ { Z: 20, citekeys: ['c20Ca1', 'c20Ca2'] },
36
+ { Z: 25, citekeys: ['c25Mn'] },
37
+ { Z: 26, citekeys: ['c26Fe'] },
38
+ { Z: 28, citekeys: ['c28Ni'] },
39
+ { Z: 29, citekeys: ['c29Cu1', 'c29Cu2'] },
40
+ { Z: 30, citekeys: ['c30Zn'] },
41
+ { Z: 31, citekeys: ['c31Ga1', 'c31Ga2'] },
42
+ { Z: 37, citekeys: ['c37Rb1', 'c37Rb2'] },
43
+ { Z: 47, citekeys: ['c47Ag'] },
44
+ { Z: 48, citekeys: ['c48Cd'] },
45
+ { Z: 50, citekeys: ['c50Sn'] },
46
+ { Z: 70, citekeys: ['c70Yb'] },
47
+ { Z: 80, citekeys: ['c80Hg'] },
48
+ { Z: 81, citekeys: ['c81Tl1', 'c81Tl2'] },
49
+ { Z: 83, citekeys: ['c83Bi'] },
50
+ { Z: 84, citekeys: ['c84Po1', 'c84Po2'] },
51
+ { Z: 87, citekeys: ['c87Fr'] },
52
+ { Z: 88, citekeys: ['c88Ra'] },
53
+ ];
54
+ // Build Z → citekeys lookup
55
+ const Z_TO_CITEKEYS = new Map();
56
+ for (const fc of FOOTNOTE_CITATIONS) {
57
+ Z_TO_CITEKEYS.set(fc.Z, fc.citekeys);
58
+ }
59
+ // ── Bibliography (from LaTeX \bibitem entries, lines 267-320) ───────────────
60
+ export const LASER_RADII_BIBLIOGRAPHY = new Map([
61
+ ['c4Be', 'A. Krieger, K. Blaum, M. L. Bissell, et al., Phys. Rev. Lett. 108 (2012) 142501.'],
62
+ ['c12Mg', 'D. T. Yordanov, M. L. Bissell, K. Blaum, et al., Phys. Rev. Lett. 108 (2012) 042504.'],
63
+ ['c19K', 'D. M. Rossi, K. Minamisono, H. B. Asberry, et al., Phys. Rev. C 92 (2015) 014305.'],
64
+ ['c20Ca1', 'A. J. Miller, K. Minamisono, A. Klose, et al., Nat. Phys. 15 (2019) 432.'],
65
+ ['c20Ca2', 'R. F. Garcia Ruiz, M. L. Bissell, K. Blaum, et al., Nat. Phys. 12 (2016) 594.'],
66
+ ['c25Mn', 'H. Heylen, C. Babcock, R. Beerwerth, et al., Phys. Rev. C 94 (2016) 054321.'],
67
+ ['c26Fe', 'K. Minamisono, D. M. Rossi, R. Beerwerth, et al., Phys. Rev. Lett. 117 (2016) 252501.'],
68
+ ['c28Ni', 'S. Kaufmann, J. Simonis, S. Bacca, et al., Phys. Rev. Lett. 124 (2020) 132502.'],
69
+ ['c29Cu1', 'M. L. Bissell, T. Carette, K. T. Flanagan, et al., Phys. Rev. C 93 (2016) 064318.'],
70
+ ['c29Cu2', 'R. P. de Groote, J. Billowes, C. L. Binnersley, et al., Nat. Phys. 16 (2020) 620.'],
71
+ ['c30Zn', 'L. Xie, X. F. Yang, C. Wraith, et al., Phys. Lett. B 797 (2019) 134805.'],
72
+ ['c31Ga1', 'T. J. Procter, J. Billowes, M. L. Bissell, et al., Phys. Rev. C 86 (2012) 034329.'],
73
+ ['c31Ga2', 'G. J. Farooq-Smith, A. R. Vernon, J. Billowes, et al., Phys. Rev. C 96 (2017) 044324.'],
74
+ ['c37Rb1', "E. Mane, A. Voss, J. A. Behr, et al., Phys. Rev. Lett. 107 (2011) 212502."],
75
+ ['c37Rb2', 'T. J. Procter, J. A. Behr, J. Billowes, et al., Eur. Phys. J. A 51 (2015) 23.'],
76
+ ['c47Ag', 'R. Ferrer, N. Bree, T. E. Cocolios, et al., Phys. Lett. B 728 (2014) 191.'],
77
+ ['c48Cd', 'M. Hammen, W. Nortershauser, D. L. Balabanski, et al., Phys. Rev. Lett. 121 (2018) 102501.'],
78
+ ['c50Sn', "C. Gorges, L. V. Rodriguez, D. L. Balabanski, et al., Phys. Rev. Lett. 122 (2019) 192502."],
79
+ ['c70Yb', 'K. T. Flanagan, J. Billowes, P. Campbell, et al., J. Phys. G: Nucl. Part. Phys. 39 (2012) 125101.'],
80
+ ['c80Hg', 'B. A. Marsh, T. Day Goodacre, S. Sels, et al., Nat. Phys. 14 (2018) 1163.'],
81
+ ['c81Tl1', 'A. E. Barzakh, A. N. Andreyev, T. E. Cocolios, et al., Phys. Rev. C 95 (2017) 014324.'],
82
+ ['c81Tl2', 'A. E. Barzakh, L. Kh. Batist, D. V. Fedorov, et al., Phys. Rev. C 88 (2013) 024315.'],
83
+ ['c83Bi', 'A. E. Barzakh, D. V. Fedorov, V. S. Ivanov, et al., Phys. Rev. C 97 (2018) 014322.'],
84
+ ['c84Po1', 'M. D. Seliverstov, T. E. Cocolios, W. Dexters, et al., Phys. Lett. B 719 (2013) 362.'],
85
+ ['c84Po2', 'D. A. Fink, T. E. Cocolios, A. N. Andreyev, et al., Phys. Rev. X 5 (2015) 011018.'],
86
+ ['c87Fr', 'K. M. Lynch, J. Billowes, M. L. Bissell, et al., Phys. Rev. X 4 (2014) 011055.'],
87
+ ['c88Ra', 'K. M. Lynch, S. G. Wilkins, J. Billowes, et al., Phys. Rev. C 97 (2018) 024309.'],
88
+ ]);
89
+ // ── Parsing helpers ─────────────────────────────────────────────────────────
90
+ function stripBold(s) {
91
+ const match = s.match(/\\textbf\{([^}]*)\}/);
92
+ if (match) {
93
+ return { text: match[1], isBold: true };
94
+ }
95
+ return { text: s, isBold: false };
96
+ }
97
+ function parseFloat_(s) {
98
+ const trimmed = s.trim();
99
+ if (trimmed === '' || trimmed === '--')
100
+ return null;
101
+ const n = Number(trimmed);
102
+ return Number.isFinite(n) ? n : null;
103
+ }
104
+ // ── Main parser ─────────────────────────────────────────────────────────────
105
+ export function parseLaserRadii(content) {
106
+ const rows = [];
107
+ // Find the data region: after \endhead and before \end{longtable}
108
+ const lines = content.split('\n');
109
+ let inData = false;
110
+ const dataLines = [];
111
+ for (const line of lines) {
112
+ const trimmedLine = line.trimStart();
113
+ // Skip LaTeX comments
114
+ if (trimmedLine.startsWith('%'))
115
+ continue;
116
+ if (trimmedLine.includes('\\endhead')) {
117
+ inData = true;
118
+ continue;
119
+ }
120
+ if (trimmedLine.includes('\\end{longtable}')) {
121
+ break;
122
+ }
123
+ if (inData) {
124
+ dataLines.push(line);
125
+ }
126
+ }
127
+ let currentZ = 0;
128
+ let currentElement = '';
129
+ for (const rawLine of dataLines) {
130
+ // Strip trailing \\ (LaTeX line break) and \hline, trim
131
+ const line = rawLine.replace(/\\+\s*$/g, '').replace(/\\hline/g, '').trim();
132
+ if (line === '')
133
+ continue;
134
+ const fields = line.split('&');
135
+ if (fields.length < 8)
136
+ continue; // Need Z, el, N, A, δr², Δδr², r_c, Δr_c
137
+ // Fields: Z, el, N, A, δ⟨r²⟩, Δδ⟨r²⟩, r_c, Δr_c, In Ref
138
+ const zField = stripBold(fields[0].trim());
139
+ const elField = stripBold(fields[1].trim());
140
+ // Carry forward Z/element for continuation rows
141
+ if (zField.text !== '') {
142
+ currentZ = parseInt(zField.text, 10);
143
+ }
144
+ if (elField.text !== '') {
145
+ currentElement = elField.text;
146
+ }
147
+ if (currentZ === 0 || currentElement === '')
148
+ continue;
149
+ const nField = stripBold(fields[2].trim());
150
+ const aField = stripBold(fields[3].trim());
151
+ const drField = stripBold(fields[4].trim());
152
+ const drUncField = stripBold(fields[5].trim());
153
+ const rcField = stripBold(fields[6].trim());
154
+ const rcUncField = stripBold(fields[7].trim());
155
+ const inAngeliField = fields.length > 8 ? fields[8].trim() : '';
156
+ const N = parseInt(nField.text, 10);
157
+ const A = parseInt(aField.text, 10);
158
+ if (isNaN(N) || isNaN(A))
159
+ continue;
160
+ const delta_r2 = parseFloat_(drField.text);
161
+ const delta_r2_unc = parseFloat_(drUncField.text);
162
+ const r_charge = parseFloat_(rcField.text);
163
+ const r_charge_unc = parseFloat_(rcUncField.text);
164
+ if (delta_r2 === null || r_charge === null || r_charge_unc === null)
165
+ continue;
166
+ // Detect reference isotope: bold formatting OR δ⟨r²⟩ = 0 with -- uncertainty
167
+ const is_reference = (nField.isBold || aField.isBold || rcField.isBold)
168
+ || (delta_r2 === 0 && delta_r2_unc === null);
169
+ const in_angeli = inAngeliField.toLowerCase().includes('yes');
170
+ rows.push({
171
+ Z: currentZ,
172
+ A,
173
+ N,
174
+ element: currentElement,
175
+ delta_r2_fm2: delta_r2,
176
+ delta_r2_unc_fm2: delta_r2_unc,
177
+ r_charge_fm: r_charge,
178
+ r_charge_unc_fm: r_charge_unc,
179
+ is_reference,
180
+ in_angeli_2013: in_angeli,
181
+ });
182
+ }
183
+ // Build reference isotope map from parsed data
184
+ const refIsotopes = new Map();
185
+ for (const row of rows) {
186
+ if (row.is_reference) {
187
+ refIsotopes.set(row.Z, row.A);
188
+ }
189
+ }
190
+ // Build per-isotope citation refs
191
+ const refs = [];
192
+ for (const row of rows) {
193
+ const citekeys = Z_TO_CITEKEYS.get(row.Z);
194
+ if (!citekeys)
195
+ continue;
196
+ for (const ck of citekeys) {
197
+ const bibRef = LASER_RADII_BIBLIOGRAPHY.get(ck);
198
+ if (bibRef) {
199
+ refs.push({
200
+ Z: row.Z,
201
+ A: row.A,
202
+ citekey: ck,
203
+ reference: bibRef,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ return { rows, refs, refIsotopes };
209
+ }
210
+ //# sourceMappingURL=parseLaserRadii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseLaserRadii.js","sourceRoot":"","sources":["../../src/ingest/parseLaserRadii.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * NUBASE2020 parser (nubase_4.mas20).
3
+ *
4
+ * Format documented in file header:
5
+ * col 1-3: AAA (mass number)
6
+ * col 5-8: ZZZi (atomic number + isomer index)
7
+ * col 12-16: A El
8
+ * col 17: s (isomer flag: m,n = isomer; p,q = level; etc.)
9
+ * col 19-31: Mass Excess (f13.6), # = estimated
10
+ * col 32-42: dMass (f11.6)
11
+ * col 43-54: Excitation energy (f12.6)
12
+ * col 55-65: dE (f11.6)
13
+ * col 66-67: Origin (a2)
14
+ * col 70-78: Half-life (f9.4)
15
+ * col 79-80: unit (a2)
16
+ * col 82-88: dT (a7)
17
+ * col 89-102: Jpi (a14)
18
+ * col 103-104: ENSDF year (a2)
19
+ * col 115-118: Discovery year (a4)
20
+ * col 120-209: Decay modes (a90)
21
+ *
22
+ * Lines starting with '#' are comments/header.
23
+ */
24
+ export interface NubaseRow {
25
+ Z: number;
26
+ A: number;
27
+ element: string;
28
+ isomer_index: number;
29
+ mass_excess_keV: number | null;
30
+ mass_excess_unc_keV: number | null;
31
+ excitation_energy_keV: number | null;
32
+ half_life: string;
33
+ half_life_seconds: number | null;
34
+ half_life_unc_seconds: number | null;
35
+ spin_parity: string;
36
+ decay_modes: string;
37
+ is_estimated: boolean;
38
+ }
39
+ export declare function parseNubase(content: string): NubaseRow[];
40
+ //# sourceMappingURL=parseNubase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseNubase.d.ts","sourceRoot":"","sources":["../../src/ingest/parseNubase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAqFD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CA4DxD"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * NUBASE2020 parser (nubase_4.mas20).
3
+ *
4
+ * Format documented in file header:
5
+ * col 1-3: AAA (mass number)
6
+ * col 5-8: ZZZi (atomic number + isomer index)
7
+ * col 12-16: A El
8
+ * col 17: s (isomer flag: m,n = isomer; p,q = level; etc.)
9
+ * col 19-31: Mass Excess (f13.6), # = estimated
10
+ * col 32-42: dMass (f11.6)
11
+ * col 43-54: Excitation energy (f12.6)
12
+ * col 55-65: dE (f11.6)
13
+ * col 66-67: Origin (a2)
14
+ * col 70-78: Half-life (f9.4)
15
+ * col 79-80: unit (a2)
16
+ * col 82-88: dT (a7)
17
+ * col 89-102: Jpi (a14)
18
+ * col 103-104: ENSDF year (a2)
19
+ * col 115-118: Discovery year (a4)
20
+ * col 120-209: Decay modes (a90)
21
+ *
22
+ * Lines starting with '#' are comments/header.
23
+ */
24
+ const HALF_LIFE_UNIT_TO_SECONDS = {
25
+ 'ys': 1e-24,
26
+ 'zs': 1e-21,
27
+ 'as': 1e-18,
28
+ 'fs': 1e-15,
29
+ 'ps': 1e-12,
30
+ 'ns': 1e-9,
31
+ 'us': 1e-6,
32
+ 'ms': 1e-3,
33
+ 's': 1,
34
+ 'm': 60,
35
+ 'h': 3600,
36
+ 'd': 86400,
37
+ 'y': 365.25 * 86400,
38
+ 'ky': 365.25 * 86400 * 1e3,
39
+ 'My': 365.25 * 86400 * 1e6,
40
+ 'Gy': 365.25 * 86400 * 1e9,
41
+ 'Ty': 365.25 * 86400 * 1e12,
42
+ 'Py': 365.25 * 86400 * 1e15,
43
+ 'Ey': 365.25 * 86400 * 1e18,
44
+ 'Zy': 365.25 * 86400 * 1e21,
45
+ 'Yy': 365.25 * 86400 * 1e24,
46
+ };
47
+ function parseNubaseValue(raw) {
48
+ const s = raw.trim();
49
+ if (s === '' || s === '*')
50
+ return { value: null, estimated: false };
51
+ const estimated = s.includes('#');
52
+ const cleaned = s.replace(/#/g, '.');
53
+ const n = Number(cleaned);
54
+ if (!Number.isFinite(n))
55
+ return { value: null, estimated };
56
+ return { value: n, estimated };
57
+ }
58
+ function parseHalfLife(rawValue, rawUnit, rawUnc) {
59
+ const val = rawValue.trim();
60
+ const unit = rawUnit.trim();
61
+ const unc = rawUnc.trim();
62
+ if (val === 'stbl' || val === 'stabl') {
63
+ return { display: 'stable', seconds: null, unc_seconds: null };
64
+ }
65
+ if (val === '' || val === '*') {
66
+ return { display: val || 'unknown', seconds: null, unc_seconds: null };
67
+ }
68
+ if (val.includes('p-unst')) {
69
+ return { display: 'p-unst', seconds: null, unc_seconds: null };
70
+ }
71
+ const display = unit ? `${val} ${unit}`.trim() : val;
72
+ const cleanedVal = val.replace(/#/g, '.');
73
+ const numVal = Number(cleanedVal);
74
+ if (!Number.isFinite(numVal) || !unit) {
75
+ return { display, seconds: null, unc_seconds: null };
76
+ }
77
+ const factor = HALF_LIFE_UNIT_TO_SECONDS[unit];
78
+ if (factor === undefined) {
79
+ return { display, seconds: null, unc_seconds: null };
80
+ }
81
+ const seconds = numVal * factor;
82
+ let unc_seconds = null;
83
+ if (unc) {
84
+ const cleanedUnc = unc.replace(/#/g, '.');
85
+ const numUnc = Number(cleanedUnc);
86
+ if (Number.isFinite(numUnc)) {
87
+ unc_seconds = numUnc * factor;
88
+ }
89
+ }
90
+ return { display, seconds, unc_seconds };
91
+ }
92
+ export function parseNubase(content) {
93
+ const lines = content.split('\n');
94
+ const rows = [];
95
+ for (const line of lines) {
96
+ // Skip comments and empty lines
97
+ if (line.startsWith('#') || line.trim().length === 0)
98
+ continue;
99
+ // Ensure minimum length for core fields
100
+ if (line.length < 18)
101
+ continue;
102
+ const A = parseInt(line.substring(0, 3).trim(), 10);
103
+ if (isNaN(A))
104
+ continue;
105
+ // Extract Z and isomer_index from fixed positions (cols 5-8 = ZZZi)
106
+ const rawZzzi = line.substring(4, 8);
107
+ const zStr = rawZzzi.substring(0, 3).trim();
108
+ const iStr = rawZzzi.substring(3, 4).trim();
109
+ const Z = parseInt(zStr, 10);
110
+ const isomer_index = iStr ? parseInt(iStr, 10) : 0;
111
+ if (isNaN(Z) || isNaN(isomer_index))
112
+ continue;
113
+ const element = line.substring(11, 16).trim().replace(/^\d+/, '').trim();
114
+ if (!element)
115
+ continue;
116
+ const massExcess = parseNubaseValue(line.substring(18, 31));
117
+ const massExcessUnc = parseNubaseValue(line.substring(31, 42));
118
+ const excEnergy = parseNubaseValue(line.substring(42, 54));
119
+ // Half-life (substring is safe beyond string length — returns available chars)
120
+ const hlValue = line.substring(69, 78);
121
+ const hlUnit = line.substring(78, 80);
122
+ const hlUnc = line.substring(81, 88);
123
+ const hl = parseHalfLife(hlValue, hlUnit, hlUnc);
124
+ // Spin-parity
125
+ const spinParity = line.substring(88, 102).trim();
126
+ // Decay modes
127
+ const decayModes = line.substring(119).trim();
128
+ rows.push({
129
+ Z,
130
+ A,
131
+ element,
132
+ isomer_index,
133
+ mass_excess_keV: massExcess.value,
134
+ mass_excess_unc_keV: massExcessUnc.value,
135
+ excitation_energy_keV: excEnergy.value,
136
+ half_life: hl.display,
137
+ half_life_seconds: hl.seconds,
138
+ half_life_unc_seconds: hl.unc_seconds,
139
+ spin_parity: spinParity,
140
+ decay_modes: decayModes,
141
+ is_estimated: massExcess.estimated || massExcessUnc.estimated || excEnergy.estimated,
142
+ });
143
+ }
144
+ return rows;
145
+ }
146
+ //# sourceMappingURL=parseNubase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseNubase.js","sourceRoot":"","sources":["../../src/ingest/parseNubase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * IAEA charge_radii.csv parser.
3
+ *
4
+ * CSV format with header:
5
+ * z,symbol,n,a,radius_val,radius_unc,radius_preliminary_val,radius_preliminary_unc
6
+ */
7
+ export interface ChargeRadiusRow {
8
+ Z: number;
9
+ A: number;
10
+ element: string;
11
+ r_charge_fm: number | null;
12
+ r_charge_unc_fm: number | null;
13
+ r_charge_preliminary_fm: number | null;
14
+ r_charge_preliminary_unc_fm: number | null;
15
+ }
16
+ export declare function parseChargeRadii(content: string): ChargeRadiusRow[];
17
+ //# sourceMappingURL=parseRadii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRadii.d.ts","sourceRoot":"","sources":["../../src/ingest/parseRadii.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AASD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CA8BnE"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * IAEA charge_radii.csv parser.
3
+ *
4
+ * CSV format with header:
5
+ * z,symbol,n,a,radius_val,radius_unc,radius_preliminary_val,radius_preliminary_unc
6
+ */
7
+ function parseOptionalFloat(s) {
8
+ const trimmed = s.trim();
9
+ if (trimmed === '' || trimmed === '-')
10
+ return null;
11
+ const n = Number(trimmed);
12
+ return Number.isFinite(n) ? n : null;
13
+ }
14
+ export function parseChargeRadii(content) {
15
+ const lines = content.split('\n');
16
+ const rows = [];
17
+ // Skip header line
18
+ for (let i = 1; i < lines.length; i++) {
19
+ const line = lines[i].trim();
20
+ if (line.length === 0)
21
+ continue;
22
+ const fields = line.split(',');
23
+ if (fields.length < 6)
24
+ continue;
25
+ const Z = parseInt(fields[0].trim(), 10);
26
+ const element = fields[1].trim();
27
+ const A = parseInt(fields[3].trim(), 10);
28
+ if (isNaN(Z) || isNaN(A))
29
+ continue;
30
+ rows.push({
31
+ Z,
32
+ A,
33
+ element,
34
+ r_charge_fm: parseOptionalFloat(fields[4]),
35
+ r_charge_unc_fm: parseOptionalFloat(fields[5]),
36
+ r_charge_preliminary_fm: fields.length > 6 ? parseOptionalFloat(fields[6]) : null,
37
+ r_charge_preliminary_unc_fm: fields.length > 7 ? parseOptionalFloat(fields[7]) : null,
38
+ });
39
+ }
40
+ return rows;
41
+ }
42
+ //# sourceMappingURL=parseRadii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRadii.js","sourceRoot":"","sources":["../../src/ingest/parseRadii.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,SAAS,kBAAkB,CAAC,CAAS;IACnC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAsB,EAAE,CAAC;IAEnC,mBAAmB;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAEhC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,SAAS;QAEnC,IAAI,CAAC,IAAI,CAAC;YACR,CAAC;YACD,CAAC;YACD,OAAO;YACP,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YAC3C,eAAe,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YAC/C,uBAAuB,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YAClF,2BAA2B,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI;SACvF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Parser for TUNL (Triangle Universities Nuclear Laboratory) energy level tables.
3
+ *
4
+ * Input: pdftotext -layout output from TUNL EL PDF files.
5
+ * Handles both even-A and odd-A formats, including:
6
+ * - Inline Jπ (8Be 2004 style)
7
+ * - Parity on separate line above OR below energy (12C 2017, 14N 1991)
8
+ * - Fractional Jπ for half-integer spins (5Li, 7Li, 11B, 15N)
9
+ * - Lifetime (τm) and width (Γ) with unit conversion
10
+ *
11
+ * Evaluation years: 1991, 1992, 1993, 1995, 1998, 2002, 2004, 2012, 2017.
12
+ */
13
+ export interface TunlLevelRow {
14
+ Z: number;
15
+ A: number;
16
+ element: string;
17
+ energy_keV: number;
18
+ energy_unc_keV: number | null;
19
+ energy_raw: string | null;
20
+ spin_parity: string | null;
21
+ isospin: string | null;
22
+ width_keV: number | null;
23
+ width_unc_keV: number | null;
24
+ width_raw: string | null;
25
+ width_relation: string | null;
26
+ half_life: string | null;
27
+ decay_modes: string | null;
28
+ evaluation: string;
29
+ table_label: string;
30
+ }
31
+ interface WidthResult {
32
+ width_keV: number | null;
33
+ width_unc_keV: number | null;
34
+ width_raw: string | null;
35
+ width_relation: string | null;
36
+ half_life: string | null;
37
+ }
38
+ export declare function parseWidth(raw: string, defaultUnit: 'keV' | 'MeV'): WidthResult;
39
+ interface EnergyResult {
40
+ energy_keV: number;
41
+ energy_unc_keV: number | null;
42
+ energy_raw: string;
43
+ }
44
+ export declare function parseEnergy(raw: string): EnergyResult | null;
45
+ export declare function parseTunlLevels(text: string): TunlLevelRow[];
46
+ export declare function parseTunlLevelsWithMeta(text: string, Z: number, A: number, element: string, evaluation: string, sourceTable: string): TunlLevelRow[];
47
+ export {};
48
+ //# sourceMappingURL=parseTunl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTunl.d.ts","sourceRoot":"","sources":["../../src/ingest/parseTunl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAmED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAOD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,WAAW,CAyF/E;AA4BD,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoB5D;AA8hBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAW5D;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,YAAY,EAAE,CAchB"}