AutoEMX is a fully automated framework for SEM-EDS workflows β from spectral acquisition and quantification, to principled filtering and compositional analysis β all in one click.
π₯ Watch AutoEMX in action on a desktop SEM-EDS system at https://youtu.be/Bym58gNxlj0
π§ͺ Try quantification now: upload a .msa or .emsa spectrum at https://autoemx-singlespectrum.streamlit.app
π This work is described in:
A. Giunto et al., Accurate SEMβEDS Quantification, Automation, and Machine Learning Enable HighβThroughput Compositional Characterization of Powders, Nature Communications 17, 9735 (2026).
DOI: https://doi.org/10.1038/s41467-026-76633-x
-
Fully automated SEM-EDS phase-level compositional analysis workflow, which includes:
- Acquisition of EDS spectra, including particle localization if sample is powder. Compatible also with bulk samples, or manual navigation.
- Automated peak identification and element assignment for unknown samples
- Quantification of compositions using the peak-to-background method
- Rule-based filtering of compositions to discard poorly quantified spectra from the analysis
- Unsupervised machine learningβbased analysis to identify the compositions of individual phases in the sample
-
AutoEMX GUI β acquire spectra with the microscope, quantify the samples of a project, run their clustering analysis with every parameter and explore the clusters in interactive 3D / ternary / 2D plots linked to the spectra and SEM images, and fit/quantify single spectra. Works also with spectra acquired and exported with commercial software (
.msa,.emsa,.msg) -
Automated experimental standard collection scripts
-
Automated particle size distribution measurements scripts
-
Extensible architecture β adaptable to other techniques such as
- Wavelength Dispersive Spectroscopy (WDS)
- Scanning Transmission Electron Microscopy (STEM) with EDS
-
Extensible hardware support β includes driver for ThermoFisher Phenom Desktop SEM series, and can be extended to any electron microscope with a Python API
- Benchmarked on 74 single-phase samples with compositions spanning 38 elements (from nitrogen to bismuth), it achieved <5β10% relative deviation from expected values
- Machine learning compositional analysis detects individual phase composition in multi-phase samples, including minor phases
- Intermixed phases can also be resolved
- Works with spectra from any microscope, although recalibration is recommended for maximum compositional accuracy
- Scanning Electron Microscopy (SEM) with Energy-Dispersive Spectroscopy (EDS)
- Powders and rough samples, e.g. rough films, or pellets, with automated segmentation.
- Bulk, flat samples, probed by defining a grid of points.
- Manual navigation of any sample.
- Cross-platform: runs on Linux, macOS, and Windows
- Quick installation via pip
- π§ͺ Try quantification on your spectrum
- π Documentation
- π¦ Requirements
- π Project Structure
- π Scripts
- π€ Contributing
- π License
- π Citation
- π Paper Data
- π¬ Contact
Upload a .msa or .emsa spectrum acquired at 15 kV and test quantification in the browser:
π https://autoemx-singlespectrum.streamlit.app
Installation instructions, usage examples, and workflow descriptions are available in the AutoEMX documentation:
π https://cedergrouphub.github.io/AutoEMX/
- Python 3.11 or newer
- All dependencies are installed automatically via
piporconda. - Tested versions of dependencies are specified in
pyproject.toml.The package may work with more recent versions, but these have not been tested.
- β Developed and tested for Thermo Fisher Phenom Desktop SEMs.
- β Compatible with any Phenom microscope equipped with PPI (Phenom Programming Interface).
β οΈ For other microscope models, the driver must be adapted to the appropriate API commands (easy to do with modern LLMs).
The repository is organized as follows:
AutoEMX/
βββ autoemx/ # Main package source code
β βββ config/ # Configuration files, including default values to employ during measurements.
β βββ core/ # Core objects and source code
β βββ data/ # Libraries of X-ray data
β βββ microscope_drivers/ # Electron Microscope driver (β οΈ adapt to your own instrument)
β βββ runners/ # Runner functions calling on core objects
β βββ scripts/ # Scripts to run acquisition, quantification, etc. (see full list below)
β βββ web/ # Streamlit app of the online single-spectrum demo
β βββ gui/ # Local GUI: acquisition, quantification, analysis, single spectrum (`python -m autoemx.gui`)
β βββ calibrations/ # Detector models of supported microscopes (your instrument's calibrations are kept in ~/.autoemx)
β βββ utils/ # Utility functions and strings employed by the program
β
βββ examples/ # Example scripts for fitting, quantification and compositional analysis of example data
βββ tests/ # CI smoke suite (`test_ci_smoke.py`) + offline workflow/unit tests
β # Hardware-only scripts stay capitalized (`Test_EM_driver.py`)
βββ paper_data/ # Raw paper data uploaded on Git LFS (Dowload instructions in Paper Data section below)
β
βββ LICENSE.txt
βββ README.md
βββ pyproject.toml
This repository includes a collection of scripts that streamline the use of AutoEMX. Each script is tailored for a specific task in spectral acquisition, calibration, quantification, or analysis. Below are the main scripts available in autoemx/scripts/ and their purposes:
- Run_Acquisition.py β Acquire X-ray spectra from the microscope (supports automated and manual modes).
- Run_Quantification.py β Quantify acquired spectra (single or multiple samples) and perform machine-learning analysis.
- Run_Analysis.py β Launch customized machine-learning analysis on previously quantified data.
- Set_Active_Analysis.py β Choose which quantification run and analysis of a sample are active (reused by later runs, shown in the GUI).
- Fit_Quant_Single_AutoEMX_Spectrum.py β Fit and optionally quantify a single spectrum measured with AutoEMX. Prints fitting parameters and plots fitted spectrum for detailed inspection of model performance.
- Fit_Quant_Single_MSA_Spectrum.py β Fit and optionally quantify a single spectrum exported by proprietary software.
- quantify_external_spectra.py β Quantify spectra acquired outside AutoEMX (e.g., from other SEM-EDS systems).
- Annotate_Particle_Images.py β Draw the positions of the measured spectra on the particle images of a sample.
- Online demo β upload
.msa/.emsaand test quantification at https://autoemx-singlespectrum.streamlit.app, without installing AutoEMX. Locally, use the Single spectrum tab of the AutoEMX GUI.
- Collect_Particle_Statistics.py β Analyse sample, collecting particle size statistics and distribution.
- Process_Particle_Stats_Files.py β Filter out particles from acquired particle size data and recompute the statistics.
- Run_SDD_Calibration.py β Calibrate the energy scale of the SDD detector.
- Run_Experimental_Standard_Collection.py β Acquire and fit experimental standards, to obtain reference P/B values.
- Refit_Experimental_Standards.py β Refit previously acquired experimental standards.
- Modify_EDS_Standards_File.py β Delete standards, or exclude them from the reference P/B values.
- Extract_Experimental_Standards_Details.py β Summarize the available standards (elements, peaks, P/B values).
- Calibrate_Peak_Sigma_Params.py, Calibrate_Peak_Shape_Params.py, Calibrate_Background_Params.py β Calibrate the detector model of a new microscope (peak widths, peak tails, background).
(see Chem. Mater. 2025, 37, 6807β6822 for example)
Use the same scripts as regular composition characterization, as described in the docs Tutorial.
π All scripts can be executed directly from the command line or imported into a Python environment, making them accessible from anywhere on your system.
Contributions are welcome! Need a feature or guide that is not available? Please ask for it in the GitHub Discussions: requests help us prioritize.
Open to collaborations to extend this package to different tools or to different types of samples, for example thin films. Please contact me at agiunto@lbl.gov
Free use for non-commercial use only. Contact IPO@lbl.gov for commercial purposes.
This project is licensed under a NON-COMMERCIAL USE ONLY license β see the LICENSE file for details.
If you use AutoEMX in your research, please cite the following publication:
A. Giunto, Y. Fei, P. Nevatia, B. Rendy, N. J. Szymanski & G. Ceder, Accurate SEMβEDS Quantification, Automation, and Machine Learning Enable HighβThroughput Compositional Characterization of Powders, Nature Communications 17, 9735 (2026). DOI: https://doi.org/10.1038/s41467-026-76633-x
@article{Giunto2026AutoEMX,
author = {Giunto, Andrea and Fei, Yuxing and Nevatia, Pragnay and Rendy, Bernardus and Szymanski, Nathan J. and Ceder, Gerbrand},
title = {Accurate SEMβEDS Quantification, Automation, and Machine Learning Enable HighβThroughput Compositional Characterization of Powders},
journal = {Nature Communications},
volume = {17},
pages = {9735},
year = {2026},
doi = {10.1038/s41467-026-76633-x},
url = {https://doi.org/10.1038/s41467-026-76633-x},
}The raw data used in the associated publication is stored in the paper_data/ directory.
These files are tracked with Git LFS (Large File Storage).
The repository is automatically cloned without Git LFS; you will only see placeholder files instead of the actual datasets inside paper_data/.
To download the full data, on the terminal go to the repo directory and:
# 1. Install Git LFS (only needed once per machine)
git lfs install
# 2. Fetch the data files
git lfs fetch --all
git lfs checkout
Alternatively, download manually from the github repo Download button.
After downloading, run the run_analysis.py or run_quantification_analysis.py scripts within the folder.
For questions or issues, please open an issue on GitHub.