Skip to main content

Fast algorithms for MD trajectories

Project description

Rust Simulation Tools

CI/CD PyPI version

High-performance molecular dynamics analysis library with a Python API. Written in Rust for speed, exposed to Python via PyO3.

Installation

From PyPI using uv:

uv pip install rust-simulation-tools

For the latest version which may not be on PyPI yet, make sure you have cloned this repo and have maturin installed to your environment of choice:

uv venv /path/to/env
source /path/to/env/bin/activate
uv pip install maturin

git clone https://github.com/msinclair-py/rust-simulation-tools.git
cd rust-simulation-tools
maturin develop --release

Features

  • File I/O: AMBER topology/coordinates, DCD and MDCRD trajectories
  • Selections: VMD-style atom selection with property access
  • Analysis: SASA, trajectory unwrapping, Kabsch alignment
  • Fingerprints: Per-residue interaction energies (LJ + electrostatic)
  • MM-PBSA/GBSA: Binding free energy with per-residue decomposition

Quick Start

Load a System

from rust_simulation_tools import read_prmtop, read_inpcrd, DcdReader

# Load topology and coordinates
topo = read_prmtop("system.prmtop")
coords, box = read_inpcrd("system.inpcrd")

# Load trajectory
dcd = DcdReader("trajectory.dcd")
trajectory, boxes = dcd.read_all()

Atom Selection

Select atoms using VMD-style expressions. The select() method returns a Selection object with direct property access.

# Select protein backbone
backbone = topo.select("backbone")
print(f"{backbone.n_atoms} atoms, {backbone.n_residues} residues")

# Access properties directly
ca = topo.select("protein and name CA")
print(ca.masses)          # numpy array of masses
print(ca.charges)         # numpy array of charges
print(ca.total_mass())    # sum of masses

# Distance-based selection (requires coordinates)
near_lig = topo.select("protein and within 5.0 of resname LIG", coordinates=coords)

# Set operations
charged = topo.select("charge < -0.5 or charge > 0.5")
sidechain = topo.select("sidechain")
charged_sidechain = sidechain & charged  # intersection

Supported selection keywords:

  • protein, backbone, sidechain, water
  • name CA, resname ALA, resid 1-50
  • charge > 0.5, mass < 2.0
  • within 5.0 of resname LIG
  • Boolean: and, or, not

SASA Calculation

from rust_simulation_tools import compute_sasa_from_topology

# Single frame
sasa = compute_sasa_from_topology(topo, coords)
print(f"Total SASA: {sasa['total']:.1f} A^2")
print(f"Per-atom: {sasa['per_atom'].shape}")
print(f"Per-residue: {sasa['per_residue']}")  # dict of residue_idx -> area

Trajectory Alignment

from rust_simulation_tools import kabsch_align

# Align trajectory to first frame using backbone atoms
backbone = topo.select("backbone")
aligned = kabsch_align(trajectory, trajectory[0], backbone.indices)

Trajectory Unwrapping

from rust_simulation_tools import unwrap_dcd

# Remove periodic boundary artifacts
unwrapped, boxes = unwrap_dcd("trajectory.dcd")

Interaction Fingerprints

Calculate per-residue LJ and electrostatic interactions between a target and partner.

from rust_simulation_tools import FingerprintSession, FingerprintMode

session = FingerprintSession("system.prmtop", "trajectory.dcd")
session.set_target_residues(range(10))           # residues to fingerprint
session.set_binder_residues(range(10, 100))      # interaction partner

# Iterate over frames
for lj_fp, es_fp in session:
    print(f"LJ: {lj_fp.sum():.2f}, ES: {es_fp.sum():.2f} kJ/mol")

# Switch perspective: fingerprint binder residues instead
session.set_fingerprint_mode(FingerprintMode.Binder)
session.seek(0)

MM-PBSA/GBSA Binding Energy

Calculate binding free energy with Generalized Born or Poisson-Boltzmann solvation.

from rust_simulation_tools import (
    compute_binding_energy,
    decompose_binding_energy,
    GbModel, GbParams, PbParams, SaParams,
)

# MM-GBSA over trajectory
result = compute_binding_energy(
    topo,
    trajectory_path="trajectory.dcd",
    receptor_residues=list(range(0, 250)),
    ligand_residues=list(range(250, 251)),
    gb_params=GbParams(model=GbModel.ObcII, salt_concentration=0.15),
    sa_params=SaParams(),
    trajectory_format="dcd",
)

print(f"Delta G: {result.mean_delta_total:.2f} +/- {result.std_delta_total:.2f} kcal/mol")
print(f"  MM:  {result.mean_delta_mm:.2f}")
print(f"  GB:  {result.mean_delta_gb:.2f}")
print(f"  SA:  {result.mean_delta_sa:.2f}")

# MM-PBSA (use pb_params instead of gb_params)
pb_result = compute_binding_energy(
    topo, "trajectory.dcd",
    receptor_residues=list(range(0, 250)),
    ligand_residues=list(range(250, 251)),
    pb_params=PbParams(grid_spacing=0.5, salt_concentration=0.15),
)

# Per-residue decomposition
decomp = decompose_binding_energy(
    topo, coords,
    receptor_residues=list(range(0, 250)),
    ligand_residues=list(range(250, 251)),
)

for res in sorted(decomp.receptor_residues, key=lambda r: r.total())[:5]:
    print(f"{res.residue_label}{res.residue_index}: {res.total():.2f} kcal/mol")

API Reference

File I/O

Function Description
read_prmtop(path) Load AMBER topology, returns AmberTopology
read_inpcrd(path) Load AMBER coordinates, returns (coords, box)
DcdReader(path) DCD trajectory reader
MdcrdReader(path, n_atoms, has_box) AMBER ASCII trajectory reader

