Esempio n. 1
0
def get_iron_bi_1() -> stk.BuildingBlock:
    return stk.BuildingBlock(smiles='BrN=Cc1ccccn1',
                             functional_groups=[
                                 stk.SmartsFunctionalGroupFactory(
                                     smarts='[#6]~[#7X2]~[#35]',
                                     bonders=(1, ),
                                     deleters=(),
                                 ),
                                 stk.SmartsFunctionalGroupFactory(
                                     smarts='[#6]~[#7X2]~[#6]',
                                     bonders=(1, ),
                                     deleters=(),
                                 ),
                             ])
Esempio n. 2
0
def get_complex_ligand() -> stk.BuildingBlock:
    return stk.BuildingBlock(smiles='[H]C1=NC(C([H])=NBr)=C([H])C([H])=C1[H]',
                             functional_groups=[
                                 stk.SmartsFunctionalGroupFactory(
                                     smarts='[#6]~[#7X2]~[#35]',
                                     bonders=(1, ),
                                     deleters=(),
                                 ),
                                 stk.SmartsFunctionalGroupFactory(
                                     smarts='[#6]~[#7X2]~[#6]',
                                     bonders=(1, ),
                                     deleters=(),
                                 ),
                             ])
Esempio n. 3
0
def get_palladium_cispbi_sqpl() -> stk.BuildingBlock:
    molecule = stk.ConstructedMolecule(
        topology_graph=stk.metal_complex.CisProtectedSquarePlanar(
            metals={get_pd_atom(): 0},
            ligands={get_palladium_bi_1(): 0},
            reaction_factory=stk.DativeReactionFactory(
                reaction_factory=stk.GenericReactionFactory(bond_orders={
                    frozenset({
                        stk.GenericFunctionalGroup,
                        stk.SingleAtom,
                    }):
                    9,
                }, ), ),
        ), )

    return stk.BuildingBlock.init_from_molecule(
        molecule=molecule,
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[Pd]~[#7]',
                bonders=(0, ),
                deleters=(),
                placers=(0, 1),
            ),
        ],
    )
Esempio n. 4
0
def _get_bi_2() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles='Nc1ccc(C(=O)O)cc1',
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#8]~[#1]',
                bonders=(1, ),
                deleters=(2, ),
            ),
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#8X1]',
                bonders=(1, ),
                deleters=(),
            ),
        ]
    )
Esempio n. 5
0
def get_palladium_bi_1() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles='[H]N([H])C([H])([H])C([H])([H])N([H])[H]',
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#7]~[#6]',
                bonders=(0, ),
                deleters=(),
            ),
        ],
    )
Esempio n. 6
0
def get_linker() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles=('[H]C1=NC([H])=C([H])C(C2=C([H])C([H])=C([H])C(C3=C([H])'
                'C([H])=NC([H])=C3[H])=C2[H])=C1[H]'),
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#7X2]~[#6]',
                bonders=(1, ),
                deleters=(),
            ),
        ])
Esempio n. 7
0
def get_mo_1() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles='c1cc2c(cn1)CCCCC2',
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#7X2]~[#6]',
                bonders=(1, ),
                deleters=(),
            ),
        ],
    )
def _get_bi_1() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles='NCCN',
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#7]~[#6]',
                bonders=(0, ),
                deleters=(),
            ),
        ]
    )
Esempio n. 9
0
def _get_quad_1() -> stk.BuildingBlock:
    return stk.BuildingBlock(
        smiles=('Brc1ccc(C2=C3C=CC(=C(c4ccc(Br)cc4)C4=NC(=C(c5ccc(Br)cc5)'
                'C5=CC=C([N]5)C(c5ccc(Br)cc5)=C5C=CC2=N5)C=C4)[N]3)cc1'),
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#7X2]~[#6]',
                bonders=(1, ),
                deleters=(),
            ),
        ],
    )
