molpack — Python¶
Packmol-grade molecular packing in Rust, with Python bindings.
molpack produces a non-overlapping arrangement of \(N\) molecule types
with user-specified copy counts under geometric restraints. The engine
is a faithful port of Packmol's GENCAN-driven three-phase algorithm
(Martínez et al. 2009); correctness is pinned against Packmol's
reference output for five canonical workloads.
At a glance¶
import molrs
from molpack import InsideBoxRestraint, Molpack, Target
frame = molrs.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¶
- Installation — pip install and verification.
- Getting Started — first pack end-to-end.
- User Guide: Targets · Restraints · Packer · Periodic boundaries
- Examples — five Packmol-equivalent workloads.
- API Reference — class-by-class summary.
See also¶
- Rust crate:
molcrafts-molpack— the underlying engine. All algorithmic details are documented there. molcrafts-molrs— companion package for file I/O (PDB, XYZ, …) and theFramedata model. Pass amolrs.Framedirectly toTarget; no manual array extraction needed.Molpack.pack()returns a Frame-compatible structure for the writer of your choice.