schrodinger.application.glide.ligand_designer module¶
This module provides the APIs behind the Ligand Designer panel and workflow. It combines binding site Phase hypothesis generation with R-group enumeration and Glide grid generation and docking. The docking uses a Glide HTTP server for speed.
-
class
schrodinger.application.glide.ligand_designer.
State
¶ Bases:
enum.Enum
An enumeration.
-
NEW
= 1¶
-
READY
= 4¶
-
RUNNING_GRIDGEN
= 2¶
-
STARTING_SERVER
= 3¶
-
STOPPED
= 5¶
-
-
class
schrodinger.application.glide.ligand_designer.
Pose
(structure, source_lig)¶ Bases:
tuple
-
__contains__
¶ Return key in self.
-
__init__
¶ Initialize self. See help(type(self)) for accurate signature.
-
__len__
¶ Return len(self).
-
count
(value) → integer -- return number of occurrences of value¶
-
index
(value[, start[, stop]]) → integer -- return first index of value.¶ Raises ValueError if the value is not present.
-
source_lig
¶ Alias for field number 1
-
structure
¶ Alias for field number 0
-
-
exception
schrodinger.application.glide.ligand_designer.
ServerTimedOutError
¶ Bases:
RuntimeError
Exception raised if the Glide server times out
-
__init__
¶ Initialize self. See help(type(self)) for accurate signature.
-
args
¶
-
with_traceback
()¶ Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.
-
-
class
schrodinger.application.glide.ligand_designer.
Site
¶ Bases:
object
Base class for a generic “hypothesis site”. A site is defined by a point in space (.xyz property) and has a method to check whether a pose satisfies the desired interaction.
Subclasses must override the .xyz property.
-
xyz
¶ Returns: Cartesian coordinates of this site Return type: iterable(float, float, float)
-
isSatisfied
(pose)¶ Check if a pose satisfies the interaction with the given site.
Return type: bool
-
__init__
¶ Initialize self. See help(type(self)) for accurate signature.
-
-
class
schrodinger.application.glide.ligand_designer.
PhaseSite
(site)¶ Bases:
schrodinger.application.glide.ligand_designer.Site
A site from a Phase hypothesis.
-
__init__
(site)¶ Parameters: site (schrodinger.infra.phase.PhpSite) – Phase site
-
xyz
¶ Returns: Cartesian coordinates of this site Return type: iterable(float, float, float)
-
isSatisfied
(pose)¶ Check if the ligand pose has any Phase sites that are close enough and have the right type to satisfy the interaction with this PhaseSite.
Return type: bool
-
-
class
schrodinger.application.glide.ligand_designer.
WatermapSite
(atom, wmap_eid)¶ Bases:
schrodinger.application.glide.ligand_designer.Site
A WaterMap site.
-
__init__
(atom, wmap_eid)¶ Parameters: - atom (schrodinger.structure._StructureAtom) – WaterMap site atom
- wmap_eid (str or NoneType) – WaterMap entry ID, used to identify the structure to which this site belongs
-
atom
¶
-
xyz
¶ Returns: Cartesian coordinates of this site Return type: iterable(float, float, float)
-
dg
¶ Returns: the WaterMap dG value, if available Return type: float or None
-
name
¶ Returns: the name of this WaterMap site Return type: str
-
wmap_eid
¶ Returns: the WaterMap entry ID Return type: str or NoneType
-
isSatisfied
(pose)¶ True if any ligand atoms are within WMAP_DISPLACEMENT_CUTOFF of the WaterMap site.
-
-
class
schrodinger.application.glide.ligand_designer.
SphereSite
(sphere_data)¶ Bases:
schrodinger.application.glide.ligand_designer.Site
A site for a growth space sphere.
-
__init__
(sphere_data)¶ Parameters: sphere_data (namedtuple(float, float, float, float)) – The sphere’s x, y, z coordinates and radius
-
xyz
¶ Returns: Cartesian coordinates of this site Return type: iterable(float, float, float)
-
isSatisfied
(pose)¶ True if any ligand atoms are within the sphere
-
-
class
schrodinger.application.glide.ligand_designer.
FilterWrapper
(filter_obj, descriptors=None)¶ Bases:
object
A wrapper for schrodinger.ui.qt.filter_dialog_dir.filter_core.Filter to filter an iterable of Structure while computing RDKit descriptors, modifying the structure in-place.
Variables: structures_checked – How many structures were passed to filterStructures
-
__init__
(filter_obj, descriptors=None)¶ Parameters: - filter_obj (schrodinger.ui.qt.filter_dialog_dir.filter_core.Filter) – Filter object to wrap
- descriptors (iterable of str) – names of descriptors to add to each structure, in addition to those that are required by the filters.
-
filterStructures
(structures)¶ Generator which filters an iterable of structures, yielding those that pass, after adding descriptor properties to them. The input structures are modified.
Parameters: structures (iterable of schrodinger.structure.Structure) – structures to filter Return type: generator of schrodinger.structure.Structure
-
-
class
schrodinger.application.glide.ligand_designer.
LigandDesignerTask
(keywords=None, tmpdir=None, *args, **kwargs)¶ Bases:
schrodinger.tasks.tasks.AbstractTask
A LigandDesignerTask stores a ligand, a receptor, and optionally a WaterMap, and provides methods for finding hypotheses and finding which bonds may be enumerated upon for a given hypothesis.
Variables: - GRIDGEN_RETRIES – Number of times to check whether gridgen is finished
- input – Task input
- output – Poses and statistics from enumeration task
- filter_obj (filter_core.Filter) – object responsible for storing filter settings for the enumerated poses
- posesDocked – Signal emitted when poses are docked
-
input
¶ Variables: - ligand_st (schrodinger.Structure.structure) – ligand structure
- original_ligand_st (schrodinger.Structure.structure) – original ligand before enumerations
- receptor_st (schrodinger.Structure.structure) – receptor structure
- wmap_sts (list(schrodinger.Structure.structure)) – watermap structures
- site (Site) – target site
- leaving_atom_index – this atom and others reachable from it in the direction “away” from the core will be replaced by the R-group
- leaving_atom_index – The atom number of the core atom bonded to the leaving atom
- r_groups (iterable of schrodinger.structure.Structure) – R-group library
-
output
¶ Variables: - poses (list[Pose]) – List of poses resulting from enumeration job
- num_ligands – Number of ligands generated by R-group enumeration.
- ligands_matched – Number of ligands matched by the filter.
- num_poses – Number of poses returned from Glide.
-
posesDocked
¶
-
GRIDGEN_RETRIES
= 600¶
-
__init__
(keywords=None, tmpdir=None, *args, **kwargs)¶ Parameters: - keywords – See
LigandDesigner
for documentation - tmpdir – See
LigandDesigner
for documentation
- keywords – See
-
filter_obj
¶
-
backend
¶
-
hypo
¶
-
getHypoCt
()¶ Get the Phase ligand hypothesis for the binding site as a Structure.
Return type: schrodinger.Structure
-
getCurrentInteractions
(start=None)¶ Parameters: start (int or NoneType) – Starting index to renumber sites or None to not renumber Returns: receptor sites from PhpComplex Return type: list[phase.PhpSite]
-
getPotentialInteractions
(start=None, slider_value=0)¶ Parameters: - start (int or NoneType) – Starting index to renumber sites or None to not renumber
- slider_value (float) – Normalized value (0-1) influencing how many interactions are shown
Returns: receptor sites from PhpDeNovoPharm
Return type: list[phase.PhpSite]
-
getBindingSiteAtoms
()¶ Returns: Atom indices of the receptor that are close to the ligand Return type: list[int]
-
getWmapSites
()¶ The WaterMap sites, as a dict by name, sorted by delta G.
-
getSite
(site_name)¶ Return a Site by name. It may be a WatermapSite (conventinally named W1, W2, etc.) or a Phase hypothesis site (with names such as D1, D2 for donors; A1, A2 for acceptors; R1, R2 for aromatic rings; etc.).
-
getBonds
(min_angle=90.0, bond_order=None)¶ Return a list of ligand bonds that could be broken to perform an R-group enumeration in an attempt to satisfy the interaction with a given site.
Parameters: - min_angle (float) – minimum angle, in degrees, between the site and the bond to be broken for R-group enumeration, with the leaving atom at the vertex
- bond_order (int or NoneType) – required bond order, or None to allow any bond order
Returns: list of (staying_atom_index, leaving_atom_index) tuples
Return type: list of (int, int)
-
resetPicks
()¶ Reset user picks
-
run
()¶ Start the real run method by connecting it to the _backendReady signal and getting the backend ready.
Implementation of abstract method of tasks.AbstractFunctionTask.
-
DONE
= 3¶
-
DataClass
¶ alias of
builtins.object
-
FAILED
= 2¶
-
RUNNING
= 1¶
-
WAITING
= 0¶
-
classmethod
addSubParam
(name, param, update_owner=True)¶
-
blockSignals
(self, bool) → bool¶
-
block_signal_propagation
()¶
-
childEvent
(self, QChildEvent)¶
-
children
(self) → object¶
-
classmethod
configureParam
()¶ Override this class method to set up the abstract param class (e.g. setParamReference on child params.)
-
connectNotify
(self, QMetaMethod)¶
-
customEvent
(self, QEvent)¶
-
classmethod
defaultValue
(*args, **kwargs)¶
-
deleteLater
(self)¶
-
destroyed
¶ destroyed(self, QObject = None) [signal]
-
disconnect
(self)¶
-
disconnectNotify
(self, QMetaMethod)¶
-
dumpObjectInfo
(self)¶
-
dumpObjectTree
(self)¶
-
dynamicPropertyNames
(self) → object¶
-
event
(self, QEvent) → bool¶
-
eventFilter
(self, QObject, QEvent) → bool¶
-
findChild
(self, type, name: str = '', options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) → QObject¶ findChild(self, Tuple, name: str = ‘’, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> QObject
-
findChildren
(self, type, name: str = '', options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) → List[QObject]¶ findChildren(self, Tuple, name: str = ‘’, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, type, QRegExp, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, Tuple, QRegExp, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, type, QRegularExpression, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, Tuple, QRegularExpression, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject]
-
classmethod
fromJson
(json_obj)¶ A factory method which constructs a new object from a given dict loaded from a json string or file.
Parameters: json_obj (dict) – A json-loaded dictionary to create an object from. Returns: An instance of this class. :rtype : cls
-
classmethod
fromJsonFilename
(filename)¶
-
classmethod
fromJsonImplementation
(json_dict)¶ Sets the value of this compound param value object from a JSON dict.
-
getAbstractParam
(*args, **kwargs)¶
-
classmethod
getParamSignal
(*args, **kwargs)¶
-
classmethod
getParamValue
(*args, **kwargs)¶
-
classmethod
getSubParam
(name)¶
-
classmethod
getSubParams
()¶
-
getTaskDirectory
()¶ Return the absolute path of the task directory
-
getTaskFilename
(fname)¶ Return the appropriate absolute path for an input or output file
-
get_version
()¶ Method to get the version of a particular object. Defaults to the current version of mmshare. This class can be overridden for custom versioning behavior.
-
guard
()¶ Context manager that saves any Exception raised inside
-
inherits
(self, str) → bool¶
-
initAbstract
()¶
-
initConcrete
(auto_task_dir=False)¶
-
initializeValue
()¶
-
inputChanged
¶
-
inputReplaced
¶
-
installEventFilter
(self, QObject)¶
-
classmethod
isAbstract
()¶
-
isDefault
(*args, **kwargs)¶
-
isSignalConnected
(self, QMetaMethod) → bool¶
-
isStartable
()¶
-
isWidgetType
(self) → bool¶
-
isWindowType
(self) → bool¶
-
killTimer
(self, int)¶
-
max_progress
¶
-
max_progressChanged
¶
-
max_progressReplaced
¶
-
metaObject
(self) → QMetaObject¶
-
moveToThread
(self, QThread)¶
-
name
¶
-
nameChanged
¶
-
nameReplaced
¶
-
objectName
(self) → str¶
-
objectNameChanged
¶ objectNameChanged(self, str) [signal]
-
outputChanged
¶
-
outputReplaced
¶
-
classmethod
owner
()¶
-
classmethod
ownerChain
()¶ Returns a list of param owners starting from the toplevel param and ending with self. Examples:
foo.bar.atom.coord.ownerChain()
will return[foo, bar, atom, coord]
where every item is a concrete param.Foo.bar.atom.coord.x.ownerChain()
will return[Foo, Foo.bar, Foo.atom.coord, Foo.atom.coord.x]
where every item is an abstract params.
-
classmethod
paramName
()¶
-
parent
(self) → QObject¶
-
preprocessors
()¶ Returns: A list of bound preprocessing methods
-
progress
¶
-
progressChanged
¶
-
progressReplaced
¶
-
property
(self, str) → Any¶
-
pyqtConfigure
(...)¶ Each keyword argument is either the name of a Qt property or a Qt signal. For properties the property is set to the given value which should be of an appropriate type. For signals the signal is connected to the given value which should be a callable.
-
receivers
(self, PYQT_SIGNAL) → int¶
-
removeEventFilter
(self, QObject)¶
-
replicate
()¶ Create a new task with the same input and settings (but no output)
-
reportValidation
(results)¶ Present validation messages to the user. This is an implmentation of the
ValidationMixin
interface and does not need to be called directly.This method assumes that
error
andquestion
methods have been defined in the subclass, as in e.g.widget_mixins.MessageBoxMixin
.Parameters: results ( validation.ValidationResults
) – Set of validation results generated byvalidate
Returns: if True, there were no validation errors and the user decided to continue despite any warnings. If False, there was at least one validation error or the user decided to abort when faced with a warning.
-
reset
(*args, **kwargs)¶
-
runValidation
(silent=False, validate_children=True, stop_on_fail=True)¶ Runs validation and reports the results (unless run silently).
Parameters: - silent (bool) – run without any reporting (i.e. error messages to the
user). This is useful if we want to programmatically test validity.
Changes return value of this method from
ValidationResults
to a boolean. - validate_children (bool) – run validation on all child objects. See
_validateChildren
for documentation on what this entails. - stop_on_fail (bool) – stop validation when first failure is encountered
Returns: if silent is False, returns the validation results. If silent is True, returns a boolean generated by
reportValidation
.Return type: ValidationResults
or bool- silent (bool) – run without any reporting (i.e. error messages to the
user). This is useful if we want to programmatically test validity.
Changes return value of this method from
-
sender
(self) → QObject¶
-
senderSignalIndex
(self) → int¶
-
setAutoTaskDir
(auto_task_dir)¶
-
setObjectName
(self, str)¶
-
classmethod
setParamValue
(*args, **kwargs)¶
-
setParent
(self, QObject)¶
-
setProperty
(self, str, Any) → bool¶
-
setValue
(*args, **kwargs)¶
-
signalsBlocked
(self) → bool¶
-
start
(skip_preprocessing=False)¶
-
startTimer
(self, int, timerType: Qt.TimerType = Qt.CoarseTimer) → int¶
-
staticMetaObject
= <PyQt5.QtCore.QMetaObject object>¶
-
status
¶
-
statusChanged
¶
-
statusReplaced
¶
-
taskDone
¶
-
taskFailed
¶
-
taskStarted
¶
-
taskdir
¶
-
thread
(self) → QThread¶
-
timerEvent
(self, QTimerEvent)¶
-
toDict
(*args, **kwargs)¶
-
toJson
(_mark_version=True)¶ Create and returns a data structure made up of jsonable items.
Return type: An instance of one the classes from NATIVE_JSON_DATATYPES
-
toJsonImplementation
(*args, **kwargs)¶
-
tr
(self, str, disambiguation: str = None, n: int = -1) → str¶
-
valueChanged
¶
-
wait
(timeout=None)¶ Block until the task is finished executing or
timeout
seconds have passed.Parameters: timeout (NoneType or int) – Amount of time in seconds to wait before timing out. If None or a negative number, this method will wait until the task is finished.
-
class
schrodinger.application.glide.ligand_designer.
LigandDesigner
(ligand_st, receptor_st, keywords=None, tmpdir=None)¶ Bases:
PyQt5.QtCore.QObject
A LigandDesigner is set up with a ligand and a receptor. It provides methods for performing the enumeration job. This is an R-group enumeration on a single bond, followed by core-constrained Glide docking of each generated ligand and a filter to ensure that the poses satisfy the hypothesis.
A LigandDesigner keeps its state and intermediate files in a scratch directory. A unique subdirectory is created for each ligand-receptor complex; if another object is created for the same complex, it will share the same directory. This allows the reuse of existing grid files, for example. However, only one LigandDesigner at a time can be performing an enumeration because the underlying Glide server process is single-threaded.
The LigandDesigner implements a non-blocking workflow, so the caller needs to take action to drive it. This is done by calling the isReady() method until true. Example:
ld = LigandDesigner(lig, recep) while not ld.isReady():
time.sleep(1)# now we are ready!
The idea is that the caller is free to do other stuff while waiting; for example, interacting with the user.
-
__init__
(ligand_st, receptor_st, keywords=None, tmpdir=None)¶ Parameters: - ligand_st (schrodinger.Structure.structure) – ligand structure
- receptor_st (schrodinger.Structure.structure) – receptor structure
- keywords (dict) – docking keywords to use to override the defaults
- tmpdir (path-like object) – directory under which the job files will be written. Default is $SCHRODINGER_TMPDIR.
-
default_docking_keywords
¶
-
state
¶
-
start
()¶ Start the ligand designer workflow.
-
stop
()¶ Stop the ligand designer workflow.
-
isReady
()¶ Return True if the LigandDesigner is ready to enumerate. This method has the side effect of taking steps to advance towards the READY state.
Returns: server is ready? Return type: bool
-
startEnumeration
(site, atom, rgroups, filter_wrapper=None)¶ Start asynchronous enumeration. If there was a problem with the server, the method will return (not raise!) an exception.
Parameters: - site (Site) – target site
- atom (int) – leaving atom index (this atom and others reachable from it in the direction “away” from the core will be replaced by the R-group).
- rgroups (iterable of schrodinger.structure.Structure) – R-group library
- filter_wrapper (FilterWrapper) – optional filter to apply to the enumeration output
Return type: Exception or NoneType
-
blockSignals
(self, bool) → bool¶
-
childEvent
(self, QChildEvent)¶
-
children
(self) → object¶
-
connectNotify
(self, QMetaMethod)¶
-
customEvent
(self, QEvent)¶
-
deleteLater
(self)¶
-
destroyed
¶ destroyed(self, QObject = None) [signal]
-
disconnect
(self)¶
-
disconnectNotify
(self, QMetaMethod)¶
-
dumpObjectInfo
(self)¶
-
dumpObjectTree
(self)¶
-
dynamicPropertyNames
(self) → object¶
-
event
(self, QEvent) → bool¶
-
eventFilter
(self, QObject, QEvent) → bool¶
-
findChild
(self, type, name: str = '', options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) → QObject¶ findChild(self, Tuple, name: str = ‘’, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> QObject
-
findChildren
(self, type, name: str = '', options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) → List[QObject]¶ findChildren(self, Tuple, name: str = ‘’, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, type, QRegExp, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, Tuple, QRegExp, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, type, QRegularExpression, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject] findChildren(self, Tuple, QRegularExpression, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> List[QObject]
-
inherits
(self, str) → bool¶
-
installEventFilter
(self, QObject)¶
-
isSignalConnected
(self, QMetaMethod) → bool¶
-
isWidgetType
(self) → bool¶
-
isWindowType
(self) → bool¶
-
killTimer
(self, int)¶
-
metaObject
(self) → QMetaObject¶
-
moveToThread
(self, QThread)¶
-
objectName
(self) → str¶
-
objectNameChanged
¶ objectNameChanged(self, str) [signal]
-
parent
(self) → QObject¶
-
property
(self, str) → Any¶
-
pyqtConfigure
(...)¶ Each keyword argument is either the name of a Qt property or a Qt signal. For properties the property is set to the given value which should be of an appropriate type. For signals the signal is connected to the given value which should be a callable.
-
receivers
(self, PYQT_SIGNAL) → int¶
-
removeEventFilter
(self, QObject)¶
-
sender
(self) → QObject¶
-
senderSignalIndex
(self) → int¶
-
setObjectName
(self, str)¶
-
setParent
(self, QObject)¶
-
setProperty
(self, str, Any) → bool¶
-
signalsBlocked
(self) → bool¶
-
startTimer
(self, int, timerType: Qt.TimerType = Qt.CoarseTimer) → int¶
-
staticMetaObject
= <PyQt5.QtCore.QMetaObject object>¶
-
thread
(self) → QThread¶
-
timerEvent
(self, QTimerEvent)¶
-
tr
(self, str, disambiguation: str = None, n: int = -1) → str¶
-
-
class
schrodinger.application.glide.ligand_designer.
GridgenJob
(receptor_st, ligand_st, jobdir)¶ Bases:
object
-
__init__
(receptor_st, ligand_st, jobdir)¶ Parameters: - ligand_st (schrodinger.Structure.structure) – ligand structure
- receptor_st (schrodinger.Structure.structure) – receptor structure
- jobdir (path-like object) – job directory
-
writeInputs
()¶ Write the input files.
-
launch
()¶ Launch the gridgen job.
-
isDone
()¶ Return true if the gridgen job is done. This is based in the existence of the grid file and, if available, the job record.
-
-
schrodinger.application.glide.ligand_designer.
read_json_file
(filename)¶ Read a JSON file. If there are issues reading it (doesn’t exist, syntax errors…) quietly return an empty dict.
Return type: object
-
schrodinger.application.glide.ligand_designer.
md5sum
(input_str)¶ MD5 hex digest of a string.
Return type: str
-
schrodinger.application.glide.ligand_designer.
get_structure_digest
(st, length=8)¶ Return an abbreviated MD5 hex digest given a Structure, after stripping out the structure-level properties.
Parameters: - st (schrodinger.structure.Structure) – input structure (not modified)
- length (int) – digest length in hex digits
Returns: hex digest
Return type: str
-
schrodinger.application.glide.ligand_designer.
renumber_phase_sites
(sites, start)¶ Renumber sites to ensure that sites from different phase backends have unique names.
Note:
sites
is modified in-place but also returned.Parameters: - sites (list[phase.PhaseSite]) – List of phase sites
- start (int) – Starting number
-
schrodinger.application.glide.ligand_designer.
add_rdkit_descriptors
(st, property_names)¶ Add RDKit descriptors to the maestro structure
Parameters: property_names (list[str]) – Maestro properties corresponding to RDKit descriptors
-
schrodinger.application.glide.ligand_designer.
filter_r_groups
(st, staying_atom_idx, leaving_atom_idx, r_groups)¶ Given a structure and a bond to break, return only R-groups that are anticipated to be chemically compatible.
Returns: R groups compatible with the given bond Return type: collections.Iterable[schrodinger.structure.Structure]