stk.ConstructedMolecule

class stk.ConstructedMolecule(topology_graph)[source]

Bases: Molecule

Represents constructed molecules.

Examples

Initialization

A ConstructedMolecule is initialized from a TopologyGraph, which is typically initialized from some BuildingBlock instances.

import stk

bb1 = stk.BuildingBlock(
    smiles='NCCCN',
    functional_groups=[stk.PrimaryAminoFactory()],
)
bb2 = stk.BuildingBlock(
    smiles='O=CC(C=O)CC=O',
    functional_groups=[stk.AldehydeFactory()],
)
tetrahedron = stk.cage.FourPlusSix((bb1, bb2))
cage = stk.ConstructedMolecule(tetrahedron)

Hierarchical Construction

A ConstructedMolecule may be used to construct other ConstructedMolecule instances, though you will probably have to convert it to a BuildingBlock first

import stk

bb1 = stk.BuildingBlock(
    smiles='NCCCN',
    functional_groups=[stk.PrimaryAminoFactory()],
)
bb2 = stk.BuildingBlock(
    smiles='O=CC(C=O)CC=O',
    functional_groups=[stk.AldehydeFactory()],
)
tetrahedron = stk.cage.FourPlusSix((bb1, bb2))
cage = stk.ConstructedMolecule(tetrahedron)

benzene = stk.host_guest.Guest(
    building_block=stk.BuildingBlock('c1ccccc1'),
)
cage_complex = stk.host_guest.Complex(
    host=stk.BuildingBlock.init_from_molecule(cage),
    guests=benzene,
)
cage_complex = stk.ConstructedMolecule(cage_complex)

Obviously, the initialization of the ConstructedMolecule depends mostly on the specifics of the TopologyGraph used, and the documentation of those classes should be examined for more examples.

See also

  • Atom: Represents atoms of a constructed molecule.

  • Bond: Represents bonds of a constructed molecule.

  • AtomInfo: Holds additional information about atoms of a constructed molecule.

  • BondInfo: Holds additional information about bonds of a constructed molecule.

Parameters:

topology_graph (TopologyGraph) – The topology graph of the constructed molecule.

Methods

clone

Return a clone.

get_atom_infos

Yield data about atoms in the molecule.

get_atomic_positions

Yield the positions of atoms.

get_atoms

Yield the atoms in the molecule, ordered by id.

get_bond_infos

Yield data about bonds in the molecule.

get_bonds

Yield the bond in the molecule.

get_building_blocks

Yield the building blocks of the constructed molecule.

get_canonical_atom_ids

Map the id of each atom to its id under canonical ordering.

get_centroid

Return the centroid.

get_direction

Return a vector of best fit through the atoms.

get_maximum_diameter

Return the maximum diameter.

get_num_atoms

Return the number of atoms in the molecule.

get_num_bonds

Return the number of bonds in the molecule.

get_num_building_block

Get the number of times building_block is present.

get_plane_normal

Return the normal to the plane of best fit.

get_position_matrix

Return a matrix holding the atomic positions.

init

Initialize a ConstructedMolecule from its components.

init_from_construction_result

Initialize a ConstructedMolecule.

to_rdkit_mol

Return an rdkit representation.

with_canonical_atom_ordering

Return a clone, with canonically ordered atoms.

with_centroid

Return a clone with its centroid at position.

with_displacement

Return a displaced clone.

with_position_matrix

Return a clone with atomic positions set by position_matrix.

with_rotation_about_axis

Return a rotated clone.

with_rotation_between_vectors

Return a rotated clone.

with_rotation_to_minimize_angle

Return a rotated clone.

with_structure_from_file

Return a clone, with its structure taken from a file.

write

Write the structure to a file.

clone()[source]

Return a clone.

Returns:

The clone.

Return type:

ConstructedMolecule

get_atom_infos(atom_ids=None)[source]

Yield data about atoms in the molecule.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms whose data is desired. If None, data on all atoms will be yielded. Can be a single int, if data on a single atom is desired.

Yields:

Data about an atom.

Return type:

Iterator[AtomInfo]

get_atomic_positions(atom_ids=None)

Yield the positions of atoms.

Parameters:

