Packmol InterfaceΒΆ
If you have packmol installed, you can use it via pack create periodic boxed from ase.Atoms
objects.
[1]:
from ase.build import separate
import rdkit2ase
[2]:
water = rdkit2ase.smiles2conformers("O", numConfs=10)
etoh = rdkit2ase.smiles2conformers("CCO", numConfs=10)
box = rdkit2ase.pack(
data=[water, etoh], counts=[5, 5], density=800, packmol="packmol.jl"
)
[3]:
print(box)
separate(box)
Atoms(symbols='OH2OH2OH2OH2OH2C2OH6C2OH6C2OH6C2OH6C2OH6', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366], atomtypes=..., bfactor=..., occupancy=..., residuenames=..., residuenumbers=...)
[3]:
[Atoms(symbols='OH2', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='OH2', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='OH2', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='OH2', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='OH2', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='C2H3OH3', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='C2H3OH3', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='C2H3OH3', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='C2H3OH3', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366]),
Atoms(symbols='C2H3OH3', pbc=True, cell=[8.728901107040366, 8.728901107040366, 8.728901107040366])]
You can utilize all other features here as well.
[4]:
waters = rdkit2ase.match_substructure(
box,
smiles="O",
)
etohs = rdkit2ase.match_substructure(
box,
smiles="CCO",
)
print(f"Found {len(waters)} water molecules and {len(etohs)} ethanol molecules.")
Found 5 water molecules and 5 ethanol molecules.