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=(), ), ])
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=(), ), ])
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), ), ], )
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=(), ), ] )
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=(), ), ], )
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=(), ), ])
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=(), ), ] )
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=(), ), ], )
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), )
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), ), ], )
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, ),
_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, ),
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(
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=[
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')