├── README.md ├── conformer-search.png ├── ff_conformer_search2.py ├── minimum-energy-conformer-MMFF.sdf └── minimum-energy-conformer-UFF.sdf /README.md: -------------------------------------------------------------------------------- 1 | # Conformer Search 2 | Conformers are different configurations of a molecule (same formula and connections) obtained by rotating the single bonds. 3 | 4 | This repository contains a simple workflow for minimum energy conformer search based on force field optimization methods (UFF and MMFF94) available from RDKit. 5 | 6 | Workflow consists of the following steps: 7 | 8 | - Import molecule from SMILES 9 | - Generate conformers for given molecule 10 | - Optimize conformers by force field optimization (UFF and MMFF94) 11 | - Select the minimum energy conformer and write it into a SDF file 12 | 13 | ![alt text](https://raw.githubusercontent.com/mcsorkun/Conformer-Search/master/conformer-search.png) 14 | 15 | Requirements 16 | - RDKit 17 | 18 | Disclaimer/Warning from RDKit: Conformation generation is a difficult and subtle task. The original 2D->3D conversion provided with the RDKit was not intended to be a replacement for a “real” conformational analysis tool; it merely provides quick 3D structures for cases when they are required. We believe, however, that the newer ETKDG method[1] should be adequate for most purposes. 19 | 20 | Note: It is recommended to use MMFF94 for organic-like molecules and UFF for metal contained molecules. 21 | 22 | 23 | References 24 | 25 | [1] Riniker, S.; Landrum, G. A. (2015). Better Informed Distance Geometry: Using What We Know To Improve Conformation Generation J. Chem. Inf. Comp. Sci. 55:2562-74. 26 | 27 | -------------------------------------------------------------------------------- /conformer-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcsorkun/Conformer-Search/26d5068fe1aa0ea51ec5d30586ec68399bd17bad/conformer-search.png -------------------------------------------------------------------------------- /ff_conformer_search2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on Thu Feb 6 16:14:17 2020 5 | 6 | @author: Murat Cihan Sorkun 7 | 8 | A basic search for the minimum energy conformer 9 | Note: It is more efficient to align similar conformers first, but this example does not include it 10 | """ 11 | 12 | from rdkit import Chem 13 | from rdkit.Chem import AllChem 14 | 15 | # Creating mol object from SMILES and add H's 16 | mol = Chem.MolFromSmiles("O=C(NC1CCCCC1)NS(=O)(c1ccc(CCNC(c2cnc(cn2)C)=O)cc1)=O") 17 | mol_h_UFF = Chem.AddHs(mol) 18 | mol_h_MMFF = Chem.AddHs(mol) 19 | 20 | # Number of conformers to be generated 21 | num_of_conformer=100 22 | max_iter=500 23 | # Default values for min energy conformer 24 | min_energy_UFF=10000 25 | min_energy_index_UFF=0 26 | min_energy_MMFF=10000 27 | min_energy_index_MMFF=0 28 | 29 | # Generate conformers (stored in side the mol object) 30 | #cids = AllChem.EmbedMultipleConfs(mol_h, numConfs=num_of_conformer) 31 | cids = AllChem.EmbedMultipleConfs(mol_h_UFF, numConfs=num_of_conformer,params=AllChem.ETKDG()) 32 | cids = AllChem.EmbedMultipleConfs(mol_h_MMFF, numConfs=num_of_conformer,params=AllChem.ETKDG()) 33 | ids = list(cids) #You can reach conformers by ids 34 | 35 | 36 | results_UFF = AllChem.UFFOptimizeMoleculeConfs(mol_h_UFF,maxIters=max_iter) 37 | results_MMFF = AllChem.MMFFOptimizeMoleculeConfs(mol_h_MMFF,maxIters=max_iter) 38 | 39 | 40 | # Search for the min energy conformer from results(tuple(is_converged,energy)) 41 | print("Searching conformers by UFF ") 42 | for index, result in enumerate(results_UFF): 43 | if(min_energy_UFF>result[1]): 44 | min_energy_UFF=result[1] 45 | min_energy_index_UFF=index 46 | print(min_energy_index_UFF,":",min_energy_UFF) 47 | 48 | print("\nSearching conformers by MMFF ") 49 | for index, result in enumerate(results_MMFF): 50 | if(min_energy_MMFF>result[1]): 51 | min_energy_MMFF=result[1] 52 | min_energy_index_MMFF=index 53 | print(min_energy_index_MMFF,":",min_energy_MMFF) 54 | 55 | 56 | 57 | # Write minimum energy conformers into a SDF file 58 | w = Chem.SDWriter('minimum-energy-conformer-UFF.sdf') 59 | w.write(Chem.Mol(mol_h_UFF,False,min_energy_index_UFF)) 60 | w.flush() 61 | w.close() 62 | 63 | 64 | # Write minimum energy conformer into a SDF file 65 | w = Chem.SDWriter('minimum-energy-conformer-MMFF.sdf') 66 | w.write(Chem.Mol(mol_h_MMFF,False,min_energy_index_MMFF)) 67 | w.flush() 68 | w.close() 69 | 70 | -------------------------------------------------------------------------------- /minimum-energy-conformer-MMFF.sdf: -------------------------------------------------------------------------------- 1 | 2 | RDKit 3D 3 | 4 | 58 60 0 0 0 0 0 0 0 0999 V2000 5 | 5.2171 -2.2060 0.7413 O 0 0 0 0 0 0 0 0 0 0 0 0 6 | 4.6576 -2.0958 -0.3385 C 0 0 0 0 0 0 0 0 0 0 0 0 7 | 4.7646 -1.0049 -1.1446 N 0 0 0 0 0 0 0 0 0 0 0 0 8 | 5.5083 0.1856 -0.7703 C 0 0 0 0 0 0 0 0 0 0 0 0 9 | 4.6678 1.0754 0.1559 C 0 0 0 0 0 0 0 0 0 0 0 0 10 | 5.3968 2.3688 0.5104 C 0 0 0 0 0 0 0 0 0 0 0 0 11 | 5.8379 3.1276 -0.7374 C 0 0 0 0 0 0 0 0 0 0 0 0 12 | 6.6733 2.2486 -1.6631 C 0 0 0 0 0 0 0 0 0 0 0 0 13 | 5.9429 0.9574 -2.0214 C 0 0 0 0 0 0 0 0 0 0 0 0 14 | 3.8797 -3.1454 -0.8009 N 0 0 0 0 0 0 0 0 0 0 0 0 15 | 2.7744 -3.1594 -2.0269 S 0 0 0 0 0 0 0 0 0 0 0 0 16 | 3.2715 -2.3230 -3.1009 O 0 0 0 0 0 0 0 0 0 0 0 0 17 | 1.3894 -2.3296 -1.2860 C 0 0 0 0 0 0 0 0 0 0 0 0 18 | 0.5123 -3.0560 -0.4767 C 0 0 0 0 0 0 0 0 0 0 0 0 19 | -0.5937 -2.4166 0.0842 C 0 0 0 0 0 0 0 0 0 0 0 0 20 | -0.8325 -1.0567 -0.1650 C 0 0 0 0 0 0 0 0 0 0 0 0 21 | -2.0492 -0.3845 0.4241 C 0 0 0 0 0 0 0 0 0 0 0 0 22 | -3.2973 -0.6192 -0.4309 C 0 0 0 0 0 0 0 0 0 0 0 0 23 | -4.4804 -0.0162 0.1446 N 0 0 0 0 0 0 0 0 0 0 0 0 24 | -5.1695 -0.5884 1.1940 C 0 0 0 0 0 0 0 0 0 0 0 0 25 | -6.3770 0.1675 1.6307 C 0 0 0 0 0 0 0 0 0 0 0 0 26 | -7.1497 -0.3071 2.6776 C 0 0 0 0 0 0 0 0 0 0 0 0 27 | -8.2565 0.3479 3.1129 N 0 0 0 0 0 0 0 0 0 0 0 0 28 | -8.5615 1.4968 2.4585 C 0 0 0 0 0 0 0 0 0 0 0 0 29 | -7.7765 1.9649 1.4062 C 0 0 0 0 0 0 0 0 0 0 0 0 30 | -6.6690 1.3220 0.9635 N 0 0 0 0 0 0 0 0 0 0 0 0 31 | -9.7733 2.2548 2.9006 C 0 0 0 0 0 0 0 0 0 0 0 0 32 | -4.8345 -1.6317 1.7427 O 0 0 0 0 0 0 0 0 0 0 0 0 33 | 0.0476 -0.3446 -0.9917 C 0 0 0 0 0 0 0 0 0 0 0 0 34 | 1.1564 -0.9784 -1.5557 C 0 0 0 0 0 0 0 0 0 0 0 0 35 | 2.3978 -4.5376 -2.2500 O 0 0 0 0 0 0 0 0 0 0 0 0 36 | 4.3733 -1.0715 -2.0801 H 0 0 0 0 0 0 0 0 0 0 0 0 37 | 6.4047 -0.1383 -0.2255 H 0 0 0 0 0 0 0 0 0 0 0 0 38 | 3.7122 1.3170 -0.3283 H 0 0 0 0 0 0 0 0 0 0 0 0 39 | 4.4181 0.5358 1.0773 H 0 0 0 0 0 0 0 0 0 0 0 0 40 | 4.7432 3.0057 1.1170 H 0 0 0 0 0 0 0 0 0 0 0 0 41 | 6.2750 2.1350 1.1248 H 0 0 0 0 0 0 0 0 0 0 0 0 42 | 6.4165 4.0116 -0.4465 H 0 0 0 0 0 0 0 0 0 0 0 0 43 | 4.9532 3.4878 -1.2768 H 0 0 0 0 0 0 0 0 0 0 0 0 44 | 6.9145 2.8017 -2.5779 H 0 0 0 0 0 0 0 0 0 0 0 0 45 | 7.6256 2.0060 -1.1757 H 0 0 0 0 0 0 0 0 0 0 0 0 46 | 5.0656 1.1958 -2.6373 H 0 0 0 0 0 0 0 0 0 0 0 0 47 | 6.5936 0.3280 -2.6408 H 0 0 0 0 0 0 0 0 0 0 0 0 48 | 3.8932 -3.9865 -0.2332 H 0 0 0 0 0 0 0 0 0 0 0 0 49 | 0.6742 -4.1144 -0.2847 H 0 0 0 0 0 0 0 0 0 0 0 0 50 | -1.2779 -2.9853 0.7133 H 0 0 0 0 0 0 0 0 0 0 0 0 51 | -1.8662 0.6927 0.5293 H 0 0 0 0 0 0 0 0 0 0 0 0 52 | -2.2039 -0.7547 1.4455 H 0 0 0 0 0 0 0 0 0 0 0 0 53 | -3.1682 -0.1886 -1.4301 H 0 0 0 0 0 0 0 0 0 0 0 0 54 | -3.4855 -1.6926 -0.5523 H 0 0 0 0 0 0 0 0 0 0 0 0 55 | -4.8504 0.8568 -0.2242 H 0 0 0 0 0 0 0 0 0 0 0 0 56 | -6.9050 -1.2262 3.1994 H 0 0 0 0 0 0 0 0 0 0 0 0 57 | -8.0230 2.8844 0.8843 H 0 0 0 0 0 0 0 0 0 0 0 0 58 | -10.2682 1.7462 3.7341 H 0 0 0 0 0 0 0 0 0 0 0 0 59 | -10.4899 2.3364 2.0775 H 0 0 0 0 0 0 0 0 0 0 0 0 60 | -9.4915 3.2587 3.2329 H 0 0 0 0 0 0 0 0 0 0 0 0 61 | -0.1294 0.7077 -1.2056 H 0 0 0 0 0 0 0 0 0 0 0 0 62 | 1.8215 -0.4128 -2.2035 H 0 0 0 0 0 0 0 0 0 0 0 0 63 | 1 2 2 0 64 | 2 3 1 0 65 | 3 4 1 0 66 | 4 5 1 0 67 | 5 6 1 0 68 | 6 7 1 0 69 | 7 8 1 0 70 | 8 9 1 0 71 | 2 10 1 0 72 | 10 11 1 0 73 | 11 12 2 0 74 | 11 13 1 0 75 | 13 14 2 0 76 | 14 15 1 0 77 | 15 16 2 0 78 | 16 17 1 0 79 | 17 18 1 0 80 | 18 19 1 0 81 | 19 20 1 0 82 | 20 21 1 0 83 | 21 22 2 0 84 | 22 23 1 0 85 | 23 24 2 0 86 | 24 25 1 0 87 | 25 26 2 0 88 | 24 27 1 0 89 | 20 28 2 0 90 | 16 29 1 0 91 | 29 30 2 0 92 | 11 31 2 0 93 | 9 4 1 0 94 | 30 13 1 0 95 | 26 21 1 0 96 | 3 32 1 0 97 | 4 33 1 0 98 | 5 34 1 0 99 | 5 35 1 0 100 | 6 36 1 0 101 | 6 37 1 0 102 | 7 38 1 0 103 | 7 39 1 0 104 | 8 40 1 0 105 | 8 41 1 0 106 | 9 42 1 0 107 | 9 43 1 0 108 | 10 44 1 0 109 | 14 45 1 0 110 | 15 46 1 0 111 | 17 47 1 0 112 | 17 48 1 0 113 | 18 49 1 0 114 | 18 50 1 0 115 | 19 51 1 0 116 | 22 52 1 0 117 | 25 53 1 0 118 | 27 54 1 0 119 | 27 55 1 0 120 | 27 56 1 0 121 | 29 57 1 0 122 | 30 58 1 0 123 | M END 124 | $$$$ 125 | -------------------------------------------------------------------------------- /minimum-energy-conformer-UFF.sdf: -------------------------------------------------------------------------------- 1 | 2 | RDKit 3D 3 | 4 | 58 60 0 0 0 0 0 0 0 0999 V2000 5 | -2.4651 -1.1549 0.0753 O 0 0 0 0 0 0 0 0 0 0 0 0 6 | -2.8067 -0.5795 -0.9939 C 0 0 0 0 0 0 0 0 0 0 0 0 7 | -4.1522 -0.1136 -1.1649 N 0 0 0 0 0 0 0 0 0 0 0 0 8 | -5.1831 -0.2987 -0.1383 C 0 0 0 0 0 0 0 0 0 0 0 0 9 | -5.6706 -1.7599 -0.1380 C 0 0 0 0 0 0 0 0 0 0 0 0 10 | -6.7846 -1.9700 0.8955 C 0 0 0 0 0 0 0 0 0 0 0 0 11 | -7.9533 -1.0081 0.6509 C 0 0 0 0 0 0 0 0 0 0 0 0 12 | -7.4747 0.4486 0.6473 C 0 0 0 0 0 0 0 0 0 0 0 0 13 | -6.3642 0.6586 -0.3896 C 0 0 0 0 0 0 0 0 0 0 0 0 14 | -1.8484 -0.3815 -2.0383 N 0 0 0 0 0 0 0 0 0 0 0 0 15 | -0.1986 -0.8831 -1.8690 S 0 0 0 0 0 0 0 0 0 0 0 0 16 | -0.1607 -2.3723 -1.6673 O 0 0 0 0 0 0 0 0 0 0 0 0 17 | 0.5412 -0.0569 -0.5022 C 0 0 0 0 0 0 0 0 0 0 0 0 18 | 0.2019 1.2728 -0.2209 C 0 0 0 0 0 0 0 0 0 0 0 0 19 | 0.7929 1.9371 0.8576 C 0 0 0 0 0 0 0 0 0 0 0 0 20 | 1.7273 1.2760 1.6702 C 0 0 0 0 0 0 0 0 0 0 0 0 21 | 2.4178 2.0144 2.7881 C 0 0 0 0 0 0 0 0 0 0 0 0 22 | 3.6107 2.8183 2.2628 C 0 0 0 0 0 0 0 0 0 0 0 0 23 | 4.6002 1.9255 1.6579 N 0 0 0 0 0 0 0 0 0 0 0 0 24 | 4.8417 1.8754 0.2419 C 0 0 0 0 0 0 0 0 0 0 0 0 25 | 5.6476 0.7818 -0.3415 C 0 0 0 0 0 0 0 0 0 0 0 0 26 | 5.9001 0.7170 -1.7213 C 0 0 0 0 0 0 0 0 0 0 0 0 27 | 6.6333 -0.3119 -2.2214 N 0 0 0 0 0 0 0 0 0 0 0 0 28 | 7.1337 -1.2847 -1.4140 C 0 0 0 0 0 0 0 0 0 0 0 0 29 | 6.8792 -1.2267 -0.0398 C 0 0 0 0 0 0 0 0 0 0 0 0 30 | 6.1457 -0.1988 0.4606 N 0 0 0 0 0 0 0 0 0 0 0 0 31 | 7.9262 -2.4107 -1.9967 C 0 0 0 0 0 0 0 0 0 0 0 0 32 | 4.3491 2.7589 -0.5121 O 0 0 0 0 0 0 0 0 0 0 0 0 33 | 2.0739 -0.0534 1.3782 C 0 0 0 0 0 0 0 0 0 0 0 0 34 | 1.4833 -0.7157 0.2985 C 0 0 0 0 0 0 0 0 0 0 0 0 35 | 0.5587 -0.5366 -3.1195 O 0 0 0 0 0 0 0 0 0 0 0 0 36 | -4.3849 0.4064 -2.0416 H 0 0 0 0 0 0 0 0 0 0 0 0 37 | -4.7485 -0.0555 0.8578 H 0 0 0 0 0 0 0 0 0 0 0 0 38 | -6.0469 -2.0315 -1.1492 H 0 0 0 0 0 0 0 0 0 0 0 0 39 | -4.8263 -2.4397 0.1049 H 0 0 0 0 0 0 0 0 0 0 0 0 40 | -7.1520 -3.0168 0.8310 H 0 0 0 0 0 0 0 0 0 0 0 0 41 | -6.3788 -1.8122 1.9191 H 0 0 0 0 0 0 0 0 0 0 0 0 42 | -8.7130 -1.1427 1.4506 H 0 0 0 0 0 0 0 0 0 0 0 0 43 | -8.4352 -1.2456 -0.3231 H 0 0 0 0 0 0 0 0 0 0 0 0 44 | -7.0996 0.7218 1.6582 H 0 0 0 0 0 0 0 0 0 0 0 0 45 | -8.3310 1.1152 0.4081 H 0 0 0 0 0 0 0 0 0 0 0 0 46 | -6.0071 1.7096 -0.3301 H 0 0 0 0 0 0 0 0 0 0 0 0 47 | -6.7782 0.4933 -1.4092 H 0 0 0 0 0 0 0 0 0 0 0 0 48 | -2.1376 0.0922 -2.9225 H 0 0 0 0 0 0 0 0 0 0 0 0 49 | -0.5146 1.7976 -0.8401 H 0 0 0 0 0 0 0 0 0 0 0 0 50 | 0.5308 2.9694 1.0537 H 0 0 0 0 0 0 0 0 0 0 0 0 51 | 2.7641 1.3006 3.5676 H 0 0 0 0 0 0 0 0 0 0 0 0 52 | 1.6996 2.7075 3.2778 H 0 0 0 0 0 0 0 0 0 0 0 0 53 | 3.2532 3.5796 1.5362 H 0 0 0 0 0 0 0 0 0 0 0 0 54 | 4.0857 3.3629 3.1064 H 0 0 0 0 0 0 0 0 0 0 0 0 55 | 5.0788 1.2414 2.2860 H 0 0 0 0 0 0 0 0 0 0 0 0 56 | 5.5185 1.4718 -2.3965 H 0 0 0 0 0 0 0 0 0 0 0 0 57 | 7.2584 -1.9905 0.6270 H 0 0 0 0 0 0 0 0 0 0 0 0 58 | 8.1054 -2.2417 -3.0798 H 0 0 0 0 0 0 0 0 0 0 0 0 59 | 7.3702 -3.3632 -1.8698 H 0 0 0 0 0 0 0 0 0 0 0 0 60 | 8.9071 -2.4877 -1.4820 H 0 0 0 0 0 0 0 0 0 0 0 0 61 | 2.8119 -0.5719 1.9777 H 0 0 0 0 0 0 0 0 0 0 0 0 62 | 1.7675 -1.7379 0.0840 H 0 0 0 0 0 0 0 0 0 0 0 0 63 | 1 2 2 0 64 | 2 3 1 0 65 | 3 4 1 0 66 | 4 5 1 0 67 | 5 6 1 0 68 | 6 7 1 0 69 | 7 8 1 0 70 | 8 9 1 0 71 | 2 10 1 0 72 | 10 11 1 0 73 | 11 12 2 0 74 | 11 13 1 0 75 | 13 14 2 0 76 | 14 15 1 0 77 | 15 16 2 0 78 | 16 17 1 0 79 | 17 18 1 0 80 | 18 19 1 0 81 | 19 20 1 0 82 | 20 21 1 0 83 | 21 22 2 0 84 | 22 23 1 0 85 | 23 24 2 0 86 | 24 25 1 0 87 | 25 26 2 0 88 | 24 27 1 0 89 | 20 28 2 0 90 | 16 29 1 0 91 | 29 30 2 0 92 | 11 31 2 0 93 | 9 4 1 0 94 | 30 13 1 0 95 | 26 21 1 0 96 | 3 32 1 0 97 | 4 33 1 0 98 | 5 34 1 0 99 | 5 35 1 0 100 | 6 36 1 0 101 | 6 37 1 0 102 | 7 38 1 0 103 | 7 39 1 0 104 | 8 40 1 0 105 | 8 41 1 0 106 | 9 42 1 0 107 | 9 43 1 0 108 | 10 44 1 0 109 | 14 45 1 0 110 | 15 46 1 0 111 | 17 47 1 0 112 | 17 48 1 0 113 | 18 49 1 0 114 | 18 50 1 0 115 | 19 51 1 0 116 | 22 52 1 0 117 | 25 53 1 0 118 | 27 54 1 0 119 | 27 55 1 0 120 | 27 56 1 0 121 | 29 57 1 0 122 | 30 58 1 0 123 | M END 124 | $$$$ 125 | --------------------------------------------------------------------------------