Source code for icolos.core.workflow_steps.structure_prediction.pdb_fixer
# implement pdbfixer as FOSS alternative to proteinprep
from icolos.utils.enums.step_enums import StepPdbFixerEnum
from icolos.core.workflow_steps.step import StepBase
from icolos.utils.enums.program_parameters import PdbFixerEnum
from icolos.utils.execute_external.execute import Executor
from pydantic import BaseModel
from pdbfixer.pdbfixer import PDBFixer
import os
_SFE = StepPdbFixerEnum()
_FE = PdbFixerEnum()
[docs]class StepPdbFixer(StepBase, BaseModel):
def __init__(self, **data):
super().__init__(**data)
self._initialize_backend(executor=Executor)
def _parse_arguments(self):
default_flags = [
"--replace-nonstandard",
"--add-residues",
]
default_params = {
"--ph": "7.0",
"--add-atoms": "all",
"--keep-heterogens": "all",
}
arguments = []
for arg in self.settings.arguments.flags:
arguments.append(arg)
for key, value in self.settings.arguments.parameters.items():
formatted_arg = f"{key}={value}"
arguments.append(formatted_arg)
for key in default_flags:
if key not in self.settings.arguments.flags:
arguments.append(key)
for key, value in default_params.items():
if key not in self.settings.arguments.parameters.keys():
formatted_arg = f"{key}={value}"
arguments.append(formatted_arg)
return arguments
[docs] def execute(self):
tmp_dir = self._make_tmpdir()
self.data.generic.write_out_all_files(tmp_dir)
pdb_files = self.data.generic.get_file_names_by_extension("pdb")
arguments = self._parse_arguments()
for file in pdb_files:
path = os.path.join(tmp_dir, file)
arguments.extend(["--output", path])
arguments = [path] + arguments
self._backend_executor.execute(
command=_FE.FIXER, arguments=arguments, location=tmp_dir, check=True
)
#
self._parse_output(tmp_dir)
self._remove_temporary(tmp_dir)