from parmed.tools.exceptions import ChangeRadiiError
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[docs]def bondi(parm):
""" Sets the bondi radii """
for i, atom in enumerate(parm.atoms):
# Radius of C atom depends on what type it is
if atom.atomic_number == 6:
if atom.type.startswith('C1') and atom.mass > 13.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C2') and atom.mass > 14.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C3') and atom.mass > 15.0:
atom.solvent_radius = 2.2
else:
atom.solvent_radius = 1.7
# All other elements have fixed radii for all types/partners
elif atom.atomic_number == 1:
atom.solvent_radius = 1.2
elif atom.atomic_number == 7:
atom.solvent_radius = 1.55
elif atom.atomic_number == 8:
atom.solvent_radius = 1.5
elif atom.atomic_number == 9:
atom.solvent_radius = 1.5
elif atom.atomic_number == 14:
atom.solvent_radius = 2.1
elif atom.atomic_number == 15:
atom.solvent_radius = 1.85
elif atom.atomic_number == 16:
atom.solvent_radius = 1.8
elif atom.atomic_number == 17:
atom.solvent_radius = 1.7
else:
atom.solvent_radius = 1.5
try:
parm.parm_data['RADIUS_SET'][0] = 'Bondi radii (bondi)'
except AttributeError:
pass
_screen1(parm)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[docs]def amber6(parm):
""" Sets the amber6 radii """
for i, atom in enumerate(parm.atoms):
# Radius of H atom depends on element it is bonded to
bondeds = list(atom.bond_partners)
if atom.atomic_number == 1:
if bondeds[0].atomic_number == 6: # carbon
atom.solvent_radius = 1.3
elif bondeds[0].atomic_number in (8, 16): # oxygen or sulfur
atom.solvent_radius = 0.8
else: # anything else
atom.solvent_radius = 1.2
# Radius of C atom depends on what type it is
elif atom.atomic_number == 6:
if atom.type.startswith('C1') and atom.mass > 13.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C2') and atom.mass > 14.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C3') and atom.mass > 15.0:
atom.solvent_radius = 2.2
else:
atom.solvent_radius = 1.7
# All other elements have fixed solvent_radius for all types/partners
elif atom.atomic_number == 7:
atom.solvent_radius = 1.55
elif atom.atomic_number == 8:
atom.solvent_radius = 1.5
elif atom.atomic_number == 9:
atom.solvent_radius = 1.5
elif atom.atomic_number == 14:
atom.solvent_radius = 2.1
elif atom.atomic_number == 15:
atom.solvent_radius = 1.85
elif atom.atomic_number == 16:
atom.solvent_radius = 1.8
elif atom.atomic_number == 17:
atom.solvent_radius = 1.7
else:
atom.solvent_radius = 1.5
try:
parm.parm_data['RADIUS_SET'][0] = 'amber6 modified Bondi radii (amber6)'
except AttributeError:
pass
_screen1(parm)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[docs]def mbondi(parm):
""" Sets the mbondi radii """
for i, atom in enumerate(parm.atoms):
# Radius of H atom depends on element it is bonded to
if atom.atomic_number == 1:
bondeds = list(atom.bond_partners)
if bondeds[0].atomic_number in (6, 7): # C or N
atom.solvent_radius = 1.3
elif bondeds[0].atomic_number in (8, 16): # O or S
atom.solvent_radius = 0.8
else:
atom.solvent_radius = 1.2
# Radius of C atom depends on what type it is
elif atom.atomic_number == 6:
if atom.type.startswith('C1') and atom.mass > 13.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C2') and atom.mass > 14.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C3') and atom.mass > 15.0:
atom.solvent_radius = 2.2
else:
atom.solvent_radius = 1.7
# All other elements have fixed solvent_radius for all types/partners
elif atom.atomic_number == 7:
atom.solvent_radius = 1.55
elif atom.atomic_number == 8:
atom.solvent_radius = 1.5
elif atom.atomic_number == 9:
atom.solvent_radius = 1.5
elif atom.atomic_number == 14:
atom.solvent_radius = 2.1
elif atom.atomic_number == 15:
atom.solvent_radius = 1.85
elif atom.atomic_number == 16:
atom.solvent_radius = 1.8
elif atom.atomic_number == 17:
atom.solvent_radius = 1.7
else:
atom.solvent_radius = 1.5
try:
parm.parm_data['RADIUS_SET'][0] = 'modified Bondi radii (mbondi)'
except AttributeError:
pass
_screen1(parm)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[docs]def mbondi2(parm):
""" Sets the mbondi2 radii """
for i, atom in enumerate(parm.atoms):
# Radius of H atom depends on element it is bonded to
if atom.atomic_number == 1:
if atom.bond_partners[0].atomic_number == 7:
atom.solvent_radius = 1.3
else:
atom.solvent_radius = 1.2
# Radius of C atom depends on what type it is
elif atom.atomic_number == 6:
if atom.type.startswith('C1') and atom.mass > 13.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C2') and atom.mass > 14.0:
atom.solvent_radius = 2.2
if atom.type.startswith('C3') and atom.mass > 15.0:
atom.solvent_radius = 2.2
else:
atom.solvent_radius = 1.7
# All other elements have fixed solvent_radius for all types/partners
elif atom.atomic_number == 7:
atom.solvent_radius = 1.55
elif atom.atomic_number == 8:
atom.solvent_radius = 1.5
elif atom.atomic_number == 9:
atom.solvent_radius = 1.5
elif atom.atomic_number == 14:
atom.solvent_radius = 2.1
elif atom.atomic_number == 15:
atom.solvent_radius = 1.85
elif atom.atomic_number == 16:
atom.solvent_radius = 1.8
elif atom.atomic_number == 17:
atom.solvent_radius = 1.7
else:
atom.solvent_radius = 1.5
try:
parm.parm_data['RADIUS_SET'][0] = 'H(N)-modified Bondi radii (mbondi2)'
except AttributeError:
pass
_screen1(parm)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[docs]def mbondi3(parm):
""" Sets mbondi3 radii """
mbondi2(parm) # start from mbondi2 radii
for i, atom in enumerate(parm.atoms):
# Adjust OE (GLU), OD (ASP), and HH/HE (ARG)
if atom.residue.name in ('GLU', 'ASP', 'GL4', 'AS4'):
if atom.name.startswith('OE') or atom.name.startswith('OD'):
atom.solvent_radius = 1.4
elif atom.residue.name == 'ARG':
if atom.name.startswith('HH') or atom.name.startswith('HE'):
atom.solvent_radius = 1.17
# Adjust carboxylate O radii on C-Termini. Don't just do the end
# residue, since we can have C-termini in the middle as well
# (i.e., 2-chain dimers)
if atom.name == 'OXT':
atom.solvent_radius = 1.4
parm.atoms[i-1].solvent_radius = 1.4
try:
parm.parm_data['RADIUS_SET'][0] = \
'ArgH and AspGluO modified Bondi2 radii (mbondi3)'
except AttributeError:
pass
_screen1(parm)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def _screen1(parm):
""" Applies the first set of screening parameters found in tleap source """
for i, atom in enumerate(parm.atoms):
if atom.atomic_number == 1:
atom.screen = 0.85
elif atom.atomic_number == 6:
atom.screen = 0.72
elif atom.atomic_number == 7:
atom.screen = 0.79
elif atom.atomic_number == 8:
atom.screen = 0.85
elif atom.atomic_number == 9:
atom.screen = 0.88
elif atom.atomic_number == 15:
atom.screen = 0.86
elif atom.atomic_number == 16:
atom.screen = 0.96
else:
atom.screen = 0.8
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def _screen2(parm):
"""
Applies the second set of screening parameters found in tleap source
(unused as far as I can tell)
"""
for i, atom in enumerate(parm.atoms):
if atom.atomic_number == 1:
atom.screen = 0.8461
elif atom.atomic_number == 6:
atom.screen = 0.9615
elif atom.atomic_number == 7:
atom.screen = 0.9343
elif atom.atomic_number == 8:
atom.screen = 1.0088
elif atom.atomic_number == 11:
atom.screen = 1.0000
elif atom.atomic_number == 12:
atom.screen = 1.0000
elif atom.atomic_number == 15:
atom.screen = 1.0700
elif atom.atomic_number == 16:
atom.screen = 1.1733
else:
atom.screen = 0.8
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def _screen3(parm):
"""
Applies the third and final set of screening parameters found in tleap
source (unused as far as I can tell)
"""
for i, atom in enumerate(parm.atoms):
if atom.atomic_number == 1:
atom.screen = 0.8846
elif atom.atomic_number == 6:
atom.screen = 0.9186
elif atom.atomic_number == 7:
atom.screen = 0.8733
elif atom.atomic_number == 8:
atom.screen = 0.8836
elif atom.atomic_number == 11:
atom.screen = 1.0000
elif atom.atomic_number == 12:
atom.screen = 1.0000
elif atom.atomic_number == 15:
atom.screen = 0.9604
elif atom.atomic_number == 16:
atom.screen = 0.9323
else:
atom.screen = 0.8
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
_call_method = dict(bondi=bondi, mbondi=mbondi, mbondi2=mbondi2,
mbondi3=mbondi3, amber6=amber6)
[docs]def ChRad(parm, radii_set):
global _call_method
if radii_set not in _call_method:
raise ChangeRadiiError("You must choose from %s radii sets" %
', '.join(_call_method.keys()))
_call_method[radii_set](parm)