Source code for stk._internal.topology_graphs.cage.m9l18

"""
M9L18
=====

"""

import numpy as np

from stk._internal.topology_graphs.edge import Edge

from .cage import Cage
from .vertices import LinearVertex, NonLinearVertex


[docs] class M9L18(Cage): """ Represents a cage topology graph. Unoptimized construction .. moldoc:: import moldoc.molecule as molecule import stk bb1 = stk.BuildingBlock( smiles='[Pd+2]', functional_groups=( stk.SingleAtom(stk.Pd(0, charge=2)) for i in range(4) ), position_matrix=[[0, 0, 0]], ) bb2 = stk.BuildingBlock( smiles='C1=NC=CC(C2=CC=CC(C3=CC=NC=C3)=C2)=C1', functional_groups=[ stk.SmartsFunctionalGroupFactory( smarts='[#6]~[#7X2]~[#6]', bonders=(1, ), deleters=(), ), ], ) cage = stk.ConstructedMolecule( topology_graph=stk.cage.M9L18( building_blocks=(bb1, bb2), ), ) moldoc_display_molecule = molecule.Molecule( atoms=( molecule.Atom( atomic_number=atom.get_atomic_number(), position=position, ) for atom, position in zip( cage.get_atoms(), cage.get_position_matrix(), ) ), bonds=( molecule.Bond( atom1_id=bond.get_atom1().get_id(), atom2_id=bond.get_atom2().get_id(), order=( 1 if bond.get_order() == 9 else bond.get_order() ), ) for bond in cage.get_bonds() ), ) :class:`.MCHammer` optimized construction .. moldoc:: import moldoc.molecule as molecule import stk bb1 = stk.BuildingBlock( smiles='[Pd+2]', functional_groups=( stk.SingleAtom(stk.Pd(0, charge=2)) for i in range(4) ), position_matrix=[[0, 0, 0]], ) bb2 = stk.BuildingBlock( smiles='C1=NC=CC(C2=CC=CC(C3=CC=NC=C3)=C2)=C1', functional_groups=[ stk.SmartsFunctionalGroupFactory( smarts='[#6]~[#7X2]~[#6]', bonders=(1, ), deleters=(), ), ], ) cage = stk.ConstructedMolecule( topology_graph=stk.cage.M9L18( building_blocks=(bb1, bb2), optimizer=stk.MCHammer(), ), ) moldoc_display_molecule = molecule.Molecule( atoms=( molecule.Atom( atomic_number=atom.get_atomic_number(), position=position, ) for atom, position in zip( cage.get_atoms(), cage.get_position_matrix(), ) ), bonds=( molecule.Bond( atom1_id=bond.get_atom1().get_id(), atom2_id=bond.get_atom2().get_id(), order=( 1 if bond.get_order() == 9 else bond.get_order() ), ) for bond in cage.get_bonds() ), ) Metal building blocks with four functional groups are required for this topology. Ligand building blocks with two functional groups are required for this topology. When using a :class:`dict` for the `building_blocks` parameter, as in :ref:`cage-topology-graph-examples`: *Multi-Building Block Cage Construction*, a :class:`.BuildingBlock`, with the following number of functional groups, needs to be assigned to each of the following vertex ids: | 4-functional groups: 0 to 8 | 2-functional groups: 9 to 17 See :class:`.Cage` for more details and examples. """ # Use a factor here, because extracted from a crystal structure. _factor = 1 / 5 _vertex_prototypes = ( NonLinearVertex( 0, np.array([4.7, 4.7, 0.7]) * _factor, use_neighbor_placement=False, ), LinearVertex( 1, np.array([5.3, 4.0, -2.1]) * _factor, use_neighbor_placement=False, ), LinearVertex( 2, np.array([5.4, 0.8, 1.1]) * _factor, use_neighbor_placement=False, ), LinearVertex( 3, np.array([1.8, 4.2, 3.2]) * _factor, use_neighbor_placement=False, ), LinearVertex( 4, np.array([2.8, 6.4, -0.7]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 5, np.array([-1.8, 3.1, 4.3]) * _factor, use_neighbor_placement=False, ), LinearVertex( 6, np.array([-4.5, 0.5, 3.2]) * _factor, use_neighbor_placement=False, ), LinearVertex( 7, np.array([-1.4, -0.6, 5.3]) * _factor, use_neighbor_placement=False, ), LinearVertex( 8, np.array([-1.3, 5.3, 1.1]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 9, np.array([-5.8, -2.9, 1.8]) * _factor, use_neighbor_placement=False, ), LinearVertex( 10, np.array([-5.1, -1.3, -1.7]) * _factor, use_neighbor_placement=False, ), LinearVertex( 11, np.array([-4.2, -4.0, 4.0]) * _factor, use_neighbor_placement=False, ), LinearVertex( 12, np.array([-4.6, -5.2, 0.5]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 13, np.array([4.7, -2.9, 0.5]) * _factor, use_neighbor_placement=False, ), LinearVertex( 14, np.array([2.2, -3.9, 3.3]) * _factor, use_neighbor_placement=False, ), LinearVertex( 15, np.array([4.9, -0.5, -2.5]) * _factor, use_neighbor_placement=False, ), LinearVertex( 16, np.array([1.7, -5.3, -0.4]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 17, np.array([4.1, 2.8, -4.5]) * _factor, use_neighbor_placement=False, ), LinearVertex( 18, np.array([2.3, 5.1, -4.2]) * _factor, use_neighbor_placement=False, ), LinearVertex( 19, np.array([0.7, 1.0, -5.4]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 20, np.array([-2.0, -6.4, -0.4]) * _factor, use_neighbor_placement=False, ), LinearVertex( 21, np.array([-1.6, -6.3, 2.5]) * _factor, use_neighbor_placement=False, ), LinearVertex( 22, np.array([-2.5, -3.7, -3.3]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 23, np.array([-1.4, -4.5, 4.8]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 24, np.array([0.3, 6.2, -2.3]) * _factor, use_neighbor_placement=False, ), LinearVertex( 25, np.array([-1.9, 3.5, -3.9]) * _factor, use_neighbor_placement=False, ), NonLinearVertex( 26, np.array([-2.9, -0.2, -4.8]) * _factor, use_neighbor_placement=False, ), ) _edge_prototypes = ( Edge( id=0, vertex1=_vertex_prototypes[0], vertex2=_vertex_prototypes[1], ), Edge( id=1, vertex1=_vertex_prototypes[0], vertex2=_vertex_prototypes[2], ), Edge( id=2, vertex1=_vertex_prototypes[0], vertex2=_vertex_prototypes[3], ), Edge( id=3, vertex1=_vertex_prototypes[0], vertex2=_vertex_prototypes[4], ), Edge( id=4, vertex1=_vertex_prototypes[5], vertex2=_vertex_prototypes[6], ), Edge( id=5, vertex1=_vertex_prototypes[5], vertex2=_vertex_prototypes[7], ), Edge( id=6, vertex1=_vertex_prototypes[5], vertex2=_vertex_prototypes[8], ), Edge( id=7, vertex1=_vertex_prototypes[3], vertex2=_vertex_prototypes[5], ), Edge( id=8, vertex1=_vertex_prototypes[9], vertex2=_vertex_prototypes[10], ), Edge( id=9, vertex1=_vertex_prototypes[6], vertex2=_vertex_prototypes[9], ), Edge( id=10, vertex1=_vertex_prototypes[9], vertex2=_vertex_prototypes[11], ), Edge( id=11, vertex1=_vertex_prototypes[9], vertex2=_vertex_prototypes[12], ), Edge( id=12, vertex1=_vertex_prototypes[13], vertex2=_vertex_prototypes[14], ), Edge( id=13, vertex1=_vertex_prototypes[13], vertex2=_vertex_prototypes[15], ), Edge( id=14, vertex1=_vertex_prototypes[13], vertex2=_vertex_prototypes[16], ), Edge( id=15, vertex1=_vertex_prototypes[2], vertex2=_vertex_prototypes[13], ), Edge( id=16, vertex1=_vertex_prototypes[1], vertex2=_vertex_prototypes[17], ), Edge( id=17, vertex1=_vertex_prototypes[15], vertex2=_vertex_prototypes[17], ), Edge( id=18, vertex1=_vertex_prototypes[17], vertex2=_vertex_prototypes[18], ), Edge( id=19, vertex1=_vertex_prototypes[17], vertex2=_vertex_prototypes[19], ), Edge( id=20, vertex1=_vertex_prototypes[20], vertex2=_vertex_prototypes[21], ), Edge( id=21, vertex1=_vertex_prototypes[20], vertex2=_vertex_prototypes[22], ), Edge( id=22, vertex1=_vertex_prototypes[16], vertex2=_vertex_prototypes[20], ), Edge( id=23, vertex1=_vertex_prototypes[12], vertex2=_vertex_prototypes[20], ), Edge( id=24, vertex1=_vertex_prototypes[11], vertex2=_vertex_prototypes[23], ), Edge( id=25, vertex1=_vertex_prototypes[21], vertex2=_vertex_prototypes[23], ), Edge( id=26, vertex1=_vertex_prototypes[14], vertex2=_vertex_prototypes[23], ), Edge( id=27, vertex1=_vertex_prototypes[7], vertex2=_vertex_prototypes[23], ), Edge( id=28, vertex1=_vertex_prototypes[24], vertex2=_vertex_prototypes[25], ), Edge( id=29, vertex1=_vertex_prototypes[8], vertex2=_vertex_prototypes[24], ), Edge( id=30, vertex1=_vertex_prototypes[4], vertex2=_vertex_prototypes[24], ), Edge( id=31, vertex1=_vertex_prototypes[18], vertex2=_vertex_prototypes[24], ), Edge( id=32, vertex1=_vertex_prototypes[10], vertex2=_vertex_prototypes[26], ), Edge( id=33, vertex1=_vertex_prototypes[19], vertex2=_vertex_prototypes[26], ), Edge( id=34, vertex1=_vertex_prototypes[25], vertex2=_vertex_prototypes[26], ), Edge( id=35, vertex1=_vertex_prototypes[22], vertex2=_vertex_prototypes[26], ), ) _num_windows = 2 _num_window_types = 1