saxs Module
The saxs module enables the simulation of Small-Angle X-ray Scattering (SAXS) profiles from atomic structures and ensembles.
Note: As of version 1.38.0, the SAXS calculation engine is powered by the standalone synth-saxs package. This module serves as a backward-compatible shim.
Overview
SAXS is a technique used to probe the global shape, size, and flexibility of proteins in solution. This module uses the Debye Formula to calculate the scattering intensity $I(q)$ as a function of the scattering vector magnitude $q$.
Key Features
- Debye Formula Implementation: Accurate $O(N^2)$ calculation of interference patterns.
- Atomic Form Factors: Uses $q$-dependent Gaussian approximations for C, N, O, S, P, and H.
- Solvent Contrast: Accounts for the scattering of the displaced solvent volume (hydration shell approximation).
- Ensemble Averaging: Computes the mean scattering profile for flexible structures or structural ensembles.
API Reference
::: synth_pdb.saxs handler: python options: members: - calculate_saxs_profile - export_saxs_profile - SaxsSimulator
Scientific Principles
The Debye Formula
The total scattering intensity $I(q)$ is computed by summing the interference between all pairs of atoms $i$ and $j$:
$$I(q) = \sum_i \sum_j f_i(q) f_j(q) \frac{\sin(q r_{ij})}{q r_{ij}}$$
where: - $q$ is the scattering vector ($q = \frac{4\pi \sin \theta}{\lambda}$). - $r_{ij}$ is the distance between atoms $i$ and $j$. - $f_i(q)$ is the effective atomic form factor.
Solvent Subtraction
In solution, we measure the "excess" scattering of the protein. The module approximates the effective form factor as:
$$f_{eff}(q) = f_{vac}(q) - \rho_{sol} V_i \exp\left(-\frac{q^2 V_i^{2/3}}{4\pi}\right)$$
where $\rho_{sol}$ is the electron density of the solvent and $V_i$ is the atomic volume.
Usage Example
from synth_pdb.generator import PeptideGenerator
from synth_pdb.saxs import calculate_saxs_profile, export_saxs_profile
# 1. Generate a structure
gen = PeptideGenerator("NSDSECPLSHDGYCLHDGVCMYIEALDKYACNCVVGYIGERCQ")
structure = gen.generate(conformation="alpha")
# 2. Simulate SAXS profile
q, intensity = calculate_saxs_profile(
structure,
q_min=0.0,
q_max=0.5,
n_points=100
)
# 3. Export to .dat file
export_saxs_profile(q, intensity, "protein_saxs.dat")