schrodinger.application.desmond.stage.prepare.forcefield module

schrodinger.application.desmond.stage.prepare.forcefield.is_valid_opls_name(name: str) bool
class schrodinger.application.desmond.stage.prepare.forcefield.AssignCustomCharge(*args, **kwargs)

Bases: schrodinger.application.desmond.cmj.StructureStageBase

This sets up and runs the custom charge script for the ligand cts in the input file. Ligands must be in separate cts, otherwise custom charges will not be assigned. Other cts will be passed unchanged. This must be called prior to the AssignForcefield stage.

NAME = 'assign_custom_charge'
PARAM = <schrodinger.utils.sea.sea.Map object>
run(jobname: str, mae_fname: str) Optional[str]
Parameters
  • jobname – Jobname for this stage.

  • input_fname – Filename for the input structure.

Returns

Filename for the output structure or None if there was an error generating the output.

class schrodinger.application.desmond.stage.prepare.forcefield.AssignForcefield(*args, **kwargs)

Bases: schrodinger.application.desmond.cmj.StageBase

Variables

ff_builder_args – a list storing arguments passed to desmond_ff_builder so that the same arguments can be passed to generate_titration_states.

NAME = 'assign_forcefield'
FFLD_WATER = {'SPC': 'SPC', 'SPCE': 'SPCE', 'TIP3P': 'T3P', 'TIP4P': 'T4P', 'TIP4P2005': 'T4P5', 'TIP4PD': 'T4PD', 'TIP4PEW': 'T4PE', 'TIP5P': 'T5P'}
parameter_string = '\n    DATA = {\n    forcefield = OPLS_2005\n    water      = SPC\n    humble     = no\n    fepio_mode = 2\n    restrain   = none\n    restraints = {\n        new = []\n        existing = ignore\n    }\n    print_restraint = false\n    atom_group = retain\n    fep_retain_angle = yes\n    core_hopping_fepio = on\n    hydrogen_mass_repartition = off\n    make_alchemical_water = on\n    fep_enhance_sampling_dihedral = off\n    assign_is_infinite = off\n    fail_on_lewis_failure = on\n    use_zob_property = on\n    pose_conf_restraint = {\n        enable = false\n        name = harm\n        schedule = pose_dihedral_restraint\n        fc = 50.0\n        sigma = 10.0\n        alpha = 1.0\n        dihedral_schedule = ""\n        max_ring_size = 999\n    }\n    macromolecule_conf_restraint = {\n        enable = false\n        dihedral_schedule = ""\n        backbone = {\n            name = harm\n            schedule = ""\n            fc = 50.0\n            sigma = 10.0\n            alpha = 1.0\n        }\n        sidechain = {\n            name = harm\n            schedule = ""\n            fc = 50.0\n            sigma = 10.0\n            alpha = 1.0\n        }\n        calpha_rung = {\n            name = harm\n            schedule = ""\n            fc = 5.0\n            alpha = 1.0\n        }\n    }\n    }\n\n    VALIDATE = {\n    forcefield = {type = str _check = check_forcefield}\n    water      = {type = enum range = [SPC SPCE TIP3P TIP4P TIP4P2005 TIP4PEW TIP4PD TIP5P none]}\n    humble     = {type = bool}\n    fepio_mode = {type = int  range = [1 3]}\n    atom_group = [\n       {type = enum range = [retain none]}\n       {atom  = {type = str}\n        name  = {type = str}\n        index = {type = int range = [0 7]}\n       }\n       {type = list size = 0\n        elem = {atom  = {type = str}\n                name  = {type = str}\n                index = {type = int range = [0 7]}\n               }\n       }\n    ]\n    restrain   = [\n       {type = enum range = [retain none]}\n       {_mapcheck = check_restrain _skip = all}\n       {type = list size = -1\n        elem = {_mapcheck = check_restrain _skip = all}\n       }\n    ]\n    restraints = {\n        existing = {type = enum range = [retain ignore ignore_posre]}\n        new = [{type = list} {_skip = all}]\n    }\n    print_restraint = {type = bool }\n    fep_retain_angle = {type = bool}\n    core_hopping_fepio = {type = bool}\n    hydrogen_mass_repartition = {type = bool}\n    make_alchemical_water = {type = bool}\n    fep_enhance_sampling_dihedral = {type = bool}\n    assign_is_infinite = {type = bool}\n    fail_on_lewis_failure = {type = bool}\n    use_zob_property = {type = bool}\n    pose_conf_restraint = {\n        enable = {type = bool}\n        name = {type = enum range = [harm fbhw soft]}\n        fc = {type = float+}\n        sigma = {type = float+}\n        alpha = {type = float+}\n        schedule = {type = str}\n        dihedral_schedule = {type = str}\n        max_ring_size = {type = int}\n        _mapcheck = check_pose_conf_restraint\n        }\n    macromolecule_conf_restraint = {\n        enable = {type = bool}\n        dihedral_schedule = {type = str}\n        backbone = {\n            name = {type = enum range = [harm fbhw soft]}\n            schedule = {type = str}\n            fc = {type = float+}\n            sigma = {type = float+}\n            alpha = {type = float+}\n        }\n        sidechain = {\n            name = {type = enum range = [harm fbhw soft]}\n            schedule = {type = str}\n            fc = {type = float+}\n            sigma = {type = float+}\n            alpha = {type = float+}\n        }\n        calpha_rung = {\n            name = {type = enum range = [harm]}\n            schedule = {type = str}\n            fc = {type = float+}\n            alpha = {type = float+}\n        }\n    }\n    }\n    '
PARAM = <schrodinger.utils.sea.sea.Map object>
__init__(*args, **kwargs)
crunch()
hook_captured_successful_job(job)
static get_water_atom_indices(st: schrodinger.structure._structure.Structure) List[int]

