Clean up line breaks in coupled_groups.py

See https://github.com/jensengroup/propka-3.1/issues/43.
This commit is contained in:
Nathan Baker
2020-05-25 18:09:59 -07:00
parent 284a33dfe8
commit ba8362f514

View File

@@ -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(
conformation.get_non_covalently_coupled_groups(), 'Non-covalent coupling map for %s' % conformation,
lambda g1, g2: g1 in g2.non_covalently_coupled_groups) conformation.get_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'], % (
data['default_energy'], data['swapped_energy'], group1.label, group2.label, data['coupling_factor'],
data['default_energy'] - data['swapped_energy'], data['pH'], data['default_energy'], data['swapped_energy'],
data['interaction_energy'], group1.intrinsic_pka, group2.intrinsic_pka, data['default_energy'] - data['swapped_energy'],
group1.intrinsic_pka-group2.intrinsic_pka, data['swapped_pka1'], data['pH'], data['interaction_energy'],
data['swapped_pka2'], data['pka_shift1'], data['pka_shift2']) group1.intrinsic_pka, group2.intrinsic_pka,
group1.intrinsic_pka-group2.intrinsic_pka,
data['swapped_pka1'], data['swapped_pka2'],
data['pka_shift1'], data['pka_shift2']))
return str_ return str_