Esempio n. 10
0
 def get_functional_groups(self, molecule):
     generic_functional_groups = stk.SmartsFunctionalGroupFactory(
         smarts='[#6]~[#7X2]~[#6]',
         bonders=self._bonders,
         deleters=self._deleters).get_functional_groups(molecule)
     for fg in generic_functional_groups:
         atom_ids = (i.get_id() for i in fg.get_atoms())
         atoms = tuple(molecule.get_atoms(atom_ids))
         yield AromaticCNC(
             carbon1=atoms[0],
             nitrogen=atoms[1],
             carbon2=atoms[2],
             bonders=tuple(atoms[i] for i in self._bonders),
             deleters=tuple(atoms[i] for i in self._deleters),
         )
Esempio n. 11
0
def _get_palladium_cispbi_sqpl() -> stk.BuildingBlock:
    palladium_cispbi_sqpl = stk.ConstructedMolecule(
        topology_graph=stk.metal_complex.CisProtectedSquarePlanar(
            metals=get_pd_atom(),
            ligands=get_palladium_bi_1(),
        ), )
    return stk.BuildingBlock.init_from_molecule(
        molecule=palladium_cispbi_sqpl,
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[Pd]~[#7]',
                bonders=(0, ),
                deleters=(),
                placers=(0, 1),
            ),
        ],
    )