Method that returns a generator for all the water atoms in a structure.

class schrodinger.application.desmond.stage.prepare.forcefield.LambdaDynamicsAssignForcefield(*args, **kwargs)

Bases: schrodinger.application.desmond.stage.prepare.forcefield.AssignForcefield

An assign forcefield stage that is exclusive for the lambda dynamics workflow.

Subclassing this stage is needed to correctly use the assign forcefield infrastructure, but make sure the correct input files are copied to the stage directory. These input files are no longer just named after the previous stage’s jobname, but also have a structure type associated with them based on whether they are just the mutation chain or a binding complex.

DESMOND-14405: refactor this stage to use the AssignForcefield stage if possible

NAME = 'lambda_dynamics_assign_forcefield'
crunch()
exception schrodinger.application.desmond.stage.prepare.forcefield.AssignLambdaScheduleError

Bases: Exception

class schrodinger.application.desmond.stage.prepare.forcefield.AssignLambdaSchedule(should_pack=True)

Bases: schrodinger.application.desmond.cmj.StageBase

NAME = 'assign_lambda_schedule'
PARAM = <schrodinger.utils.sea.sea.Map object>
crunch() None
static get_n_vdw_and_charge_div(norm_dipole_per_atom: float, n_win: int) Tuple[int, float]

Compute number of van der Waals windows and fraction of charges.

Uses a “broken stick” function to determine the partition of the lambda windows into van der Waals and electrostatic interactions.

schrodinger.application.desmond.stage.prepare.forcefield.encode_restraints(ct: schrodinger.structure._structure.Structure, restraints: List[schrodinger.utils.sea.sea.Map])

Encode the restraints in the FEP_ENCODED_RESTRAINTS ct property.

Parameters
  • ct – Structure to modify in place.

  • restraints – List of restraints as sea.Map objects.

schrodinger.application.desmond.stage.prepare.forcefield.decode_restraints(ct: schrodinger.structure._structure.Structure) List[schrodinger.utils.sea.sea.Map]

Decode the restraints in the FEP_ENCODED_RESTRAINTS ct property.

Parameters

ct – Structure to read the restraints from.

Returns

If found, restraints that can be passed to schrodinger.application.desmond.packages.restraint.RestraintsBuilder. Otherwise, return None.

schrodinger.application.desmond.stage.prepare.forcefield.clear_restraints(ct: schrodinger.structure._structure.Structure)

Clear the FEP_ENCODED_RESTRAINTS ct property and FEP_RESTRAIN atom property from a given structure.

Parameters

ct – Structure to modify in place.

schrodinger.application.desmond.stage.prepare.forcefield.add_restraint_reference(st: schrodinger.structure._structure.Structure, restraints: List[schrodinger.utils.sea.sea.Map])

Add the reference values for Boresch type distance/angle/dihedral restraints.

Parameters
  • st – Reference structure.

  • restraints – List of restraints, updated in place.

schrodinger.application.desmond.stage.prepare.forcefield.calculate_restraint_correction_term(restraints: List[schrodinger.utils.sea.sea.Map], temperature: float) float

Calculate the correction to the free energy due to the restraints.

Parameters
  • restraints – List of restraints.

  • temperature – The temperature for the simulation.

Returns

The correction term in kcal/mol.

schrodinger.application.desmond.stage.prepare.forcefield.add_restraint_atom_marker(st: schrodinger.structure._structure.Structure, ligand_asl: str) Dict[int, int]

Update st to mark the ligand atoms that could be part of a restraint. Returns a dictionary mapping the FEP_RESTRAIN values to the structure atom indicies.

Parameters
  • st – This will be updated in place to add atom properties to mark the ligand atoms.

  • ligand_asl – ASL to identify the ligand.

class schrodinger.application.desmond.stage.prepare.forcefield.LoadRestraintsFromStructure(*args, **kwargs)

Bases: schrodinger.application.desmond.cmj.StructureStageBase

Load the restraints encoded in the structure using encode_restraints and store to the cms. By default this stage will append to any existing restraints, set ‘load_restraints_from_structure.existing = ignore’ to ignore existing restraints in the structure.

The restraints can be used by setting ‘restrain.existing = retain’ in the subsequent simulate stage.

NAME = 'load_restraints_from_structure'
PARAM = <schrodinger.utils.sea.sea.Map object>
run(jobname: str, cms_fname: str) Optional[str]
Parameters
  • jobname – Jobname for this stage.

  • input_fname – Filename for the input structure.

Returns

Filename for the output structure or None if there was an error generating the output.

class schrodinger.application.desmond.stage.prepare.forcefield.ForcefieldBuilderLauncher(should_pack=True)

Bases: schrodinger.application.desmond.cmj.StageBase

NAME = 'forcefield_builder_launcher'
PARAM = <schrodinger.utils.sea.sea.Map object>
crunch()

This is where jobs of this stage are created. This function should be overriden by the subclass.