schrodinger.application.matsci.buildcomplex module

This module assists in building organometallic complexes. Given one or more ligands, these ligands will be arranged around a central atom.

Copyright Schrodinger, LLC. All rights reserved.

schrodinger.application.matsci.buildcomplex.MONODENTATE = 'Monodentate'

Name for ligands that have a single coordination site

schrodinger.application.matsci.buildcomplex.BIDENTATE = 'Bidentate'

Name for ligands that have two coordination sites

schrodinger.application.matsci.buildcomplex.OCTAHEDRAL = 'Octahedral'

VESPR geometry with 6 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.TRIGONAL_BIPYRAMIDAL = 'Trigonal bipyramidal'

VESPR geometry with 5 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.TETRAHEDRAL = 'Tetrahedral'

VESPR geometry with 4 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.SQUARE_PLANAR = 'Square planar'

VESPR geometry with 4 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.TRIGONAL_PLANAR = 'Trigonal planar'

VESPR geometry with 3 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.LINEAR = 'Linear'

VESPR geometry with 2 coordination sites around a central atom

schrodinger.application.matsci.buildcomplex.SUPPORTED_GEOMETRIES = ['Octahedral', 'Trigonal bipyramidal', 'Tetrahedral', 'Square planar', 'Trigonal planar', 'Linear']

VESPR geometries that can be build by this module

schrodinger.application.matsci.buildcomplex.FACIAL = 'facial'

Octahedral complex with identical atoms on the face of the octahedron

schrodinger.application.matsci.buildcomplex.MERIDIONAL = 'meridional'

Octahedral complex with identical atoms on the meridion of the octahedron

schrodinger.application.matsci.buildcomplex.NO_ISOMER = 'none'

No specific isomer

schrodinger.application.matsci.buildcomplex.CIS = 'cis'

Square planar complex with identical atoms in adjacent sites

schrodinger.application.matsci.buildcomplex.TRANS = 'trans'

Square planar complex with identical atoms in opposite sites

schrodinger.application.matsci.buildcomplex.OCTAHEDRAL_LOCATIONS = [(2.0, 0.0, 0.0), (0.0, 2.0, 0.0), (0.0, 0.0, 2.0), (0.0, -2.0, 0.0), (-2.0, 0.0, 0.0), (0.0, 0.0, -2.0)]

XYZ coordinates of the octahedral coordination sites

schrodinger.application.matsci.buildcomplex.TRIGONAL_BIPYRAMIDAL_LOCATIONS = [(0.0, 2.0, 0.0), (0.0, -2.0, 0.0), (2.0, 0.0, 0.0), (-1.0, 0.0, 1.73205), (-1.0, 0.0, -1.73205)]

XYZ coordinates of the trigonal pyramid coordination sites

schrodinger.application.matsci.buildcomplex.SQUARE_PLANAR_LOCATIONS = [(2.0, 0.0, 0.0), (0.0, 2.0, 0.0), (0.0, -2.0, 0.0), (-2.0, 0.0, 0.0)]

XYZ coordinates of the square planar coordination sites

schrodinger.application.matsci.buildcomplex.TETRAHEDRAL_LOCATIONS = [(0.0, 2.0, 0.0), (1.88562, -0.66667, 0.0), (-0.94281, -0.66667, -1.63299), (-0.94281, -0.66667, 1.63299)]

XYZ coordinates of the tetrahedral coordination sites

schrodinger.application.matsci.buildcomplex.TRIGONAL_PLANAR_LOCATIONS = [(2.0, 0.0, 0.0), (-1.0, 1.73205, 0.0), (-1.0, -1.73205, 0.0)]

XYZ coordinates of the trigonal planar coordination sites

schrodinger.application.matsci.buildcomplex.LINEAR_LOCATIONS = [(2.0, 0.0, 0.0), (-2.0, 0.0, 0.0)]

XYZ coordinates of the linear coordination sites

