Skip to content

EDS parameter 2 (Counts/Acquisition Time) - #13

Open
claude[bot] wants to merge 4 commits into
mainfrom
claude/issue-1-20260901-1750
Open

claude[bot] wants to merge 4 commits into
mainfrom
claude/issue-1-20260901-1750

Conversation

@claude

@claude claude Bot commented Sep 1, 2026

Copy link
Copy Markdown

Working PR for the second round of EDS parameter work — follow-on to #11 ("EDS parameter #1").

Sets up the standards-based 5/10/15/20 kV beam-voltage series on AlSi10Mg that tests whether the CALIBER voltage recommendation (5 kV, criterion cap ≈7.5 kV, from PR #11 section 4) worked right:

  • docs/eds_voltage_series_plan.md — the hypothesis, seven falsifiable predictions (P1–P7), the acquisition protocol (per-voltage standards block, dead-time control, Duane–Hunt check), and pre-registered decision rules for what each outcome does to CALIBER
  • scripts/eds_voltage_predictions.py — independent recomputation of the criterion (xraydb Elam MACs, Kanaya–Okayama production depths, Philibert f(χ)); reproduces the PR EDS parameter 1 (Beam Energy) #11 numbers exactly and writes the prediction table (CSV) and figure

Session data from the four microscope runs goes under outputs/voltage-series/<E0>kV/ on this branch.

Addresses issue #1.

Generated with Claude Code

Recomputes the PR #11 voltage-selection criterion for AlSi10Mg (xraydb
MACs, Kanaya-Okayama production depths, Philibert f(chi)) and states the
falsifiable predictions for the standards-based 5/10/15/20 kV sessions.

Co-authored-by: Ronnie Guymon <244881888+ronnie-guymon@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude claude Bot mentioned this pull request Sep 1, 2026
@ronnie-guymon

Copy link
Copy Markdown
Member

@claude I have a couple ideas for a second and possibly third parameter. Right now I think the next two parameters are live time and beam current.

Live Time:
If we increase the live time, that will increase the x-ray count statistics, right? So instead of increasing voltage to get more counts, we just count more. I'm pretty sure the brehmsstralung noise does not increase at the same rate as the peaks, so this would help Mg (or any other light/trace element) pop out more. Would this also help with the Al Ka peak increasing Mg counts? If there lots more Mg X-rays and just a few more Al tail x-rays, then the Mg wt% will be more proportional and representative? Say we triple the live time, would that actually help? Like would it greatly increase the amount of actual Mg peak counts and have a smaller percentage of the peak be Al Ka tail x-rays? We would need to find the balance between collecting more samples (more expensive, greater live time) vs at what point will collecting more data actually be helpful.

Beam current:
Increasing the beam current is important, we would just need to find the balance between a low (but not too low) dead time and lowest possible carbon deposition.

Give me thoughts, as well as one or two papers (and I mean just one or two) for these subjects. Be concise, don't give me any extra info. Define important things if they have not been mentioned before.

@claude

claude Bot commented Sep 1, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 5m 51s —— View job


Live time

Live time = the time the detector is actually available to count (real clock time minus dead time); acquisitions are specified in it, so counts scale linearly with it.

  • Right on statistics: more live time → more counts, and relative counting error falls as 1/√N. And it composes with the 5 kV recommendation — the rate you lose at low kV gets bought back with time and current, not voltage. But one correction: bremsstrahlung under the Mg peak grows at exactly the same rate as the peak (both are proportional to delivered dose), so the peak-to-background ratio doesn't move. What improves is the peak against the background's statistical scatter (√B), which grows only as √t. Mg "pops out" in the sense of significance and detection limit — both improve as 1/√t — not as a cleaner ratio.
  • The same logic answers the Al Kα tail question, negatively: the tail is a fixed fraction of Al Kα counts, so tripling live time triples the Mg peak and the Al-tail-under-Mg alike. More actual Mg counts, yes; smaller tail percentage, no. The wt% bias from imperfect tail modeling is systematic and does not average away — only the random error shrinks. Concretely: July's 327.7 s map gave about 4,400 net Mg Kα counts → 1.5% counting error; tripling gives about 13,200 → 0.9%, which is exactly the plan's "target ≥ 10⁴ counts" line.
  • The balance has a clean form: benefit scales as √t, cost as t (halving the error costs 4× the time). Stop when the Poisson error is small next to the systematic floor (standards, matrix correction, tail model — realistically 1–2% relative, worse for Mg beside Al). Operational test: when spot-to-spot scatter exceeds the fit-reported Poisson σ, more counting is pure cost. "σ_stat ≤ ⅓ σ_syst" is a pre-registrable CALIBER rule.

Beam current

  • Current and live time pull the same statistics lever: counts track dose (= current × live time), so for a target count total the dose is fixed and current only sets how fast it's delivered (real time = live time / (1 − dead-time fraction)). "Low but not too low" is the right instinct: too low wastes available throughput; too high causes pile-up — two photons arriving within the pulse processor's resolving time, recorded as one event at the summed energy — which in this Al-rich matrix means an Al Kα + Al Kα sum peak at 2.97 keV plus distorted background (the suspected culprit behind the July ×1.5 ratio in P7, taken at 49% dead time). The plan's 25–30% band is the standard compromise, and P5 already logs the current that achieves it per kV.
  • The trap to avoid: at high current the tempting way to hold dead time down is a shorter process time, which costs energy resolution and broadens Al Kα toward Mg Kα — they sit only 233 eV apart — worsening the exact overlap this effort fights. So fix process time at the resolution-friendly setting (the plan holds it constant) and let current be "whatever gives 25–30% dead time."
  • Carbon deposition: the beam cracks adsorbed hydrocarbons into a carbon film that thickens with accumulated dose per spot. It hits low-kV work hardest (at 5 kV the C Kα sampling depth is 0.34 µm, so nanometers of film are visible) and shows up as a growing C Kα plus drifting soft-line intensities within one acquisition. Since dose for a target count is fixed, the levers are cleanliness and geometry more than current: plasma clean / cold trap if available, fresh spot per acquisition — and measure the budget directly with consecutive short spectra on one spot, watching the C Kα slope and Mg/Al drift. The dose-per-spot that keeps that drift below the counting error is the third pre-registrable number.

