quscope.simulations

Lower-level classical simulation helpers (multislice propagation, WPOA, and shared quantum utility functions).

Multislice method for thick specimen CTEM simulations. Uses quantum algorithms (QFT/iQFT) for wave propagation between slices.

class quscope.simulations.multislice.ThickCTEM(image_size=50.0, n_qubits=8, beam_energy=200000.0, kirkland_params_file='kirkland.json')[source]

Bases: object

Quantum multislice CTEM simulation for thick specimens.

This class implements: - Multislice algorithm for thick specimens - QFT for propagation between slices - Support for arbitrary crystal structures - Dynamical scattering effects

get_atoms_in_slice(atoms_3d, z_start, z_end)[source]

Get atoms within a z-range, with periodic boundary conditions

calculate_slice_transmission(atoms_in_slice, slice_thickness)[source]

Calculate transmission function for a slice

calculate_propagator(slice_thickness)[source]

Calculate Fresnel propagator.

Parameters:

slice_thicknessfloat

Thickness of each slice in Angstroms.

Returns:

propagatornp.ndarray

Fresnel propagator.

simulate_multislice(atoms_3d, total_thickness, slice_thickness=2.0, defocus=0)[source]

Simulate multislice propagation through a specimen.

Parameters:

atoms_3dlist

List of atom dictionaries with ‘position’ [x,y,z] and ‘Z’ keys.

total_thicknessfloat

Total specimen thickness in Angstroms.

slice_thicknessfloat

Thickness of each slice in Angstroms.

defocusfloat

Objective lens defocus in Angstroms.

Returns:

Dictionary with simulation results.

simulate_thickness_series(atoms_3d, thicknesses, slice_thickness=2.0, defocus=0)[source]

Simulate images at different specimen thicknesses.

Parameters:

atoms_3dlist

List of atom dictionaries.

thicknesseslist

List of thicknesses to simulate.

slice_thicknessfloat

Thickness per slice in Angstroms.

defocusfloat

Objective lens defocus.

Returns:

Dictionary with results for each thickness.

plot_wave_magnitude(results, thicknesses=None)[source]

Plot magnitude of electron wave function at different thicknesses (Figure 7.2)

plot_intensity_vs_thickness(results)[source]

Plot intensity and phase vs thickness (Figure 7.3)

plot_phase_contrast_series(results, thicknesses=None)[source]

Plot simulated bright field phase contrast images (Figure 7.4)

print_intensity_table(results)[source]

Print intensity vs thickness comparison table

quscope.simulations.multislice.create_gaas_structure(supercell_size=(6, 6, 20), a_gaas=5.65)[source]

Create GaAs crystal structure oriented for [110] projection

Parameters: - supercell_size: (nx, ny, nz) repetitions of unit cell - a_gaas: GaAs lattice constant in Angstroms

Returns: - List of atom dictionaries with ‘position’ and ‘Z’ keys - Dictionary with structural information

Quantum-Enhanced Weak Phase Object Simulations

This module implements a hybrid quantum-classical framework for simulating CTEM and STEM images of thin specimen based on weak phase object approximation. This leverages QFTs and inverse QFTs, replacing various FFTs and iFFTs to reduce computational overhead.

class quscope.simulations.wpo.ThinCTEM(image_size=50.0, n_qubits=8, beam_energy=200000.0, kirkland_params_file='kirkland.json')[source]

Bases: object

Quantum CTEM simulation for thin specimens using weak phase object approximation.

This class implements: - Weak phase object approximation for thin specimens - QFT replacing classical FFT - Support for abritrary atomic structures - For CTEM at the moment

calculate_transmission_function(atom_positions, atom_z_values)[source]

Calculate transmission function for weak phase object.

Parameters:

atom_positionslist

List of (x,y) positions in Angstroms.

atom_z_valueslist

List of atomic numbers corresponding to positions

Returns:

transmissionnp.ndarray

Complex transmission function.