schrodinger.application.matsci.buildcomplex.minimize_complex(struct, forcefield=14, **kwargs)

Minimize the given structure using the new MMFFLD method of determining parameters for metal complexes.

Additional keyword arguments are passed to the Minimizer class constructor

Parameters:
  • struct (schrodinger.structure.Structure) – The structure to minimize
  • ffld_version (integer) – The force field to use. Should be a module constant from the minimize module.
Raises:
  • ValueError – Typically means atom typing error or valence violations
  • mm.MmException – Due to overlapping atoms
schrodinger.application.matsci.buildcomplex.fix_metal_bond_orders(struct, index)

Fix all the bonds to atom index to be either single or dative depending on whether the other atom has a full valence without this bond or not. Full valence without this bond = dative bond, otherwise bond order = number of open valences. Formal charges are also set to 0 for the metal atom and bonded neighbors.

Note - no bonds are added or removed by this function, only bond orders are changed.

Parameters:
  • struct (schrodinger.structure.Structure) – The structure to operate on - bonds are modified on this structure directly, not a copy
  • index (int) – The atom index of the metal atom with bonds to adjust
schrodinger.application.matsci.buildcomplex.transmute_atom(atom, element, color=None)

Transmute atom from its current element to a new element. The new name will be element + index (ex. H17), and the new color if not supplied will be the Maestro default (or purple if no Maestro default).

Parameters:
  • atom (schrodinger.structure._StructureAtom) – The atom object to transmute to a new element
  • element (str) – The atomic symbol of the new element
  • color (str) – The new color of the atom in a format accepted by the _StructAtom.color property. The default is to use Maestro’s default color for the new element, or purple if the default color is not defined.
Raises:

ValueError – if element is not a recognized atomic symbol

schrodinger.application.matsci.buildcomplex.find_atoms_to_remove(struct, keep_atom, root_atom)

Return a list of atoms bound to root atom (and recursively all atoms bound to those atoms, ad infinitum). keep_atom and all atoms recursively bound to it will not be added to the list.

If keep_atom and root_atom are part of the same ring system, root_atom will be the only atom returned in the list.

For structure A-B-C-D-E, if keep_atom=B and root_atom=C, the returned list will be [C, D, E].

Parameters:
  • struct (schrodinger.structure.Structure) – The structure to use
  • keep_atom (int) – The index of the atom to keep
  • root_atom (int) – The index of the first atom to remove. All neighbors of this atom that are not keep_atom will be added to the list.
Return type:

list

Returns:

A list of all atoms recursively bound to root atom. keep_atom and all atoms bound to it are excluded from the list.

class schrodinger.application.matsci.buildcomplex.Ligand(struct, sites=None, slots=None)

Bases: object

Stores information about a ligand structure

__init__(struct, sites=None, slots=None)

Create a Ligand object

Parameters:
  • struct (schrodinger.structure.Structure) – The ligand structure
  • sites (list of tuple) – Each item of the list is a (X, Y) tuple. X is the index of the atom that will attach to the central metal atom in the complex, and Y is the index of the atom that should be removed to make the attachment. The X-Metal bond will be made along the X-Y bond vector. If Y is 0, the bond will be assumed to be a dative bond, and the X-Metal bond will be formed along an angle that is chosen to minimize sterics. If X is negative, the site is an eta-coordination site.
  • slots (list of int) – The coordination slots this ligand will occupy. The coordination slot is the index into the GEOMETRY_LOCATIONS array that specifies the xyz coordinates for this ligand coordination. If not supplied, the slots will be supplied based on the isomer of the complex.
__class__

alias of builtins.type

__delattr__

Implement delattr(self, name).