Two papers

  1. Ziebold, "Precision and sensitivity in electron microprobe analysis," Anal. Chem. 39, 858–861 (1967) — four pages containing the precision-vs-counting-time and detection-limit math above, including the diminishing-returns trade.
  2. Newbury & Ritchie, "Performing elemental microanalysis with high accuracy and high precision by SEM/SDD-EDS," J. Mater. Sci. 50, 493–518 (2015) — modern practice for exactly these questions: dose, dead time, count rate, and what high-count spectra do (and don't do) for accuracy, minor elements and peak overlaps included.

· Branch

@ronnie-guymon

ronnie-guymon commented Sep 2, 2026 •

Copy link
Copy Markdown
Member

I think I will stick with live time/spectra counts as the second parameter. Mike's comments on this:#1 (comment) and claude's response #11 (comment).

I think the big things to optimize are:

  • Getting enough counts that the trace elements are 3 stds above the background (what Mike said is needed so to really get an accurate reading) or whatever amount of counts we want.
  • Not counting excessively and wasting microscope time
  • Minimizing carbon deposition (shouldn't be too bad with a plasma cleaner + bake-out oven).

I'll look through all the cons that claude gave me and see if they are going to be big turn-offs.

Also compare the live time vs counts for the two EDS sessions to see how big of a difference there was.

@ronnie-guymon

Copy link
Copy Markdown
Member

Going off of #11 (comment) and other reasoning, there we will probably just take multiple, shorter scans from different areas close to one another and compile them together. This will help minimize carbon deposition, especially at lower voltages.

@ronnie-guymon

ronnie-guymon commented Sep 4, 2026 •

Copy link
Copy Markdown
Member

In looking at the counts from our two EDS sessions:
Apr: 4,435,734 counts, live time = 460.8 seconds, amp time = 1.92 μs
Aug: 652,397 counts, live time = 327.7 seconds, amp time = 7.68 μs

@ronnie-guymon ronnie-guymon changed the title EDS parameter #2 EDS parameter #2 (Counts/Acquisition Time) Sep 7, 2026
@ronnie-guymon

Copy link
Copy Markdown
Member

From the SEM class textbook, I learned that for standards-based SEM:
"The use of stable, high integrated count spectra (>1 million total counts from threshold to E0) now possible with the silicon drift detector EDS (SDD-EDS), enables this level of accuracy to be achieved for major and minor constituents even when severe peak interference occurs and there is also a large concentration ratio, for example, a major constituent interfering with a minor constituent. Trace constituents that do not suffer severe interference can be measured to limits of detection as low as C = 0.0002 (200 parts per million) with spectra containing >10 million counts. For interference situations, much higher count spectra (>100 million counts) are required."

I'm not sure exactly what kind of interference it is talking about, maybe interference due to the ionized gas used during VPSEM? either way, neither of our EDS sessions have produced over 10 million counts, the highest one was ~4.5 mil. This is great to know for CALIBER, and would be a great parameter to keep in mind when collecting our samples.

@claude help me understand from #13 (comment) what the amp time does and how it affects the total counts. Help me understand why even though there was only a 130 sec increase of live time there was an almost 4 million increase of counts. I can talk with Mike about this to refresh myself too, but what are the easiest ways in Team to directly choose the acquisition time and/or number of counts?

@claude

claude Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 15m 55s —— View job


Amp time is the per-photon measurement window — it never multiplies counts. The 4M-count gap is a count-rate story, and the rate came from the kV: your Apr numbers are the 15 kV map, your Aug numbers the 5 kV map.

  • Read plan doc + referenced comments
  • Check committed session data for kV / dead-time metadata (PR EDS parameter 1 (Beam Energy) #11 branch)
  • Explain amp time and how it shapes total counts
  • Work the Apr-vs-Aug arithmetic
  • Clarify the textbook's "interference" + count thresholds
  • TEAM: how to preset acquisition time / total counts

1. What amp time does

Amp time (EDAX's name for process/shaping time) is how long the pulse processor integrates each individual photon's charge pulse to measure its energy — the ladder in TEAM is 0.96 / 1.92 / 3.84 / 7.68 μs.

  • Longer = sharper. More averaging per photon → less electronic noise → narrower peaks. 7.68 μs is EDAX's best-resolution setting (your 5 kV file recorded 127.9 eV FWHM at Mn Kα). That width is the lifeline of the Mg Kα fit, sitting 233 eV below Al Kα.
  • Shorter = faster. While integrating one photon the processor can't accept the next, and the busy period scales with amp time — so amp time caps how many photons per second the electronics can digest. EDAX's own worked example: at 30,000 X-rays/s arriving, the longest amp time passes about 18 kcps while one 8× shorter passes 28 kcps, at under 4 eV resolution cost on an SDD (EDAX tips sheet).
  • What it does not do: add counts. With a live-time-based acquisition, the live clock pauses whenever the processor is busy, so stored counts = (rate of X-rays arriving) × (live time) at any amp time. Amp time only sets how much beam current you can afford before dead time and pile-up bite, and how much wall-clock a given live time costs (real time = live time ÷ (1 − dead-time fraction)).

2. Why +130 s gave +3.8M counts: it didn't — the rate did

Apr map Aug map
beam voltage 15 kV 5 kV
live time 460.8 s 327.7 s
total counts 4,435,734 652,397
counts per live second 9,626 1,991
amp time 1.92 μs 7.68 μs

Counts = rate × live time. The live times differ 1.41×, the rates 4.8×; 4.8 × 1.41 = the 6.8× count ratio exactly. At the Aug rate, Apr's extra 133 s would have added only ≈265,000 counts — everything else came from the rate.

And the rate came from the beam voltage. The kV identification is from the PR #11 dead-time discussion ("Live time was 460.8 s (15 kV) vs 327.7 s (5 kV)") plus the committed 5 kV spectrum (eds_kfactor_quant.py: 5 kV, 327.7 s). At 15 kV the overvoltage on Al K is 9.6 versus 3.2 at 5 kV, and the continuum extends to 15 keV instead of 5 — together roughly 5–10× the total count rate at equal current. The observed 4.8× needs no current difference at all. The amp times are passengers, not causes: 1.92 μs was picked because the 15 kV beam came in hot, 7.68 μs because the 5 kV beam is photon-starved and resolution was free to maximize.

A side finding your numbers force: the ~49% / ~22% dead times inferred in PR #11 from remembered wall-clock can't be processor dead time. For the processor to be 49% busy at 1.92 μs amp time it would have to be swallowing >100 kcps — tens of millions of stored counts in 460.8 s, not 4.4M; likewise 22% at 7.68 μs implies ≈5M counts, not 652k. Both runs actually had the processor ≈97% idle; the wall-clock excess was mapping overhead (frames, flyback, per-pixel dwell bookkeeping). That weakens the pile-up explanation behind P7/P3 in the plan — the ×1.52 Mg/Al anomaly may survive at controlled dead time, which the plan already treats as a legitimate outcome. The REALTIME field in the exported files (or TEAM's DT% readout) settles it — worth pulling when you talk to Mike.

3. The textbook's "interference" — peak overlap, not VPSEM gas

It means spectral peak interference: two elements' lines closer than the detector can separate, so their peaks share counts (VPSEM gas causes beam-skirt scattering — a spatial problem, not a spectral one). Your alloy is literally the textbook's scenario: major Al Kα (1.487 keV) laying its tail across minor Mg Kα (1.254 keV) at a ~100–200:1 concentration ratio. So the >1M-count tier is where your Mg quant lives; >10M is for clean 200-ppm trace work (future Fe/Mn/Cu at spec limits); >100M is trace under someone's peak — not needed for Mg at 0.5–0.9 wt%.

Unit conversion to the plan's language: the 5 kV spectrum carried ≈4,400 net Mg Kα in 652k total (0.67%), so the plan's ≥10⁴ net-Mg target ⟺ ≈1.5M total counts at 5 kV — the textbook threshold and the plan's line are the same demand. One caution: Apr's 4.4M does not make it the better spectrum; counts only buy accuracy when acquired inside the criterion (15 kV fails the Si absorption test that motivated this whole series).

4. Choosing time or counts in TEAM

  • Spectrum mode: hover Collect Spectrum → set Amp Time (and EV/Chan), then "Limit By" + a value is the stop condition — Live plus a seconds entry is the standard recipe (UF TEAM SOP, §4). The same EDAX engine also offers clock time and ROI counts stops — "select clock time, live time or ROI counts (counts within the enabled ROIs)… once the ROI's have been created" (Genesis manual, §5.2) — check which of these your TEAM build lists in the Limit By dropdown. If the counts option is there, an ROI over Mg Kα with a 10⁴ stop automates the plan's target directly.
  • Map mode has no seconds box: duration = pixels × dwell × frames via Collect Map → Resolution / Quality. That's why your live times look odd — 327.68 s is frame arithmetic (e.g. 256×200 px × 200 μs × 32 frames), not a typed preset.
  • No counts preset visible? Use the status bar: live time needed = target counts ÷ the CPS readout, at the DT% you've dialed in.
  • Getting the textbook counts affordably at 5 kV: the Aug run used a tenth of the detector's appetite even at 7.68 μs. Raising current until DT reads the plan's 25–30% band (P5 logs it) is ≈10× the rate — ≥10⁴ Mg counts in ≈75 s live instead of ≈12 min, 10⁷ total in ≈9 min instead of ≈84. Same counts = same dose = same carbon budget; you just stop paying for idle processor time.

One bookkeeping note: the plan doc calls both runs "July"; your comment dates them Apr (15 kV) and Aug (5 kV). If Apr/Aug is right I'll fix the labels in the plan (and add the amp-time column to §4's held-fixed list with 7.68 μs as the freeze value) — say the word.

Sources: EDAX dead-time tips · UF EDAX TEAM SOP · EDAX Genesis Spectrum manual · PR #11 kV/dead-time comment

--- · Branch

@ronnie-guymon

Copy link
Copy Markdown
Member

@claude from

  • so amp time caps how many photons per second the electronics can digest. EDAX's own worked example: at 30,000 X-rays/s arriving, the longest amp time passes about 18 kcps while one 8× shorter passes 28 kcps, at under 4 eV resolution cost on an SDD

It makes it seem like with only a 4eV cost of resolution between the slowest and fastest amp time, it doesn't cause that big of a difference. Maybe choosing the amp time can be another parameter. Help me find out if differing amp time is worth it, how much it would actually affect anything. I think it would be worth at least testing the 0.96 us vs 7.68 us to see if the slimming of the Al and Mg peak helps noticeably.

@claude

claude Bot commented Sep 9, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 8m 28s —— View job


The A/B is worth one 10–15 min appendix block, but flip its logic first: 7.68 µs is already the slim end — 0.96 µs broadens Mg Kα by 10–25% — and peak width was never what pushes Al counts under Mg anyway. Amp time's real lever is a ≈6× count-rate ceiling, which only matters once beam current rises. It shouldn't be a standalone CALIBER parameter; it's the partner knob of probe current.

  • Read plan doc + check repo for committed spectrum metadata
  • Verify the EDAX amp-time numbers behind the "4 eV" quote (fetched the sheet — Figure 1 has exact values)
  • Propagate the resolution change from Mn Kα (spec energy) to Mg/Al Kα (working energies)
  • Quantify what width actually does to the Al→Mg interference and detection limit
  • Verdict + what the 0.96 vs 7.68 µs test should measure

1. What "under 4 eV" really costs at Mg Kα

First a direction check: longer amp time = slimmer peaks. The Aug 5 kV run already sat at 7.68 µs, the slimmest setting. So the A/B can't slim anything relative to today — it measures what the fast setting costs (width, shape) and buys (rate ceiling).

The EDAX sheet's Figure 1 is measured at exactly your pair: Mn Kα resolution 124.1 eV at 7.68 µs → 128.0 eV at 0.96 µs, so the "under 4 eV" is really 3.9 eV — at 5.9 keV. It doesn't transfer to 1.25 keV, because a peak's width has two parts added in quadrature: the Fano width (irreducible statistics of electron–hole pair creation in the silicon — shrinks with photon energy) and electronic noise (a constant number of eV at every energy — this is what amp time controls). At Mn Kα the Fano part is about 120 eV, so extra noise hides under it; at Mg Kα the Fano part is only 55 eV, so the same noise increase shows up about 3× larger in relative terms. Propagating with the standard Fiori–Newbury scaling (it's in your textbook's EDS chapter), anchored to your file's measured 127.9 eV:

line 7.68 µs 0.96 µs, EDAX's Δ3.9 eV 0.96 µs, conservative Δ10 eV
Mn Kα 5.899 keV 127.9 eV 131.8 (+3.1%) 137.9 (+7.8%)
Mg Kα 1.254 keV 68.9 eV 75.9 (+10%) 86.0 (+25%)
Al Kα 1.487 keV 73.0 eV 79.6 (+9%) 89.4 (+22%)
C Kα 0.277 keV 48.0 eV 57.6 (+20%) 70.4 (+47%)

So "only 4 eV" is true at the spec energy and misleading at yours: Mg broadens 7–17 eV on a 69 eV peak, and the softest lines get hit hardest (note C Kα — your carbon-deposition monitor — at +20 to +47%).

2. Width is not the Al→Mg lever

Mg Kα and Al Kα sit 233 eV apart = 3.2 Al-FWHM at 7.68 µs, still 2.9 at 0.96 µs. The Gaussian bodies barely touch at either setting: the fraction of Al Kα's Gaussian falling in the Mg window is 6×10⁻⁸ at 7.68 µs — 0.04 counts if all 652k Aug counts had been Al Kα — and about 1 count at 0.96 µs. The thousands of real counts under Mg are continuum plus the Al low-energy tail (events from incomplete charge collection, recorded below their true energy) — a peak-shape property that resolution doesn't govern. So "slimming to make Mg pop out" has no lever to pull; what width does touch is per-channel peak-to-background, and that only moves the Mg detection limit and precision as √FWHM: +5% (EDAX's Δ) to +12% (conservative) worse at 0.96 µs. Real but small.

The shape channel is the one that could matter: short amp times risk ballistic deficit — the pulse is clipped before the detector finishes collecting the charge, shifting events low and fattening the tail. Equal-or-worse tails at 0.96 µs is the expectation, never better. And the Mg k-ratio does not cancel the Al tail (your MgO standard contains no Al), so a tail change propagates straight into Mg wt%. That — not width — is the physically live question the A/B answers.

3. What amp time actually trades: the rate ceiling

EDAX's own status bars (same sheet): at ≈30 kcps input, 7.68 µs stores 18.2 kcps at 39.7% dead time; 0.96 µs stores 27.5 kcps at 8.4%. That calibrates the processor's per-event cost at 16.8 µs vs 2.9 µs — so at the plan's matched 25–30% DT band, the ceiling is about 14 kcps stored at 7.68 µs vs 81 kcps at 0.96 µs (5.7×): the textbook 10⁷-count spectrum in ≈2 min instead of ≈12; the 1.5M-count spectrum (≈10⁴ net Mg at 5 kV) in ≈19 s instead of ≈106 s. But this only exists once probe current rises to feed it — at the Aug current both settings idle >96%, and amp time changes nothing but resolution, in the wrong direction. (Middle ground: 1.92 µs — where your Apr map already ran — costs just +2 eV at Mg for 3.5× the ceiling.)

4. Verdict and the test to run

Not a standalone parameter. Amp time and probe current jointly set (dead time, resolution); alone, amp time has no benefit axis. The CALIBER-shaped rule: use the longest amp time whose rate ceiling reaches the count target within the session's time budget at ≤30% DT; step down only when it can't. That rule needs two measured detector numbers — ΔFWHM(Mg) and tail behavior — which is exactly what the cheap A/B provides. Pre-registrable predictions:

  • A1 (width): Mg Kα FWHM 69 → 76 eV if EDAX's 3.9 eV transfer holds (86 eV falsifies "resolution stability" for your detector).
  • A2 (invariance): same dose on adjacent fresh spots → net Mg counts and Mg/Al ratio unchanged within counting statistics (§1–2 say width can't move them).
  • A3 (tail): Al tail amplitude in the Mg window flat-or-worse at 0.96 µs; an improvement would falsify the tail model.
  • A4 (ceiling): current raised to 25–30% DT at each setting → stored-rate ratio ≈5.7×.

Run it as an appendix block in the 5 kV session, not inside the voltage series — §4 of the plan rightly freezes amp time so kV stays the only moving part, and standards bind to amp time too (switching mid-series would force duplicate standards blocks). One free check you can do today, no microscope: fit Al Kα FWHM in the existing Apr (1.92 µs) vs Aug (7.68 µs) exports — beam kV doesn't change detector resolution and both ran nearly idle, so the prediction is 75 vs 73 eV. Last caveat: whatever wins for throughput, keep 7.68 µs for the carbon-budget spectra — C Kα is where fast amp times bite hardest.

No repo changes made — analysis only (numbers recomputed with the Fiori–Newbury FWHM scaling and the paralyzable dead-time model; EDAX figures verified from the tips sheet). Happy to append the A1–A4 block to the plan doc if you want it pre-registered.

--- · Branch

@ronnie-guymon

Copy link
Copy Markdown
Member

It looks like by going through Spectrum Only → Collect Spectrum it will be possible to collect until a certain amount of counts, maybe 1.1 million as the limit. I will email Mike to confirm this

@ronnie-guymon ronnie-guymon changed the title EDS parameter #2 (Counts/Acquisition Time) EDS parameter 2 (Counts/Acquisition Time) Sep 9, 2026
@claude claude Bot mentioned this pull request Sep 9, 2026
@ronnie-guymon

Copy link
Copy Markdown
Member

After talking with Paul, Mike, and Felipe today, they agreed that having a baseline of 1 million counts is a good idea. Xavier and I are planning on collecting spectra starting with 1 million, the increasing by factors of 2 and see at where the point of diminishing returns is. I emailed Dr. Rappleye so we can learn how to do ICP-MS and get a standard to compare our spectra against to determine how much accuracy increases with increased counts.

@ronnie-guymon

ronnie-guymon commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

@XZaitzeff at our lab tomorrow, since we still need to finish polishing the new specimen, we can just use the old sample and try to get the first counts done with times of 1,2 and 4 million. We can see generally if there is in an improvement when compared to a standard, and especially how much carbon deposition will increase as acquisition time increases. Start with 5 kV

@ronnie-guymon

ronnie-guymon commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

I started with beam current of 0.1nA and energy of 5kV, will increase amperage once I have found the spot I want to analyze.
Dead time: 29-30
Nominal Current: 3.2 nA
Current from Faraday Cup: 3.30-3.31 nA
Input CPS: 22000
First sample: 770,000 (Live time = 50s)
Second: 1,540,000 (Live time = 100s)
Third: 3,080,000 (Live time = 200s)

If you pause the image in the ETD detector, it looks like electrons stop and specimen current goes to 0 pA, reduces carbon deposition

Ultrasonicate in Micro or something like that that will wash off cleanly, then wash and ultrasonicate with distilled water, then wash with IPA and ultrasonicate with IPA, then air dry with something to cover it. HANDLE ONLY WITH GLOVED HANDS THAT HAVE NOT TOUCHED ANYTHING ELSE! Then only after that try the bakeout over or plasma cleaner,
Look if DTSA II has the total counts so I don’t have to look at the .csv file
To estimate counts, take desired counts/(input cps x (1-dead time))

I didn't realize until the very end of my time that by going into the advanced settings on collect spectra, you can choose a custom sampling time. I only saw the available collection times for 50s, 100s, 200s etc. it's good to know for next time you can choose the exact number of seconds for acquisition timeimage

@ronnie-guymon

Copy link
Copy Markdown
Member

@claude reading the above comment, help find a good soap we can ultrasonicate the sample in as the first cleaning step. Make sure it is a soap that will leave no residue, and has no perfumes or dyes. Mike suggested using on that I think is called Micro, but I also could have remembered that wrong.

@claude

claude Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 5m 45s —— View job


Mike's name was right — it's Micro-90 — but don't use it on this sample: the manufacturer's own MSDS lists "may etch aluminum … and its alloys" as a known incompatibility. The bottle that checks every box for polished AlSi10Mg is Alconox Luminox: pH 7.0, spec-sheet line "Fragrance and Dye Content: 0%", free-rinsing, explicitly rated for aluminum.

  • Confirm what product "Micro" refers to (manufacturer docs)
  • Verify residue-free / no-perfume / no-dye claims from primary sources
  • Check compatibility with a polished aluminum alloy (AlSi10Mg)
  • Post recommendation + usage details

1. "Micro" = Micro-90 (International Products Corporation)

You remembered correctly — Micro-90 is the standard critical-cleaning concentrate in EM and metallography labs: used at 1–2% in water, free-rinsing (surfactants formulated to rinse away completely rather than adsorb to the surface — the "no residue" property you asked for), no added dyes, and its faint ammonia odor is the chemistry, not a perfume. The catch is in its own MSDS: §10 Incompatibilities — "May etch aluminum, zinc, copper, and its alloys" — and §7 — "Do not store in contact with aluminum, zinc, copper or their alloys." It's alkaline (pH ≈ 9.5 neat), aluminum is attacked by alkali, and ultrasonic cavitation accelerates the attack. On this sample that's not cosmetic: polishing has just stripped the passive oxide (Alconox's aluminum technote recommends a neutral cleaner in exactly that state), and at 5 kV the entire Mg Kα signal comes from the top ≈ 0.3 µm — any selective attack on the Al matrix or Mg lands directly in the quantity CALIBER is trying to measure. IPC's gentler product (Micro Green Clean) is also pH 9.5 with the same avoid-extended-aluminum-contact caution in its SDS, so there's no in-family fix.

2. Buy instead: Alconox Luminox

Every one of your requirements is an explicit line in the manufacturer's technical bulletin:

  • pH 7.0 (as-is) — non-corrosive; "corrosion inhibited formulation recommended for … aluminum, copper, zinc, and other soft metals"; the first entry under Used to clean is "aluminum and soft metal surfaces"
  • "Fragrance and Dye Content: 0%", plus "contains no enzymes, optical brighteners, perfumes, allergenic fragrances, or preservative agents"
  • "Free rinsing to eliminate interfering residues" — and low-foaming, which ultrasonic baths like (foam suppresses cavitation)
  • Directions drop into your written protocol unchanged: 1–2% in warm DI water for ultrasonic tanks (product page; the bulletin allows 3–5% for dirty parts), a few minutes, then "RINSE THOROUGHLY … final rinsing in distilled, deionized or purified water" → your DI ultrasonic step → IPA ultrasonic step → dry, then bake-out/plasma clean.

Smallest size is 1 gal (makes 20–50 gal of working solution); stocked by Fisher, cat. 16000141, VWR, and the usual suppliers.

3. Two footnotes

  • If the lab already owns Micro-90 and Mike prefers it: brief exposures usually pass without visible dulling — keep it 1–2%, room temperature, ≤ 5 min, go straight into the DI rinse, and never let it dry on the specimen. But since the surface itself is the measurement here, the neutral-pH bottle is the same money and zero risk.
  • Don't substitute household dish soap: its dyes, perfumes, and skin conditioners are exactly the organic film that cracks into carbon under the beam.

· Branch

@ronnie-guymon

Copy link
Copy Markdown
Member

@claude check the shelf life of luminox, as well as if there is anywhere that sells it cheaper than $288/gallon. Or see if there is a product comparable to Luminox just a different brand for a better price

@claude

claude Bot commented Sep 18, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 8m 49s —— View job


Shelf life: 42 months sealed — and your $288 was almost certainly for 4 gallons, not one. Single gallons run $87.50, and no other brand actually beats Luminox once you price the diluted bath.

  • Verify Luminox shelf life from Alconox's own documentation
  • Check what the $288 Fisher listing actually contains (single gallon vs case)
  • Survey real per-gallon prices across lab suppliers
  • Find comparable neutral-pH, fragrance/dye-free alternatives from other brands with prices
  • Post findings

1. Shelf life

  • Concentrate: 42 months from the end of the month of manufacture — stated directly in the Physical Data table of the current Luminox Technical Bulletin (Alconox extended most products from 24 to 42 months in 2023). The expiration date is inkjet-printed next to the lot number on liquid bottles, or comes on the lot's certificate of analysis; current lot formats encode the date as MM-DD-YY-## (how to read it).
  • Diluted bath: 1–2 weeks. Alconox recommends using a mixed solution within 1–2 weeks (water lets microbes and hydrolysis degrade it; the concentrate is too dry for either). Practical reading for the cleaning protocol: mix the 1–2% bath fresh each polishing/cleaning session.

2. The $288 decoded, and where to buy cheaper

Alconox's smallest Luminox package is the case of 4 × 1 gal, catalog No. 1901 (the bulletin's sizes table — there is no single-gallon or quart SKU from the factory; distributors split cases as "1901-1"). Fisher's 16000141 lists supplier No. 1901 and "4 Bottles/Case" in its description, and $288 sits right among the other case-of-4 prices below while being 3.3× every street price for a single gallon. So that $288 is almost certainly $72/gal × 4 — worth a one-second glance at the listing's quantity field ("4/Case") to confirm. Prices verified today (Sep 18, 2026):

Seller Package Price Per gallon
Fisher 16000141 case of 4 × 1 gal $288 (your quote) $72
WorldwideJanitor case of 4 × 1 gal $329.95 $82
Thermal Scientific 1 gal, in stock $87.50 $87.50
PRM Filtration 1 gal (stock unclear) $115.00 $115
SPI Supplies (EM supplier) 1 gal / case of 4 $147.20 / $423.94 $147 / $106

The shelf life settles which to buy: the bulletin says 1 gal makes 20–50 gal of solution, and at a 1–2 L ultrasonic beaker mixed fresh per session, one gallon outlasts the 42-month clock — the Fisher case saves $15/gal and then expires three bottles unused. Buy the single gallon ($87.50).

Free option first: Alconox runs a trial-sample program — the request form sends a size that "makes approximately 2–6 gallons of detergent solution" to qualified commercial/industrial customers at their staff's discretion (you describe the application and they pick/approve the detergent). 2–6 gal of working solution is many cleaning sessions' worth of the voltage series before spending anything.

3. Comparable other-brand products — cheaper bottles, not cheaper baths

The two credible neutral-pH competitors have lower sticker prices, but their own recommended ultrasonic dilutions undo it:

Product pH Ultrasonic dilution Bottle price Cost per liter of bath
Luminox 7.0 1–2% $87.50 / gal $0.23–0.46
Elma Lab Clean N10 neutral 2% $95.00 / 2.5 L $0.76
Decon Neutrad near-neutral 5% $86.87 / 5 L $0.87
  • Decon Neutrad is the closest like-for-like (near-neutral, phosphate- and chlorine-free, "rinses totally" per its tech sheet; 5 L at Weber Scientific is the cheapest bottle here) — but the sheet specifies a 5% solution for ultrasonic tanks, about 2–3× Luminox per bath, and it makes neither Luminox's explicit "Fragrance and Dye Content: 0%" claim nor its aluminum corrosion-inhibition claim.
  • Elma Lab Clean N10 is aluminum/light-metal-rated and residue-free, but $38 per liter of concentrate, and Tovatech flags "check magnesium alloys before application" (AlSi10Mg is an aluminum alloy with under 0.5% Mg, not a Mg alloy — but it signals thinner soft-metal margin than Luminox's inhibited formula).

Bottom line: 42 months sealed, 1–2 weeks diluted; the $288 was four gallons in disguise; one $87.50 gallon from Thermal Scientific covers the project past its own expiration date; and the cheapest path of all is the free Alconox trial sample. No repo changes made — research only.

--- · Branch

@ronnie-guymon

Copy link
Copy Markdown
Member

@claude good catch, that would be a stockpile that would last for a while. @sgbaird would that ok if we bought the 4-pack for $288? Since it has a shelf life of 42 months, if the plan is to be constantly creating samples of novel alloys, we would probably use all of it up before it expired.

@claude

claude Bot commented Sep 18, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 4m 34s —— View job


Break-even on the 4-pack is 3.3 gallons consumed before expiry — which translates to roughly a liter-scale Luminox bath every working day from now until 2030. If the novel-alloy pipeline really runs at sample-a-day cadence, the use-it-up logic holds and the case saves $62; if cadence stays anywhere near today's, about $200 of it expires unused.

  • Re-read the price/shelf-life findings for purchase context
  • Work the consumption math: what cadence actually empties 4 gallons in 42 months
  • Post the decision numbers

What "using it all up" requires

Concentrate use tracks baths mixed, not samples made — several mounts share one beaker, and a mixed bath keeps 1–2 weeks, so batching samples is nearly free. At the ultrasonic-strength 2% dilution (1 gal = 3,785 mL of concentrate):

bath size baths per gallon pace that empties the 4-pack in 42 months (≈910 workdays)
250 mL beaker (1–2 mounts) ≈760 3.3 baths per workday
1 L beaker (batch of mounts) ≈190 0.8 per workday — essentially daily
2 L tank fill ≈95 one per 2.4 workdays

At the label's 1% low end, everything lasts twice as long. So "we'd use it up before it expired" is true exactly in the world where the lab runs a 1 L bath — or a multi-stage 250 mL clean — essentially every working day, sustained for the full 3.5 years. The cadence so far (a cleaning session every few weeks) stays inside a single gallon all the way to expiry.

The asymmetry behind the approval

Single gallons are a stocked catalog item at $87.50 (Thermal Scientific), so Luminox isn't scarce — the only thing the case buys is the $15.50/gal discount:

  • 4-pack and the throughput plan materializes: save $62 ($288 vs $350 for four singles)
  • 4-pack and cadence stays near today's: about $200.50 stranded ($288 spent where $87.50 covered the same 42 months)
  • one gallon now, restock when the ramp is real: worst case pays the $62 premium, and only in the scenario where the lab is already running daily

So the $288 is really a wager on the high-throughput roadmap being live well before 2030 — the detergent economics are a rounding error next to that call, and either choice is defensible if the roadmap is believed.

Two footnotes

  1. The 42 months starts at manufacture, not delivery. The expiry is inkjet-printed beside the lot number — check it at receiving, since distributor shelf stock can arrive with a year already burned (which pulls "March 2030" earlier and tightens the daily-bath requirement above).
  2. Whichever way the purchase goes, the free Alconox trial sample (2–6 gallons of working solution) covers the near-term voltage-series sessions while the order routes.

No repo changes — purchasing math only.

--- · Branch

@ronnie-guymon

Copy link
Copy Markdown
Member

Just from looking at the spectra from the 3 different acquisition times, there is definitely a difference between the noticeability of the Mg peaks. It doesn't seem like we have yet hit the point of diminishing returns yet between the count time and the greater noticeability of the Mg peak, but once we have the standard to do quant analysis it will be easier to tell for certain. Also note the high levels of O and C

image

@ronnie-guymon

Copy link
Copy Markdown
Member

Beam current faraday cup measurement is 3.29 nA for data collected on 9/23/2026

@ronnie-guymon

Copy link
Copy Markdown
Member

@claude what is the best way to determine, other than visually, if the Mg count is becoming more pronounced than the noise? Right now, just by looking at it, it seems like we have not yet reached the point of diminishing returns, but I want to be able to numerically determine the Mg signal-to-noise ratio.

image

@claude

claude Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Author

Claude finished @ronnie-guymon's task in 55m 3s —— View job


Fit the Mg Kα peak and track SNR = net Mg counts ÷ their Poisson σ. SNR rises as √(total counts) and never bends, so the curve itself won't show you "diminishing returns". You find that point by comparing the counting σ with (a) the scatter between repeat spectra and (b) how far Mg moves when you change the background model. In your screenshot, Mg is already ≈11–30σ above background in all four spectra, and its peak/background ratio stays at 0.22–0.25. The peak "popping out" more is the noise shrinking, not the peak growing.

  • Digitized the four curves in your DTSA-II screenshot (5 kV; 770k / 1.54M / 3.08M / ≈5.6M counts)
  • Computed the metrics on the real Aug 5 kV export (the only real spectrum in the repo)
  • Wrote and tested an SNR script (real spectrum + 20 simulated Poisson spectra at your count levels)
  • Checked what DTSA-II can report by itself (installed it here and ran the Script-tab code)
  • Found and corrected an earlier overestimate (the "≈4,400 net Mg counts")

1. The numbers to use instead of eyeballing

  • P = net Mg Kα counts above background. B = background counts under the peak (continuum + Al Kα tail), summed over a 1.2-FWHM window. That window width gives the best P/√B for a Gaussian peak.
  • σ_P ≈ √(P + 2B) is the Poisson noise on P. It's 2B because the background is itself estimated from noisy counts. A fit gives σ_P directly.
  • SNR = P/σ_P is how many noise units tall the Mg peak is. 1/SNR is the counting precision on Mg (SNR 20 = ±5%).
  • Z = P/√(2B) is Mike's "3 std above background". It's the Currie check already in PR #11's script. Z ≥ 3 means detected.
  • P/B doesn't change with counting time, because peak and background both grow with dose. What your eye is judging is peak height ÷ per-channel fuzz = (P/B) × √(counts per channel). For your four curves that's ≈5, 10, 13, 18. It keeps rising as √N, so the spectrum never looks "done".

2. Your four spectra

spectrum total counts Mg peak/bkg Mg SNR ≈ Z counting precision on Mg
770k_counts_1 0.77M 0.24 11 ±9%
1_1 1.54M 0.25 16 ±6.4%
3_1 3.08M 0.22 22 ±4.5%
380sec_1 ≈5.6M 0.23 30 ±3.4%
  • Where these numbers come from: peak/bkg is read from the screenshot. SNR is scaled from the real Aug 5 kV spectrum, which has the same peak/bkg (0.22) and gives Mg = 1,602 ± 156 at 652k counts. Treat the SNR values as ±10% until the script runs on your exports. The ≈5.6M for 380sec_1 comes from its continuum level (1.81× 3_1).
  • The 3σ test isn't the limit for Mg: Mg passed Z = 3 at ≈55k total counts (≈4 s live at your 15.4 kcps). Precision is what limits you.
  • Counts needed for a target precision: N ≈ (SNR/12.6)² million.
    • ±5% ≈ 2.5M counts (≈3 min live)
    • ±3% ≈ 7M (≈8 min)
    • ±2% ≈ 16M (≈17 min)
    • ±1% ≈ 63M (≈68 min)

3. Finding the diminishing-returns point numerically

Every doubling of time buys ×1.41 SNR, at every count level. The useful place to stop is where counting σ is no longer the largest error. Three numbers tell you where that is:

  1. Replicate scatter. This fits your multiple-short-scans plan. At one count level, take n ≥ 5 scans on adjacent fresh areas and fit each one. Then compare the scatter of Mg/N between scans (s) with the counting σ the fit reports.
    • s/σ ≈ 1: you're still counting-limited, so longer acquisitions pay off.
    • s/σ > 1.54 (n = 5, 95% χ² test): there is real extra scatter, σ_x = √(s² − σ²). Likely causes are Mg heterogeneity at the 5 kV sampling scale, the surface film, carbon, or drift. Microanalysis calls s/σ the "homogeneity index"; Harries 2017 explains why the usual H < 3 cutoff is too lenient.
    • Stop at N* = N × (3σ/σ_x)². Past that, doubling counts improves the total error by < 3%, so spend the time on more areas instead. The honest uncertainty of the combined result is s/√n.
    • Example: five 100 s scans (σ = 6.4%) that scatter by 12% give σ_x = 10% and N* ≈ 5.5M, about your 380 s level.
  2. Background-model spread. Rerun the script with DEG = 3 (cubic background instead of quadratic).
    • On the Aug spectrum: 1,602 ± 156 (quadratic) vs 2,177 ± 227 (cubic; χ² 1.29 → 1.11). Other reasonable fit ranges and orders span 1,380–2,610.
    • That ±30% spread is already ≈3× the counting σ at 652k counts. So for accuracy, the Al Kα tail under Mg is the limit right now, and more counts won't reduce it.
    • DTSA-II's standards-based fit fixes this: it takes the Al peak shape, tail included, from the measured Al chip spectrum instead of a polynomial. That's one more reason the standards block in the plan matters.
  3. Dose check. Mg/N (net Mg per total count) should stay flat from 50 s to 380 s. If it drops at the long end, carbon or charging is using up the extra time.
    • In your screenshot, C Kα relative to the continuum is ≈2.3× higher in 380sec_1 than in the other three. Mg peak/bkg is unchanged (0.23 vs 0.22–0.25), so carbon hasn't cost any Mg signal yet.
    • If 380sec_1 is from the 9/23 session, the C jump may reflect that day's surface state rather than dwell time.

4. How to get the numbers

Now (no standards needed). Save this as mg_snr.py and run python mg_snr.py *.csv on the TEAM CSV exports. They need energy in keV and counts, the same format as AlSi10Mg_EDS_Map_1.csv.

import sys
import numpy as np

DEG = 2  # background polynomial order; rerun with 3 to see how much Mg depends on the background model
FWHM = 0.0691  # Mg Kα FWHM (keV) = sqrt(FWHM_MnKa² − 2.5·(5895 − 1254)) eV, FWHM_MnKa = 128 eV
s = FWHM / 2.3548
for f in sys.argv[1:]:  # EDAX CSV export: energy (keV), counts
    E, y = np.loadtxt(f, delimiter=",", unpack=True)
    m = (E >= 1.02) & (E <= 1.36)  # Mg Kα plus both shoulders, stopping short of Al Kα
    x = E[m] - 1.2536
    g = np.exp(-0.5 * (x / s) ** 2) * (E[1] - E[0]) / (s * np.sqrt(2 * np.pi))  # unit-area Mg Kα peak
    X = np.column_stack([x**k for k in range(DEG + 1)] + [g])  # background (continuum + Al Kα tail) + Mg Kα
    w = 1 / np.maximum(y[m], 1)  # Poisson weights
    cov = np.linalg.inv(X.T @ (X * w[:, None]))
    a = cov @ (X.T @ (w * y[m]))
    P, sP = a[-1], np.sqrt(cov[-1, -1])
    win = np.abs(x) <= 0.6 * FWHM  # 1.2-FWHM window: the width that maximizes P/√B
    B = (X[win, :-1] @ a[:-1]).sum()
    chi2 = (w * (y[m] - X @ a) ** 2).sum() / (m.sum() - DEG - 2)
    print(f"{f}: N={y.sum():,.0f}  Mg={P:,.0f} ± {sP:,.0f}  SNR={P / sP:.1f}  "
          f"Z={P * g[win].sum() / np.sqrt(2 * B):.1f}  Mg/N={1e6 * P / y.sum():.0f} ppm  chi2={chi2:.2f}")
  • Checks: it matches an independent nonlinear fit on the Aug spectrum. Across 5 simulated repeats per count level, the actual scatter matched the reported σ (s/σ = 0.6–1.2), so you can trust σ for test 1.
  • Watch chi2: if it climbs well above ≈1.3 at high counts, that's the background-model problem (test 2) showing up.

After the standards block. In DTSA-II's Script tab, tabulate(selected(), withErrs=True) (run with Ctrl+Enter) lists Mg wt% ± σ for each quantified spectrum. I checked this on simulated 5 kV AlSi10Mg with pure Al, pure Si and MgO standards. The σ comes mostly from counting statistics on the unknown's Mg peak and falls as 1/√N (±4.6% at 0.8M counts → ±1.9% at 5.8M). So σ/wt% is the same SNR, just in wt%.

  • Don't use DTSA-II's countEvents() / peakIntegral() for trends. They pick their background windows automatically. In my test, one of 20 simulated spectra jumped 36% (≈7σ) just from a window change.
  • Your 9/16 to-do (total counts without opening the CSV): type for s in selected(): print s, wrap(s).totalCounts(), wrap(s).liveTime() in the Script tab. Verified in DTSA-II 15.1.50.

5. Correction to my earlier numbers

The "≈4,400 net Mg Kα counts" for the Aug 5 kV spectrum was wrong. It appears in plan §4 and my Sep 1 and Sep 7 comments, and it came from PR #11's whole-spectrum hyperspy fit (rerun here: 4,435).

  • Why it was high: that fit's background sits 27% below the local level under Mg Kα, because one smooth curve over 0–5 keV can't follow the Al Kα tail. The Mg peak picked up ≈2,300–2,800 background counts. Local fits give 1,600–2,200.
  • What changes: counting precision at 652k counts was ±10%, not ±1.5%. The "≥10⁴ net Mg" target means ≈3–4M total counts (not ≈1.5M), and it gives ≈±4–5%, not ±1%.

Do you want me to fix plan §4 (along with the July → Apr/Aug labels from last time) and commit the script as scripts/eds_mg_snr.py?

Check 770k_counts_1's channel width: its continuum is ≈0.3× that of 1_1, not the 0.5× you'd expect from 770k vs 1.54M counts. That fits if 770k_counts_1 was saved at 5 eV/channel and the other three at 10 eV/channel. You can check "channel width" in Spectrum Properties. The script isn't affected because it adds up total counts, but DTSA-II's overlays are per channel and will make that curve look worse than it is.

Commands run + outputs
$ python mg_snr.py AlSi10Mg_EDS_Map_1.csv            # DEG = 2
AlSi10Mg_EDS_Map_1.csv: N=652,379  Mg=1,602 ± 156  SNR=10.2  Z=10.4  Mg/N=2455 ppm  chi2=1.29
$ python mg_snr.py AlSi10Mg_EDS_Map_1.csv            # DEG = 3
AlSi10Mg_EDS_Map_1.csv: N=652,379  Mg=2,177 ± 227  SNR=9.6  Z=14.5  Mg/N=3337 ppm  chi2=1.11
$ python scripts/eds_kfactor_quant.py                # PR #11 whole-spectrum hyperspy fit, rerun
Mg_Ka: net=     4435  bg_under_peak=   12375  significance=   28.2 sigma  (detected: True)

# DTSA-II 15.1.50, installed with scripts/dtsa2_headless_setup.sh (branch claude/issue-1-20260911-0534); GUI calls run under Xvfb
>>> for s in selected(): print s, wrap(s).totalCounts(), wrap(s).liveTime()
aug5kv 652379.0 327.7
# QuantifyUsingStandards, simulated 5 kV AlSi10Mg (0.4 wt% Mg) vs pure Al, Si, MgO:
N=   806626  Mg = 0.4356 +/- 0.0200 wt%  (rel 4.6%)
N=  5759416  Mg = 0.4092 +/- 0.0078 wt%  (rel 1.9%)
# largest σ component: I[unk,Mg] (counting statistics of the unknown's Mg peak)
# adaptive backgroundCorrectedIntegral (the countEvents/peakIntegral path), five 1.54M-count repeats:
r1–r4: 3,839–4,215 ± ≈190;  r5: 2,557 ± 190 (low-side background window shrank from ≈50 to 7 channels)

No repo changes — analysis only. Sources: Harries, Microscopy Today 25(1):28 (2017) · Ritchie & Newbury, Anal. Chem. 84:9956 (2012) (DTSA-II's uncertainty model) · NIST's tabulate(..., withErrs=True) recipe: doc/MT4_Standards_based_Quantication_Part2.pdf in the DTSA-II install folder.
· Branch

@ronnie-guymon ronnie-guymon mentioned this pull request Sep 29, 2026
@ronnie-guymon

Copy link
Copy Markdown
Member

I'll see what @XZaitzeff thinks of this, he'll probably be able to help me better understand it along with its implications.

@ronnie-guymon

ronnie-guymon commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

Beam current for 8x1M spectra on 9/30/2026 is 3.24nA

@claude claude Bot mentioned this pull request Oct 6, 2026
@sgbaird

sgbaird commented Oct 7, 2026

Copy link
Copy Markdown
Member

From the Oct 2 atomizer meeting: the 4047-in-6063 powder from the Oct 2 run (u23y78) would be a good test case for the acquisition-time work, since the question we want to answer is how well it mixed. That means EDS on powder samples from, e.g., the top, middle and bottom of the jar. cc @ronnie-guymon and @XZaitzeff, noting that @trneslen could also help with doing an SEM run.

@claude roughly what counts would we need to tell apart a 1 wt% difference in Si between samples (e.g., top vs bottom of the jar)? Use Edison and the tooling developed here in caliber.

@claude also, is EBSD on powders a thing? Or is that where people would just typically use powder x-ray diffraction (P-XRD) and not bother with EBSD?

Comment drafted by claude, edited and approved by sgbaird

@claude

claude Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Author

Claude finished @sgbaird's task in 37m 9s —— View job


About 3×10⁴ counts per spectrum is enough to resolve 1 wt% Si from counting statistics alone, so the 1M baseline is roughly 30× more than Si needs. What decides top vs bottom is how many particles you measure and where the beam lands on each one. On loose powder at 5 kV, a spot within ±0.3 R of the apex reads Si within −0.4/+0.2 wt%. At 15 kV the same window spans ±1.3 wt%, which is enough to hide a 1 wt% difference. EBSD on powders is an established research method, but it doesn't measure mixing; P-XRD and ICP give lot averages.

  • Gather CALIBER tooling: the real Aug 5 kV spectrum and fit recipe (PR EDS parameter 1 (Beam Energy) #11), DTSA-II headless (now 15.1.57), prior Edison runs
  • Edison: LITERATURE_HIGH on resolving ΔSi = 1 wt% between powder lots, and LITERATURE on EBSD on powders vs P-XRD. Both succeeded; artifacts committed in d6db16d and e0664b9
  • Counting statistics: Si Kα fit on the real spectrum, plus DTSA-II standards-based quant of simulated spectra
  • Powder geometry: NISTMonte Si bias vs beam position on a sphere
  • Sampling statistics, and the EBSD/P-XRD answer

1. Counting statistics: Si is an easy peak

On the real Aug 5 kV AlSi10Mg spectrum (AlSi10Mg_EDS_Map_1.csv), Si Kα has 36,900 net counts out of 652k total (5.7%). Peak/background is 6.7, and switching the background polynomial moves Si by about ±1%. The same test moved Mg by ±30%.

The table scales that spectrum to other Si levels. The DTSA-II column is the measured scatter of standards-based Si wt% over 12 simulated Poisson spectra (pure Al, Si and MgO standards):

Si level σ(Si) at 10⁴ / 10⁵ / 10⁶ total counts (real-spectrum scaling) DTSA-II, 5 kV DTSA-II, 15 kV counts to resolve 1 wt%: Ziebold 2.33σ / 95% two-sided + 80% power
2 wt% 0.31 / 0.10 / 0.03 wt% 0.37 / 0.08 / 0.04 0.40 / 0.13 / 0.04 5,200 / 15,000
6 wt% 0.42 / 0.13 / 0.04 0.34 / 0.08 / 0.07 0.55 / 0.15 / 0.04 9,500 / 27,000
12 wt% 0.54 / 0.17 / 0.05 0.50 / 0.20 / 0.07 0.55 / 0.14 / 0.05 16,000 / 46,000
  • Criterion: Ziebold's analytical sensitivity, ΔC ≥ √2·t·σ_C/√n. With one spectrum per lot this means ΔC ≥ 2.33σ_C. Requiring 80% power to catch a real 1 wt% difference raises it to 3.96σ_C.
  • Time: at the 9/16 rate (770k counts in 50 s live, about 15 kcps), 3×10⁴ counts take 2 s. The 1M baseline is what Mg needs, not Si.
  • Edison agrees: about 430 net Si counts suffice with no background, and it recommends ≥10⁴ net Si counts per particle so that geometry, microstructure and sampling dominate rather than counting (protocol table).

2. Powder geometry: Si Kα is the line most sensitive to where the beam hits a sphere

Si Kα (1.740 keV) sits just above the Al K edge (1.560 keV), so Al absorbs it strongly (1/e length 1.3 µm). Al Kα barely notices a change in escape path, so normalization can't cancel the effect.

I ran NISTMonte (DTSA-II's Monte Carlo) on an Al-6Si-0.5Mg sphere on carbon, with bulk MC standards, and moved the beam along the detector direction. Values are normalized Si wt%; true is 6.00, and flat bulk reads 6.16 (5 kV) / 6.08 (15 kV), an offset shared by every row:

beam offset (× R) −0.7 (away) −0.5 −0.3 apex +0.3 +0.5 +0.7 (toward detector)
5 kV, 20 µm particle 0.55 4.67 5.76 6.18 6.35 6.44 6.54
15 kV, 20 µm 0.37 2.96 4.79 6.40 7.41 7.92 8.43
15 kV, 5 µm 3.10 4.71 5.87 7.05 7.88 8.36 8.83
  • Shadowing: past about −0.6 R the particle blocks the detector's view (the local tilt exceeds the 35° take-off angle). A raster over the whole loose particle includes that region and reads Si low.
  • Analytical-total filter: keeping only spectra with a 95–105% total catches the far side (92% total at −0.5 R, 5 kV). It misses the near side at 15 kV (104% total with Si +22%).
  • Literature: Small 2002 (NIST J. Res. 107:555) found ≤10 kV best for particles; at 15 kV a 1.8 µm sphere lost about 13% of its signal. Edison suggests 10 kV as a compromise if 5 kV carbon contamination bites; the MC above favors 5 kV for Si on spheres.

3. How many particles per jar position

Each particle's reading combines its true Si with geometry, microstructure and counting errors. Call the particle-to-particle SD σ_p. To detect Δ = 1 wt% (two-sample, 95% two-sided, 80% power) you need n = 15.7·σ_p² particles per position:

σ_p (wt%) 0.5 1 1.5 2 3
particles per position 4 16 35 63 141
  • Pilot first: σ_p partly is the mixing answer, so it isn't known in advance. Measure about 30 particles from one position, then size the rest from the observed SD (Edison gives the same rule).
  • Spend counts on particles, not spectra: 10⁵ counts per particle (σ_count ≈ 0.13 wt%, 6.5 s live) × 30 particles × 3 positions ≈ 10 min of live time. At 1M per particle the same survey takes 1.6 h and gains nothing.
  • The spread is itself the mixing metric: repeat one particle 5× to get s_repeat, then compare the between-particle s against it (the s/σ homogeneity index from the Sep 25 comment). A broad or bimodal histogram shows poor mixing even if the top and bottom means agree.
  • Mg as a second tracer (optional): 6063 carries 0.45–0.9 wt% Mg and 4047 ≤ 0.10, so poorly mixed particles should show Si up with Mg down. Geometry artifacts mostly move Si alone. This is where 1M-count spectra earn their time.
  • Size confounder: record each particle's diameter. Size segregation in the jar can look like a composition gradient: fine and coarse AlSi10Mg powders differed 8.56 vs 9.76 wt% Si (Balbaa 2021). Within each position, subsample by splitting rather than one scoop; Edison reports 0.15% variability for rotary division vs 5% for scoop sampling (Neikov 2019).
  • Polished cross-sections are the better primary method. They remove geometry entirely. Raster ≥ 10–20 µm per particle, since AlSi10Mg powder has 2.19 µm dendrite spacing; at 5 kV the beam is cell-sized (17.3 vs 7.5 wt% Si phase spectra in the AlSi10Mg session). On a loose 20 µm particle, the ±0.3 R apex window spans only about 3 spacings, so treat loose powder as a screen.
  • Avoid a colloidal-silica final polish: embedded SiO₂ adds Si right at the 5 kV sampling depth (plan §4). Colloidal alumina, as in Vanzetti 2023, avoids it.
  • Bulk check: ICP-OES or ICP-MS (or XRF) on split portions from each position gives the lot mean independently of all of the above.

4. Is EBSD on powders a thing?

Yes, as a research method, not as routine lot QC (Edison answer). Particles are mounted, sectioned and polished:

  • Gas-atomized Al-Si-Cu-Mg: conductive resin → 1 µm → 2 h vibratory polish with 0.02 µm colloidal alumina, 150 nm step (Vanzetti 2023).
  • Gas-atomized 6061: 0.06 µm colloidal silica (Sabard & Hussain 2019).
  • Alternatively, FIB slices through about 30 particles per condition (Opatová 2020).

What EBSD adds per particle: grains per particle, grain size vs particle size, and atomization deformation. For example, several dendrite arms can share one grain, so cell spacing is not grain size. Fine precipitates and eutectic Si are often smaller than practical step sizes.

P-XRD is preferred for lot averages. It gives phases, Rietveld fractions, and the α-Al lattice parameter as a proxy for supersaturated Si: as-atomized AlSi10Mg read 0.4046 / 0.4050 nm vs 0.4051 nm annealed (Albu 2020). A minor phase needs to be present at a few wt% to be detected.

For u23y78: neither technique measures Si per particle. XRD on top/bottom splits is useful supporting evidence, but EBSD doesn't address mixing. If EBSD is wanted later for solidification structure, it can reuse the same polished mounts: do EDS before any colloidal-silica step.

Commands run + key outputs
$ python si_fit.py      # local Si Kα fit (quadratic bkg), real 5 kV spectrum
DEG=2: N=652,379  SiKa net=36,918 ± 236  Si/N=0.0566  B(1.2FWHM)=4,728  P_win/B=6.66  chi2=1.41
DEG=1: 36,833 ± 236   DEG=3: 37,554 ± 326

# DTSA-II 15.1.57 (current installer needs JDK 26 + --enable-preview; dtsa2_headless_setup.sh at 134dfa1 hard-codes JDK 25)
$ java --enable-preview -cp "$HOME/dtsa2/*" org.python.util.jython si_dtsa2.py A
E0,true_Si,total_counts,mean_Si,sd_Si   (12 reps, standards: pure Al, Si, MgO)
5,6,1e4,5.808,0.335   5,6,1e5,5.940,0.078   5,6,1e6,6.018,0.066
15,6,1e4,5.911,0.547  15,6,1e5,5.978,0.153  15,6,1e6,5.963,0.041
$ ... si_dtsa2.py B 5 10 10000   # NISTMonte, R = 10 µm, 10k trajectories (15 kV: 4k)
flat polished Al-6Si-0.5Mg: Si norm=6.16 total=100.6
-0.5R: 4.67 (total 92.0)   apex: 6.18 (99.7)   +0.5R: 6.44 (98.8)

# Edison
LITERATURE_HIGH  edison-powder-si-homogeneity  submitted 06:18 → success 06:44 UTC
LITERATURE       edison-powder-ebsd            submitted 06:18 → success 06:47 UTC

The only repo changes are the Edison artifacts under outputs/edison-powder-si-homogeneity/ and outputs/edison-powder-ebsd/. I didn't commit the fit and DTSA-II scripts; I can add them to scripts/ if wanted.
· Branch

github-actions Bot and others added 3 commits October 7, 2026 06:18
Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on powders

Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants