Skip to content

Python

Packmol-grade molecular packing in Rust, with a first-class Python binding.

molpack arranges \(N\) molecule types under geometric restraints without overlaps. The engine is a faithful port of Packmol's GENCAN-driven algorithm (Martínez et al. 2009); five canonical workloads stay pinned against Packmol reference output.

At a glance

import molrs
from molpack import InsideBoxRestraint, Molpack, Target

frame = molrs.io.read_pdb("water.pdb")

water = (
    Target(frame, count=100)
    .with_name("water")
    .with_restraint(InsideBoxRestraint([0.0, 0.0, 0.0], [40.0, 40.0, 40.0]))
)

packer = Molpack().with_tolerance(2.0).with_seed(42)
frame = packer.pack([water], max_loops=200)
print(f"packed {frame['atoms'].nrows} atoms")

Next steps

See also