Building Block
- class BuildingBlock(smiles, functional_groups=(), placer_ids=None, position_matrix=None)[source]
Bases:
Molecule
Represents a building block of a
ConstructedMolecule
.A
BuildingBlock
can represent either an entire molecule or a molecular fragments used to construct aConstructedMolecule
. The building block usesFunctionalGroup
instances to identify which atoms are modified during construction.Methods
clone
()Return a clone.
get_atomic_positions
([atom_ids])Yield the positions of atoms.
get_atoms
([atom_ids])Yield the atoms in the molecule, ordered by id.
Yield the bond in the molecule.
Map the id of each atom to its id under canonical ordering.
get_centroid
([atom_ids])Return the centroid.
Yield ids of atoms which form the core of the building block.
get_direction
([atom_ids])Return a vector of best fit through the atoms.
get_functional_groups
([fg_ids])Yield the functional groups, ordered by id.
get_maximum_diameter
([atom_ids])Return the maximum diameter.
Return the number of atoms in the molecule.
Return the number of bonds in the molecule.
Return the number of functional groups.
Return the number of placer atoms in the building block.
Yield the ids of placer atoms.
get_plane_normal
([atom_ids])Return the normal to the plane of best fit.
Return a matrix holding the atomic positions.
init
(atoms, bonds, position_matrix[, ...])Initialize a
BuildingBlock
from its components.init_from_file
(path[, functional_groups, ...])Initialize from a file.
init_from_molecule
(molecule[, ...])Initialize from a
Molecule
.init_from_rdkit_mol
(molecule[, ...])Initialize from an
rdkit
molecule.init_from_vabene_molecule
(molecule[, ...])Initialize from a
vabene.Molecule
.Return an
rdkit
representation.Return a clone, with canonically ordered atoms.
with_centroid
(position[, atom_ids])Return a clone with its centroid at position.
with_displacement
(displacement)Return a displaced clone.
with_functional_groups
(functional_groups)Return a clone with specific functional groups.
with_position_matrix
(position_matrix)Return a clone with atomic positions set by position_matrix.
with_rotation_about_axis
(angle, axis, origin)Return a rotated clone.
with_rotation_between_vectors
(start, target, ...)Return a rotated clone.
with_rotation_to_minimize_angle
(start, ...)Return a rotated clone.
with_structure_from_file
(path[, extension])Return a clone, with its structure taken from a file.
write
(path[, atom_ids])Write the structure to a file.
- __init__(smiles, functional_groups=(), placer_ids=None, position_matrix=None)[source]
Initialize a
BuildingBlock
.Notes
The molecule is given 3D coordinates with
rdkit.ETKDGv2()
.- Parameters:
smiles (
str
) – A SMILES string of the molecule.functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
ofFunctionalGroup
orFunctionalGroupFactory
or both.FunctionalGroup
instances are added to the building block andFunctionalGroupFactory
instances are used to createFunctionalGroup
instances the building block should hold.FunctionalGroup
instances are used to identify which atoms are modified duringConstructedMolecule
construction.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
position_matrix (
Optional
[ndarray
]) – The position matrix the building block should use. IfNone
,rdkit.ETKDGv2()
will be used to calculate it.
- Raises:
RuntimeError – If embedding the molecule fails.
- get_atomic_positions(atom_ids=None)
Yield the positions of atoms.
- get_atoms(atom_ids=None)
Yield the atoms in the molecule, ordered by id.
- get_bonds()
Yield the bond in the molecule.
- get_canonical_atom_ids()
Map the id of each atom to its id under canonical ordering.
- get_centroid(atom_ids=None)
Return the centroid.
- Parameters:
atom_ids (
Union
[int
,Iterable
[int
],None
]) – The ids of atoms which are used to calculate the centroid. Can be a singleint
, if a single atom is to be used, orNone
if all atoms are to be used.- Return type:
- Returns:
The centroid of atoms specified by atom_ids.
- Raises:
ValueError – If atom_ids has a length of
0
.
- get_core_atom_ids()[source]
Yield ids of atoms which form the core of the building block.
This includes all atoms in the building block not part of a functional group, as well as any atoms in a functional group, specifically labelled as core atoms. :rtype:
Iterator
[int
]See also
- Yields:
The id of a core atom.
- get_direction(atom_ids=None)
Return a vector of best fit through the atoms.
- Parameters:
atom_ids (
Union
[int
,Iterable
[int
],None
]) – The ids of atoms which should be used to calculate the vector. Can be a singleint
, if a single atom is to be used, orNone
, if all atoms are to be used.- Return type:
- Returns:
The vector of best fit.
- Raises:
ValueError – If atom_ids has a length of
0
.
- 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 (
Union
[int
,Iterable
[int
],None
]) – The ids of atoms which are considered when looking for the maximum diameter. Can be a singleint
, if a single atom is to be used, orNone
, if all atoms are to be used.- Return type:
- Returns:
The maximum diameter in the molecule.
- Raises:
ValueError – If atom_ids has a length of
0
.
- get_num_atoms()
Return the number of atoms in the molecule.
- Return type:
- Returns:
The number of atoms in the molecule.
- get_num_bonds()
Return the number of bonds in the molecule.
- Return type:
- Returns:
The number of bonds in the molecule.
- get_num_functional_groups()[source]
Return the number of functional groups.
- Return type:
- Returns:
The number of functional groups in the building block.
- get_num_placers()[source]
Return the number of placer atoms in the building block.
- Return type:
- Returns:
The number of placer atoms in the building block.
- get_placer_ids()[source]
Yield the ids of placer atoms.
Placer atoms are those, which should be used to calculate the position of the building block. :rtype:
Iterator
[int
]See also
- Yields:
The id of a placer atom.
- get_plane_normal(atom_ids=None)
Return the normal to the plane of best fit.
- Parameters:
atom_ids (
Union
[int
,Iterable
[int
],None
]) – The ids of atoms which should be used to calculate the plane. Can be a singleint
, if a single atom is to be used, orNone
, if all atoms are to be used.- Return type:
- Returns:
Vector orthonormal to the plane of the molecule.
- Raises:
ValueError – If atom_ids has a length of
0
.
- get_position_matrix()
Return a matrix holding the atomic positions.
- Return type:
- Returns:
The array has the shape
(n, 3)
. Each row holds the x, y and z coordinates of an atom.
- classmethod init(atoms, bonds, position_matrix, functional_groups=(), placer_ids=None)[source]
Initialize a
BuildingBlock
from its components.- Parameters:
position_matrix (
ndarray
) – An(n, 3)
position matrix of the building block.functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
holding theFunctionalGroup
instances the building block should have, and / orFunctionalGroupFactory
instances used for creating them.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
- Return type:
- Returns:
The building block.
- classmethod init_from_file(path, functional_groups=(), placer_ids=None)[source]
Initialize from a file.
- Parameters:
path (
str
) –The path to a molecular structure file. Supported file types are:
.mol
,.sdf
- MDL V3000 MOL file
functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
ofFunctionalGroup
orFunctionalGroupFactory
or both.FunctionalGroup
instances are added to the building block andFunctionalGroupFactory
instances are used to createFunctionalGroup
instances the building block should hold.FunctionalGroup
instances are used to identify which atoms are modified duringConstructedMolecule
construction.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
- Returns:
The building block.
- Raises:
ValueError – If the file type cannot be used for initialization.
- classmethod init_from_molecule(molecule, functional_groups=(), placer_ids=None)[source]
Initialize from a
Molecule
.- Parameters:
molecule (
Molecule
) – The molecule to initialize from.functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
ofFunctionalGroup
orFunctionalGroupFactory
or both.FunctionalGroup
instances are added to the building block andFunctionalGroupFactory
instances are used to createFunctionalGroup
instances the building block should hold.FunctionalGroup
instances are used to identify which atoms are modified duringConstructedMolecule
construction.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
- Return type:
- Returns:
The building block. It will have the same atoms, bonds and atomic positions as molecule.
- classmethod init_from_rdkit_mol(molecule, functional_groups=(), placer_ids=None)[source]
Initialize from an
rdkit
molecule.Warning
For
rdkit
molecules with non-integer bond orders, such as 1.5, the molecule should be kekulized prior to calling this method. Otherwise, all bond orders will be set to an integer value in the building block.- Parameters:
molecule (
Mol
) – The molecule.functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
ofFunctionalGroup
orFunctionalGroupFactory
or both.FunctionalGroup
instances are added to the building block andFunctionalGroupFactory
instances are used to createFunctionalGroup
instances the building block should hold.FunctionalGroup
instances are used to identify which atoms are modified duringConstructedMolecule
construction.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
- Return type:
- Returns:
The molecule.
- classmethod init_from_vabene_molecule(molecule, functional_groups=(), placer_ids=None, position_matrix=None)[source]
Initialize from a
vabene.Molecule
.Notes
The molecule is given 3D coordinates with
rdkit.ETKDGv2()
.- Parameters:
molecule (
Molecule
) – Thevabene.Molecule
from which to initialize.functional_groups (
Iterable
[Union
[FunctionalGroup
,FunctionalGroupFactory
]]) – Aniterable
ofFunctionalGroup
orFunctionalGroupFactory
or both.FunctionalGroup
instances are added to the building block andFunctionalGroupFactory
instances are used to createFunctionalGroup
instances the building block should hold.FunctionalGroup
instances are used to identify which atoms are modified duringConstructedMolecule
construction.placer_ids (
Optional
[tuple
[int
,...
]]) –The ids of placer atoms. These are the atoms which should be used for calculating the position of the building block. Depending on the values passed to placer_ids, and the functional groups in the building block, different placer ids will be used by the building block.
placer_ids is passed to the initializer: the passed placer ids will be used by the building block.
placer_ids is
None
and the building block has functional groups: The placer ids of the functional groups will be used as the placer ids of the building block.placer_ids is
None
and functional_groups is empty. All atoms of the molecule will be used for placer ids.
position_matrix (
Optional
[ndarray
]) – The position matrix the building block should use. IfNone
,rdkit.ETKDGv2()
will be used to calculate it.
- Return type:
- Returns:
The building block.
- Raises:
RuntimeError – If embedding the molecule fails.
- to_rdkit_mol()
Return an
rdkit
representation.- Return type:
Mol
- Returns:
The molecule in
rdkit
format.
- with_canonical_atom_ordering()[source]
Return a clone, with canonically ordered atoms.
- Return type:
- Returns:
The clone.
- 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 (
Union
[int
,Iterable
[int
],None
]) – The ids of atoms which should have their centroid set to position. Can be a singleint
, if a single atom is to be used, orNone
, if all atoms are to be used.
- Return type:
- Returns:
A clone with its centroid at position.
- with_displacement(displacement)[source]
Return a displaced clone.
- Parameters:
displacement (
ndarray
) – The displacement vector to be applied.- Return type:
- Returns:
A displaced clone.
- with_functional_groups(functional_groups)[source]
Return a clone with specific functional groups.
- Parameters:
functional_groups (
Iterable
[FunctionalGroup
]) –FunctionalGroup
instances which the clone should have.- Return type:
- Returns:
The clone.
- 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)
.- Return type:
- Returns:
The clone.
- with_rotation_about_axis(angle, axis, origin)[source]
Return a rotated clone.
The clone is rotated by angle about axis on the origin.
- Parameters:
- Return type:
- Returns:
A rotated clone.
- 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:
- Return type:
- Returns:
A rotated clone.
- 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:
- Return type:
- Returns:
A rotated clone.
- 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:
.mol
,.sdf
- MDL V2000 and V3000 files.xyz
- XYZ files.mae
- Schrodinger Maestro files.coord
- Turbomole files.pdb
- PDB files
- Parameters:
- Return type:
- Returns:
A clone with atomic positions found in path.
- write(path, atom_ids=None)[source]
Write the structure to a file.
This function will write the format based on the extension of path.
.mol
,.sdf
- MDL V3000 MOL file.xyz
- XYZ file.pdb
- PDB file
- Parameters:
path (
str
) – The path to which the molecule should be written.atom_ids (
Union
[int
,Iterable
[int
],None
]) – The atom ids of atoms to write. Can be a singleint
, if a single atom is to be used, orNone
, if all atoms are to be used. If you use this parameter, the atom ids in the file may not correspond to the atom ids in the molecule.
- Return type:
- Returns:
The molecule.