atom_ids (int | list[int] | None) – The ids of the atoms whose positions are desired. If None, all atoms are used.

Yields:

The x, y and z coordinates of an atom.

Return type:

Iterator[ndarray]

get_atoms(atom_ids=None)

Yield the atoms in the molecule, ordered by id.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms to yield. If None, all atoms are used.

Yields:

An atom in the molecule.

Return type:

Iterator[Atom]

get_bond_infos()[source]

Yield data about bonds in the molecule.

Yields:

Data about a bond.

Return type:

Iterator[BondInfo]

get_bonds()

Yield the bond in the molecule.

Yields:

A bond in the molecule.

Return type:

Iterator[Bond]

get_building_blocks()[source]

Yield the building blocks of the constructed molecule.

Building blocks are yielded in an order based on their position in the constructed molecule. For two topologically equivalent constructed molecules, but with different building blocks, equivalently positioned building blocks will be yielded at the same time.

Yields:

A building block of the constructed molecule.

Return type:

Iterator[Molecule]

get_canonical_atom_ids()

Map the id of each atom to its id under canonical ordering.

Returns:

Maps the id of each atom in the molecule to the id it would have under canonical ordering.

Return type:

dict[int, int]

get_centroid(atom_ids=None)

Return the centroid.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms which are used to calculate the centroid. If None, all atoms are used.

Returns:

The centroid of atoms specified by atom_ids.

Raises:

ValueError – If atom_ids has a length of 0.

Return type:

ndarray

get_direction(atom_ids=None)

Return a vector of best fit through the atoms.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms which should be used to calculate the vector. If None, all atoms are used.

Returns:

The vector of best fit.

Raises:

ValueError – If atom_ids has a length of 0.

Return type:

ndarray

get_maximum_diameter(atom_ids=None)

Return the maximum diameter.

This method does not account for the van der Waals radius of atoms.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms which are considered when looking for the maximum diameter. If None, all atoms are used.

Returns:

The maximum diameter in the molecule.

Raises:

ValueError – If atom_ids has a length of 0.

Return type:

float

get_num_atoms()

Return the number of atoms in the molecule.

Returns:

The number of atoms in the molecule.

Return type:

int

get_num_bonds()

Return the number of bonds in the molecule.

Returns:

The number of bonds in the molecule.

Return type:

int

get_num_building_block(building_block)[source]

Get the number of times building_block is present.

Parameters:

building_block (Molecule) – The building block whose frequency in the constructed molecule is desired.

Returns:

The number of times building_block was used in the construction of the constructed molecule.

Return type:

int

get_plane_normal(atom_ids=None)

Return the normal to the plane of best fit.

Parameters:

atom_ids (int | list[int] | None) – The ids of atoms which should be used to calculate the plane. If None, all atoms are used.

Returns:

Vector orthonormal to the plane of the molecule.

Raises:

ValueError – If atom_ids has a length of 0.

Return type:

ndarray

get_position_matrix()

Return a matrix holding the atomic positions.

Returns:

The array has the shape (n, 3). Each row holds the x, y and z coordinates of an atom.

Return type:

ndarray

classmethod init(atoms, bonds, position_matrix, atom_infos, bond_infos, num_building_blocks)[source]

Initialize a ConstructedMolecule from its components.

Parameters:
  • atoms (list[Atom]) – The atoms of the molecule.

  • bonds (list[Bond]) – The bonds of the molecule.

  • position_matrix (ndarray) – A (n, 3) position matrix of the molecule.

  • atom_infos (list[AtomInfo]) – The atom infos of the molecule.

  • bond_infos (list[BondInfo]) – The bond infos of the molecule.

  • num_building_blocks (dict[Molecule, int]) – Maps each building block of the constructed molecule to the number of times it is present in it.

Returns:

The constructed molecule.

Return type:

ConstructedMolecule

classmethod init_from_construction_result(construction_result)[source]

Initialize a ConstructedMolecule.

Parameters:

construction_result (ConstructionResult) – The result of a construction, from which the ConstructedMolecule should be initialized.

Returns:

The constructed molecule.

Return type:

ConstructedMolecule

to_rdkit_mol()

Return an rdkit representation.

Returns:

The molecule in rdkit format.

Return type:

Mol

with_canonical_atom_ordering()[source]