objective_lens_transfer_function(kx, ky, defocus, Cs, alpha_max=None)[source]

Apply objective lens transfer function in reciprocal space.

Parameters:

kx, kyfloat

Spatial components in the x and y directions in space.

defocusfloat

Defocus in Angstroms.

Csfloat

Spherical aberration coefficient in Angstroms.

alpha_maxfloat, optional

Objective aperture semi-angle in mrad.

Returns:

Hnp.ndarray

Transfer function.

simulate_image(atom_positions, atom_z_values, defocus=700, Cs=13000000.0, alpha_max=None)[source]

Simulate CTEM image using quantum algorithms.

Parameters:

atom_positionslist

List of (x,y) positions in Angstroms.

atom_z_valueslist

List of atomic numbers.

defocusfloat

Defocus in Angstroms.

Csfloat

Spherical aberration in Angstroms.

alpha_maxfloat, optional

Objective aperture in mrad.

Returns:

resultsDict

Dictionary containing: - ‘intensity’: Final image intensity. - ‘transmission’: Complex transmission function. - ‘psi’: Exit wave function. - ‘potential’: Projected potential.

plot_transmission_function(atom_positions, atom_z_values)[source]

Plot transmission function line scan (reproduces Figure 5.11)

plot_phase_contrast_image(results, title_suffix='')[source]

Plot phase contrast image and line scan (reproduces Figure 5.12)

quscope.simulations.wpo.create_five_atoms_example()[source]

Create the classic 5-atom example from Kirkland Figure 5.11

Quantum Transform Utilities for TEM Simulations

This module contains all quantum circuit operations for implementing Quantum Fourier Transforms (QFT) and Inverse Quantum Fourier Transforms (iQFT).

class quscope.simulations.quantum_utils.TEMQFT(n_qubits=8)[source]

Bases: object

Class containing quantum transform operations for CTEM simulations.

encode_to_quantum_state(data_1d)[source]

Encode classical 1D array into quantum state amplitudes.

Parameters:

data_1dnp.ndarray

1D numpy array of length 2^n_qubits to encode.

Returns:

circuitQuantumCircuit

Quantum circuit with encoded data.

normfloat

Normalization factor.

apply_qft(circuit, qubits)[source]

Apply Quantum Fourier Transform to specified qubits.

Parameters:

circuitQuantumCircuit

Quantum circuit.

qubitslist

List of qubit indices.

Returns:

circuitQuantumCircuit

Circuit with QFT applied.

apply_iqft(circuit, qubits)[source]

Apply Inverse Quantum Fourier Transform to specified qubits.

Parameters:

circuitQuantumCircuit

Quantum circuit.

qubitslist

List of qubit indices.

Returns:

circuitQuantumCircuit

Circuit with iQFT applied.

decode_quantum_state(circuit)[source]

Decode quantum state back to classical data.

Parameters:

circuitQuantumCircuit

Quantum circuit to decode.

Returns:

amplitudesnp.ndarray

Complex array of amplitudes.

qft_1d(data_1d)[source]

Perform 1D QFT on classical data.

Parameters:

data_1dnp.ndarray

1D complex array.

Returns:

transformed_datanp.ndarray

QFT result with proper normalization.

iqft_1d(data_1d)[source]

Perform 1D iQFT on classical data.

Parameters:

data_1dnp.ndarray

1D complex array.

Returns:

transformed_datanp.ndarray

iQFT result with proper normalization.

qft_2d(data_2d, progress=False)[source]

Perform 2D QFT using row-column decomposition.

Parameters:

data_2dnp.ndarray

2D complex array.

progressbool

Print progress messages. Default is False.

Returns:

transformed_datanp.ndarray

2D QFT result.

iqft_2d(data_2d, progress=False)[source]

Perform 2D iQFT using row-column decomposition.

Parameters:

data_2dnp.ndarray

2D complex array.

progressbool

Print progress message. Default is False.

Returns:

transformed_datanp.ndarray

2D iQFT result.