__dict__ = mappingproxy({'__module__': 'schrodinger.application.matsci.buildcomplex', '__doc__': '\n Stores information about a ligand structure\n ', '__init__': <function Ligand.__init__>, 'minimizeEtaPosition': <function Ligand.minimizeEtaPosition>, '_findDativeSite': <function Ligand._findDativeSite>, '_addPhantomMarkerAtom': <function Ligand._addPhantomMarkerAtom>, '_findEtaSite': <function Ligand._findEtaSite>, '_stupidlyGuessEtaNormal': <function Ligand._stupidlyGuessEtaNormal>, '__dict__': <attribute '__dict__' of 'Ligand' objects>, '__weakref__': <attribute '__weakref__' of 'Ligand' objects>})
__dir__() → list

default dir() implementation

__eq__

Return self==value.

__format__()

default object formatter

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__module__ = 'schrodinger.application.matsci.buildcomplex'
__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

helper for pickle

__reduce_ex__()

helper for pickle

__repr__

Return repr(self).

__setattr__

Implement setattr(self, name, value).

__sizeof__() → int

size of object in memory, in bytes

__str__

Return str(self).

__subclasshook__()

Abstract classes can override this to customize issubclass().

This is invoked early on by abc.ABCMeta.__subclasscheck__(). It should return True, False or NotImplemented. If it returns NotImplemented, the normal algorithm is used. Otherwise, it overrides the normal algorithm (and the outcome is cached).

__weakref__

list of weak references to the object (if defined)

minimizeEtaPosition()

For bidentate eta ligands, orient the eta plane(s) to be face-on to roughly where the metal atom will be

class schrodinger.application.matsci.buildcomplex.ComplexBuilder(metal='Ir', geometry='Octahedral', isomer='facial', homoleptic=True, dentation='Bidentate')

Bases: object

A class used to build an organometallic complex

__class__

alias of builtins.type

__delattr__

Implement delattr(self, name).

__dict__ = mappingproxy({'__module__': 'schrodinger.application.matsci.buildcomplex', '__doc__': '\n A class used to build an organometallic complex\n ', '__init__': <function ComplexBuilder.__init__>, 'resetSlots': <function ComplexBuilder.resetSlots>, 'setSlotOrder': <function ComplexBuilder.setSlotOrder>, 'getNumUsedCoordSites': <function ComplexBuilder.getNumUsedCoordSites>, 'addMonodentateLigand': <function ComplexBuilder.addMonodentateLigand>, 'addBidentateLigand': <function ComplexBuilder.addBidentateLigand>, '_addLigand': <function ComplexBuilder._addLigand>, 'clearLigands': <function ComplexBuilder.clearLigands>, 'createComplex': <function ComplexBuilder.createComplex>, '_getNextSlot': <function ComplexBuilder._getNextSlot>, '_attachLigand': <function ComplexBuilder._attachLigand>, '__dict__': <attribute '__dict__' of 'ComplexBuilder' objects>, '__weakref__': <attribute '__weakref__' of 'ComplexBuilder' objects>})
__dir__() → list

default dir() implementation

__eq__

Return self==value.

__format__()

default object formatter

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__module__ = 'schrodinger.application.matsci.buildcomplex'
__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

helper for pickle

__reduce_ex__()

helper for pickle

__repr__

Return repr(self).

__setattr__

Implement setattr(self, name, value).

__sizeof__() → int

size of object in memory, in bytes

__str__

Return str(self).

__subclasshook__()

Abstract classes can override this to customize issubclass().

This is invoked early on by abc.ABCMeta.__subclasscheck__(). It should return True, False or NotImplemented. If it returns NotImplemented, the normal algorithm is used. Otherwise, it overrides the normal algorithm (and the outcome is cached).

__weakref__

list of weak references to the object (if defined)

__init__(metal='Ir', geometry='Octahedral', isomer='facial', homoleptic=True, dentation='Bidentate')

Create a ComplexBuilder instance

