You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Sigma on wt% and at%: thickness, dose, detector, per-pixel map #15
The thickness σ, the dose and the detector are not in the per-spectrum quantifyWithSigma (the pooled quantification has the thickness term); a per-pixel σ map is not provided. The sum/escape model's pile-up columns are also not shared with the proposer and the unlisted-line check.
From docs/open-items.md items 8 and 9, 27 Oct 2026.
Checked on the public AlMgSi demo set (demo-edx, generator sim_edx.py v2.0): planted truth on synthetic data. It plants sum peaks (kappa 0.002, the parents lose the photons), a 1.5 % Al K-alpha tail (0.12 keV), Si escape and stray Cu K. Pipeline: PooledQuantifier.run, true k typed, truth geometry, absorption on, true axis locked; each pool on the Poisson data and on the noise-free expected spectrum x100.
Sum peaks (pile-up). The default fit has no sum-peak term (exSpy has none either). With SumEscapeModel(sumPeaks: true) the noise-free bias changes as follows (net against planted):
pool
Si default
Si with sum peaks
kit fixture eds-absorption-truth.json
-18.2 %
-4.0 %
map, all matrix recipes
-16.6 %
-3.9 %
map, recipe A
-14.9 %
-3.6 %
ladder L5 (high rate)
-57 %
-8 %
ladder L6 (precipitate)
-8.4 %
-1.2 %
Reduced chi2 on the x100 spectra: 120-3000 with the default, 0.04-8 with sum peaks.
Cu K-alpha is lost at high rate. Stray Cu K-alpha is in the L6 data (123 counts above the window background). The default fit holds Cu_Ka at 0, on the bound, even noise-free; with sum peaks it reads 111 of 121. L5 and L7 read 14 of 35 noise-free by default, and 33 and 32 of 35 with sum peaks. The low-rate map pools are right either way: 140 +- 18 of 128 on the matrix map, 60 +- 11 of 54 on recipe A.
Al K-alpha tail. The default Gaussian shape leaves the tail in the Mg window. With LineTail(fraction: 0.015, slopeKeV: 0.12) (the planted values) on top of the sum peaks, noise-free Mg goes from -31.6 % to +5.8 % on the fixture, -32 % to +6 % on recipe A and -45 % to -13 % on the matrix map. On real data the tail has to be measured per detector.
Sigma calibration. On 16 independent rows of L6 and L7 the scatter over the reported sigma is 0.89-1.18 for at% and nets (expected spread of that ratio at n = 16 is about 0.18), so the counting sigma is calibrated. The bias in the matrix pools is not in the sigma, as the footer says. quantifyMapsWithSigma (#55) on the same rows: 0.90-1.04, and pixel 0 equals quantifyWithSigma exactly.
Mn (none planted). Never proposed and held at 0 when fitted. Currie limits: 0.084 at% on the matrix map, 0.14 at% on recipe A, 0.043 at% on the kit fixture.
Next step: the pooled path models sum peaks when the data call for it, keeps the exSpy-equivalent fit as a switch, and pins these numbers as regression tests (PR to follow). Results stay validation: "none": the truth is synthetic.
Real-data accuracy check on two standards of known composition.
Data: Snelson, Collins and MacArthur (2026), Elemental tomography dataset of Mg-Al-Ca alloy, University of Leeds, https://doi.org/10.5518/1826, licence CC BY 4.0. Related paper: Ultramicroscopy (2026) 114354. Files Al_Wedge_Standard/Al_EDS-HAADF.emd and MgO_Standard/MgO_EDS-HAADF.emd: FEI Titan G2 80-200 at 200 kV, Super-X (four SDDs, elevation 18 deg, tilt 0). Truth from stoichiometry: pure Al, and MgO at 50/50 at%.
Reading and pooling. FormatoKit 0.11.0 reads both Velox files. Each pooled spectrum equals the per-detector sum spectra stored in its file, count for count (181 137 777 and 307 927 735 counts). The pools are the pixels with signal: 214 793 px for Al and 107 489 px for MgO, which holds 1.75e5 Mg K-alpha and 1.46e5 O K-alpha counts.
Fit.PooledQuantifier.run at the PR #59 head (bce80a3, which contains main e0d9fed), run two ways: .off (FitPolicy.exspyEquivalent) and the #59 default (.whenSignificant).
Al wedge: "sum peaks tested, not kept: Al_Ka + Al_Ka alone is c / sigma_c = 0.0". With sum peaks off, the residual in 2.80-3.15 keV is -187 counts (z -0.33). There is no Al+Al excess: roughly under 4e-4 of Al K-alpha.
Setup: computed k (EPQ Bote-Salvat sigma, Krause omega, EPQ SDD epsilon). The kit's k_Mg / k_O (weight) is 1.1888. C, F, Si and Cu are fit only. Axis refined.
Thickness: about 100 nm, from the HAADF tilt series in the same archive (stack MgO_HAADF_TiltSeries_Stack.hdf5; it shows the same particle at 0 deg). The projected short extent from -70 to +10 deg fits a 111 x 103 nm cross-section rotated 29 deg, with a chord of at most 118 nm.
exSpy 0.3.2 CL, window intensities (estimate_background_windows(line_width=[5, 2])), same k
49.66
48.91
exSpy 0.3.2 CL, its model fit (poly 6, 0.2-20 keV, file axis), same k
48.97
48.24
exSpy 0.3.2 CL, model after calibrate_energy_axis(resolution, offset), same k
47.59
46.91
Parity: exSpy's Cliff-Lorimer on the kit's nets agrees within its own tolerance (atol 1e-3 at%). The difference is 0 without absorption and 5e-4 at% with absorption at 100 nm (k = 1: 44.149727 / 43.578764 exSpy against 44.149727 / 43.578248 kit).
The nets differ by route: O K-alpha 136.7k (windows) to 156.7k (exSpy calibrated model); the kit's is 146.1k. At fixed k and without absorption, Mg at% ranges from 47.6 to 49.7.
Mg reads 1.5-2.3 at% low (3-5 %) with the exSpy-equivalent absorption, and about 3.8 at% low (46.2) with MgO's real density (#62). That is inside the stated sigma of +-4.9 at%, which the 20 % k term dominates.
The cause is the computed k ratio, not the fit:
The k this standard calls for is 1.265 without absorption and about 1.36 with absorption at 3.58 g/cm3. The computed value is 1.189, 6-13 % low.
Absorption cannot close the gap: any thickness lowers Mg further, and the zero-thickness maximum is 48.45.
The axis (locked or refined) moves Mg by 0.08 at%. The tail moves it by at most 0.03 at%. The net-extraction routes move it by -0.9 to +1.2 at% about the kit value.
Candidate in the k model: the detector efficiency at O K-alpha (0.525 keV). The EPQ SDD model carries no ice or contamination layer, and this spectrum holds 1.0e5 counts of C K-alpha (support film or contamination).
What would refute it: the CaCO3 standard in the same archive (O again, with Ca K-alpha at 3.69 keV) giving the right O/Ca with the same computed k. Not run here.
Al wedge: the continuum at the Al K edge on a Si-free spectrum
The default continuum has a single segment above the Al K edge, and its two segments are discontinuous at the edge: the model drops by 770 counts between the channels at 1.559 and 1.564 keV, where the data are smooth. The data then sit above the model by 1 700 counts in 1.53-1.65 keV and below it by 2 511 counts in 1.65-2.2 keV. In that band the model is 39 % above the data, with no Si present.
This is the real-data form of the #8 Si deficit (H2 there). Any Si K-alpha in an Al matrix on this detector is fitted against a continuum that is too high under it. So the Si bias on Al alloys is a continuum-shape problem, measured here without Si to confound it, not a line-shape or pile-up problem.
No code defect with a clear fix was found in the pooled path, so there is no PR. Results stay validation: "none": one detector, and the k is the open term.
CaCO3 standard: does it confirm an O K-alpha efficiency deficit in the computed k? No. It cannot pin O to 10 %, and the only single layer that fits both standards is ice of about 1.3 um, at the edge of both ranges.
Data: Snelson, Collins and MacArthur (2026), Elemental tomography dataset of Mg-Al-Ca alloy, University of Leeds, https://doi.org/10.5518/1826, licence CC BY 4.0 (related paper: Ultramicroscopy (2026) 114354). Files: CaCO3_Standard/CaCO3_EDS-HAADF.emd and CaCO3_HAADF_TiltSeries_Stack.hdf5 (archive CaCO3_Standard.zip, 626 010 048 bytes, SHA-256 14179cc8447621518ac26a95317d583ce5401995db6d19d8d8188a1189102912). The instrument is the same as for MgO: Titan G2 80-200 at 200 kV, Super-X with four SDDs at 18 deg elevation, tilt 0. Truth from stoichiometry: Ca 20, C 20, O 60 at%, so O/Ca = 3.
Reading and pooling. FormatoKit 0.11.0 reads the file as 1024 x 1024 px, 4096 channels and 150 frames. The pool is the particle: an Otsu cut on the 5 x 5-smoothed 0.3-10 keV counts gives 369 460 px and 47.5 M counts, and it agrees with an Otsu cut on the HAADF for 96 % of the pixels. The fit is PooledQuantifier.run at main e0d9fed with the default policy. Its axis refinement gives +7.5 eV and gain -0.157 %, and chi2_red is 3.34. Nets: Ca K-alpha 243 622 +- 535, O K-alpha 276 616 +- 633, C K-alpha 87 326 +- 483. Cu, Fe and Si were proposed and are fit only.
Computed k (Bote-Salvat sigma, Krause omega, EPQ SDD epsilon), relative to Ca: k_O = 0.6142 and k_C = 0.7180. The model epsilon is 0.985 at O K-alpha and 0.999 at Ca K-alpha.
O/Ca, same k (0.6142) on every route
route
no absorption
absorption, 100 nm, exSpy density rule (0.89 g/cm3)
exSpy 0.3.2 CL, its model fit (0.2-20 keV, file axis)
1.683
1.996
Parity: without absorption the two agree to 1e-4. With absorption at 100 nm Ca reads 32.657 (exSpy) against 32.667 at% (kit). exSpy stops its iteration at 0.5 % and the kit at 1e-7 %; this is the kit's named deviation.
Why CaCO3 cannot arbitrate a 10 % O effect
Absorption dominates. The HAADF tilt series (77 frames, -74 to +78 deg) shows one particle, about 450 nm along the tilt axis. Across the axis, the projected width fits an ellipse with semi-axes 143 x 200 nm (rms 5.7 nm). The mean beam chord is 223-263 nm. The O/Ca correction factor at 2.71 g/cm3 is:
slab model: 1.57 at 100 nm, 2.14 at 193 nm, 2.66 at 263 nm;
Monte Carlo of the ellipsoid seen by the four detectors at 18 deg: 1.37-1.44, equal to a slab of only 72-84 nm. The X-rays leave through the sides.
The answer depends on the geometry by a factor of 2.
Beam damage. I split the 150 frames into 5 blocks with the same mask and the file axis. The net ratio O/Ca falls monotonically 1.176, 1.124, 1.105, 1.080, 1.042 (-11.4 %), and C/Ca falls from 0.364 to 0.339. This is the usual CO2 loss of calcite under the beam. The linear zero-dose intercept is 7.1 % above the pooled value. Any dose before the map (focusing, the tilt series) is not in that intercept.
Best estimate: O/Ca = 1.747 x (1.37-1.44) = 2.39-2.52 pooled, and 2.56-2.69 at zero dose, against 3.00. O reads 10-20 % low. To reach truth, k_O/k_Ca would need 0.685-0.771 (+11 to +26 %).
C is not usable. It reads C/Ca 0.86 without absorption (truth 1.0), but it carries the support film and contamination, it changes with dose, and C K-alpha absorption in calcite is larger still.
Against MgO: one layer for both?
MgO (comment above) needs k_Mg/k_O raised by 6.4 % (no absorption) to 14.4 % (slab, 100 nm, 3.58 g/cm3). CaCO3 needs k_O/k_Ca raised by 11.5-25.5 %. An extra layer of mass thickness m in front of the detector multiplies k_X/k_O by exp(-(mu_O - mu_X) m). Thickness each standard asks for (FFAST mu):
layer
MgO asks
CaCO3 asks
ice, 0.93 g/cm3
0.60-1.29 um
1.30-2.70 um
carbon, 2.0 g/cm3
-29 to -63 nm (impossible)
47-97 nm
Al, 2.70 g/cm3
-45 to -98 nm (impossible)
77-160 nm
Si dead layer, 2.33 g/cm3
-39 to -85 nm (impossible)
67-139 nm
SiO2, 2.2 g/cm3
-113 to -246 nm (impossible)
130-271 nm
Carbon, contamination and metal or silicon layers are refuted. They absorb O K-alpha far more than Mg K-alpha, so they push MgO further from 50/50. The 1.0e5 counts of C K-alpha on MgO are therefore not the cause of the MgO miss. The hypothesis in the earlier comment is wrong in sign for any absorber of that kind.
Ice is the only candidate that moves both standards the right way. O K-alpha (0.525 keV) lies below the O K edge (0.543 keV) and Mg K-alpha lies above it, so ice absorbs Mg K-alpha 2.1x more than O K-alpha. At 1.3 um the transmissions are O 0.886, Mg 0.774, Ca 0.988 and C 0.567.
One layer is consistent only marginally. The two ranges meet at about 1.3 um, at the high end of MgO's (full slab absorption at 3.58 g/cm3) and the low end of CaCO3's (zero-dose, ellipsoid). It is not established.
The Al wedge continuum disfavours it. Ice that thick would cut the continuum to 0.23 of the bare value at 0.60 keV, recovering to 0.55 at 0.80 keV. On the Al wedge pool, the continuum per channel at 0.60-0.84 keV is 0.74-0.77 of that at 0.36-0.44 keV. Bare Kramers predicts 0.50-0.67 and Kramers x 1.3 um ice predicts 0.16-0.27. Al self-absorption raises the ratio, but by a factor of about 3 it is unlikely. This was a quick look, not a fit.
For the SpectroKit writer
No clear model fix emerges. Do not add a carbon or contamination layer to DetectorLayers: it makes MgO worse. The cheap experiment that settles the ice question is a continuum fit on the Al wedge pool with FitPolicy.continuumEfficiency carrying an ice term, which fits the O K edge step directly. Until then the 20 % flat sigma_k stands. The two standards disagree on O by more than any detector layer explains, which points at the specimens: CaCO3 damage and geometry, and possibly MgO surface hydroxide or carbonate (not measured here).
No code PR for #15 tonight: what is left is either in review, needs a real-data fit (the ice experiment), or touches files that already have two open PRs. Results stay validation: "none".
Activity
Paullo9 commentedon Oct 31, 2026
Checked on the public AlMgSi demo set (
demo-edx, generatorsim_edx.pyv2.0): planted truth on synthetic data. It plants sum peaks (kappa 0.002, the parents lose the photons), a 1.5 % Al K-alpha tail (0.12 keV), Si escape and stray Cu K. Pipeline:PooledQuantifier.run, true k typed, truth geometry, absorption on, true axis locked; each pool on the Poisson data and on the noise-free expected spectrum x100.Sum peaks (pile-up). The default fit has no sum-peak term (exSpy has none either). With
SumEscapeModel(sumPeaks: true)the noise-free bias changes as follows (net against planted):eds-absorption-truth.jsonReduced chi2 on the x100 spectra: 120-3000 with the default, 0.04-8 with sum peaks.
Cu K-alpha is lost at high rate. Stray Cu K-alpha is in the L6 data (123 counts above the window background). The default fit holds Cu_Ka at 0, on the bound, even noise-free; with sum peaks it reads 111 of 121. L5 and L7 read 14 of 35 noise-free by default, and 33 and 32 of 35 with sum peaks. The low-rate map pools are right either way: 140 +- 18 of 128 on the matrix map, 60 +- 11 of 54 on recipe A.
Al K-alpha tail. The default Gaussian shape leaves the tail in the Mg window. With
LineTail(fraction: 0.015, slopeKeV: 0.12)(the planted values) on top of the sum peaks, noise-free Mg goes from -31.6 % to +5.8 % on the fixture, -32 % to +6 % on recipe A and -45 % to -13 % on the matrix map. On real data the tail has to be measured per detector.Sigma calibration. On 16 independent rows of L6 and L7 the scatter over the reported sigma is 0.89-1.18 for at% and nets (expected spread of that ratio at n = 16 is about 0.18), so the counting sigma is calibrated. The bias in the matrix pools is not in the sigma, as the footer says.
quantifyMapsWithSigma(#55) on the same rows: 0.90-1.04, and pixel 0 equalsquantifyWithSigmaexactly.Mn (none planted). Never proposed and held at 0 when fitted. Currie limits: 0.084 at% on the matrix map, 0.14 at% on recipe A, 0.043 at% on the kit fixture.
Next step: the pooled path models sum peaks when the data call for it, keeps the exSpy-equivalent fit as a switch, and pins these numbers as regression tests (PR to follow). Results stay
validation: "none": the truth is synthetic.Paullo9 commentedon Oct 31, 2026
Real-data accuracy check on two standards of known composition.
Data: Snelson, Collins and MacArthur (2026), Elemental tomography dataset of Mg-Al-Ca alloy, University of Leeds, https://doi.org/10.5518/1826, licence CC BY 4.0. Related paper: Ultramicroscopy (2026) 114354. Files
Al_Wedge_Standard/Al_EDS-HAADF.emdandMgO_Standard/MgO_EDS-HAADF.emd: FEI Titan G2 80-200 at 200 kV, Super-X (four SDDs, elevation 18 deg, tilt 0). Truth from stoichiometry: pure Al, and MgO at 50/50 at%.Reading and pooling. FormatoKit 0.11.0 reads both Velox files. Each pooled spectrum equals the per-detector sum spectra stored in its file, count for count (181 137 777 and 307 927 735 counts). The pools are the pixels with signal: 214 793 px for Al and 107 489 px for MgO, which holds 1.75e5 Mg K-alpha and 1.46e5 O K-alpha counts.
Fit.
PooledQuantifier.runat the PR #59 head (bce80a3, which contains main e0d9fed), run two ways:.off(FitPolicy.exspyEquivalent) and the #59 default (.whenSignificant).Sum peaks (#59)
.offagree bit for bit, as feat!: the pooled fit models sum peaks when the strongest line's self pair is significant #59 intends at these count rates.MgO: Mg at% against 50
Setup: computed k (EPQ Bote-Salvat sigma, Krause omega, EPQ SDD epsilon). The kit's k_Mg / k_O (weight) is 1.1888. C, F, Si and Cu are fit only. Axis refined.
Thickness: about 100 nm, from the HAADF tilt series in the same archive (stack
MgO_HAADF_TiltSeries_Stack.hdf5; it shows the same particle at 0 deg). The projected short extent from -70 to +10 deg fits a 111 x 103 nm cross-section rotated 29 deg, with a chord of at most 118 nm..offestimate_background_windows(line_width=[5, 2])), same kcalibrate_energy_axis(resolution, offset), same kDiagnosis of the MgO miss
Mg reads 1.5-2.3 at% low (3-5 %) with the exSpy-equivalent absorption, and about 3.8 at% low (46.2) with MgO's real density (#62). That is inside the stated sigma of +-4.9 at%, which the 20 % k term dominates.
The cause is the computed k ratio, not the fit:
Candidate in the k model: the detector efficiency at O K-alpha (0.525 keV). The EPQ SDD model carries no ice or contamination layer, and this spectrum holds 1.0e5 counts of C K-alpha (support film or contamination).
What would refute it: the CaCO3 standard in the same archive (O again, with Ca K-alpha at 3.69 keV) giving the right O/Ca with the same computed k. Not run here.
Al wedge: the continuum at the Al K edge on a Si-free spectrum
The default continuum has a single segment above the Al K edge, and its two segments are discontinuous at the edge: the model drops by 770 counts between the channels at 1.559 and 1.564 keV, where the data are smooth. The data then sit above the model by 1 700 counts in 1.53-1.65 keV and below it by 2 511 counts in 1.65-2.2 keV. In that band the model is 39 % above the data, with no Si present.
This is the real-data form of the #8 Si deficit (H2 there). Any Si K-alpha in an Al matrix on this detector is fitted against a continuum that is too high under it. So the Si bias on Al alloys is a continuum-shape problem, measured here without Si to confound it, not a line-shape or pile-up problem.
Also found (new issues)
No code defect with a clear fix was found in the pooled path, so there is no PR. Results stay
validation: "none": one detector, and the k is the open term.🤖 Generated with Claude Code
Paullo9 commentedon Oct 31, 2026
CaCO3 standard: does it confirm an O K-alpha efficiency deficit in the computed k? No. It cannot pin O to 10 %, and the only single layer that fits both standards is ice of about 1.3 um, at the edge of both ranges.
Data: Snelson, Collins and MacArthur (2026), Elemental tomography dataset of Mg-Al-Ca alloy, University of Leeds, https://doi.org/10.5518/1826, licence CC BY 4.0 (related paper: Ultramicroscopy (2026) 114354). Files:
CaCO3_Standard/CaCO3_EDS-HAADF.emdandCaCO3_HAADF_TiltSeries_Stack.hdf5(archiveCaCO3_Standard.zip, 626 010 048 bytes, SHA-25614179cc8447621518ac26a95317d583ce5401995db6d19d8d8188a1189102912). The instrument is the same as for MgO: Titan G2 80-200 at 200 kV, Super-X with four SDDs at 18 deg elevation, tilt 0. Truth from stoichiometry: Ca 20, C 20, O 60 at%, so O/Ca = 3.Reading and pooling. FormatoKit 0.11.0 reads the file as 1024 x 1024 px, 4096 channels and 150 frames. The pool is the particle: an Otsu cut on the 5 x 5-smoothed 0.3-10 keV counts gives 369 460 px and 47.5 M counts, and it agrees with an Otsu cut on the HAADF for 96 % of the pixels. The fit is
PooledQuantifier.runat main e0d9fed with the default policy. Its axis refinement gives +7.5 eV and gain -0.157 %, and chi2_red is 3.34. Nets: Ca K-alpha 243 622 +- 535, O K-alpha 276 616 +- 633, C K-alpha 87 326 +- 483. Cu, Fe and Si were proposed and are fit only.Computed k (Bote-Salvat sigma, Krause omega, EPQ SDD epsilon), relative to Ca: k_O = 0.6142 and k_C = 0.7180. The model epsilon is 0.985 at O K-alpha and 0.999 at Ca K-alpha.
O/Ca, same k (0.6142) on every route
line_width=[5, 2])Parity: without absorption the two agree to 1e-4. With absorption at 100 nm Ca reads 32.657 (exSpy) against 32.667 at% (kit). exSpy stops its iteration at 0.5 % and the kit at 1e-7 %; this is the kit's named deviation.
Why CaCO3 cannot arbitrate a 10 % O effect
Absorption dominates. The HAADF tilt series (77 frames, -74 to +78 deg) shows one particle, about 450 nm along the tilt axis. Across the axis, the projected width fits an ellipse with semi-axes 143 x 200 nm (rms 5.7 nm). The mean beam chord is 223-263 nm. The O/Ca correction factor at 2.71 g/cm3 is:
The answer depends on the geometry by a factor of 2.
Beam damage. I split the 150 frames into 5 blocks with the same mask and the file axis. The net ratio O/Ca falls monotonically 1.176, 1.124, 1.105, 1.080, 1.042 (-11.4 %), and C/Ca falls from 0.364 to 0.339. This is the usual CO2 loss of calcite under the beam. The linear zero-dose intercept is 7.1 % above the pooled value. Any dose before the map (focusing, the tilt series) is not in that intercept.
Best estimate: O/Ca = 1.747 x (1.37-1.44) = 2.39-2.52 pooled, and 2.56-2.69 at zero dose, against 3.00. O reads 10-20 % low. To reach truth, k_O/k_Ca would need 0.685-0.771 (+11 to +26 %).
C is not usable. It reads C/Ca 0.86 without absorption (truth 1.0), but it carries the support film and contamination, it changes with dose, and C K-alpha absorption in calcite is larger still.
Against MgO: one layer for both?
MgO (comment above) needs k_Mg/k_O raised by 6.4 % (no absorption) to 14.4 % (slab, 100 nm, 3.58 g/cm3). CaCO3 needs k_O/k_Ca raised by 11.5-25.5 %. An extra layer of mass thickness m in front of the detector multiplies k_X/k_O by exp(-(mu_O - mu_X) m). Thickness each standard asks for (FFAST mu):
For the SpectroKit writer
No clear model fix emerges. Do not add a carbon or contamination layer to
DetectorLayers: it makes MgO worse. The cheap experiment that settles the ice question is a continuum fit on the Al wedge pool withFitPolicy.continuumEfficiencycarrying an ice term, which fits the O K edge step directly. Until then the 20 % flat sigma_k stands. The two standards disagree on O by more than any detector layer explains, which points at the specimens: CaCO3 damage and geometry, and possibly MgO surface hydroxide or carbonate (not measured here).Results stay
validation: "none".🤖 Generated with Claude Code
Paullo9 commentedon Oct 31, 2026
What is left on #15, and where each item is covered (1 Nov 2026)
quantifyMapsWithSigma).whenSignificantdocs/open-items.mditem 9 still said "detector exact, no sigma map"docs/parity.mdsigma rowparity.mdLineTailis opt-in. Measured once on the Al wedge (0.0158, 1.0 keV) but not switched on, and the proposer does not use it yetNo code PR for #15 tonight: what is left is either in review, needs a real-data fit (the ice experiment), or touches files that already have two open PRs. Results stay
validation: "none".🤖 Generated with Claude Code
Paullo9 commentedon Nov 1, 2026
Done on main:
quantifyWithSigma.quantifyMapsWithSigma).Generated by Claude Code