AmberTopology

Property/Method Description
.n_atoms, .n_residues System size
.atom_names, .residue_labels Atom/residue names
.charges(), .sigmas(), .epsilons() Force field parameters
.select(expression, coordinates=None) VMD-style selection, returns Selection
.bonds() List of bonded atom pairs

Selection

Property/Method Description
.n_atoms, .n_residues Selection size
.indices Atom indices (numpy array)
.masses, .charges, .radii Per-atom properties
.atom_names, .residue_names Names as lists
.positions Coordinates (if provided during selection)
.total_mass(), .total_charge() Aggregate properties
&, |, - Set operations (intersection, union, difference)

DcdReader

Property/Method Description
.n_frames, .n_atoms Trajectory size
.read_frame() Read next frame, returns (coords, box)
.read_all() Read all frames, returns (trajectory, boxes)
.seek(frame) Jump to frame index

Analysis Functions

Function Description
compute_sasa_from_topology(topo, coords) SASA using topology for radii
calculate_sasa(coords, radii, residue_indices) SASA with explicit radii
kabsch_align(trajectory, reference, align_indices) RMSD-minimizing alignment
unwrap_dcd(path) Remove PBC artifacts from DCD
unwrap_system(trajectory, boxes) Remove PBC artifacts

MM-PBSA/GBSA

Function Description
compute_binding_energy(...) Trajectory-averaged binding energy
compute_binding_energy_single_frame(...) Single frame binding energy
decompose_binding_energy(...) Per-residue energy decomposition
compute_mm_energy(topo, coords) Molecular mechanics energy
compute_gb_energy(topo, coords, params) GB solvation energy
compute_pb_energy(topo, coords, params) PB solvation energy
interaction_entropy(frames, temperature) Entropy correction

Development

git clone https://github.com/msinclair-py/rust-simulation-tools.git
cd rust-simulation-tools
pip install maturin pytest numpy
maturin develop --release
pytest tests/ -v

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rust_simulation_tools-0.2.2.tar.gz (106.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rust_simulation_tools-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rust_simulation_tools-0.2.2-cp313-cp313-macosx_11_0_arm64.whl (608.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rust_simulation_tools-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (683.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rust_simulation_tools-0.2.2-cp312-cp312-macosx_11_0_arm64.whl (609.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rust_simulation_tools-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (681.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rust_simulation_tools-0.2.2-cp311-cp311-macosx_11_0_arm64.whl (607.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rust_simulation_tools-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (681.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rust_simulation_tools-0.2.2-cp310-cp310-macosx_11_0_arm64.whl (608.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file rust_simulation_tools-0.2.2.tar.gz.

File metadata

  • Download URL: rust_simulation_tools-0.2.2.tar.gz
  • Upload date:
  • Size: 106.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for rust_simulation_tools-0.2.2.tar.gz
Algorithm Hash digest
SHA256 290386deb78c3a8125c2995867ca307ba18cc622f8a31b70cbfa93d038366bdc
MD5 23ad5946e376c82cd31980b837018149
BLAKE2b-256 88e7ab09380a14c281846f5c7a34a4c7916f17c63d76918f96189b8aebacd590

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a22467d6c79150380c2dc171349fe4ce2a31706cbd77a36aa6bfc9d1521b43c3
MD5 ab20b0267438da48bcf8145dd7f9b044
BLAKE2b-256 b4c2165b91db69f9494817dd06f52b89ad7c6e4127e1c017def1cb61f5abba72

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4529148680eabfa3372b0b1e1fd1d13166b17aae97155e45d7a6e27e2b29bdd2
MD5 e6f64e077cae229dc25a5c5e6d891e3f
BLAKE2b-256 cec7138429662daafb29c86149f4f99655b1367503b83efca15031a3a4cb38f3

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e5212db2655e7d070fd37ac375e02b9d50f15cbb0370cdc1cbac51ee181e35d7
MD5 69d552c483a430d02dc1b69defdf22dd
BLAKE2b-256 27670cd504e364f29b29dbdcc385553d741bd9976361022318050d61fed7c457

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96ce877b6d60a53480b4245e0888a69fcdc6c01499c9a36a5556077ef9d151fe
MD5 596ec8378334a3fd26cfa8cf8aa1216b
BLAKE2b-256 38049710535a7b33ce1cef3c772fdb8f072fc72b9dd4fddf538239e8890e838d

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 81040a3601d62a16efdbbac1e8dfc00ac0445cca7495fecac1939e65530f9d0a
MD5 a401d87d82cd98d05a90050666ff553a
BLAKE2b-256 8f5acb33248a9f53dd5a8307031c2e93fd38249239fcaaff63fc265fe42a6b20

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c2f923cdc360445ddf88b623616e96d60c284498d593bc5a11846347d5da204d
MD5 52d4695ebfb3006903dadbd4206545e1
BLAKE2b-256 0dbf3488d6401d2e50df40c4282924e5a6d9a715097331d9e9a267055d0b9308

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cdc435e8d445098dc11b90b26aa2d7a7ee421cf5dbf86e31fea0377ffda5977
MD5 596b7cac595aec71b359fa815fbdf1c8
BLAKE2b-256 52622d851ce514e59a4789ee2b349a575668b89cdb26c9683bd179d15437240b

See more details on using hashes here.

File details

Details for the file rust_simulation_tools-0.2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_simulation_tools-0.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb62a7da5f7d30df59ec90519a3595ccbd358b3dafb86034e4670481666395eb
MD5 cd44c194a4716c60455734b91b799ad9
BLAKE2b-256 0e0a858b0c423f801c5f241b86bc17176090d5f02cafc7ee12962b713c228d06

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page