-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalign_ligands.py
67 lines (51 loc) · 2.12 KB
/
align_ligands.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from rdkit import Chem
from rdkit.Chem import rdMolDescriptors
from rdkit.Chem import rdMolAlign
from conformers import generate_conformers
import numpy as np
import copy
def align_set_of_ligands(ligands):
""" Align a set of ligands to each other
Parameters
----------
ligands : list of rdkit.Chem.rdchem.Mol or rdkit.Chem.SmilesMolSupplier or rdkit.Chem.SDMolSupplier
List of ligands.
Returns
----------
aligned_molecules : list of rdkit.Chem.rdchem.Mol
List of aligned ligands.
crippen_score : list of float
List with crippen scores calculated during the alignment.
"""
if not isinstance(ligands, list):
ligands = list(ligands)
molecules2 = copy.deepcopy(ligands)
molecules = [generate_conformers(mol, 100) for mol in molecules2]
#molecules = [generate_conformers(mol, 500) for mol in molecules2]
#print('The length of ligands'+str(len(molecules2)))
print('the length of conformation file'+str(len(molecules)))
crippen_contribs = [rdMolDescriptors._CalcCrippenContribs(mol) for mol in molecules]
crippen_ref_contrib = crippen_contribs[0]
crippen_prob_contribs = crippen_contribs
ref_mol = molecules[0]
probe_mols = molecules
crippen_score = []
aligned_molecules = []
for idx, mol in enumerate(probe_mols):
tempscore = []
for cid in range(100):
try:
crippenO3A = rdMolAlign.GetCrippenO3A(mol, ref_mol, crippen_prob_contribs[idx], crippen_ref_contrib, cid, 0)
except ValueError:
print(mol,cid)
continue
crippenO3A.Align()
tempscore.append(crippenO3A.Score())
best = np.argmax(tempscore)
mol_string = Chem.MolToMolBlock(mol, confId=int(best))
temp_mol = Chem.MolFromMolBlock(mol_string, removeHs=False)
crippen_score.append(tempscore[best])
aligned_molecules.append(temp_mol)
print(len(aligned_molecules))
print(crippen_score)
return aligned_molecules, crippen_score