Source code for schrodinger.application.desmond.starter.ui.bpfep

"""
Binding-pose FEP command line UI

Copyright Schrodinger, LLC. All rights reserved.
"""

import argparse
import sys
from typing import List
from typing import Set

from schrodinger.application.desmond import util
from schrodinger.structutils.analyze import validate_asl

from . import cmdline
from .cmdline import Option


[docs]class Args(cmdline.BaseArgs):
[docs] def __init__(self, opt: argparse.Namespace): self.copy_parser_attributes(opt) if not self.mut_ligand_asl: self.mut_ligand_asl = self.ligand_asl super(Args, self).__init__(opt)
[docs] def validate(self): if self.RESTART: if len(self.inp_file): sys.exit("ERROR: No positional arguments for a restart job.") return if 2 != len(self.inp_file): sys.exit("ERROR: Two MAE files are expected for a new job.") util.ensure_file_exists(self.inp_file[0]) util.ensure_file_exists(self.inp_file[1]) if not validate_asl(self.ligand_asl): sys.exit("ERROR: Invalid ASL expression for -ligand-asl: %s" % self.ligand_asl) if self.mut_ligand_asl and not validate_asl(self.mut_ligand_asl): sys.exit("ERROR: Invalid ASL expression for -mut-ligand-asl: %s" % self.mut_ligand_asl) if not validate_asl(self.receptor_asl): sys.exit("ERROR: Invalid ASL expression for -receptor-asl: %s" % self.receptor_asl) super().validate()
[docs]def ui(argv: List[str]) -> Args: usage = """ Binding-pose FEP driver (experimental) Report issues to Desmond. * Run a new job: $SCHRODINGER/fep_binding_pose -HOST <compute-host> -JOBNAME <jobname> -ligand-asl <ASL> <ref-complex>.mae <mut-complex>.mae * Run a new job with custom workflow: $SCHRODINGER/fep_binding_pose -HOST <compute-host> -JOBNAME <jobname> -m <custom-workflow.msj> -ligand-asl <ASL> <ref-complex>.mae <mut-complex>.mae * Restart a previously interrupted job: $SCHRODINGER/fep_binding_pose -HOST <compute-host> -JOBNAME <jobname> -RESTART -checkpoint <multisim-checkpoint-file> Note that the following options have no effects for a restart job: -ligand-asl, -mut-ligand-asl, -receptor-asl * Prepare input files for multisim. Do NOT run job: $SCHRODINGER/fep_binding_pose -HOST <compute-host> -JOBNAME <jobname> -ligand-asl <ASL> <ref-complex>.mae <mut-complex>.mae -prepare """ options = cmdline.get_common_options() options.extend([ Option( "inp_file", None, "Two MAE files: The first is the reference " "complex structure, the second the mutant complex structure. Each " "file should contain exactly ONE CT block. This argument is " "required for a from-scratch new job, but should NOT be set for a " "restart job.", { "metavar": "<ref-complex>.mae <mut-complex>.mae", "nargs": "*" }), Option( "-ligand-asl", "", "ASL expression to specify the alchemical part of the ligand " "molecule in both complex structures. The selected atoms will be " "excluded from the atom mapping. If the alchemical part is " "different between the reference and the mutant ligands, use this " "option to specify only for the reference, and the -mut-ligand-asl " "option only for the mutant. This option is required for a " "from-scratch new job."), Option( "-mut-ligand-asl", "", "ASL expression to specify the alchemical part of the ligand " "molecule in the mutant complex structure. The selected atoms will " "be excluded from the atom mapping. Use this option ONLY when the " "alchemical part is different between the reference and the mutant " "ligands."), Option( "-receptor-asl", "not all", "ASL expression to specify the alchemical part of the receptor in " "both complex structures. The selected atoms will be excluded from " "the atom mapping. Default: All receptor atoms will be mapped."), ]) cmdline.suppress_options(options, {"-ppj", "-seed", "-skip_traj", "-buffer"}) opt = cmdline.parse_options(usage, options, argv[1:], add_subhost=False) return Args(opt)