Replace old-style printf with str.format
This commit is contained in:
@@ -371,11 +371,12 @@ class NonCovalentlyCoupledGroups:
|
||||
"(difference: {shift1:>6.2f}, {shift2:>6.2f})"
|
||||
).format(
|
||||
label1=group1.label, label2=group2.label,
|
||||
coupl_fact=data['coupling_factor'], def_energy=data['default_energy'],
|
||||
coupl_fact=data['coupling_factor'],
|
||||
def_energy=data['default_energy'],
|
||||
swap_energy=data['swapped_energy'],
|
||||
diff_energy=data['default_energy']-data['swapped_energy'], ph=data['pH'],
|
||||
int_energy=data['interaction_energy'], pka1=group1.intrinsic_pka,
|
||||
pka2=group2.intrinsic_pka,
|
||||
diff_energy=data['default_energy']-data['swapped_energy'],
|
||||
ph=data['pH'], int_energy=data['interaction_energy'],
|
||||
pka1=group1.intrinsic_pka, pka2=group2.intrinsic_pka,
|
||||
diff_pka=group1.intrinsic_pka-group2.intrinsic_pka,
|
||||
swap1=data['swapped_pka1'], swap2=data['swapped_pka2'],
|
||||
shift1=data['pka_shift1'], shift2=data['pka_shift2'])
|
||||
|
||||
@@ -473,11 +473,13 @@ class Group:
|
||||
str_ += '*'
|
||||
else:
|
||||
str_ += ' '
|
||||
str_ += " {0:4d}{1:>2s} ".format(int(100.0*self.buried), "%")
|
||||
str_ += " %6.2lf %4d" % (self.energy_volume, self.num_volume)
|
||||
str_ += " %6.2lf %4d" % (self.energy_local, self.num_local)
|
||||
str_ += " {0:4d}{1:>2s} ".format(int(100.0*self.buried), "%%")
|
||||
str_ += " {0:6.2f} {1:4d}".format(
|
||||
self.energy_volume, int(self.num_volume))
|
||||
str_ += " {0:6.2f} {1:4d}".format(
|
||||
self.energy_local, int(self.num_local))
|
||||
else:
|
||||
str_ += "%40s" % (" ")
|
||||
str_ += "{0:>40s}".format(" ")
|
||||
# add the determinants
|
||||
for type_ in ['sidechain', 'backbone', 'coulomb']:
|
||||
str_ += self.get_determinant_for_string(type_, line_number)
|
||||
@@ -496,11 +498,11 @@ class Group:
|
||||
string
|
||||
"""
|
||||
if number >= len(self.determinants[type_]):
|
||||
empty_determinant = "%s%4d%2s" % ("XXX", 0, "X")
|
||||
return "%8.2lf %s" % (0.0, empty_determinant)
|
||||
return " 0.00 XXX 0 X"
|
||||
else:
|
||||
determinant = self.determinants[type_][number]
|
||||
return "%8.2lf %s" % (determinant.value, determinant.label)
|
||||
return "{0:8.2f} {1:s}".format(
|
||||
determinant.value, determinant.label)
|
||||
|
||||
def calculate_total_pka(self):
|
||||
"""Calculate total pKa based on determinants associated with this
|
||||
@@ -551,15 +553,16 @@ class Group:
|
||||
penalty = ''
|
||||
if self.coupled_titrating_group:
|
||||
penalty = (
|
||||
' NB: Discarded due to coupling with %s'
|
||||
% self.coupled_titrating_group.label)
|
||||
' NB: Discarded due to coupling with {0:s}'.format(
|
||||
self.coupled_titrating_group.label))
|
||||
fmt = (
|
||||
" {g.label:>9s} {g.pka_value:8.2f} {g.model_pka:10.2f} "
|
||||
"{type:>18s} {penalty:s}\n")
|
||||
return fmt.format(g=self, type=ligand_type, penalty=penalty)
|
||||
|
||||
def __str__(self):
|
||||
return 'Group (%s) for %s' % (self.type, self.atom)
|
||||
str_ = 'Group ({0:s}) for {1:s}'.format(self.type, str(self.atom))
|
||||
return str_
|
||||
|
||||
def calculate_folding_energy(self, parameters, ph=None, reference=None):
|
||||
"""Return the electrostatic energy of this residue at specified pH.
|
||||
@@ -1243,8 +1246,9 @@ def is_group(parameters, atom):
|
||||
elif parameters.ligand_typing == 'groups':
|
||||
ligand_group = is_ligand_group_by_groups(parameters, atom)
|
||||
else:
|
||||
raise Exception('Unknown ligand typing method \'%s\''
|
||||
% parameters.ligand_typing)
|
||||
raise Exception(
|
||||
'Unknown ligand typing method \'{0.s}\''.format(
|
||||
parameters.ligand_typing))
|
||||
if ligand_group:
|
||||
return ligand_group
|
||||
return None
|
||||
@@ -1276,9 +1280,9 @@ def is_protein_group(parameters, atom):
|
||||
if atom.count_bonded_elements('O') == 1:
|
||||
return BBCGroup(atom)
|
||||
### Filters for side chains based on PDB protein atom names
|
||||
key = '%s-%s' % (atom.res_name, atom.name)
|
||||
key = '{0:s}-{1:s}'.format(atom.res_name, atom.name)
|
||||
if key in parameters.protein_group_mapping.keys():
|
||||
class_str = "%sGroup" % parameters.protein_group_mapping[key]
|
||||
class_str = "{0:s}Group".format(parameters.protein_group_mapping[key])
|
||||
group_class = globals()[class_str]
|
||||
return group_class(atom)
|
||||
return None
|
||||
|
||||
@@ -20,7 +20,7 @@ def decode(input_string):
|
||||
Returns:
|
||||
integer
|
||||
"""
|
||||
value_error_message = "invalid literal for hybrid-36 conversion: '%s'"
|
||||
value_error_message = "invalid literal for hybrid-36 conversion: '{0:s}'"
|
||||
|
||||
original_input_string = input_string
|
||||
input_string = input_string.strip()
|
||||
@@ -33,7 +33,7 @@ def decode(input_string):
|
||||
sign = 1
|
||||
|
||||
if len(input_string) == 0:
|
||||
raise ValueError(value_error_message % input_string)
|
||||
raise ValueError(value_error_message.format(input_string))
|
||||
|
||||
# See http://cci.lbl.gov/hybrid_36/ for documentation on the format.
|
||||
|
||||
@@ -49,13 +49,13 @@ def decode(input_string):
|
||||
reference = (16 * 36 ** (num_chars - 1) + 10 ** num_chars)
|
||||
_hybrid36_set = _HYBRID36_LOWER_SET
|
||||
else:
|
||||
raise ValueError(value_error_message % original_input_string)
|
||||
raise ValueError(value_error_message.format(original_input_string))
|
||||
|
||||
# Check the validity of the input string: ASCII characters should be
|
||||
# either all uppercase or all lowercase.
|
||||
for char in input_string[1:]:
|
||||
if char not in _hybrid36_set:
|
||||
raise ValueError(value_error_message % original_input_string)
|
||||
raise ValueError(value_error_message.format(original_input_string))
|
||||
|
||||
# Convert with the int function.
|
||||
return sign * (int(input_string, 36) + reference)
|
||||
|
||||
@@ -211,8 +211,9 @@ def add_determinants(iterative_interactions, version, _=None):
|
||||
iteratives.append(new_iterative)
|
||||
done_group.append(group)
|
||||
# Initialize iterative scheme
|
||||
debug("\n --- pKa iterations (%d groups, %d interactions) ---" %
|
||||
(len(iteratives), len(iterative_interactions)))
|
||||
debug(
|
||||
"\n --- pKa iterations ({0:d} groups, {1:d} interactions) ---".format(
|
||||
len(iteratives), len(iterative_interactions)))
|
||||
converged = False
|
||||
iteration = 0
|
||||
# set non-iterative pka values as first step
|
||||
@@ -262,18 +263,18 @@ def add_determinants(iterative_interactions, version, _=None):
|
||||
itres.pka_iter.append(itres.pka_new)
|
||||
|
||||
if iteration == 10:
|
||||
info("did not converge in %d iterations" % (iteration))
|
||||
info("did not converge in {0:d} iterations".format(iteration))
|
||||
break
|
||||
# printing pKa iterations
|
||||
# formerly was conditioned on if options.verbosity >= 2 - now unnecessary
|
||||
str_ = "%12s" % (" ")
|
||||
str_ = ' '
|
||||
for index in range(iteration+1):
|
||||
str_ += "%8d" % (index)
|
||||
str_ += "{0:>8d}".format(index)
|
||||
debug(str_)
|
||||
for itres in iteratives:
|
||||
str_ = "%s " % (itres.label)
|
||||
str_ = "{0:s} ".format(itres.label)
|
||||
for pka in itres.pka_iter:
|
||||
str_ += "%8.2lf" % (pka)
|
||||
str_ += "{0:>8.2f}".format(pka)
|
||||
if not itres.converged:
|
||||
str_ += " *"
|
||||
debug(str_)
|
||||
|
||||
@@ -29,7 +29,7 @@ def open_file_for_reading(input_file):
|
||||
try:
|
||||
file_ = open(input_file, 'rt')
|
||||
except:
|
||||
raise IOError('Cannot find file %s' % input_file)
|
||||
raise IOError('Cannot find file {0:s}'.format(input_file))
|
||||
return file_
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ def open_file_for_writing(input_file):
|
||||
try:
|
||||
file_ = open(input_file, 'wt')
|
||||
except FileNotFoundError:
|
||||
raise Exception('Could not open %s' % input_file)
|
||||
raise Exception('Could not open {0:s}'.format(input_file))
|
||||
return file_
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ def build_parser(parser=None):
|
||||
group.add_argument(
|
||||
"-p", "--parameters", dest="parameters",
|
||||
default=pkg_resources.resource_filename(__name__, "propka.cfg"),
|
||||
help="set the parameter file [%(default)s]")
|
||||
help="set the parameter file [{default:s}]")
|
||||
try:
|
||||
group.add_argument(
|
||||
"--log-level",
|
||||
@@ -306,7 +306,8 @@ def loadOptions(args):
|
||||
try:
|
||||
chain, resnum, inscode = parse_res_string(res_str)
|
||||
except ValueError:
|
||||
_LOGGER.critical('Invalid residue string: "%s"', res_str)
|
||||
_LOGGER.critical(
|
||||
'Invalid residue string: "{0:s}"'.format(res_str))
|
||||
sys.exit(1)
|
||||
res_list.append((chain, resnum, inscode))
|
||||
options.titrate_only = res_list
|
||||
@@ -332,9 +333,9 @@ def make_tidy_atom_label(name, element):
|
||||
label = name
|
||||
else: # if less than 4 characters long, insert white space as needed
|
||||
if len(element) == 1:
|
||||
label = ' %-3s' % name
|
||||
label = ' {0:<3s}'.format(name)
|
||||
else: # The element should occupy the two first chars
|
||||
label = '%-4s' % name
|
||||
label = '{0:<4s}'.format(name)
|
||||
return label
|
||||
|
||||
|
||||
@@ -365,7 +366,7 @@ def write_file(filename, lines):
|
||||
"""
|
||||
file_ = open_file_for_writing(filename)
|
||||
for line in lines:
|
||||
file_.write("%s\n" % (line))
|
||||
file_.write("{0:s}\n".format(line))
|
||||
file_.close()
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class LigandPkaValues:
|
||||
map(lambda dir: os.path.join(dir, program),
|
||||
path))]
|
||||
if len(locs) == 0:
|
||||
str_ = "'Error: Could not find %s." % program
|
||||
str_ = "'Error: Could not find {0:s}.".format(program)
|
||||
str_ += ' Please make sure that it is found in the path.'
|
||||
info(str_)
|
||||
sys.exit(-1)
|
||||
@@ -73,7 +73,7 @@ class LigandPkaValues:
|
||||
max_ph: maximum pH value
|
||||
"""
|
||||
for name in molecule.conformation_names:
|
||||
filename = '%s_%s' % (molecule.name, name)
|
||||
filename = '{0:s}_{1:s}'.format(molecule.name, name)
|
||||
self.get_marvin_pkas_for_conformation_container(
|
||||
molecule.conformations[name], name=filename,
|
||||
reuse=molecule.options.reuse_ligand_mol2_file,
|
||||
@@ -113,7 +113,7 @@ class LigandPkaValues:
|
||||
# do one molecule at the time so we don't confuse marvin
|
||||
molecules = propka.lib.split_atoms_into_molecules(atoms)
|
||||
for i, molecule in enumerate(molecules):
|
||||
filename = '%s_%d.mol2' % (name, i+1)
|
||||
filename = '{0:s}_{1:d}.mol2'.format(name, i+1)
|
||||
self.get_marvin_pkas_for_molecule(
|
||||
molecule, filename=filename, reuse=reuse, num_pkas=num_pkas,
|
||||
min_ph=min_ph, max_ph=max_ph)
|
||||
@@ -136,8 +136,10 @@ class LigandPkaValues:
|
||||
propka.pdb.write_mol2_for_atoms(atoms, filename)
|
||||
# check that we actually have a file to work with
|
||||
if not os.path.isfile(filename):
|
||||
errstr = ("Didn't find a user-modified file '%s' - generating one"
|
||||
% filename)
|
||||
errstr = (
|
||||
"Didn't find a user-modified file '{0:s}' "
|
||||
"- generating one".format(
|
||||
filename))
|
||||
warning(errstr)
|
||||
propka.pdb.write_mol2_for_atoms(atoms, filename)
|
||||
# Marvin calculate pKa values
|
||||
@@ -155,11 +157,11 @@ class LigandPkaValues:
|
||||
'*********************************************')
|
||||
info('* Warning: Marvin execution failed: '
|
||||
' *')
|
||||
info('* %-100s *' % errors)
|
||||
info('* {0:<100s} *'.format(errors))
|
||||
info('* '
|
||||
' *')
|
||||
info('* Please edit the ligand mol2 file and re-run PropKa with '
|
||||
'the -l option: %29s *' % filename)
|
||||
'the -l option: {0:>29s} *'.format(filename))
|
||||
info('***********************************************************'
|
||||
'*********************************************')
|
||||
sys.exit(-1)
|
||||
@@ -169,7 +171,7 @@ class LigandPkaValues:
|
||||
for i, index in enumerate(indices):
|
||||
atoms[index].marvin_pka = pkas[i]
|
||||
atoms[index].charge = {'a': -1, 'b': 1}[types[i]]
|
||||
info('%s model pKa: %.2f' % (atoms[index], pkas[i]))
|
||||
info('{0:s} model pKa: {1:<.2f}'.format(atoms[index], pkas[i]))
|
||||
|
||||
@staticmethod
|
||||
def extract_pkas(output):
|
||||
|
||||
@@ -50,7 +50,8 @@ class Molecular_container:
|
||||
self.version = version_class(parameters)
|
||||
except AttributeError as err:
|
||||
print(err)
|
||||
errstr = 'Error: Version %s does not exist' % parameters.version
|
||||
errstr = 'Error: Version {0:s} does not exist'.format(
|
||||
parameters.version)
|
||||
raise Exception(errstr)
|
||||
# read the input file
|
||||
if input_file_extension[0:4] == '.pdb':
|
||||
@@ -89,7 +90,7 @@ class Molecular_container:
|
||||
# do some additional set up
|
||||
self.additional_setup_when_reading_input_file()
|
||||
else:
|
||||
info('Unrecognized input file:%s' % input_file)
|
||||
info('Unrecognized input file:{0:s}'.format(input_file))
|
||||
sys.exit(-1)
|
||||
|
||||
def top_up_conformations(self):
|
||||
@@ -152,8 +153,10 @@ class Molecular_container:
|
||||
if group_to_add:
|
||||
avr_group += group_to_add
|
||||
else:
|
||||
str_ = ('Group %s could not be found in conformation %s.'
|
||||
% (group.atom.residue_label, name))
|
||||
str_ = (
|
||||
'Group {0:s} could not be found in '
|
||||
'conformation {0:s}.'.format(
|
||||
group.atom.residue_label, name))
|
||||
warning(str_)
|
||||
# ... and store the average value
|
||||
avr_group = avr_group / len(self.conformation_names)
|
||||
@@ -178,16 +181,16 @@ class Molecular_container:
|
||||
options: options object
|
||||
"""
|
||||
# write out the average conformation
|
||||
filename = os.path.join('%s.pka' % (self.name))
|
||||
filename = os.path.join('{0:s}.pka'.format(self.name))
|
||||
# if the display_coupled_residues option is true, write the results out
|
||||
# to an alternative pka file
|
||||
if self.options.display_coupled_residues:
|
||||
filename = os.path.join('%s_alt_state.pka' % (self.name))
|
||||
filename = os.path.join('{0:s}_alt_state.pka'.format(self.name))
|
||||
if (hasattr(self.version.parameters, 'output_file_tag')
|
||||
and len(self.version.parameters.output_file_tag) > 0):
|
||||
filename = os.path.join(
|
||||
'%s_%s.pka' % (self.name,
|
||||
self.version.parameters.output_file_tag))
|
||||
'{0:s}_{1:s}.pka'.format(
|
||||
self.name, self.version.parameters.output_file_tag))
|
||||
propka.output.write_pka(
|
||||
self, self.version.parameters, filename=filename,
|
||||
conformation='AVR', reference=reference)
|
||||
|
||||
@@ -5,9 +5,9 @@ from propka.lib import info
|
||||
|
||||
def print_header():
|
||||
"""Print header section of output."""
|
||||
str_ = "%s\n" % get_propka_header()
|
||||
str_ += "%s\n" % get_references_header()
|
||||
str_ += "%s\n" % get_warning_header()
|
||||
str_ = "{0:s}\n".format(get_propka_header())
|
||||
str_ += "{0:s}\n".format(get_references_header())
|
||||
str_ += "{0:s}\n".format(get_warning_header())
|
||||
info(str_)
|
||||
|
||||
|
||||
@@ -25,10 +25,10 @@ def write_pdb(protein, pdbfile=None, filename=None, include_hydrogens=False,
|
||||
if pdbfile is None:
|
||||
# opening file if not given
|
||||
if filename is None:
|
||||
filename = "%s.pdb" % (protein.name)
|
||||
filename = "{0:s}.pdb".format(protein.name)
|
||||
# TODO - this would be better as a context manager
|
||||
pdbfile = open(filename, 'w')
|
||||
info("writing pdbfile %s" % (filename))
|
||||
info("writing pdbfile {0:s}".format(filename))
|
||||
close_file = True
|
||||
else:
|
||||
# don't close the file, it was opened in a different place
|
||||
@@ -67,20 +67,20 @@ def write_pka(protein, parameters, filename=None, conformation='1A',
|
||||
# TODO - the code immediately overrides the verbose argument; why?
|
||||
verbose = True
|
||||
if filename is None:
|
||||
filename = "%s.pka" % (protein.name)
|
||||
filename = "{0:s}.pka".format(protein.name)
|
||||
# TODO - this would be much better with a context manager
|
||||
file_ = open(filename, 'w')
|
||||
if verbose:
|
||||
info("Writing %s" % (filename))
|
||||
info("Writing {0:s}".format(filename))
|
||||
# writing propka header
|
||||
str_ = "%s\n" % get_propka_header()
|
||||
str_ += "%s\n" % get_references_header()
|
||||
str_ += "%s\n" % get_warning_header()
|
||||
str_ = "{0:s}\n".format(get_propka_header())
|
||||
str_ += "{0:s}\n".format(get_references_header())
|
||||
str_ += "{0:s}\n".format(get_warning_header())
|
||||
# writing pKa determinant section
|
||||
str_ += get_determinant_section(protein, conformation, parameters)
|
||||
# writing pKa summary section
|
||||
str_ += get_summary_section(protein, conformation, parameters)
|
||||
str_ += "%s\n" % get_the_line()
|
||||
str_ += "{0:s}\n".format(get_the_line())
|
||||
# printing Folding Profile
|
||||
str_ += get_folding_profile_section(
|
||||
protein, conformation=conformation, reference=reference,
|
||||
@@ -109,17 +109,18 @@ def print_tm_profile(protein, reference="neutral", window=[0., 14., 1.],
|
||||
_: Boolean for verbosity
|
||||
options: options object
|
||||
"""
|
||||
profile = protein.getTmProfile(reference=reference, grid=[0., 14., 0.1],
|
||||
tms=tms, ref=ref, options=options)
|
||||
profile = protein.getTmProfile(
|
||||
reference=reference, grid=[0., 14., 0.1], tms=tms, ref=ref,
|
||||
options=options)
|
||||
if profile is None:
|
||||
str_ = "Could not determine Tm-profile\n"
|
||||
else:
|
||||
str_ = " suggested Tm-profile for %s\n" % (protein.name)
|
||||
str_ = " suggested Tm-profile for {0:s}\n".format(protein.name)
|
||||
for (ph, tm_) in profile:
|
||||
if (ph >= window[0] and ph <= window[1]
|
||||
and (ph % window[2] < 0.01
|
||||
or ph % window[2] > 0.99*window[2])):
|
||||
str_ += "%6.2lf%10.2lf\n" % (ph, tm_)
|
||||
str_ += "{0:>6.2f}{1:>10.2f}\n".format(ph, tm_)
|
||||
info(str_)
|
||||
|
||||
|
||||
@@ -160,7 +161,7 @@ def get_determinant_section(protein, conformation, parameters):
|
||||
string
|
||||
"""
|
||||
# getting the same order as in propka2.0
|
||||
str_ = "%s\n" % get_determinants_header()
|
||||
str_ = "{0:s}\n".format(get_determinants_header())
|
||||
# printing determinants
|
||||
for chain in protein.conformations[conformation].chains:
|
||||
for residue_type in parameters.write_out_order:
|
||||
@@ -169,8 +170,9 @@ def get_determinant_section(protein, conformation, parameters):
|
||||
if g.atom.chain_id == chain]
|
||||
for group in groups:
|
||||
if group.residue_type == residue_type:
|
||||
str_ += "%s" % group.get_determinant_string(
|
||||
parameters.remove_penalised_group)
|
||||
str_ += "{0:s}".format(
|
||||
group.get_determinant_string(
|
||||
parameters.remove_penalised_group))
|
||||
# Add a warning in case of coupled residues
|
||||
if (protein.conformations[conformation].non_covalently_coupled_groups
|
||||
and not protein.options.display_coupled_residues):
|
||||
@@ -190,13 +192,14 @@ def get_summary_section(protein, conformation, parameters):
|
||||
Returns:
|
||||
string
|
||||
"""
|
||||
str_ = "%s\n" % get_summary_header()
|
||||
str_ = "{0:s}\n".format(get_summary_header())
|
||||
# printing pKa summary
|
||||
for residue_type in parameters.write_out_order:
|
||||
for group in protein.conformations[conformation].groups:
|
||||
if group.residue_type == residue_type:
|
||||
str_ += "%s" % group.get_summary_string(
|
||||
parameters.remove_penalised_group)
|
||||
str_ += "{0:s}".format(
|
||||
group.get_summary_string(
|
||||
parameters.remove_penalised_group))
|
||||
return str_
|
||||
|
||||
|
||||
@@ -219,8 +222,8 @@ def get_folding_profile_section(protein, conformation='AVR',
|
||||
"""
|
||||
str_ = get_the_line()
|
||||
str_ += "\n"
|
||||
str_ += "Free energy of %9s (kcal/mol) as a function" % direction
|
||||
str_ += " of pH (using %s reference)\n" % reference
|
||||
str_ += "Free energy of {0:>9s} (kcal/mol) as a function".format(direction)
|
||||
str_ += " of pH (using {0:s} reference)\n".format(reference)
|
||||
profile, [ph_opt, dg_opt], [dg_min, dg_max], [ph_min, ph_max] = (
|
||||
protein.get_folding_profile(
|
||||
conformation=conformation, reference=reference,
|
||||
@@ -231,26 +234,27 @@ def get_folding_profile_section(protein, conformation='AVR',
|
||||
for (ph, dg) in profile:
|
||||
if ph >= window[0] and ph <= window[1]:
|
||||
if ph % window[2] < 0.05 or ph % window[2] > 0.95:
|
||||
str_ += "%6.2lf%10.2lf\n" % (ph, dg)
|
||||
str_ += "{0:>6.2f}{1:>10.2f}\n".format(ph, dg)
|
||||
str_ += "\n"
|
||||
if ph_opt is None or dg_opt is None:
|
||||
str_ += "Could not determine pH optimum\n"
|
||||
else:
|
||||
str_ += "The pH of optimum stability is %4.1lf" % ph_opt
|
||||
str_ += (" for which the free energy is %6.1lf kcal/mol at 298K\n"
|
||||
% dg_opt)
|
||||
str_ += "The pH of optimum stability is {0:>4.1f}".format(ph_opt)
|
||||
str_ += (
|
||||
" for which the free energy is {0:>6.1f} kcal/mol at 298K\n".format(
|
||||
dg_opt))
|
||||
if dg_min is None or dg_max is None:
|
||||
str_ += "Could not determine pH values where the free energy"
|
||||
str_ += " is within 80 %s of minimum\n" % ("%")
|
||||
str_ += " is within 80 %% of minimum\n"
|
||||
else:
|
||||
str_ += "The free energy is within 80 %% of maximum"
|
||||
str_ += " at pH %4.1lf to %4.1lf\n" % (dg_min, dg_max)
|
||||
str_ += " at pH {0:>4.1f} to {1:>4.1f}\n".format(dg_min, dg_max)
|
||||
if ph_min is None or ph_max is None:
|
||||
str_ += "Could not determine the pH-range where the free"
|
||||
str_ += " energy is negative\n\n"
|
||||
else:
|
||||
str_ += "The free energy is negative in the range"
|
||||
str_ += " %4.1lf - %4.1lf\n\n" % (ph_min, ph_max)
|
||||
str_ += " {0:>4.1f} - {1:>4.1f}\n\n".format(ph_min, ph_max)
|
||||
return str_
|
||||
|
||||
|
||||
@@ -278,7 +282,7 @@ def get_charge_profile_section(protein, conformation='AVR', _=None):
|
||||
if pi_pro is None or pi_mod is None:
|
||||
str_ += "Could not determine the pI\n\n"
|
||||
else:
|
||||
str_ += ("The pI is %5.2lf (folded) and %5.2lf (unfolded)\n")
|
||||
str_ += ("The pI is {0:>5.2f} (folded) and {1:>5.2f} (unfolded)\n")
|
||||
return str_
|
||||
|
||||
|
||||
@@ -290,7 +294,8 @@ def write_jackal_scap_file(mutation_data=None, filename="1xxx_scap.list",
|
||||
"""
|
||||
with open(filename, 'w') as file_:
|
||||
for chain_id, _, res_num, code2 in mutation_data:
|
||||
str_ = "%s, %d, %s\n" % (chain_id, res_num, code2)
|
||||
str_ = "{chain:s}, {num:d}, {code:s}\n".format(
|
||||
chain=chain_id, num=res_num, code=code2)
|
||||
file_.write(str_)
|
||||
|
||||
|
||||
@@ -302,9 +307,9 @@ def write_scwrl_sequence_file(sequence, filename="x-ray.seq", _=None):
|
||||
with open(filename, 'w') as file_:
|
||||
start = 0
|
||||
while len(sequence[start:]) > 60:
|
||||
file_.write("%s\n" % (sequence[start:start+60]))
|
||||
file_.write("{0:s}s\n".format(sequence[start:start+60]))
|
||||
start += 60
|
||||
file_.write("%s\n" % (sequence[start:]))
|
||||
file_.write("{0:s}\n".format(sequence[start:]))
|
||||
|
||||
|
||||
def get_propka_header():
|
||||
@@ -314,7 +319,7 @@ def get_propka_header():
|
||||
string
|
||||
"""
|
||||
today = date.today()
|
||||
str_ = "propka3.1 %93s\n" % (today)
|
||||
str_ = "propka3.1 {0:>93s}\n".format(today)
|
||||
str_ += ("---------------------------------------------------------------"
|
||||
"----------------------------------------\n")
|
||||
str_ += ("-- "
|
||||
@@ -468,19 +473,19 @@ def make_interaction_map(name, list_, interaction):
|
||||
for i, group1 in enumerate(list_):
|
||||
for group2 in list_[i:]:
|
||||
if interaction(group1, group2):
|
||||
res += 'Coupling: %9s - %9s\n' % (group1.label,
|
||||
group2.label)
|
||||
res += 'Coupling: {0:>9s} - {1:>9s}\n'.format(
|
||||
group1.label, group2.label)
|
||||
return res
|
||||
# Name and map header
|
||||
res = '%s\n%12s' % (name, '')
|
||||
res = '{0:s}\n{1:>12s}'.format(name, '')
|
||||
for group in list_:
|
||||
res += '%9s | ' % group.label
|
||||
res += '{0:>9s} | '.format(group.label)
|
||||
# do the map
|
||||
for group1 in list_:
|
||||
res += '\n%-12s' % (group1.label)
|
||||
res += '\n{0:<12s}'.format(group1.label)
|
||||
for group2 in list_:
|
||||
tag = ''
|
||||
if interaction(group1, group2):
|
||||
tag = ' X '
|
||||
res += '%10s| '%tag
|
||||
res += '{0:>10s}| '.format(tag)
|
||||
return res
|
||||
|
||||
@@ -163,7 +163,8 @@ class Parameters:
|
||||
value = float(words[1])
|
||||
setattr(self, words[0], value)
|
||||
value_sq = value*value
|
||||
setattr(self, "%s_squared" % words[0], value_sq)
|
||||
attr = "{0:s}_squared".format(words[0])
|
||||
setattr(self, attr, value_sq)
|
||||
|
||||
def parse_parameter(self, words):
|
||||
"""Parse field to parameters.
|
||||
@@ -206,7 +207,7 @@ class Parameters:
|
||||
"""Print interaction parameters."""
|
||||
info('--------------- Model pKa values ----------------------')
|
||||
for k in self.model_pkas:
|
||||
info('%3s %8.2f' % (k, self.model_pkas[k]))
|
||||
info('{0:>3s} {1:8.2f}'.format(k, self.model_pkas[k]))
|
||||
|
||||
info('')
|
||||
info('--------------- Interactions --------------------------')
|
||||
@@ -243,21 +244,21 @@ class Parameters:
|
||||
!= self.interaction_matrix[group1][group2]):
|
||||
map_interaction += '* '
|
||||
if (self.sidechain_cutoffs.get_value(group1, val)[0]
|
||||
!= self.sidechain_cutoffs.get_value(group1,
|
||||
group2)[0]
|
||||
or self.sidechain_cutoffs.get_value(group1,
|
||||
val)[1]
|
||||
!= self.sidechain_cutoffs.get_value(group1,
|
||||
group2)[1]):
|
||||
!= self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[0]
|
||||
or self.sidechain_cutoffs.get_value(
|
||||
group1, val)[1]
|
||||
!= self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[1]):
|
||||
map_interaction += '! '
|
||||
else:
|
||||
map_interaction += ' '
|
||||
if (len(map_[group2]) == 0
|
||||
and (self.sidechain_cutoffs.get_value(group1,
|
||||
group2)[0]
|
||||
and (self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[0]
|
||||
!= 3
|
||||
or self.sidechain_cutoffs.get_value(group1,
|
||||
group2)[1]
|
||||
or self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[1]
|
||||
!= 4)):
|
||||
map_interaction += '? '
|
||||
info(interaction, map_interaction)
|
||||
@@ -306,30 +307,32 @@ O2
|
||||
lgroups = ['CG', 'C2N', 'N30', 'N31', 'N32', 'N33', 'NAR', 'OCO',
|
||||
'NP1', 'OH', 'O3', 'CL', 'F', 'NAM', 'N1', 'O2', 'OP',
|
||||
'SH']
|
||||
str_ = """
|
||||
\\begin{longtable}{lllll}
|
||||
\\caption{Ligand interaction parameters. For interactions not listed, the default value of %s is applied.}
|
||||
\\label{tab:ligand_interaction_parameters}\\\\
|
||||
|
||||
\\toprule
|
||||
Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
\\midrule
|
||||
\\endfirsthead
|
||||
|
||||
\\multicolumn{5}{l}{\\emph{continued from the previous page}}\\\\
|
||||
\\toprule
|
||||
Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
\\midrule
|
||||
\\endhead
|
||||
|
||||
\\midrule
|
||||
\\multicolumn{5}{r}{\\emph{continued on the next page}}\\\\
|
||||
\\endfoot
|
||||
|
||||
\\bottomrule
|
||||
\\endlastfoot
|
||||
|
||||
""" % (self.sidechain_cutoffs.default)
|
||||
lines = [
|
||||
"",
|
||||
"\\begin{{longtable}}{{lllll}}",
|
||||
("\\caption{{Ligand interaction parameters. For interactions not "
|
||||
"listed, the default value of {0:s} is applied.}}").format(
|
||||
self.sidechain_cutoffs.default),
|
||||
"\\label{{tab:ligand_interaction_parameters}}\\\\",
|
||||
"\\toprule",
|
||||
"Group1 & Group2 & Interaction & c1 &c2 \\\\",
|
||||
"\\midrule",
|
||||
"\\endfirsthead",
|
||||
"",
|
||||
"\\multicolumn{{5}}{{l}}{\\emph{{continued from the previous page}}}\\\\",
|
||||
"\\toprule",
|
||||
"Group1 & Group2 & Interaction & c1 &c2 \\\\",
|
||||
"\\midrule",
|
||||
"\\endhead",
|
||||
"",
|
||||
"\\midrule",
|
||||
"\\multicolumn{{5}}{{r}}{\\emph{{continued on the next page}}}\\\\",
|
||||
"\\endfoot",
|
||||
"",
|
||||
"\\bottomrule",
|
||||
"\\endlastfoot",
|
||||
""]
|
||||
str_ = "\n".join(lines)
|
||||
for group1 in agroups:
|
||||
for group2 in lgroups:
|
||||
if self.interaction_matrix[group1][group2] == '-':
|
||||
@@ -347,7 +350,7 @@ Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
self.sidechain_cutoffs.get_value(group1, group2)[1])
|
||||
if group1 == group2:
|
||||
break
|
||||
str_ += ' \\end{longtable}\n'
|
||||
str_ += ' \\end{{longtable}}\n'
|
||||
info(str_)
|
||||
|
||||
def print_interactions_latex(self):
|
||||
@@ -357,42 +360,43 @@ Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
'ARG', 'TRP', 'ROH', 'CG', 'C2N', 'N30', 'N31', 'N32',
|
||||
'N33', 'NAR', 'OCO', 'NP1', 'OH', 'O3', 'CL', 'F', 'NAM',
|
||||
'N1', 'O2', 'OP', 'SH']
|
||||
str_ = """
|
||||
\\begin{longtable}{%s}
|
||||
\\caption{Ligand interaction parameters. For interactions not listed, the default value of %s is applied.}
|
||||
\\label{tab:ligand_interaction_parameters}\\\\
|
||||
|
||||
\\toprule
|
||||
Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
\\midrule
|
||||
\\endfirsthead
|
||||
|
||||
\\multicolumn{5}{l}{\\emph{continued from the previous page}}\\\\
|
||||
\\toprule
|
||||
Group1 & Group2 & Interaction & c1 &c2 \\\\
|
||||
\\midrule
|
||||
\\endhead
|
||||
|
||||
\\midrule
|
||||
\\multicolumn{5}{r}{\\emph{continued on the next page}}\\\\
|
||||
\\endfoot
|
||||
|
||||
\\bottomrule
|
||||
\\endlastfoot
|
||||
|
||||
""" % ('l'*len(agroups), self.sidechain_cutoffs.default)
|
||||
lines = [
|
||||
"",
|
||||
"\\begin{longtable}{{{0:s}}}".format('l'*len(agroups)),
|
||||
("\\caption{{Ligand interaction parameters. For interactions not "
|
||||
"listed, the default value of {0:s} is applied.}}").format(
|
||||
str(self.sidechain_cutoffs.default)),
|
||||
"\\label{{tab:ligand_interaction_parameters}}\\\\",
|
||||
"\\toprule",
|
||||
"Group1 & Group2 & Interaction & c1 &c2 \\\\",
|
||||
"\\midrule",
|
||||
"\\endfirsthead",
|
||||
"",
|
||||
"\\multicolumn{{5}}{{l}}{\\emph{{continued from the previous page}}}\\\\",
|
||||
"\\toprule",
|
||||
"Group1 & Group2 & Interaction & c1 &c2 \\\\",
|
||||
"\\midrule",
|
||||
"\\endhead",
|
||||
"",
|
||||
"\\midrule",
|
||||
"\\multicolumn{{5}}{{r}}{\\emph{{continued on the next page}}}\\\\",
|
||||
"\\endfoot",
|
||||
"",
|
||||
"\\bottomrule",
|
||||
"\\endlastfoot",
|
||||
""
|
||||
]
|
||||
str_ = "\n".join(lines)
|
||||
for group1 in agroups:
|
||||
for group2 in agroups:
|
||||
str_ += ('%3s & %3s & %1s & %4s & %4s\\\\ \n'
|
||||
% (group1, group2,
|
||||
self.interaction_matrix[group1][group2],
|
||||
self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[0],
|
||||
self.sidechain_cutoffs.get_value(
|
||||
group1, group2)[1]))
|
||||
fmt = '{g1:>3s} & {g2:>3s} & {mat:1s} & {val1:>4s} & {val2:>4s}\\\\ \n'
|
||||
str_ += fmt.format(
|
||||
group1, group2, self.interaction_matrix[group1][group2],
|
||||
str(self.sidechain_cutoffs.get_value(group1, group2)[0]),
|
||||
str(self.sidechain_cutoffs.get_value(group1, group2)[1]))
|
||||
if group1 == group2:
|
||||
break
|
||||
str_ += ' \\end{longtable}\n'
|
||||
str_ += ' \\end{{longtable}}\n'
|
||||
info(str_)
|
||||
|
||||
|
||||
@@ -450,7 +454,8 @@ class InteractionMatrix:
|
||||
group: group to get
|
||||
"""
|
||||
if group not in self.dictionary.keys():
|
||||
str_ = '%s not found in interaction matrix %s' % (group, self.name)
|
||||
str_ = '{0:s} not found in interaction matrix {1:s}'.format(
|
||||
group, self.name)
|
||||
raise KeyError(str_)
|
||||
return self.dictionary[group]
|
||||
|
||||
@@ -465,12 +470,12 @@ class InteractionMatrix:
|
||||
def __str__(self):
|
||||
str_ = ' '
|
||||
for key in self.ordered_keys:
|
||||
str_ += '%3s ' % key
|
||||
str_ += '{0:>3s} '.format(key)
|
||||
str_ += '\n'
|
||||
for key1 in self.ordered_keys:
|
||||
str_ += '%3s ' % key1
|
||||
str_ += '{0:>3s} '.format(key1)
|
||||
for key2 in self.ordered_keys:
|
||||
str_ += '%3s ' % self[key1][key2]
|
||||
str_ += '{0:>3s} '.format(self[key1][key2])
|
||||
str_ += '\n'
|
||||
return str_
|
||||
|
||||
@@ -517,8 +522,9 @@ class PairwiseMatrix:
|
||||
"""
|
||||
if key1 in self.dictionary and key2 in self.dictionary[key1]:
|
||||
if key1 != key2:
|
||||
str_ = ('Parameter value for %s, %s defined more than once'
|
||||
% (key1, key2))
|
||||
str_ = (
|
||||
'Parameter value for {0:s}, {1:s} defined more '
|
||||
'than once'.format(key1, key2))
|
||||
warning(str_)
|
||||
if not key1 in self.dictionary:
|
||||
self.dictionary[key1] = {}
|
||||
@@ -547,7 +553,8 @@ class PairwiseMatrix:
|
||||
matrix information
|
||||
"""
|
||||
if group not in self.dictionary.keys():
|
||||
str_ = '%s not found in interaction matrix %s' % (group, self.name)
|
||||
str_ = '{0:s} not found in interaction matrix {1:s}'.format(
|
||||
group, self.name)
|
||||
raise KeyError(str_)
|
||||
return self.dictionary[group]
|
||||
|
||||
@@ -563,5 +570,6 @@ class PairwiseMatrix:
|
||||
str_ = ''
|
||||
for key1 in self.keys():
|
||||
for key2 in self[key1].keys():
|
||||
str_ += '%s %s %s\n' % (key1, key2, self[key1][key2])
|
||||
str_ += '{0:s} {1:s} {2:s}\n'.format(
|
||||
key1, key2, self[key1][key2])
|
||||
return str_
|
||||
|
||||
@@ -58,23 +58,25 @@ def protein_precheck(conformations, names):
|
||||
atoms_by_residue[res_id] = [atom]
|
||||
for res_id, res_atoms in atoms_by_residue.items():
|
||||
res_name = res_atoms[0].res_name
|
||||
residue_label = '%3s%5s'%(res_name, res_id)
|
||||
residue_label = '{0:>3s}{1:>5s}'.format(res_name, res_id)
|
||||
# ignore ligand residues
|
||||
if res_name not in EXPECTED_ATOM_NUMBERS:
|
||||
continue
|
||||
# check for c-terminal
|
||||
if 'C-' in [a.terminal for a in res_atoms]:
|
||||
if len(res_atoms) != EXPECTED_ATOM_NUMBERS[res_name]+1:
|
||||
str_ = ("Unexpected number (%d) of atoms in residue %s "
|
||||
"in conformation %s" % (len(res_atoms),
|
||||
residue_label, name))
|
||||
str_ = ("Unexpected number ({num:d}) of atoms in residue "
|
||||
"{res:s} in conformation {conf:s}".format(
|
||||
num=len(res_atoms), res=residue_label,
|
||||
conf=name))
|
||||
warning(str_)
|
||||
continue
|
||||
# check number of atoms in residue
|
||||
if len(res_atoms) != EXPECTED_ATOM_NUMBERS[res_name]:
|
||||
str_ = ('Unexpected number (%d) of atoms in residue %s '
|
||||
'in conformation %s' % (len(res_atoms),
|
||||
residue_label, name))
|
||||
str_ = ("Unexpected number ({num:d}) of atoms in residue "
|
||||
"{res:s} in conformation {conf:s}".format(
|
||||
num=len(res_atoms), res=residue_label,
|
||||
conf=name))
|
||||
warning(str_)
|
||||
|
||||
|
||||
@@ -86,7 +88,8 @@ def resid_from_atom(atom):
|
||||
Returns
|
||||
string
|
||||
"""
|
||||
return '%4d %s %s' % (atom.res_num, atom.chain_id, atom.icode)
|
||||
return '{0:>4d} {1:s} {2:s}'.format(
|
||||
atom.res_num, atom.chain_id, atom.icode)
|
||||
|
||||
|
||||
def get_atom_lines_from_pdb(pdb_file, ignore_residues=[], keep_protons=False,
|
||||
@@ -136,7 +139,7 @@ def get_atom_lines_from_pdb(pdb_file, ignore_residues=[], keep_protons=False,
|
||||
alt_conf_tag = chr(ord(alt_conf_tag)+16)
|
||||
if alt_conf_tag == ' ':
|
||||
alt_conf_tag = 'A'
|
||||
conformation = '%d%s'%(model, alt_conf_tag)
|
||||
conformation = '{0:d}{1:s}'.format(model, alt_conf_tag)
|
||||
# set the terminal
|
||||
if tag == 'ATOM ':
|
||||
if (residue_name.strip() == 'N'
|
||||
@@ -190,7 +193,7 @@ def write_mol2_for_atoms(atoms, filename):
|
||||
filename: name of file
|
||||
"""
|
||||
# TODO - header needs to be converted to format string
|
||||
header = '@<TRIPOS>MOLECULE\n\n%d %d\nSMALL\nUSER_CHARGES\n'
|
||||
header = '@<TRIPOS>MOLECULE\n\n{natom:d} {id:d}\nSMALL\nUSER_CHARGES\n'
|
||||
atoms_section = '@<TRIPOS>ATOM\n'
|
||||
for i, atom in enumerate(atoms):
|
||||
atoms_section += atom.make_mol2_line(i+1)
|
||||
@@ -200,15 +203,16 @@ def write_mol2_for_atoms(atoms, filename):
|
||||
for j, atom2 in enumerate(atoms, i+1):
|
||||
if atom1 in atom2.bonded_atoms:
|
||||
type_ = get_bond_order(atom1, atom2)
|
||||
bonds_section += '%7d %7d %7d %7s\n' % (id_, i+1, j+1, type_)
|
||||
bonds_section += '{0:>7d} {1:>7d} {2:>7d} {3:>7s}\n'.format(
|
||||
id_, i+1, j+1, type_)
|
||||
id_ += 1
|
||||
substructure_section = '@<TRIPOS>SUBSTRUCTURE\n\n'
|
||||
if len(atoms) > 0:
|
||||
substructure_section = ('@<TRIPOS>SUBSTRUCTURE\n%-7d %10s %7d\n'
|
||||
% (atoms[0].res_num, atoms[0].res_name,
|
||||
atoms[0].numb))
|
||||
substructure_section = (
|
||||
'@<TRIPOS>SUBSTRUCTURE\n{0:<7d} {1:>10s} {2:>7d}\n'.format(
|
||||
atoms[0].res_num, atoms[0].res_name, atoms[0].numb))
|
||||
out = propka.lib.open_file_for_writing(filename)
|
||||
out.write(header % (len(atoms), id_-1))
|
||||
out.write(header.format(natom=len(atoms), id=id_-1))
|
||||
out.write(atoms_section)
|
||||
out.write(bonds_section)
|
||||
out.write(substructure_section)
|
||||
@@ -232,7 +236,7 @@ def get_bond_order(atom1, atom2):
|
||||
if '.ar' in atom2.sybyl_type:
|
||||
pi_electrons2 -= 1
|
||||
if pi_electrons1 > 0 and pi_electrons2 > 0:
|
||||
type_ = '%d' % (min(pi_electrons1, pi_electrons2)+1)
|
||||
type_ = '{0:d}'.format(min(pi_electrons1, pi_electrons2)+1)
|
||||
if '.ar' in atom1.sybyl_type and '.ar' in atom2.sybyl_type:
|
||||
type_ = 'ar'
|
||||
return type_
|
||||
@@ -247,7 +251,7 @@ def write_input(molecular_container, filename):
|
||||
"""
|
||||
out = propka.lib.open_file_for_writing(filename)
|
||||
for conformation_name in molecular_container.conformation_names:
|
||||
out.write('MODEL %s\n' % conformation_name)
|
||||
out.write('MODEL {0:s}\n'.format(conformation_name))
|
||||
# write atoms
|
||||
for atom in molecular_container.conformations[conformation_name].atoms:
|
||||
out.write(atom.make_input_line())
|
||||
|
||||
@@ -71,7 +71,7 @@ class Protonate:
|
||||
"""
|
||||
# atom is a protein atom
|
||||
if atom.type == 'atom':
|
||||
key = '%3s-%s' % (atom.res_name, atom.name)
|
||||
key = '{0:3s}-{1:s}'.format(atom.res_name, atom.name)
|
||||
if atom.terminal:
|
||||
debug(atom.terminal)
|
||||
key = atom.terminal
|
||||
|
||||
Reference in New Issue
Block a user