Skip to content

Commit 9f0ed4e

Browse files
committed
Expose changed_cmaps function on PeturbableOpenMMMolecule.
1 parent 9b9ea39 commit 9f0ed4e

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

wrapper/Convert/SireOpenMM/_perturbablemol.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,58 @@
55
"_changed_torsions",
66
"_changed_exceptions",
77
"_changed_constraints",
8+
"_changed_cmaps",
89
"_get_lever_values",
910
]
1011

1112

13+
def _changed_cmaps(obj, to_pandas: bool = True):
14+
"""
15+
Return a list of the CMAP torsions that change parameters in this
16+
perturbation
17+
18+
Parameters
19+
----------
20+
21+
to_pandas: bool, optional, default=True
22+
If True then the list of CMAP torsions will be returned as a pandas
23+
DataFrame
24+
"""
25+
changed_cmaps = []
26+
27+
atoms = obj.atoms()
28+
sizes = list(obj.get_cmap_grid_sizes())
29+
grids0 = list(obj.get_cmap_grids0())
30+
grids1 = list(obj.get_cmap_grids1())
31+
32+
offset = 0
33+
for torsion, n in zip(obj.get_cmap_atoms(), sizes):
34+
ns = n * n
35+
g0 = grids0[offset : offset + ns]
36+
g1 = grids1[offset : offset + ns]
37+
offset += ns
38+
39+
if g0 != g1:
40+
atom0, atom1, atom2, atom3, atom4 = (atoms[i] for i in torsion)
41+
42+
torsion_atoms = (atom0, atom1, atom2, atom3, atom4)
43+
44+
if to_pandas:
45+
torsion_atoms = "-".join(_name(a) for a in torsion_atoms)
46+
47+
changed_cmaps.append((torsion_atoms, n))
48+
49+
if to_pandas:
50+
import pandas as pd
51+
52+
changed_cmaps = pd.DataFrame(
53+
changed_cmaps,
54+
columns=["torsion", "grid_size"],
55+
)
56+
57+
return changed_cmaps
58+
59+
1260
def _get_lever_values(
1361
obj,
1462
schedule=None,

wrapper/Convert/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def smarts_to_rdkit(*args, **kwargs):
9393
_changed_torsions,
9494
_changed_exceptions,
9595
_changed_constraints,
96+
_changed_cmaps,
9697
_get_lever_values,
9798
)
9899

@@ -127,6 +128,7 @@ def smarts_to_rdkit(*args, **kwargs):
127128
PerturbableOpenMMMolecule.changed_torsions = _changed_torsions
128129
PerturbableOpenMMMolecule.changed_exceptions = _changed_exceptions
129130
PerturbableOpenMMMolecule.changed_constraints = _changed_constraints
131+
PerturbableOpenMMMolecule.changed_cmaps = _changed_cmaps
130132
PerturbableOpenMMMolecule.get_lever_values = _get_lever_values
131133

132134
_has_openmm = True

0 commit comments

Comments
 (0)