Esempio n. 12
0
 lambda: CaseData(
     factory=stk.DibromoFactory(),
     molecule=stk.BuildingBlock('CC(Br)C(Br)CC'),
     functional_groups=(stk.Dibromo(
         atom1=stk.C(1),
         bromine1=stk.Br(2),
         atom2=stk.C(3),
         bromine2=stk.Br(4),
         bonders=(stk.C(1), stk.C(3)),
         deleters=(stk.Br(2), stk.Br(4)),
     ), ),
 ),
 lambda: CaseData(
     factory=stk.SmartsFunctionalGroupFactory(
         smarts='[C][N]',
         bonders=(0, ),
         deleters=(1, ),
     ),
     molecule=stk.BuildingBlock('NCC'),
     functional_groups=(stk.GenericFunctionalGroup(
         atoms=(stk.N(0), stk.C(1)),
         bonders=(stk.C(1), ),
         deleters=(stk.N(0), ),
     ), ),
 ),
 lambda: CaseData(
     factory=stk.SmartsFunctionalGroupFactory(
         smarts='CBr',
         bonders=(0, ),
         deleters=(1, ),
         placers=(1, ),
Esempio n. 13
0
_palladium_atom = stk.BuildingBlock(
    smiles='[Pd+2]',
    functional_groups=(
        stk.SingleAtom(stk.Pd(0, charge=2))
        for i in range(4)
    ),
    position_matrix=([0, 0, 0], ),
)

_bi_1 = stk.BuildingBlock(
    smiles='O=C(O)c1ccc(Br)cc1',
    functional_groups=[
        stk.SmartsFunctionalGroupFactory(
            smarts='[#6]~[#8]~[#1]',
            bonders=(1, ),
            deleters=(2, ),
        ),
        stk.SmartsFunctionalGroupFactory(
            smarts='[#6]~[#8X1]',
            bonders=(1, ),
            deleters=(),
        ),
    ]
)
_bi_2 = stk.BuildingBlock(
    smiles='Nc1ccc(C(=O)O)cc1',
    functional_groups=[
        stk.SmartsFunctionalGroupFactory(
            smarts='[#6]~[#8]~[#1]',
            bonders=(1, ),
Esempio n. 14
0
import stk

from ....case_data import CaseData

metal_atom = stk.BuildingBlock(
    smiles='[Pd+2]',
    functional_groups=(stk.SingleAtom(stk.Pd(0, charge=2)) for i in range(4)),
    position_matrix=([0, 0, 0], ),
)
linker = stk.BuildingBlock(
    smiles=('[H]C1=NC([H])=C([H])C(C2=C([H])C([H])=C([H])C(C3=C([H])C([H]'
            ')=NC([H])=C3[H])=C2[H])=C1[H]'),
    functional_groups=[
        stk.SmartsFunctionalGroupFactory(
            smarts='[#6]~[#7X2]~[#6]',
            bonders=(1, ),
            deleters=(),
        ),
    ])


@pytest.fixture(
    params=(CaseData(
        molecule=stk.ConstructedMolecule(
            stk.cage.M4L8(
                building_blocks={
                    metal_atom: range(4),
                    linker: range(4, 12)
                },
                reaction_factory=stk.DativeReactionFactory(
                    stk.GenericReactionFactory(
Esempio n. 15
0
import pytest
import stk

from ....case_data import CaseData

metal_atom = stk.BuildingBlock(
    smiles='[Pd+2]',
    functional_groups=(stk.SingleAtom(stk.Pd(0, charge=2)) for i in range(4)),
    position_matrix=([0, 0, 0], ),
)
palladium_bi_1 = stk.BuildingBlock(
    smiles='[H]N([H])C([H])([H])C([H])([H])N([H])[H]',
    functional_groups=[
        stk.SmartsFunctionalGroupFactory(
            smarts='[#7]~[#6]',
            bonders=(0, ),
            deleters=(),
        ),
    ])
palladium_cispbi_sqpl = stk.ConstructedMolecule(
    stk.metal_complex.CisProtectedSquarePlanar(
        metals={metal_atom: 0},
        ligands={palladium_bi_1: 0},
        reaction_factory=stk.DativeReactionFactory(
            stk.GenericReactionFactory(
                bond_orders={
                    frozenset({stk.GenericFunctionalGroup, stk.SingleAtom}): 9
                }))))
palladium_cispbi_sqpl = stk.BuildingBlock.init_from_molecule(
    molecule=palladium_cispbi_sqpl,
    functional_groups=[
Esempio n. 16
0
def main():
    bb1 = stk.BuildingBlock('NCCN', [stk.PrimaryAminoFactory()])
    bb2 = stk.BuildingBlock('O=CCC=O', [stk.AldehydeFactory()])
    polymer = stk.ConstructedMolecule(
        stk.polymer.Linear(building_blocks=(bb1, bb2),
                           repeating_unit="AB",
                           orientations=(0, 0),
                           num_repeating_units=1))
    bb2 = stk.BuildingBlock('O=CC(C=O)C=O', [stk.AldehydeFactory()])
    cage = stk.ConstructedMolecule(topology_graph=stk.cage.FourPlusSix(
        (bb1, bb2)), )
    cage2 = stk.ConstructedMolecule(topology_graph=stk.cage.FourPlusSix(
        building_blocks=(bb1, bb2),
        optimizer=stk.MCHammer(),
    ), )

    # Produce a Fe+2 atom with 6 functional groups.
    iron_atom = stk.BuildingBlock(
        smiles='[Fe+2]',
        functional_groups=(stk.SingleAtom(stk.Fe(0, charge=2))
                           for i in range(6)),
        position_matrix=[[0, 0, 0]],
    )

    # Define coordinating ligand with dummy bromine groups and
    # metal coordinating functional groups.
    oct_bb = stk.BuildingBlock(
        smiles='C1=NC(C=NBr)=CC=C1',
        functional_groups=[
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#7X2]~[#35]',
                bonders=(1, ),
                deleters=(),
            ),
            stk.SmartsFunctionalGroupFactory(
                smarts='[#6]~[#7X2]~[#6]',
                bonders=(1, ),
                deleters=(),
            ),
        ],
    )

    # Build iron complex with delta stereochemistry.
    iron_oct_delta = stk.ConstructedMolecule(
        topology_graph=stk.metal_complex.OctahedralDelta(
            metals=iron_atom,
            ligands=oct_bb,
            optimizer=stk.MCHammer(),
        ), )

    # Assign Bromo functional groups to the metal complex.
    iron_oct_delta = stk.BuildingBlock.init_from_molecule(
        molecule=iron_oct_delta,
        functional_groups=[stk.BromoFactory()],
    )

    # Define spacer building block.
    bb3 = stk.BuildingBlock(
        smiles=('C1=CC(C2=CC=C(Br)C=C2)=C'
                'C=C1Br'),
        functional_groups=[stk.BromoFactory()],
    )

    # Build an M4L6 Tetrahedron with a spacer.
    moc = stk.ConstructedMolecule(
        topology_graph=stk.cage.M4L6TetrahedronSpacer(
            building_blocks=(
                iron_oct_delta,
                bb3,
            ),
            optimizer=stk.MCHammer(),
        ), )

    host = stk.ConstructedMolecule(topology_graph=stk.cage.FourPlusSix(
        building_blocks=(
            stk.BuildingBlock(
                smiles='NC1CCCCC1N',
                functional_groups=[
                    stk.PrimaryAminoFactory(),
                ],
            ),
            stk.BuildingBlock(
                smiles='O=Cc1cc(C=O)cc(C=O)c1',
                functional_groups=[stk.AldehydeFactory()],
            ),
        ),
        optimizer=stk.MCHammer(),
    ), )
    guest1 = stk.host_guest.Guest(
        building_block=stk.BuildingBlock('BrBr'),
        displacement=(0., 3., 0.),
    )
    guest2 = stk.host_guest.Guest(
        building_block=stk.BuildingBlock('C1CCCC1'), )

    hg_complex = stk.ConstructedMolecule(topology_graph=stk.host_guest.Complex(
        host=stk.BuildingBlock.init_from_molecule(host),
        guests=(guest1, guest2),
    ), )

    cycle = stk.ConstructedMolecule(topology_graph=stk.macrocycle.Macrocycle(
        building_blocks=(stk.BuildingBlock(
            smiles='[Br]CC[Br]',
            functional_groups=[stk.BromoFactory()],
        ), ),
        repeating_unit='A',
        num_repeating_units=8,
        optimizer=stk.MCHammer(),
    ), )
    axle = stk.ConstructedMolecule(topology_graph=stk.polymer.Linear(
        building_blocks=(
            stk.BuildingBlock('BrCCBr', [stk.BromoFactory()]),
            stk.BuildingBlock('BrCNCBr', [stk.BromoFactory()]),
        ),
        repeating_unit='AB',
        num_repeating_units=3,
        optimizer=stk.MCHammer(),
    ))
    rotaxane = stk.ConstructedMolecule(topology_graph=stk.rotaxane.NRotaxane(
        axle=stk.BuildingBlock.init_from_molecule(axle),
        cycles=(stk.BuildingBlock.init_from_molecule(cycle), ),
        repeating_unit='A',
        num_repeating_units=1,
    ), )

    examples_output = 'output_directory'
    if not os.path.exists(examples_output):
        os.mkdir(examples_output)

    structures = [
        ('bb1', bb1),
        ('bb2', bb2),
        ('bb3', bb3),
        ('polymer', polymer),
        ('cage', cage),
        ('cage2', cage2),
        ('m_iron_oct_delta', iron_oct_delta),
        ('m_moc', moc),
        ('hg_complex', hg_complex),
        ('cycle', cycle),
        ('axle', axle),
        ('rotaxane', rotaxane),
    ]

    # Run optimisations.
    for name, struct in structures:
        if 'm_' in name:
            rdkit_uff_energy = 'NA'
        else:
            rdkit_uff_energy = stko.UFFEnergy(
                ignore_inter_interactions=False).get_energy(struct)
        obabel_uff_energy = (stko.OpenBabelEnergy('uff').get_energy(struct))
        struct.write(os.path.join(examples_output, f'obabel_{name}_unopt.mol'))
        opt = stko.OpenBabel(
            forcefield='uff',
            repeat_steps=10,
            sd_steps=20,
            cg_steps=20,
        )
        opt_struct = opt.optimize(struct)
        opt_struct.write(
            os.path.join(examples_output, f'obabel_{name}_opt.mol'))

        if 'm_' in name:
            new_rdkit_uff_energy = 'NA'
        else:
            new_rdkit_uff_energy = stko.UFFEnergy(
                ignore_inter_interactions=False).get_energy(opt_struct)
        new_obabel_uff_energy = (
            stko.OpenBabelEnergy('uff').get_energy(opt_struct))
        print(f'{name}:\n'
              f'rdkit: {rdkit_uff_energy}, obabel: {obabel_uff_energy}\n'
              f'opt rdkit: {new_rdkit_uff_energy}, '
              f'opt obabel: {new_obabel_uff_energy}\n')