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 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 * 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", "-ffbuilder", '-ff-host'}) opt = cmdline.parse_options(usage, options, argv[1:], add_subhost=False) return Args(opt)