Advanced electron optics simulation platform for TEM/STEM/SEM column design
Project description
ColumX
Advanced Electron Optics Simulation Platform for TEM/STEM/SEM Column Design
ColumX is a comprehensive Python library for electron optics simulation, covering paraxial ray tracing, aberration calculation, wave optics, multislice propagation, crystal potentials, and full TEM/STEM column modeling. It is designed for researchers and engineers working on electron microscope column design, beam physics analysis, and image simulation.
Features
ColumX provides 20 physics modules organized into four layers:
Ray Optics — paraxial, ray3d, glaser, aberration, electrostatic_paraxial
Magnetic and electrostatic lens modeling with Glaser analytical fields, adaptive-power Seidel aberration integrals (Cs < 0.04%, Cc < 0.02% vs MEBS), 5th-order aberration framework (C5, S5, Krivanek naming), and 3D relativistic Lorentz ray tracing.
Wave Optics — wave, multislice, crystal
Contrast transfer function with spatial/temporal coherence envelopes, STEM probe formation, FFT-based multislice propagation engine, and crystal structure module with Kirkland scattering factors for 7 built-in crystal presets (Si, Ge, GaAs, SiC, MgO, Al, Au).
Advanced Imaging — stem, cbed, eels, hrtem, dpc
STEM imaging chain (probe, annular detectors BF/ADF/HAADF, Z-contrast), convergent beam electron diffraction with HOLZ lines, EELS spectrum simulation with thickness measurement, HRTEM imaging (WPOA linear and multislice nonlinear), and differential phase contrast with electric/magnetic field reconstruction.
Column & Infrastructure — column, lens_cascade, multipole, source, deflection, coulomb, fem2d, field, instruments, constants
Full TEM column simulator, multi-lens cascade with Conrady aberration propagation, multipole elements, electron gun models (thermionic/field emission/Schottky), scanning deflection, space charge and Boersch effect, 2D FEM field solver, and instrument presets (Titan, Themis, ARM200F, ARM300F2).
Installation
# Core library
pip install columx
# With GUI (PySide6)
pip install "columx[gui]"
# With web API (FastAPI)
pip install "columx[api]"
# Everything
pip install "columx[all]"
From Source
git clone https://github.com/allen-li1231/ColumX.git
cd ColumX
pip install -e ".[all]"
Quick Start
Glaser Lens
from columx import GlaserLens
lens = GlaserLens(V=200e3, B0=0.5, a=3e-3, z0=-30e-3, zf=60e-3)
print(f"Focal length: {lens.analytical_efl()*1e3:.2f} mm")
print(f"Magnification: {lens.analytical_magnification():.3f}")
print(lens.summary())
CTF and Probe
from columx import ContrastTransferFunction, STEMProbe
ctf = ContrastTransferFunction(V=200e3, Cs=1.2e-3, Cc=1.2e-3, defocus=-50e-9)
print(f"Scherzer resolution: {ctf.scherzer_resolution()*1e10:.2f} A")
probe = STEMProbe(V=200e3, Cs=1e-3, alpha=10e-3)
print(f"Probe FWHM: {probe.probe_size()*1e10:.2f} A")
Multislice Simulation
from columx import MultisliceEngine
from columx.multislice import phase_grating_potential
import numpy as np
V = np.stack([phase_grating_potential(
nx=128, ny=128, Lx=5e-9, Ly=5e-9,
period=1e-9, amplitude=10.0
)] * 20)
engine = MultisliceEngine(V=200e3, nx=128, ny=128, Lx=5e-9, Ly=5e-9, dz=0.5e-9)
psi_exit = engine.run(V)
dp = engine.diffraction_pattern(psi_exit)
Crystal Potential
from columx import CrystalStructure, projected_potential
si = CrystalStructure.from_preset("Si")
V_proj, info = projected_potential(si, nx=256)
print(f"MIP: {info['MIP_V']:.1f} V")
Web API
Start the REST API server:
python run_web.py
# → http://127.0.0.1:8000 (interactive frontend)
# → http://127.0.0.1:8000/docs (OpenAPI documentation)
Endpoints: POST /api/glaser/compute, POST /api/wave/ctf, POST /api/wave/probe, POST /api/multislice/simulate, POST /api/crystal/potential, POST /api/stem/probe.
Desktop GUI
Launch the PySide6 desktop application with 20 interactive panels:
python gui/columx_gui.py
Testing
cd tests
python test_all.py # Core modules (13 modules)
python test_new_physics.py # v2.0+ modules
python test_crystal_stem.py # Crystal + STEM + CBED + EELS + HRTEM + DPC
269 tests covering all 20 modules.
Architecture
columx/
├── columx/ # 20 physics modules (13,000+ lines)
├── api/ # FastAPI REST API layer
├── web/ # Vue3 + Plotly.js frontend
├── gui/ # PySide6 desktop GUI (20 panels)
├── tests/ # 269 tests across 8 test files
└── docs/ # Architecture documentation
Validation
ColumX has been systematically validated against MEBS (Munro's Electron Beam Software):
- Paraxial: M and theta accuracy 0.006%
- Aberrations: Cs < 0.04%, Cc < 0.02% (200 kV, objective lens)
- 5th order: C5 verified against Krivanek analytical values
- MEBS compatibility:
match_mebs=Truemode replicates MEBS mixed relativistic convention
References
- Glaser, W. Grundlagen der Elektronenoptik (Springer, 1952)
- Hawkes, P.W. & Kasper, E. Principles of Electron Optics (Academic Press, 1989)
- Reimer, L. Transmission Electron Microscopy 5th ed. (Springer, 2013)
- Krivanek, O.L. et al. Ultramicroscopy 110 (2010) 571-585
- Kirkland, E.J. Advanced Computing in Electron Microscopy 2nd ed. (Springer, 2010)
License
MIT License. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file columx-2.3.0.tar.gz.
File metadata
- Download URL: columx-2.3.0.tar.gz
- Upload date:
- Size: 175.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
501709f38c752b3216955a8d4ca16c0d49418f696f1384a814f357ec28d5a8f4
|
|
| MD5 |
ec4559df0f490a089ad219c56552d8f9
|
|
| BLAKE2b-256 |
44263ba11e62b815160274b7b92ed877ef34cb9dca0b42f5286370ac1453ee73
|
File details
Details for the file columx-2.3.0-py3-none-any.whl.
File metadata
- Download URL: columx-2.3.0-py3-none-any.whl
- Upload date:
- Size: 132.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6436283967b234e998bac3307af71d1f1d9ed0cdc45841692ce02593c0f812f2
|
|
| MD5 |
7042b036393b469e9baf7c4dc774151e
|
|
| BLAKE2b-256 |
868a7697d1fb659f3968353cc56c32839226f1d695a90bfaeea50330bba165e6
|