Skip to main content

🔬 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

📄 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
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

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

Metadata

Release files for quscope 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quscope 0.2.0
File Size Uploaded Provenance Actions
quscope-0.2.0.tar.gz 6.0 MB Without provenance Details for quscope-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for quscope 0.2.0
File Interpreter ABI Platform Actions
quscope-0.2.0-py3-none-any.whl Python 3 none any Details for quscope-0.2.0-py3-none-any.whl

Total release size: 6.2 MB

Release files / quscope-0.2.0.tar.gz

Download URL quscope-0.2.0.tar.gz
Size 6.0 MB
Tags Source
SHA-256 checksum
How to use checksums
de26a31e75f6a6896d3958088498526f7f4f38d1cc09708cef66d51930b439c5
BLAKE2b-256 checksum
How to use checksums
172637c7c0869ee655939d2306583cceb6e41de546cdf977183dff4a795932d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / quscope-0.2.0-py3-none-any.whl

Download URL quscope-0.2.0-py3-none-any.whl
Size 205.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8cdd5f7dc8fa9e4ec6f1fa73a0b7fe6e294da84f915100a08cb03478f78b7bbe
BLAKE2b-256 checksum
How to use checksums
1667d4303d47b31a201c5115d7b2c7c5aff9add161942e63199c927bfd22f1f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Security for quscope 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page