Return a clone, with canonically ordered atoms.

Returns:

The clone.

Return type:

ConstructedMolecule

with_centroid(position, atom_ids=None)[source]

Return a clone with its centroid at position.

Parameters:
  • position (ndarray) – This array holds the position on which the centroid of the clone is going to be placed.

  • atom_ids (int | list[int] | None) – The ids of atoms which should have their centroid set to position. If None, all atoms are used.

Returns:

A clone with its centroid at position.

Return type:

ConstructedMolecule

with_displacement(displacement)[source]

Return a displaced clone.

Parameters:

displacement (ndarray) – The displacement vector to be applied.

Returns:

A displaced clone.

Return type:

ConstructedMolecule

with_position_matrix(position_matrix)[source]

Return a clone with atomic positions set by position_matrix.

Parameters:

position_matrix (ndarray) – The position matrix of the clone. The shape of the matrix is (n, 3).

Returns:

The clone.

Return type:

ConstructedMolecule

with_rotation_about_axis(angle, axis, origin)[source]

Return a rotated clone.

The clone is rotated by angle about axis on the origin.

Parameters:
  • angle (float) – The size of the rotation in radians.

  • axis (ndarray) – The axis about which the rotation happens. Must have unit magnitude.

  • origin (ndarray) – The origin about which the rotation happens.

Returns:

A rotated clone.

Return type:

ConstructedMolecule

with_rotation_between_vectors(start, target, origin)[source]

Return a rotated clone.

The rotation is equal to a rotation from start to target.

Given two direction vectors, start and target, this method applies the rotation required transform start to target onto the clone. The rotation occurs about the origin.

For example, if the start and target vectors are 45 degrees apart, a 45 degree rotation will be applied to the clone. The rotation will be along the appropriate direction.

The great thing about this method is that you as long as you can associate a geometric feature of the molecule with a vector, then the clone can be rotated so that this vector is aligned with target. The defined vector can be virtually anything. This means that any geometric feature of the molecule can be easily aligned with any arbitrary direction.

Parameters:
  • start (ndarray) – A vector which is to be rotated so that it transforms into the target vector.

  • target (ndarray) – The vector onto which start is rotated.

  • origin (ndarray) – The point about which the rotation occurs.

Returns:

A rotated clone.

Return type:

ConstructedMolecule

with_rotation_to_minimize_angle(start, target, axis, origin)[source]

Return a rotated clone.

The clone is rotated by the rotation required to minimize the angle between start and target.

Note that this function will not necessarily overlay the start and target vectors. This is because the possible rotation is restricted to the axis.

Parameters:
  • start (ndarray) – The vector which is rotated.

  • target (ndarray) – The vector which is stationary.

  • axis (ndarray) – The vector about which the rotation happens. Must have unit magnitude.

  • origin (ndarray) – The origin about which the rotation happens.

Returns:

A rotated clone.

Return type:

ConstructedMolecule

Raises:

ValueError – If target has a magnitude of 0. In this case it is not possible to calculate an angle between start and target.

with_structure_from_file(path, extension=None)[source]

Return a clone, with its structure taken from a file.

Multiple file types are supported, namely:

  1. .mol, .sdf - MDL V2000 and V3000 files

  2. .xyz - XYZ files

  3. .mae - Schrodinger Maestro files

  4. .coord - Turbomole files

  5. .pdb - PDB files

Parameters:
  • path (Path | str) – The path to a molecular structure file holding updated coordinates for the Molecule.

  • extension (str | None) – If you want to treat the file as though it has a particular extension, put it here. Include the dot.

Returns:

A clone with atomic positions found in path.

Return type:

ConstructedMolecule

write(path, atom_ids=None)[source]

Write the structure to a file.

This function will write the format based on the extension of path.

  1. .mol, .sdf - MDL V3000 MOL file

  2. .xyz - XYZ file

  3. .pdb - PDB file

Parameters:
  • path (Path | str) – The path to which the molecule should be written.

  • atom_ids (int | list[int] | None) – The atom ids of atoms to write. If None, all atoms are used. If you use this parameter, the atom ids in the file may not correspond to the atom ids in the molecule.

Returns:

The molecule.

Return type:

ConstructedMolecule