Clean up line breaks in coupled_groups.py
See https://github.com/jensengroup/propka-3.1/issues/43.
This commit is contained in:
@@ -28,8 +28,8 @@ class NonCovalentlyCoupledGroups:
|
|||||||
# check if the interaction energy is high enough
|
# check if the interaction energy is high enough
|
||||||
interaction_energy = max(self.get_interaction(group1, group2),
|
interaction_energy = max(self.get_interaction(group1, group2),
|
||||||
self.get_interaction(group2, group1))
|
self.get_interaction(group2, group1))
|
||||||
if interaction_energy <= self.parameters.min_interaction_energy \
|
if (interaction_energy <= self.parameters.min_interaction_energy
|
||||||
and return_on_fail:
|
and return_on_fail):
|
||||||
return {'coupling_factor': -1.0}
|
return {'coupling_factor': -1.0}
|
||||||
# calculate intrinsic pKa's, if not already done
|
# calculate intrinsic pKa's, if not already done
|
||||||
for group in [group1, group2]:
|
for group in [group1, group2]:
|
||||||
@@ -43,8 +43,8 @@ class NonCovalentlyCoupledGroups:
|
|||||||
default_pka1 = group1.pka_value
|
default_pka1 = group1.pka_value
|
||||||
default_pka2 = group2.pka_value
|
default_pka2 = group2.pka_value
|
||||||
# check that pka values are within relevant limits
|
# check that pka values are within relevant limits
|
||||||
if max(default_pka1, default_pka2) < self.parameters.min_pka or \
|
if (max(default_pka1, default_pka2) < self.parameters.min_pka
|
||||||
min(default_pka1, default_pka2) > self.parameters.max_pka:
|
or min(default_pka1, default_pka2) > self.parameters.max_pka):
|
||||||
if return_on_fail:
|
if return_on_fail:
|
||||||
return {'coupling_factor': -1.0}
|
return {'coupling_factor': -1.0}
|
||||||
# Swap interactions and re-calculate pKa values
|
# Swap interactions and re-calculate pKa values
|
||||||
@@ -52,7 +52,8 @@ class NonCovalentlyCoupledGroups:
|
|||||||
group1.calculate_total_pka()
|
group1.calculate_total_pka()
|
||||||
group2.calculate_total_pka()
|
group2.calculate_total_pka()
|
||||||
# store swapped energy and pka's
|
# store swapped energy and pka's
|
||||||
swapped_energy = energy_method(ph=use_ph, reference=self.parameters.reference)
|
swapped_energy = energy_method(
|
||||||
|
ph=use_ph, reference=self.parameters.reference)
|
||||||
swapped_pka1 = group1.pka_value
|
swapped_pka1 = group1.pka_value
|
||||||
swapped_pka2 = group2.pka_value
|
swapped_pka2 = group2.pka_value
|
||||||
pka_shift1 = swapped_pka1 - default_pka1
|
pka_shift1 = swapped_pka1 - default_pka1
|
||||||
@@ -62,21 +63,23 @@ class NonCovalentlyCoupledGroups:
|
|||||||
group1.calculate_total_pka()
|
group1.calculate_total_pka()
|
||||||
group2.calculate_total_pka()
|
group2.calculate_total_pka()
|
||||||
# check difference in free energy
|
# check difference in free energy
|
||||||
if abs(default_energy - swapped_energy) > self.parameters.max_free_energy_diff \
|
if (abs(default_energy - swapped_energy)
|
||||||
and return_on_fail:
|
> self.parameters.max_free_energy_diff and return_on_fail):
|
||||||
return {'coupling_factor': -1.0}
|
return {'coupling_factor': -1.0}
|
||||||
# check pka shift
|
# check pka shift
|
||||||
if max(abs(pka_shift1), abs(pka_shift2)) < self.parameters.min_swap_pka_shift \
|
if (max(abs(pka_shift1), abs(pka_shift2))
|
||||||
and return_on_fail:
|
< self.parameters.min_swap_pka_shift and return_on_fail):
|
||||||
return {'coupling_factor': -1.0}
|
return {'coupling_factor': -1.0}
|
||||||
# check intrinsic pka diff
|
# check intrinsic pka diff
|
||||||
if abs(group1.intrinsic_pka - group2.intrinsic_pka) \
|
if (abs(group1.intrinsic_pka - group2.intrinsic_pka)
|
||||||
> self.parameters.max_intrinsic_pka_diff and return_on_fail:
|
> self.parameters.max_intrinsic_pka_diff and return_on_fail):
|
||||||
return {'coupling_factor': -1.0}
|
return {'coupling_factor': -1.0}
|
||||||
# if everything is OK, calculate the coupling factor and return all info
|
# if everything is OK, calculate the coupling factor and return all info
|
||||||
factor = self.get_free_energy_diff_factor(default_energy, swapped_energy) \
|
factor = (
|
||||||
* self.get_pka_diff_factor(group1.intrinsic_pka, group2.intrinsic_pka) \
|
self.get_free_energy_diff_factor(default_energy, swapped_energy)
|
||||||
* self.get_interaction_factor(interaction_energy)
|
* self.get_pka_diff_factor(group1.intrinsic_pka,
|
||||||
|
group2.intrinsic_pka)
|
||||||
|
* self.get_interaction_factor(interaction_energy))
|
||||||
return {'coupling_factor': factor, 'default_energy': default_energy,
|
return {'coupling_factor': factor, 'default_energy': default_energy,
|
||||||
'swapped_energy': swapped_energy,
|
'swapped_energy': swapped_energy,
|
||||||
'interaction_energy': interaction_energy,
|
'interaction_energy': interaction_energy,
|
||||||
@@ -96,7 +99,9 @@ class NonCovalentlyCoupledGroups:
|
|||||||
intrinsic_pka_diff = abs(pka1-pka2)
|
intrinsic_pka_diff = abs(pka1-pka2)
|
||||||
res = 0.0
|
res = 0.0
|
||||||
if intrinsic_pka_diff <= self.parameters.max_intrinsic_pka_diff:
|
if intrinsic_pka_diff <= self.parameters.max_intrinsic_pka_diff:
|
||||||
res = 1-(intrinsic_pka_diff/self.parameters.max_intrinsic_pka_diff)**2
|
res = (
|
||||||
|
1-(intrinsic_pka_diff
|
||||||
|
/self.parameters.max_intrinsic_pka_diff)**2)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def get_free_energy_diff_factor(self, energy1, energy2):
|
def get_free_energy_diff_factor(self, energy1, energy2):
|
||||||
@@ -125,8 +130,10 @@ class NonCovalentlyCoupledGroups:
|
|||||||
res = 0.0
|
res = 0.0
|
||||||
interaction_energy = abs(interaction_energy)
|
interaction_energy = abs(interaction_energy)
|
||||||
if interaction_energy >= self.parameters.min_interaction_energy:
|
if interaction_energy >= self.parameters.min_interaction_energy:
|
||||||
res = (interaction_energy-self.parameters.min_interaction_energy) \
|
res = (
|
||||||
/ (1.0+interaction_energy-self.parameters.min_interaction_energy)
|
(interaction_energy-self.parameters.min_interaction_energy)
|
||||||
|
/ (1.0+interaction_energy
|
||||||
|
-self.parameters.min_interaction_energy))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def identify_non_covalently_coupled_groups(self, conformation,
|
def identify_non_covalently_coupled_groups(self, conformation,
|
||||||
@@ -140,24 +147,29 @@ class NonCovalentlyCoupledGroups:
|
|||||||
self.parameters = conformation.parameters
|
self.parameters = conformation.parameters
|
||||||
if verbose:
|
if verbose:
|
||||||
info('')
|
info('')
|
||||||
info(' Warning: When using the -d option, pKa values based on \'swapped\' interactions')
|
info(' Warning: When using the -d option, pKa values based on '
|
||||||
|
'\'swapped\' interactions')
|
||||||
info(' will be writting to the output .pka file')
|
info(' will be writting to the output .pka file')
|
||||||
info('')
|
info('')
|
||||||
info('-' * 103)
|
info('-' * 103)
|
||||||
info(' Detecting non-covalently coupled residues')
|
info(' Detecting non-covalently coupled residues')
|
||||||
info('-' * 103)
|
info('-' * 103)
|
||||||
info(' Maximum pKa difference: %4.2f pKa units' \
|
info(' Maximum pKa difference: %4.2f pKa units'
|
||||||
% self.parameters.max_intrinsic_pka_diff)
|
% self.parameters.max_intrinsic_pka_diff)
|
||||||
info(' Minimum interaction energy: %4.2f pKa units' \
|
info(' Minimum interaction energy: %4.2f pKa units'
|
||||||
% self.parameters.min_interaction_energy)
|
% self.parameters.min_interaction_energy)
|
||||||
info(' Maximum free energy diff.: %4.2f pKa units' \
|
info(' Maximum free energy diff.: %4.2f pKa units'
|
||||||
% self.parameters.max_free_energy_diff)
|
% self.parameters.max_free_energy_diff)
|
||||||
info(' Minimum swap pKa shift: %4.2f pKa units' \
|
info(' Minimum swap pKa shift: %4.2f pKa units'
|
||||||
% self.parameters.min_swap_pka_shift)
|
% self.parameters.min_swap_pka_shift)
|
||||||
info(' pH: %6s ' % str(self.parameters.pH))
|
info(' pH: %6s '
|
||||||
info(' Reference: %s' % self.parameters.reference)
|
% str(self.parameters.pH))
|
||||||
info(' Min pKa: %4.2f' % self.parameters.min_pka)
|
info(' Reference: %s'
|
||||||
info(' Max pKa: %4.2f' % self.parameters.max_pka)
|
% self.parameters.reference)
|
||||||
|
info(' Min pKa: %4.2f'
|
||||||
|
% self.parameters.min_pka)
|
||||||
|
info(' Max pKa: %4.2f'
|
||||||
|
% self.parameters.max_pka)
|
||||||
info('')
|
info('')
|
||||||
# find coupled residues
|
# find coupled residues
|
||||||
titratable_groups = conformation.get_titratable_groups()
|
titratable_groups = conformation.get_titratable_groups()
|
||||||
@@ -166,13 +178,13 @@ class NonCovalentlyCoupledGroups:
|
|||||||
for group2 in titratable_groups:
|
for group2 in titratable_groups:
|
||||||
if group1 == group2:
|
if group1 == group2:
|
||||||
break
|
break
|
||||||
if not group1 in group2.non_covalently_coupled_groups \
|
if (group1 not in group2.non_covalently_coupled_groups
|
||||||
and self.do_prot_stat:
|
and self.do_prot_stat):
|
||||||
data = self.\
|
data = (
|
||||||
is_coupled_protonation_state_probability(group1,
|
self
|
||||||
group2,
|
.is_coupled_protonation_state_probability(
|
||||||
conformation.\
|
group1, group2,
|
||||||
calculate_folding_energy)
|
conformation.calculate_folding_energy))
|
||||||
if data['coupling_factor'] > 0.0:
|
if data['coupling_factor'] > 0.0:
|
||||||
group1.couple_non_covalently(group2)
|
group1.couple_non_covalently(group2)
|
||||||
if verbose:
|
if verbose:
|
||||||
@@ -184,12 +196,13 @@ class NonCovalentlyCoupledGroups:
|
|||||||
Args:
|
Args:
|
||||||
conformation: conformation to print
|
conformation: conformation to print
|
||||||
"""
|
"""
|
||||||
map_ = make_interaction_map('Non-covalent coupling map for %s' % conformation,
|
map_ = make_interaction_map(
|
||||||
|
'Non-covalent coupling map for %s' % conformation,
|
||||||
conformation.get_non_covalently_coupled_groups(),
|
conformation.get_non_covalently_coupled_groups(),
|
||||||
lambda g1, g2: g1 in g2.non_covalently_coupled_groups)
|
lambda g1, g2: g1 in g2.non_covalently_coupled_groups)
|
||||||
info(map_)
|
info(map_)
|
||||||
for system in conformation.get_coupled_systems(conformation.\
|
for system in conformation.get_coupled_systems(
|
||||||
get_non_covalently_coupled_groups(), \
|
conformation.get_non_covalently_coupled_groups(),
|
||||||
Group.get_non_covalently_coupled_groups):
|
Group.get_non_covalently_coupled_groups):
|
||||||
self.print_system(conformation, list(system))
|
self.print_system(conformation, list(system))
|
||||||
|
|
||||||
@@ -206,11 +219,14 @@ class NonCovalentlyCoupledGroups:
|
|||||||
# print out coupling info for each interaction
|
# print out coupling info for each interaction
|
||||||
coup_info = ''
|
coup_info = ''
|
||||||
for interaction in interactions:
|
for interaction in interactions:
|
||||||
data = self.is_coupled_protonation_state_probability(interaction[0], \
|
data = (
|
||||||
interaction[1], conformation.calculate_folding_energy, \
|
self.is_coupled_protonation_state_probability(
|
||||||
return_on_fail=False)
|
interaction[0], interaction[1],
|
||||||
coup_info += self.make_data_to_string(data, interaction[0], \
|
conformation.calculate_folding_energy,
|
||||||
interaction[1]) + '\n\n'
|
return_on_fail=False))
|
||||||
|
coup_info += (
|
||||||
|
self.make_data_to_string(data, interaction[0], interaction[1])
|
||||||
|
+ '\n\n')
|
||||||
info(coup_info)
|
info(coup_info)
|
||||||
# make list of possible combinations of swap to try out
|
# make list of possible combinations of swap to try out
|
||||||
combinations = propka.lib.generate_combinations(interactions)
|
combinations = propka.lib.generate_combinations(interactions)
|
||||||
@@ -236,14 +252,15 @@ class NonCovalentlyCoupledGroups:
|
|||||||
Args:
|
Args:
|
||||||
group1: first group for interaction
|
group1: first group for interaction
|
||||||
group2: second group for interaction
|
group2: second group for interaction
|
||||||
include_side_chain_hbs: include side-chain hydrogen bonds in energy
|
include_side_chain_hbs: include sidechain hydrogen bonds in energy
|
||||||
Returns:
|
Returns:
|
||||||
interaction energy (float)
|
interaction energy (float)
|
||||||
"""
|
"""
|
||||||
determinants = group1.determinants['coulomb']
|
determinants = group1.determinants['coulomb']
|
||||||
if include_side_chain_hbs:
|
if include_side_chain_hbs:
|
||||||
determinants = group1.determinants['sidechain'] \
|
determinants = (
|
||||||
+ group1.determinants['coulomb']
|
group1.determinants['sidechain']
|
||||||
|
+ group1.determinants['coulomb'])
|
||||||
interaction_energy = 0.0
|
interaction_energy = 0.0
|
||||||
for det in determinants:
|
for det in determinants:
|
||||||
if group2 == det.group:
|
if group2 == det.group:
|
||||||
@@ -346,19 +363,21 @@ class NonCovalentlyCoupledGroups:
|
|||||||
Returns:
|
Returns:
|
||||||
formatted string with information.
|
formatted string with information.
|
||||||
"""
|
"""
|
||||||
str_ = \
|
str_ = (
|
||||||
""" %s and %s coupled (prot.state): %5.2f
|
""" %s and %s coupled (prot.state): %5.2f
|
||||||
Energy levels: %6.2f, %6.2f (difference: %6.2f) at pH %6.2f
|
Energy levels: %6.2f, %6.2f (difference: %6.2f) at pH %6.2f
|
||||||
Interaction energy: %6.2f
|
Interaction energy: %6.2f
|
||||||
Intrinsic pka's: %6.2f, %6.2f (difference: %6.2f)
|
Intrinsic pka's: %6.2f, %6.2f (difference: %6.2f)
|
||||||
Swapped pKa's: %6.2f, %6.2f (difference: %6.2f, %6.2f)""" % \
|
Swapped pKa's: %6.2f, %6.2f (difference: %6.2f, %6.2f)"""
|
||||||
(group1.label, group2.label, data['coupling_factor'],
|
% (
|
||||||
|
group1.label, group2.label, data['coupling_factor'],
|
||||||
data['default_energy'], data['swapped_energy'],
|
data['default_energy'], data['swapped_energy'],
|
||||||
data['default_energy'] - data['swapped_energy'], data['pH'],
|
data['default_energy'] - data['swapped_energy'],
|
||||||
data['interaction_energy'], group1.intrinsic_pka, group2.intrinsic_pka,
|
data['pH'], data['interaction_energy'],
|
||||||
group1.intrinsic_pka-group2.intrinsic_pka, data['swapped_pka1'],
|
group1.intrinsic_pka, group2.intrinsic_pka,
|
||||||
data['swapped_pka2'], data['pka_shift1'], data['pka_shift2'])
|
group1.intrinsic_pka-group2.intrinsic_pka,
|
||||||
|
data['swapped_pka1'], data['swapped_pka2'],
|
||||||
|
data['pka_shift1'], data['pka_shift2']))
|
||||||
return str_
|
return str_
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user