Source code for icolos.core.workflow_steps.fpocket.base
from pydantic import BaseModel
from icolos.core.containers.gmx_state import GromacsState
from icolos.core.workflow_steps.step import StepBase
from typing import List
from icolos.utils.enums.step_enums import StepCavExploreEnum
_SFP = StepCavExploreEnum()
[docs]class StepFpocketBase(StepBase, BaseModel):
eps: float = None
iso_value: int = None
threshold: float = None
min_samples: int = None
format_: str = None
def __init__(self, **data):
super().__init__(**data)
def _write_input_files(self, tmp_dir, topol: GromacsState):
for file in self.data.generic.get_flattened_files():
file.write(tmp_dir)
if topol is not None:
# handle structure files
if not self.data.generic.get_files_by_extension("gro"):
if topol.structures:
topol.write_structure(tmp_dir)
if not self.data.generic.get_files_by_extension("top"):
if topol.top_lines:
topol.write_topol(tmp_dir)
if not self.data.generic.get_files_by_extension("tpr"):
if topol.tprs:
topol.write_tpr(tmp_dir)
if not self.data.generic.get_files_by_extension("xtc"):
if topol.trajectories:
topol.write_trajectory(tmp_dir)
if not self.data.generic.get_files_by_extension("ndx"):
if topol.ndx:
topol.write_ndx(tmp_dir)
def _parse_arguments(self, flag_dict: dict, args: list = None) -> List:
arguments = args if args is not None else []
# first add the settings from the command line
for key in self.settings.arguments.parameters.keys():
arguments.append(key)
arguments.append(str(self.settings.arguments.parameters[key]))
for flag in self.settings.arguments.flags:
arguments.append(str(flag))
for key, value in flag_dict.items():
# only add defaults if they have not been specified in the json
if key not in arguments:
arguments.append(key)
arguments.append(value)
return arguments
def _set_mdpocket_args(self):
if self.settings.additional is not None:
keys = self.settings.additional.keys()
self.eps = self.settings.additional[_SFP.EPS] if _SFP.EPS in keys else 3
self.iso_value = (
self.settings.additional[_SFP.ISO_VALUE]
if _SFP.ISO_VALUE in keys
else 0.5
)
self.threshold = (
self.settings.additional[_SFP.THRESHOLD]
if _SFP.THRESHOLD in keys
else 20.0
)
self.min_samples = (
self.settings.additional[_SFP.MIN_SAMPLES]
if _SFP.MIN_SAMPLES in keys
else 25
)
if _SFP.TRAJ_TYPE in keys:
if self.settings.additional[_SFP.TRAJ_TYPE].lower() == "gromacs":
self.format_ = "xtc"
elif self.settings.additional[_SFP.TRAJ_TYPE].lower() == "desmond":
self.format_ = "dtr"
else:
raise ValueError(
"Only Desmond and GROMACS trajectory types are supported"
)
else:
raise ValueError("Trajectory format was not specified!")