Source code for icolos.core.step_utils.structcat_util
from typing import List
from icolos.loggers.steplogger import StepLogger
from icolos.utils.execute_external.openbabel import OpenBabelExecutor
from icolos.utils.execute_external.structcat import StructcatExecutor
from icolos.utils.enums.program_parameters import (
OpenBabelEnum,
SchrodingerExecutablesEnum,
)
from icolos.utils.enums.logging_enums import LoggingConfigEnum
from icolos.utils.general.icolos_exceptions import StepFailed
_SEE = SchrodingerExecutablesEnum()
_LE = LoggingConfigEnum()
_OE = OpenBabelEnum()
[docs]class StructcatUtil:
def __init__(
self,
prefix_execution: str = None,
binary_location: str = None,
backend: str = _OE.OBABEL,
):
self._logger = StepLogger()
self._backend = backend
# initialize and check executor
if self._backend == _SEE.STRUCTCAT:
self.executor = StructcatExecutor(
prefix_execution=prefix_execution, binary_location=binary_location
)
elif self._backend == _OE.OBABEL:
self.executor = OpenBabelExecutor()
if not self.executor.is_available():
raise StepFailed("Cannot initialize structcat backend - abort.")
[docs] def concatenate(
self,
input_files: List[str],
output_file: str,
location: str = None,
):
if self._backend == _SEE.STRUCTCAT:
arguments = []
for input_file in input_files:
arguments = arguments + [
_SEE.STRUCTCAT_I,
input_file,
]
arguments = arguments + [
_SEE.STRUCTCAT_O,
output_file,
]
self.executor.execute(
command=_SEE.STRUCTCAT, arguments=arguments, check=True
)
elif self._backend == _OE.OBABEL:
arguments = input_files
arguments.append("-O")
arguments.append(output_file)
self.executor.execute(
command=_OE.OBABEL, arguments=arguments, check=True, location=location
)