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

Notebooks & Examples:

πŸ“– Indices and Tables

πŸ”¬ QuScope v0.2.0: Quantum Algorithms for Electron Microscopy

PyPI version Documentation Status License: MIT Python 3.9+ Qiskit 2.x

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


πŸš€ 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

quantum_ctem_circuit

CTEM bright-field imaging (WPOA + CTF)

Phase-grating DiagonalGate β†’ QFT β†’ CTF DiagonalGate β†’ IQFT

quantum_multislice_circuit

CTEM multislice propagation

Alternating phase grating / Fresnel-propagator DiagonalGates + QFT

quantum_stem

STEM imaging (single-slice WPOA)

One quantum circuit per probe position

quantum_stem_multislice

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

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 run_stem

correlation 1.0000

All simulations run on Qiskit Statevector (exact) and are ready for transpilation to IBM hardware.


πŸ““ Notebooks

Notebook

Description

01_getting_started

Package overview, CTEM basics, Scherzer defocus

02_quantum_ctem_advanced

Advanced CTEM: aberrations, CTF envelopes

03_material_workflows

MoSβ‚‚ and Graphene end-to-end workflows

05_fully_quantum_ctem

Quantum circuit CTEM showcase (pre-executed)

06_quantum_ctf_envelope

CTF envelope & damping functions

07_si3n4_quantum_multislice

Si₃Nβ‚„ multislice quantum simulation

10_quantum_ctem

Quantum circuit CTEM demonstration β€” WPOA & multislice

11_quantum_stem

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

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/my-feature)

  3. Commit with descriptive messages

  4. Ensure pytest passes and coverage remains β‰₯ 80 %

  5. 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}
}