Make PROPKA input file generation optional.

Fixes https://github.com/jensengroup/propka-3.1/issues/51.
This commit is contained in:
Nathan Baker
2020-05-31 10:26:56 -07:00
parent 52554d905a
commit 9b59d924b2
6 changed files with 27 additions and 10 deletions

View File

@@ -68,11 +68,6 @@ def read_molecule_file(input_file, mol_container):
mol_container.conformations[name].sort_atoms() mol_container.conformations[name].sort_atoms()
# find coupled groups # find coupled groups
mol_container.find_covalently_coupled_groups() mol_container.find_covalently_coupled_groups()
# write out the input file
# TODO - figure out why this I/O has to happen here
output_path = Path(input_path.name.replace(
input_file_extension, '.propka_input'))
write_propka(mol_container, output_path)
elif input_file_extension.lower() == '.propka_input': elif input_file_extension.lower() == '.propka_input':
# input is a propka_input file # input is a propka_input file
conformations, conformation_names = read_propka( conformations, conformation_names = read_propka(

View File

@@ -279,6 +279,9 @@ def build_parser(parser=None):
group.add_argument( group.add_argument(
"-q", "--quiet", action="store_const", const="WARNING", "-q", "--quiet", action="store_const", const="WARNING",
dest="log_level", help="suppress non-warning messages") dest="log_level", help="suppress non-warning messages")
group.add_argument(
"--generate-propka-input", action="store_true",
help="Generate a PROPKA input file")
group.add_argument( group.add_argument(
"--protonate-all", dest="protonate_all", action="store_true", "--protonate-all", dest="protonate_all", action="store_true",
help="Protonate all atoms (will not influence pKa calculation)", help="Protonate all atoms (will not influence pKa calculation)",

View File

@@ -1,6 +1,7 @@
"""Molecular container for storing all contents of PDB files.""" """Molecular container for storing all contents of PDB files."""
import os import os
import propka.version import propka.version
from propka.output import write_propka, write_pka, print_header, print_result
from propka.conformation_container import ConformationContainer from propka.conformation_container import ConformationContainer
from propka.lib import info, warning, make_grid from propka.lib import info, warning, make_grid
@@ -26,7 +27,7 @@ class MolecularContainer:
options: options object options: options object
""" """
# printing out header before parsing input # printing out header before parsing input
propka.output.print_header() print_header()
self.conformation_names = [] self.conformation_names = []
self.conformations = {} self.conformations = {}
self.options = options self.options = options
@@ -82,7 +83,7 @@ class MolecularContainer:
# find the average of the conformations # find the average of the conformations
self.average_of_conformations() self.average_of_conformations()
# print out the conformation-average results # print out the conformation-average results
propka.output.print_result(self, 'AVR', self.version.parameters) print_result(self, 'AVR', self.version.parameters)
def average_of_conformations(self): def average_of_conformations(self):
"""Generate an average of conformations.""" """Generate an average of conformations."""
@@ -117,6 +118,16 @@ class MolecularContainer:
self.conformation_names[0]].chains self.conformation_names[0]].chains
self.conformations['AVR'] = avr_conformation self.conformations['AVR'] = avr_conformation
def write_propka(self, filename=None):
"""Write PROPKA input file.
Args:
filename: file to write to
"""
if filename is None:
filename = os.path.join('{0:s}.propka'.format(self.name))
write_propka(self, filename)
def write_pka(self, filename=None, reference="neutral", def write_pka(self, filename=None, reference="neutral",
direction="folding", options=None): direction="folding", options=None):
"""Write pKa information to a file. """Write pKa information to a file.
@@ -127,8 +138,8 @@ class MolecularContainer:
direction: folding vs. unfolding direction: folding vs. unfolding
options: options object options: options object
""" """
# write out the average conformation if filename is None:
filename = os.path.join('{0:s}.pka'.format(self.name)) filename = os.path.join('{0:s}.pka'.format(self.name))
# if the display_coupled_residues option is true, write the results out # if the display_coupled_residues option is true, write the results out
# to an alternative pka file # to an alternative pka file
if self.options.display_coupled_residues: if self.options.display_coupled_residues:
@@ -138,7 +149,7 @@ class MolecularContainer:
filename = os.path.join( filename = os.path.join(
'{0:s}_{1:s}.pka'.format( '{0:s}_{1:s}.pka'.format(
self.name, self.version.parameters.output_file_tag)) self.name, self.version.parameters.output_file_tag))
propka.output.write_pka( write_pka(
self, self.version.parameters, filename=filename, self, self.version.parameters, filename=filename,
conformation='AVR', reference=reference) conformation='AVR', reference=reference)

View File

@@ -21,6 +21,8 @@ def main(optargs=None):
my_molecule = read_molecule_file(pdbfile, my_molecule) my_molecule = read_molecule_file(pdbfile, my_molecule)
my_molecule.calculate_pka() my_molecule.calculate_pka()
my_molecule.write_pka() my_molecule.write_pka()
if options.generate_propka_input:
my_molecule.write_propka()
def single(pdbfile, optargs=None): def single(pdbfile, optargs=None):
@@ -44,4 +46,6 @@ def single(pdbfile, optargs=None):
my_molecule = read_molecule_file(pdbfile, my_molecule) my_molecule = read_molecule_file(pdbfile, my_molecule)
my_molecule.calculate_pka() my_molecule.calculate_pka()
my_molecule.write_pka() my_molecule.write_pka()
if options.generate_propka_input:
my_molecule.write_propka()
return my_molecule return my_molecule

View File

@@ -28,6 +28,8 @@ def main():
my_molecule = read_molecule_file(pdbfile, my_molecule) my_molecule = read_molecule_file(pdbfile, my_molecule)
my_molecule.calculate_pka() my_molecule.calculate_pka()
my_molecule.write_pka() my_molecule.write_pka()
if options.generate_propka_input:
my_molecule.write_propka()
if __name__ == '__main__': if __name__ == '__main__':

View File

@@ -78,6 +78,8 @@ def run_propka(options, pdb_path, tmp_path):
molecule = read_molecule_file(str(pdb_path), molecule) molecule = read_molecule_file(str(pdb_path), molecule)
molecule.calculate_pka() molecule.calculate_pka()
molecule.write_pka() molecule.write_pka()
if args.generate_propka_input:
molecule.write_propka()
finally: finally:
os.chdir(cwd) os.chdir(cwd)