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,469 @@
1
+ /**
2
+ * ENSDF (Evaluated Nuclear Structure Data File) parser.
3
+ *
4
+ * 80-column fixed-width ASCII format. 300 mass chain files (ensdf.001–ensdf.300).
5
+ * Design: meta/docs/ensdf-integration-design.md (R3)
6
+ */
7
+ // ── Element symbol lookup (Z from symbol) ──────────────────────────────────
8
+ const ELEMENT_Z = {
9
+ n: 0, H: 1, He: 2, Li: 3, Be: 4, B: 5, C: 6, N: 7, O: 8, F: 9,
10
+ Ne: 10, Na: 11, Mg: 12, Al: 13, Si: 14, P: 15, S: 16, Cl: 17, Ar: 18, K: 19,
11
+ Ca: 20, Sc: 21, Ti: 22, V: 23, Cr: 24, Mn: 25, Fe: 26, Co: 27, Ni: 28, Cu: 29,
12
+ Zn: 30, Ga: 31, Ge: 32, As: 33, Se: 34, Br: 35, Kr: 36, Rb: 37, Sr: 38, Y: 39,
13
+ Zr: 40, Nb: 41, Mo: 42, Tc: 43, Ru: 44, Rh: 45, Pd: 46, Ag: 47, Cd: 48, In: 49,
14
+ Sn: 50, Sb: 51, Te: 52, I: 53, Xe: 54, Cs: 55, Ba: 56, La: 57, Ce: 58, Pr: 59,
15
+ Nd: 60, Pm: 61, Sm: 62, Eu: 63, Gd: 64, Tb: 65, Dy: 66, Ho: 67, Er: 68, Tm: 69,
16
+ Yb: 70, Lu: 71, Hf: 72, Ta: 73, W: 74, Re: 75, Os: 76, Ir: 77, Pt: 78, Au: 79,
17
+ Hg: 80, Tl: 81, Pb: 82, Bi: 83, Po: 84, At: 85, Rn: 86, Fr: 87, Ra: 88, Ac: 89,
18
+ Th: 90, Pa: 91, U: 92, Np: 93, Pu: 94, Am: 95, Cm: 96, Bk: 97, Cf: 98, Es: 99,
19
+ Fm: 100, Md: 101, No: 102, Lr: 103, Rf: 104, Db: 105, Sg: 106, Bh: 107, Hs: 108, Mt: 109,
20
+ Ds: 110, Rg: 111, Cn: 112, Nh: 113, Fl: 114, Mc: 115, Lv: 116, Ts: 117, Og: 118,
21
+ };
22
+ function resolveZ(element) {
23
+ if (ELEMENT_Z[element] !== undefined)
24
+ return ELEMENT_Z[element];
25
+ const titleCase = element.charAt(0).toUpperCase() + element.slice(1).toLowerCase();
26
+ return ELEMENT_Z[titleCase];
27
+ }
28
+ // ── Line preprocessing ─────────────────────────────────────────────────────
29
+ export function preprocessLine(raw) {
30
+ return raw.padEnd(80, ' ').substring(0, 80);
31
+ }
32
+ // ── Record classifier (§4.1) ───────────────────────────────────────────────
33
+ export function classifyRecord(line) {
34
+ const col7 = line[6];
35
+ const col8 = line[7];
36
+ // Col 7 non-blank → comment/text/xref, skip
37
+ if (col7 === 'c' || col7 === 'C')
38
+ return 'comment';
39
+ if (col7 === '#')
40
+ return 'comment';
41
+ if (col7 === 't' || col7 === 'T')
42
+ return 'text';
43
+ if (col7 === 'x' || col7 === 'X')
44
+ return 'xref';
45
+ if (col7 === 'd' || col7 === 'D')
46
+ return 'comment'; // documentation records
47
+ if (col7 !== ' ')
48
+ return 'unknown';
49
+ // Col 7 = space → standard record, col 8 determines type
50
+ switch (col8) {
51
+ case 'L': return 'level';
52
+ case 'G': return 'gamma';
53
+ case 'B': return 'beta';
54
+ case 'E': return 'ec';
55
+ case 'Q': return 'qvalue';
56
+ case 'P': return 'parent';
57
+ case 'R': return 'reference';
58
+ case 'H': return 'history';
59
+ case 'N': return 'normalization';
60
+ case 'D': return 'delayed';
61
+ case 'A': return 'alpha';
62
+ case ' ': return 'header';
63
+ default: return 'unknown';
64
+ }
65
+ }
66
+ // ── NUCID parsing (§4.3) ───────────────────────────────────────────────────
67
+ export function parseNucid(nucid) {
68
+ const aStr = nucid.substring(0, 3).trim();
69
+ const rawElement = nucid.substring(3, 5).trim();
70
+ if (!aStr || !rawElement)
71
+ return null;
72
+ const A = parseInt(aStr, 10);
73
+ if (isNaN(A))
74
+ return null;
75
+ const Z = resolveZ(rawElement);
76
+ if (Z === undefined)
77
+ return null;
78
+ // Normalize to title case (ENSDF uses uppercase like "NI" → "Ni")
79
+ const element = rawElement.charAt(0).toUpperCase() + rawElement.slice(1).toLowerCase();
80
+ return { A, element, Z };
81
+ }
82
+ export function parseEnsdfValue(rawField) {
83
+ const raw = rawField.trim();
84
+ if (raw === '' || raw === '*' || raw === '?') {
85
+ return { value: null, estimated: false, raw };
86
+ }
87
+ const estimated = raw.includes('#');
88
+ const cleaned = raw.replace(/#/g, '.');
89
+ const n = parseFloat(cleaned);
90
+ if (!Number.isFinite(n)) {
91
+ return { value: null, estimated, raw };
92
+ }
93
+ return { value: n, estimated, raw };
94
+ }
95
+ // ── Uncertainty computation (§4.4) ─────────────────────────────────────────
96
+ const SPECIAL_UNC = new Set(['', '?', 'AP', 'GT', 'LT', 'GE', 'LE', 'SY', 'CA']);
97
+ export function ensdfUncertainty(rawValue, rawUnc) {
98
+ const unc = rawUnc.trim().toUpperCase();
99
+ if (SPECIAL_UNC.has(unc))
100
+ return null;
101
+ // Asymmetric uncertainty: e.g. "+12-10" or "12+10"
102
+ const asymMatch = unc.match(/^\+?(\d+)\s*-(\d+)$/) || unc.match(/^(\d+)\s*\+(\d+)$/);
103
+ let uncDigits;
104
+ if (asymMatch) {
105
+ uncDigits = Math.max(parseFloat(asymMatch[1]), parseFloat(asymMatch[2]));
106
+ }
107
+ else {
108
+ uncDigits = parseFloat(unc);
109
+ if (!Number.isFinite(uncDigits))
110
+ return null;
111
+ }
112
+ // Determine precision from raw value string
113
+ let cleaned = rawValue.trim().replace(/#/g, '');
114
+ if (cleaned === '' || cleaned === '*' || cleaned === '?')
115
+ return null;
116
+ // Scientific notation: e.g. "6.52E3", "1201E1"
117
+ const sciMatch = cleaned.match(/^([+-]?\d*\.?\d+)[Ee]([+-]?\d+)$/);
118
+ if (sciMatch) {
119
+ const mantissa = sciMatch[1];
120
+ const exponent = parseInt(sciMatch[2], 10);
121
+ const dotPos = mantissa.indexOf('.');
122
+ const decimals = dotPos >= 0 ? mantissa.length - dotPos - 1 : 0;
123
+ const scale = Math.pow(10, exponent - decimals);
124
+ return uncDigits * scale;
125
+ }
126
+ // Standard number
127
+ const dotPos = cleaned.indexOf('.');
128
+ const decimals = dotPos >= 0 ? cleaned.length - dotPos - 1 : 0;
129
+ const scale = Math.pow(10, -decimals);
130
+ return uncDigits * scale;
131
+ }
132
+ // ── Half-life parsing (§4.5) ───────────────────────────────────────────────
133
+ const HALF_LIFE_UNITS = {
134
+ 'Y': 3.1556926e7,
135
+ 'D': 8.6400e4,
136
+ 'H': 3.600e3,
137
+ 'M': 6.0e1,
138
+ 'S': 1,
139
+ 'MS': 1e-3,
140
+ 'US': 1e-6,
141
+ 'NS': 1e-9,
142
+ 'PS': 1e-12,
143
+ 'FS': 1e-15,
144
+ 'AS': 1e-18,
145
+ };
146
+ // ln(2) × ℏ = 4.562339×10⁻¹⁶ eV·s
147
+ const LN2_HBAR_EV_S = 4.562339e-16;
148
+ export function parseHalfLife(rawT, rawDT) {
149
+ const display = rawT.trim();
150
+ if (display === '' || display === '?' || display === '*') {
151
+ return { seconds: null, unc_seconds: null, display };
152
+ }
153
+ if (display.toUpperCase() === 'STABLE') {
154
+ return { seconds: null, unc_seconds: null, display: 'STABLE' };
155
+ }
156
+ // Tokenize: "1925.28 D" → number + unit
157
+ // Handle special cases like ">1 S" or "AP 2 S" — just extract number and unit
158
+ const match = display.match(/([0-9.Ee+\-]+)\s*([A-Za-z]+)/);
159
+ if (!match) {
160
+ return { seconds: null, unc_seconds: null, display };
161
+ }
162
+ const numVal = parseFloat(match[1]);
163
+ if (!Number.isFinite(numVal)) {
164
+ return { seconds: null, unc_seconds: null, display };
165
+ }
166
+ const unit = match[2].toUpperCase();
167
+ // Standard time units
168
+ const factor = HALF_LIFE_UNITS[unit];
169
+ if (factor !== undefined) {
170
+ const seconds = numVal * factor;
171
+ let unc_seconds = null;
172
+ const dtStr = rawDT.trim();
173
+ if (dtStr && dtStr !== '?' && dtStr !== '*') {
174
+ const dtVal = ensdfUncertainty(match[1], dtStr);
175
+ if (dtVal !== null) {
176
+ unc_seconds = dtVal * factor;
177
+ }
178
+ }
179
+ return { seconds, unc_seconds, display };
180
+ }
181
+ // Energy-width units: EV, KEV, MEV → T½ = ln(2)·ℏ/Γ
182
+ if (unit === 'EV') {
183
+ const seconds = LN2_HBAR_EV_S / numVal;
184
+ return { seconds, unc_seconds: null, display };
185
+ }
186
+ if (unit === 'KEV') {
187
+ const seconds = LN2_HBAR_EV_S / (numVal * 1e3);
188
+ return { seconds, unc_seconds: null, display };
189
+ }
190
+ if (unit === 'MEV') {
191
+ const seconds = LN2_HBAR_EV_S / (numVal * 1e6);
192
+ return { seconds, unc_seconds: null, display };
193
+ }
194
+ // Unknown unit
195
+ return { seconds: null, unc_seconds: null, display };
196
+ }
197
+ // ── Record parsers ─────────────────────────────────────────────────────────
198
+ export function parseReferenceRecord(line, massNumber) {
199
+ const keynumber = line.substring(9, 17).trim();
200
+ if (!keynumber)
201
+ return null;
202
+ // Col 18 is a blank separator; TYPE at cols 19-22 = substring(18, 22)
203
+ const type = line.substring(18, 22).trim() || null;
204
+ const reference = line.substring(22, 80).trim() || null;
205
+ return { A: massNumber, keynumber, type, reference };
206
+ }
207
+ export function parseLevelRecord(line) {
208
+ const eRaw = line.substring(9, 19).trim();
209
+ const eVal = parseEnsdfValue(eRaw);
210
+ if (eVal.value === null)
211
+ return null;
212
+ const deRaw = line.substring(19, 21).trim();
213
+ const eUnc = deRaw ? ensdfUncertainty(eRaw, deRaw) : null;
214
+ const j = line.substring(21, 39).trim() || null;
215
+ const tRaw = line.substring(39, 49);
216
+ const dtRaw = line.substring(49, 55);
217
+ const hl = parseHalfLife(tRaw, dtRaw);
218
+ const commentFlag = line[76] !== ' ' ? line[76] : null;
219
+ const ms = line.substring(77, 79).trim() || null;
220
+ const q = line[79] === '?' ? 1 : 0;
221
+ return {
222
+ energy_keV: eVal.value,
223
+ energy_raw: eRaw,
224
+ energy_unc_keV: eUnc,
225
+ spin_parity: j,
226
+ half_life: hl.display || null,
227
+ half_life_seconds: hl.seconds,
228
+ half_life_unc_seconds: hl.unc_seconds,
229
+ isomer_flag: ms,
230
+ questionable: q,
231
+ comment_flag: commentFlag,
232
+ };
233
+ }
234
+ export function parseGammaRecord(line) {
235
+ const eRaw = line.substring(9, 19).trim();
236
+ const eVal = parseEnsdfValue(eRaw);
237
+ if (eVal.value === null)
238
+ return null;
239
+ const deRaw = line.substring(19, 21).trim();
240
+ const eUnc = deRaw ? ensdfUncertainty(eRaw, deRaw) : null;
241
+ const riRaw = line.substring(21, 29).trim();
242
+ const riVal = riRaw ? parseEnsdfValue(riRaw) : { value: null };
243
+ const driRaw = line.substring(29, 31).trim();
244
+ const riUnc = (riRaw && driRaw) ? ensdfUncertainty(riRaw, driRaw) : null;
245
+ const m = line.substring(31, 41).trim() || null;
246
+ const mrRaw = line.substring(41, 49).trim();
247
+ const mrVal = mrRaw ? parseEnsdfValue(mrRaw) : { value: null };
248
+ const dmrRaw = line.substring(49, 55).trim();
249
+ const mrUnc = (mrRaw && dmrRaw) ? ensdfUncertainty(mrRaw, dmrRaw) : null;
250
+ const ccRaw = line.substring(55, 62).trim();
251
+ const ccVal = ccRaw ? parseEnsdfValue(ccRaw) : { value: null };
252
+ const dccRaw = line.substring(62, 64).trim();
253
+ const ccUnc = (ccRaw && dccRaw) ? ensdfUncertainty(ccRaw, dccRaw) : null;
254
+ const tiRaw = line.substring(64, 74).trim();
255
+ const tiVal = tiRaw ? parseEnsdfValue(tiRaw) : { value: null };
256
+ const dtiRaw = line.substring(74, 76).trim();
257
+ const tiUnc = (tiRaw && dtiRaw) ? ensdfUncertainty(tiRaw, dtiRaw) : null;
258
+ const commentFlag = line[76] !== ' ' ? line[76] : null;
259
+ const coinFlag = line[77] !== ' ' ? line[77] : null;
260
+ const q = line[79] === '?' ? 1 : 0;
261
+ return {
262
+ gamma_energy_keV: eVal.value,
263
+ gamma_energy_raw: eRaw,
264
+ gamma_energy_unc_keV: eUnc,
265
+ rel_intensity: riVal.value,
266
+ rel_intensity_unc: riUnc,
267
+ total_intensity: tiVal.value,
268
+ total_intensity_unc: tiUnc,
269
+ multipolarity: m,
270
+ mixing_ratio: mrVal.value,
271
+ mixing_ratio_unc: mrUnc,
272
+ total_conv_coeff: ccVal.value,
273
+ total_conv_coeff_unc: ccUnc,
274
+ comment_flag: commentFlag,
275
+ coin_flag: coinFlag,
276
+ questionable: q,
277
+ };
278
+ }
279
+ export function parseBetaRecord(line) {
280
+ const eRaw = line.substring(9, 19).trim();
281
+ const eVal = eRaw ? parseEnsdfValue(eRaw) : { value: null };
282
+ const deRaw = line.substring(19, 21).trim();
283
+ const eUnc = (eRaw && deRaw) ? ensdfUncertainty(eRaw, deRaw) : null;
284
+ const ibRaw = line.substring(21, 29).trim();
285
+ const ibVal = ibRaw ? parseEnsdfValue(ibRaw) : { value: null };
286
+ const dibRaw = line.substring(29, 31).trim();
287
+ const ibUnc = (ibRaw && dibRaw) ? ensdfUncertainty(ibRaw, dibRaw) : null;
288
+ const ftRaw = line.substring(41, 49).trim();
289
+ const ftVal = ftRaw ? parseEnsdfValue(ftRaw) : { value: null };
290
+ const dftRaw = line.substring(49, 55).trim();
291
+ const ftUnc = (ftRaw && dftRaw) ? ensdfUncertainty(ftRaw, dftRaw) : null;
292
+ const commentFlag = line[76] !== ' ' ? line[76] : null;
293
+ const un = line.substring(77, 79).trim() || null;
294
+ return {
295
+ endpoint_keV: eVal.value,
296
+ endpoint_unc_keV: eUnc,
297
+ ib_percent: ibVal.value,
298
+ ib_percent_unc: ibUnc,
299
+ log_ft: ftVal.value,
300
+ log_ft_unc: ftUnc,
301
+ forbiddenness: un,
302
+ comment_flag: commentFlag,
303
+ };
304
+ }
305
+ export function parseECRecord(line) {
306
+ const eRaw = line.substring(9, 19).trim();
307
+ const eVal = eRaw ? parseEnsdfValue(eRaw) : { value: null };
308
+ const deRaw = line.substring(19, 21).trim();
309
+ const eUnc = (eRaw && deRaw) ? ensdfUncertainty(eRaw, deRaw) : null;
310
+ const ibRaw = line.substring(21, 29).trim();
311
+ const ibVal = ibRaw ? parseEnsdfValue(ibRaw) : { value: null };
312
+ const dibRaw = line.substring(29, 31).trim();
313
+ const ibUnc = (ibRaw && dibRaw) ? ensdfUncertainty(ibRaw, dibRaw) : null;
314
+ const ieRaw = line.substring(31, 39).trim();
315
+ const ieVal = ieRaw ? parseEnsdfValue(ieRaw) : { value: null };
316
+ const dieRaw = line.substring(39, 41).trim();
317
+ const ieUnc = (ieRaw && dieRaw) ? ensdfUncertainty(ieRaw, dieRaw) : null;
318
+ const ftRaw = line.substring(41, 49).trim();
319
+ const ftVal = ftRaw ? parseEnsdfValue(ftRaw) : { value: null };
320
+ const dftRaw = line.substring(49, 55).trim();
321
+ const ftUnc = (ftRaw && dftRaw) ? ensdfUncertainty(ftRaw, dftRaw) : null;
322
+ const tiRaw = line.substring(64, 74).trim();
323
+ const tiVal = tiRaw ? parseEnsdfValue(tiRaw) : { value: null };
324
+ const dtiRaw = line.substring(74, 76).trim();
325
+ const tiUnc = (tiRaw && dtiRaw) ? ensdfUncertainty(tiRaw, dtiRaw) : null;
326
+ const commentFlag = line[76] !== ' ' ? line[76] : null;
327
+ const un = line.substring(77, 79).trim() || null;
328
+ return {
329
+ endpoint_keV: eVal.value,
330
+ endpoint_unc_keV: eUnc,
331
+ ib_percent: ibVal.value,
332
+ ib_percent_unc: ibUnc,
333
+ ie_percent: ieVal.value,
334
+ ie_percent_unc: ieUnc,
335
+ ti_percent: tiVal.value,
336
+ ti_percent_unc: tiUnc,
337
+ log_ft: ftVal.value,
338
+ log_ft_unc: ftUnc,
339
+ forbiddenness: un,
340
+ comment_flag: commentFlag,
341
+ };
342
+ }
343
+ export function parseParentRecord(line) {
344
+ const tRaw = line.substring(39, 49);
345
+ const dtRaw = line.substring(49, 55);
346
+ const hl = parseHalfLife(tRaw, dtRaw);
347
+ return { halfLife: hl.display || null, halfLifeSeconds: hl.seconds };
348
+ }
349
+ // ── QREF extraction ────────────────────────────────────────────────────────
350
+ export function extractQrefKeynumbers(line) {
351
+ const raw = line.substring(55, 80).trim();
352
+ if (!raw)
353
+ return { keynumbers: [], raw: '' };
354
+ // NSR keynumbers are 8-char format like "2012WA38" — extract all matches
355
+ const matches = raw.match(/\d{4}[A-Za-z]{2}\d{2}/g);
356
+ return { keynumbers: matches || [], raw };
357
+ }
358
+ // ── Dataset identification (§4.8) ──────────────────────────────────────────
359
+ /**
360
+ * Format a compact NUCID like "60CO" into ENSDF 5-char format " 60CO"
361
+ * (mass right-justified in first 3 chars, element left-justified in last 2).
362
+ */
363
+ function formatNucidForParsing(compact) {
364
+ const m = compact.match(/^(\d+)\s*([A-Za-z]+)$/);
365
+ if (!m)
366
+ return compact.padEnd(5);
367
+ const mass = m[1].padStart(3);
368
+ const el = m[2].padEnd(2).substring(0, 2);
369
+ return mass + el;
370
+ }
371
+ export function identifyDataset(headerLine) {
372
+ const nucidStr = headerLine.substring(0, 5);
373
+ const nucid = parseNucid(nucidStr);
374
+ if (!nucid)
375
+ return null;
376
+ const dsid = headerLine.substring(9, 39).trim();
377
+ if (!dsid)
378
+ return null;
379
+ // ADOPTED LEVELS, GAMMAS
380
+ if (/ADOPTED\s+LEVELS,\s*GAMMAS/.test(dsid)) {
381
+ return { nucid, datasetType: 'ADOPTED LEVELS, GAMMAS', dsid };
382
+ }
383
+ // ADOPTED LEVELS (without GAMMAS)
384
+ if (/ADOPTED\s+LEVELS/.test(dsid) && !/GAMMAS/.test(dsid)) {
385
+ return { nucid, datasetType: 'ADOPTED LEVELS', dsid };
386
+ }
387
+ // B- DECAY
388
+ const bmMatch = dsid.match(/(\d+\s*\w+)\s+B-\s+DECAY/);
389
+ if (bmMatch) {
390
+ const parentNucid = parseNucid(formatNucidForParsing(bmMatch[1]));
391
+ return { nucid, datasetType: 'B- DECAY', dsid, parentNucid: parentNucid || undefined };
392
+ }
393
+ // EC+B+ DECAY (must match before EC DECAY)
394
+ const ecbpMatch = dsid.match(/(\d+\s*\w+)\s+EC\+B\+\s+DECAY/);
395
+ if (ecbpMatch) {
396
+ const parentNucid = parseNucid(formatNucidForParsing(ecbpMatch[1]));
397
+ return { nucid, datasetType: 'EC+B+ DECAY', dsid, parentNucid: parentNucid || undefined };
398
+ }
399
+ // EC DECAY
400
+ const ecMatch = dsid.match(/(\d+\s*\w+)\s+EC\s+DECAY/);
401
+ if (ecMatch) {
402
+ const parentNucid = parseNucid(formatNucidForParsing(ecMatch[1]));
403
+ return { nucid, datasetType: 'EC DECAY', dsid, parentNucid: parentNucid || undefined };
404
+ }
405
+ // IT DECAY
406
+ const itMatch = dsid.match(/(\d+\s*\w+)\s+IT\s+DECAY/);
407
+ if (itMatch) {
408
+ const parentNucid = parseNucid(formatNucidForParsing(itMatch[1]));
409
+ return { nucid, datasetType: 'IT DECAY', dsid, parentNucid: parentNucid || undefined };
410
+ }
411
+ // Other datasets (reactions, Coulomb excitation, etc.) — skip
412
+ return null;
413
+ }
414
+ // ── B-type continuation parsing (§4.6) ─────────────────────────────────────
415
+ export function parseBTypeContinuation(line) {
416
+ const text = line.substring(9, 80);
417
+ const result = { be2w: null, be2w_unc: null, bm1w: null, bm1w_unc: null };
418
+ const be2wMatch = text.match(/BE2W\s*=\s*([0-9.Ee+\-]+)\s+(\d+)/);
419
+ if (be2wMatch) {
420
+ result.be2w = parseFloat(be2wMatch[1]);
421
+ result.be2w_unc = ensdfUncertainty(be2wMatch[1], be2wMatch[2]);
422
+ }
423
+ const bm1wMatch = text.match(/BM1W\s*=\s*([0-9.Ee+\-]+)\s+(\d+)/);
424
+ if (bm1wMatch) {
425
+ result.bm1w = parseFloat(bm1wMatch[1]);
426
+ result.bm1w_unc = ensdfUncertainty(bm1wMatch[1], bm1wMatch[2]);
427
+ }
428
+ return result;
429
+ }
430
+ // ── S-type continuation parsing ────────────────────────────────────────────
431
+ export function parseSTypeContinuation(line) {
432
+ const text = line.substring(9, 80);
433
+ const result = { cc: null, cc_unc: null };
434
+ const ccMatch = text.match(/\bCC\s*=\s*([0-9.Ee+\-]+)\s+(\d+)/);
435
+ if (ccMatch) {
436
+ result.cc = parseFloat(ccMatch[1]);
437
+ result.cc_unc = ensdfUncertainty(ccMatch[1], ccMatch[2]);
438
+ }
439
+ return result;
440
+ }
441
+ // ── Dataset title → parent half-life from title brackets ───────────────────
442
+ export function extractTitleHalfLife(dsid) {
443
+ // e.g. "60CO B- DECAY (1925.28 D)" → "1925.28 D"
444
+ const match = dsid.match(/\(([^)]+)\)\s*$/);
445
+ return match ? match[1].trim() : null;
446
+ }
447
+ export function splitIntoDatasets(content) {
448
+ const rawLines = content.split('\n');
449
+ const blocks = [];
450
+ let currentLines = [];
451
+ for (const rawLine of rawLines) {
452
+ const line = preprocessLine(rawLine);
453
+ // Blank line (all spaces) = dataset separator
454
+ if (line.trim() === '') {
455
+ if (currentLines.length > 0) {
456
+ blocks.push({ lines: currentLines, headerLine: currentLines[0] });
457
+ currentLines = [];
458
+ }
459
+ continue;
460
+ }
461
+ currentLines.push(line);
462
+ }
463
+ // Last block
464
+ if (currentLines.length > 0) {
465
+ blocks.push({ lines: currentLines, headerLine: currentLines[0] });
466
+ }
467
+ return blocks;
468
+ }
469
+ //# sourceMappingURL=parseEnsdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseEnsdf.js","sourceRoot":"","sources":["../../src/ingest/parseEnsdf.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAE9E,MAAM,SAAS,GAA2B;IACxC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC3E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7E,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;IACxF,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,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"}
@@ -0,0 +1,33 @@
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
+ export interface LaserRadiusRow {
8
+ Z: number;
9
+ A: number;
10
+ N: number;
11
+ element: string;
12
+ delta_r2_fm2: number;
13
+ delta_r2_unc_fm2: number | null;
14
+ r_charge_fm: number;
15
+ r_charge_unc_fm: number;
16
+ is_reference: boolean;
17
+ in_angeli_2013: boolean;
18
+ }
19
+ export interface LaserRadiusRef {
20
+ Z: number;
21
+ A: number;
22
+ citekey: string;
23
+ reference: string;
24
+ }
25
+ export interface LaserRadiiParseResult {
26
+ rows: LaserRadiusRow[];
27
+ refs: LaserRadiusRef[];
28
+ refIsotopes: Map<number, number>;
29
+ }
30
+ export declare const REFERENCE_ISOTOPES: ReadonlyMap<number, number>;
31
+ export declare const LASER_RADII_BIBLIOGRAPHY: ReadonlyMap<string, string>;
32
+ export declare function parseLaserRadii(content: string): LaserRadiiParseResult;
33
+ //# sourceMappingURL=parseLaserRadii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseLaserRadii.d.ts","sourceRoot":"","sources":["../../src/ingest/parseLaserRadii.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAID,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAsBzD,CAAC;AAyCH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CA4B/D,CAAC;AAqBH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAoHtE"}