Parameters:
  • metal (str) – The atomic symbol of the central atom
  • geometry (str) – VESPR geometry of the complex. Should be a module constant: OCTAHEDRAL, TETRAHEDRAL, SQUARE_PLANAR
  • isomer (str or None) – For octahedral complexes, can be module constants FACIAL, MERIDIONAL, or NO_ISOMER. For square planar complexes, can be module constants CIS, TRANS or NO_ISOMER. It is ignored for tetrahedral. None may be used instead of NO_ISOMER.
  • homoleptic (bool) – If True, the complex is homoleptic and only one ligand should be supplied. If False, the complex is heteroleptic and every ligand must be supplied. Homoleptic = all ligands are identical, heteroleptic = ligands may or may not be identical.
  • dentation (int) – Module-level constant describing the dentation type of the ligand - either MONODENTATE or BIDENTATE. Only used to determine the coordination slot order (the order coordination sites are filled) for isomers.
resetSlots(dentation='Bidentate')

Reset the slot order back to ideal slot order

Parameters:dentation (int) – Module-level constant describing the dentation type of the ligand - either MONODENTATE or BIDENTATE
setSlotOrder(slot_order)

Set the order that coordination sites should be used. This should be a list of indexes into the slot_order property. Ligands will be attached at these coordination sites in the order they are added.

Parameters:

slot_order (list of int) – List of indexes that specifies the order of coordination sites to use.

Raises:
  • IndexError – If the list is not the correct length (6 for octahedral, 4 for tetrahedral/square_planar). An example for square_planar might be [0, 2, 1, 3].
  • ValueError – If the list contains duplicated indexes or indexes outside the allow range of 0 to len(list)-1
getNumUsedCoordSites()

Get the current number of coordination sites required for all copies of all ligands set so far.

Return type:int
Returns:The total number of sites required for all currently set ligands. Accounts for the number of copies requested and mono/bi-dentation of each ligand.
addMonodentateLigand(struct, site, slot=None, copies=1)

Add a monodentate ligand for the complex.

Parameters:
  • struct (schrodinger.structure.Structure) – The structure of the ligand
  • site (tuple) – An (X, Y) tuple. X is the index of the atom that will attach to the central metal atom in the complex, and Y is the index of the atom that should be removed to make the attachment. The X-Metal bond will be made along the X-Y bond vector. If Y is 0, the bond will be assumed to be a dative bond, and the X-Metal bond will be formed along an angle that is chosen to minimize sterics. If X is negative, the site is an eta-coordination site.
  • slot (int) – The coordination slot this ligand will occupy. The coordination slot is the index into the GEOMETRY_LOCATIONS array that specifies the xyz coordinates for this ligand coordination.
  • copies (int) – The number of copies of this ligand. It is a ValueError to specify slot & copies > 1.
addBidentateLigand(struct, sites, slots=None, copies=1)

Add a bidentate ligand for the complex.

Parameters:
  • struct (schrodinger.structure.Structure) – The structure of the ligand
  • sites (list of tuple) – Each item of the list is a (X, Y) tuple. X is the index of the atom that will attach to the central metal atom in the complex, and Y is the index of the atom that should be removed to make the attachment. The X-Metal bond will be made along the X-Y bond vector. If Y is 0, the bond will be assumed to be a dative bond, and the X-Metal bond will be formed along an angle that is chosen to minimize sterics. If X is negative, the site is an eta-coordination site.
  • slots (list of int) – The coordination slots this ligand will occupy. The coordination slot is the index into the GEOMETRY_LOCATIONS array that specifies the xyz coordinates for this ligand coordination.
  • copies (int) – The number of copies of this ligand. It is a ValueError to specify slot & copies > 1.
clearLigands()

Remove all added ligands

createComplex(force=False)

Create the complex based on the defined ligands

Parameters:

force (bool) – If true, create a complex even if all slots are not filled. If False (default), raise IndexError if all slots are not filled.

Raises:
  • IndexError – If not all sites are filled and force is not True
  • IndexError – Too many ligands specified for available sites