QuScope v0.2.0 Documentationο
QuScope is a Python package for applying quantum computing algorithms to Transmission Electron Microscopy (TEM) simulation. Built on Qiskit, it provides fully-quantum circuit implementations of every stage of the TEM imaging pipeline β from specimen interaction to detector readout β validated against classical reference implementations with fidelity β₯ 0.9999.
π¬ Key Featuresο
Quantum CTEM: Single-slice (WPOA) and multislice conventional TEM image simulation as one quantum circuit (state prep -> QFT -> diagonal-gate phase grating/lens CTF -> IQFT)
Quantum STEM: Per-probe-position quantum circuits with HAADF / ADF / ABF / BF / iDPC detector channels
Quantum Diffraction: WPOA, SAED, CBED, nano-beam diffraction (nBD), Kikuchi, and EBSD patterns
Dynamical Scattering: Bloch-wave formalism with eigenvalues extracted via Quantum Phase Estimation
Thermal Diffuse Scattering: Quantum frozen-phonon modules (QTPC, QPS, Lindblad channel) for Debye-Waller-parameterized thermal effects
Backend Management: Local Qiskit Aer simulators and real IBM Quantum hardware via Qiskit Runtime
Ready-to-Use Notebooks: A full notebook gallery demonstrating every module above on real materials (MoSβ, graphene, SiβNβ)
π Quick Startο
Install QuScope via pip:
pip install quscope
Basic usage β simulate a quantum CTEM image and validate it against a classical reference:
from quscope.quantum_ctem import (
QuantumCTEMCircuit,
QuantumCTEMParameters,
QuantumClassicalValidator,
)
import numpy as np
# 8x8 grid (6 qubits), 200 kV, Scherzer condition
params = QuantumCTEMParameters(
acceleration_voltage=200e3,
grid_size=8,
pixel_size=0.5, # Angstrom/pixel
defocus=-659.7, # Angstrom (Scherzer defocus)
cs=1.3, # mm
)
sim = QuantumCTEMCircuit(params)
# Simulate a random projected potential
V = np.random.rand(8, 8) * 100 # projected potential in V*Angstrom
result = sim.simulate(V)
print("Wave function shape:", result["wave_function"].shape) # (8, 8)
print("Intensity range :", result["intensity"].min(), "-", result["intensity"].max())
# Validate against classical implementation
validator = QuantumClassicalValidator(params)
comparison = validator.compare(V)
print(f"Quantum-classical fidelity: {comparison['fidelity']:.6f}") # -> 1.000000
See the Notebook Gallery for the full set of runnable demonstrations (CTEM, STEM, diffraction, Bloch wave, and frozen phonons).
π Documentation Structureο
User Guide:
Notebooks & Examples:
Development:
π Linksο
Repository: https://github.com/QuScope/QuScope
π Indices and Tablesο
π¬ QuScope v0.2.0: Quantum Algorithms for Electron Microscopyο
QuScope is a Python package for applying quantum computing algorithms to Transmission Electron Microscopy (TEM) simulation. Built on Qiskit, it expresses the TEM image-formation pipeline as quantum circuits β the electron wavefunction is amplitude-encoded on qubits, and every optical element (phase grating, Fresnel propagation, objective lens) is a diagonal unitary conjugated by quantum Fourier transforms β validated against classical reference implementations to unit fidelity.
v0.2.0 provides four fully-quantum imaging pipelines: CTEM (WPOA), CTEM multislice, STEM (WPOA), and STEM multislice.
Developed by Sean D. Lam and Roberto dos Reis Β· Northwestern University
π Paper: Quantum Algorithm Framework for Phase-Contrast Transmission Electron Microscopy Image Simulation β arXiv:2602.13438 [quant-ph], Feb 2026
π Quick Startο
pip install quscope
from quscope.quantum_ctem import (
QuantumCTEMCircuit,
QuantumCTEMParameters,
QuantumClassicalValidator,
)
import numpy as np
# 8Γ8 grid (6 qubits), 200 kV, Scherzer condition
params = QuantumCTEMParameters(
acceleration_voltage=200e3,
grid_size=8,
pixel_size=0.5, # Γ
/pixel
defocus=-659.7, # Γ
(Scherzer defocus)
cs=1.3, # mm
)
sim = QuantumCTEMCircuit(params)
# Simulate a random projected potential
V = np.random.rand(8, 8) * 100 # projected potential in VΒ·Γ
result = sim.simulate(V)
print("Image shape :", result["intensity"].shape) # (8, 8)
print("Intensity range:", result["intensity"].min(), "β", result["intensity"].max())
# Validate against classical implementation
validator = QuantumClassicalValidator(params)
comparison = validator.compare(V)
print(f"Quantumβclassical fidelity: {comparison['fidelity']:.6f}") # β 1.000000
β¨ Available Modules (v0.2.0)ο
Module |
Technique |
Quantum Engine |
|---|---|---|
|
CTEM bright-field imaging (WPOA + CTF) |
Phase-grating DiagonalGate β QFT β CTF DiagonalGate β IQFT |
|
CTEM multislice propagation |
Alternating phase grating / Fresnel-propagator DiagonalGates + QFT |
|
STEM imaging (single-slice WPOA) |
One quantum circuit per probe position |
|
STEM multislice propagation |
Probe state through the multislice circuit per scan position |
Supporting infrastructure: ctf_calculator (aberration function), hamiltonian (TEM Hamiltonian), momentum_space, quantum_encoding, classical reference implementations (classical_validation, ctem/, simulations/), Kirkland scattering-factor tables (utils/), materials workflows (MoSβ, graphene), circuit optimization, and IBM Quantum backend wrappers.
STEM Detector Channelsο
Channel |
Inner (mrad) |
Outer (mrad) |
Contrast |
|---|---|---|---|
HAADF |
60 |
200 |
Z-contrast |
ADF |
25 |
60 |
Mixed |
ABF |
10 |
25 |
Light elements |
BF |
0 |
10 |
Phase |
iDPC |
β |
β |
From BF centre-of-mass |
π£ Roadmapο
Quantum diffraction modes (SAED, CBED, nBD, Kikuchi, EBSD), frozen-phonon /
thermal-diffuse-scattering channels, and the Bloch-wave QPE eigensolver are
under development on the dev
branch and planned for a future release.
π¦ Installationο
From PyPI (recommended)ο
pip install quscope
Development installο
git clone https://github.com/QuScope/QuScope.git
cd QuScope
pip install -e ".[all]"
IBM Quantum access (optional β for real hardware)ο
export IBMQ_TOKEN="YOUR_API_TOKEN"
π Repository Structureο
quantum_algo_microscopy/
βββ src/quscope/
β βββ quantum_ctem/ # Core quantum TEM modules
β β βββ quantum_ctem_circuit.py # CTEM WPOA: QFT + CTF DiagonalGate
β β βββ quantum_multislice_circuit.py # CTEM multislice: Fresnel + QFT
β β βββ quantum_stem.py # STEM WPOA (HAADF/ADF/ABF/BF/iDPC)
β β βββ quantum_stem_multislice.py # STEM multislice
β β βββ quantum_encoding.py # Amplitude encoding utilities
β β βββ quantum_simulation.py # High-level simulation runner
β β βββ quantum_wave_function.py # Wavefunction helper
β β βββ quantum_tomography.py # Quantum state tomography
β β βββ ctf_calculator.py # CTF + aberration function
β β βββ hamiltonian.py # Full TEM Hamiltonian
β β βββ momentum_space.py # Reciprocal-space utilities
β β βββ classical_integration.py # abTEM / Kirkland bridge
β β βββ classical_validation.py # Classical reference implementations
β β βββ circuit_optimization.py # Gate cancellation & transpilation
β β βββ performance_benchmarking.py # Benchmark suite
β β βββ materials/ # MoSβ, Graphene structure factors
β β βββ mos2_workflow/ # End-to-end MoSβ orchestration
β β βββ workflows/ # Reusable workflow base classes
β β βββ backends/ # IBM Quantum / Aer backend wrappers
β βββ ctem/ # Classical CTEM (reference)
β βββ simulations/ # Shared simulation utilities
β βββ utils/ # Constants, Kirkland parameters
β βββ quantum_backend.py # IBM Quantum session manager
βββ notebooks/ # Executable documentation
βββ pyproject.toml
βββ docs/ # Sphinx documentation source
π‘ Usage Examplesο
1. Quantum CTEM (bright-field imaging, WPOA)ο
from quscope.quantum_ctem import QuantumCTEMCircuit, QuantumCTEMParameters
import numpy as np
params = QuantumCTEMParameters(
acceleration_voltage=200e3,
grid_size=16,
pixel_size=0.25,
defocus=-659.7,
cs=1.3,
)
result = QuantumCTEMCircuit(params).simulate(np.random.rand(16, 16) * 50)
# result keys: circuit, psi_image, intensity, metrics, parameters
2. Quantum CTEM Multisliceο
from quscope.quantum_ctem import (
QuantumMultisliceCircuit,
QuantumMultisliceParameters,
QuantumClassicalMultisliceValidator,
)
params = QuantumMultisliceParameters(
acceleration_voltage=200e3,
grid_size=8,
pixel_size=0.5,
defocus=-500.0,
cs=1.3,
slice_thickness=2.0, # Γ
per slice
)
potentials = [np.random.rand(8, 8) * 30 for _ in range(4)] # 4-slice specimen
result = QuantumMultisliceCircuit(params).simulate(potentials)
# Validate against the classical multislice reference
cmp = QuantumClassicalMultisliceValidator(params).compare(potentials)
print(f"fidelity: {cmp['fidelity']:.6f}") # β 1.000000
3. Quantum STEM (single-slice WPOA)ο
from quscope.quantum_ctem import run_stem, STEMDetectors
import numpy as np
N, px = 16, 0.12 # Nyquist must exceed detector angles:
V = np.random.rand(N, N) * 100 # k_max = 1/(2Β·px) vs ΞΈ/Ξ»
result = run_stem(
V, pixel_size=px, voltage=200e3,
convergence_mrad=20.0,
detectors=STEMDetectors(), # default angular ranges
scan_step_px=1,
)
# result["HAADF"], result["ADF"], result["ABF"], result["BF"], result["iDPC"]
4. Quantum STEM Multisliceο
from quscope.quantum_ctem import run_stem_multislice
result = run_stem_multislice(
V, pixel_size=px, voltage=200e3,
n_slices=4, slice_thickness=6.5, # or pass a (n_slices, N, N) array
convergence_mrad=20.0,
)
# Same detector channels as run_stem; per-position quantum multislice circuit
β Validated Resultsο
Every quantum pipeline is validated against a classical twin implementation:
Check |
Result |
|---|---|
Relativistic wavelength vs literature (100/200/300 kV) |
exact (0.037014 / 0.025079 / 0.019687 Γ ) |
Interaction constant Ο vs literature |
exact (e.g. 0.72884Γ10β»Β³ rad Vβ»ΒΉΓ β»ΒΉ at 200 kV) |
CTF Ο(k) and Fresnel propagator vs Kirkland closed forms |
machine precision |
Quantum vs classical multislice exit wave |
fidelity 1.000000 |
STEM multislice single-slice limit vs |
correlation 1.0000 |
All simulations run on Qiskit Statevector (exact) and are ready for transpilation to IBM hardware.
π Notebooksο
Notebook |
Description |
|---|---|
Package overview, CTEM basics, Scherzer defocus |
|
Advanced CTEM: aberrations, CTF envelopes |
|
MoSβ and Graphene end-to-end workflows |
|
Quantum circuit CTEM showcase (pre-executed) |
|
CTF envelope & damping functions |
|
SiβNβ multislice quantum simulation |
|
Quantum circuit CTEM demonstration β WPOA & multislice |
|
Quantum circuit STEM demonstration β WPOA & multislice |
βοΈ Circuit Architecturesο
CTEM (WPOA)ο
|0β©βn β[Hβn]β[DiagGate(exp(iΟV))]β[QFT]β[DiagGate(exp(iΟ))]β[QFTβ ]β |Ο_imageβ©
phase grating k-sp lens CTF image
Multislice (Fresnel propagation)ο
|0β©βn β[Hβn]β( [PhaseGrating(V_j)] β [QFT] β [FresnelProp(dz)] β [QFTβ ] )ΓN_slicesβ |Οβ©
STEM (per probe position)ο
|probe(r_s)β© β( [PhaseGrating(V_j)] β [QFT] β [FresnelProp(dz)] β [QFTβ ] )ΓN_slicesβ β detector integrals
π API Referenceο
from quscope.quantum_ctem import (
# CTEM (WPOA)
QuantumCTEMCircuit, QuantumCTEMParameters, QuantumClassicalValidator,
# CTEM multislice
QuantumMultisliceCircuit, QuantumMultisliceParameters,
FresnelPropagatorCircuit, QuantumClassicalMultisliceValidator,
# STEM
STEMDetectors, run_stem,
# STEM multislice
run_stem_multislice, build_probe_circuit, fresnel_propagator_phase,
# CTF
CTFCalculator,
# Hamiltonian
TEMHamiltonian,
)
Full Sphinx documentation: quscope.readthedocs.io
π€ Contributingο
Fork the repository
Create a feature branch (
git checkout -b feature/my-feature)Commit with descriptive messages
Ensure
pytestpasses and coverage remains β₯ 80 %Open a Pull Request to
main
π Licenseο
MIT License β see LICENSE for details.
π Citationο
If you use QuScope in your research, please cite the companion paper:
@article{lam2026quantum,
title = {{Quantum Algorithm Framework for Phase-Contrast Transmission
Electron Microscopy Image Simulation}},
author = {Lam, Sean D. and dos Reis, Roberto},
journal = {arXiv preprint},
volume = {arXiv:2602.13438},
year = {2026},
url = {https://arxiv.org/abs/2602.13438},
doi = {10.48550/arXiv.2602.13438}
}