Ich habe mich gefragt, wie lange es dauern würde, bis die Abfrageverbindung mit RDKit nach ähnlichen Verbindungen aus der Zieldatenbank (nur SDF) sucht, also habe ich einen Befehl geschrieben.
Bei der Berechnung der Ähnlichkeit wird häufig ein Fingerabdruck erstellt und der Tanimoto-Koeffizient zur Bestimmung der Ähnlichkeitsbewertung verwendet. Fingerabdrücke sind Teile chemischer Struktur und es gibt verschiedene Methoden. Hier habe ich versucht, die wichtigsten MACCS-Schlüssel mit einer kleinen Anzahl von Bits zu verwenden.
import argparse
from rdkit import Chem
from rdkit.Chem import Descriptors, AllChem
from rdkit import rdBase, Chem, DataStructs
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-query", type=str, required=True)
parser.add_argument("-target_db", type=str, required=True)
args = parser.parse_args()
#Abfrage lesen
mol_block = ""
with open(args.query) as f:
for line in f:
mol_block += line
query_mol = Chem.MolFromMolBlock(mol_block)
#SDF wird geladen
target_sdf_sup = Chem.SDMolSupplier(args.target_db)
#FingerPrint-Berechnung(query)
query_fp = AllChem.GetMACCSKeysFingerprint(query_mol)
#FingerPrint-Berechnung(target)
target_fps = [AllChem.GetMACCSKeysFingerprint(mol) for mol in target_sdf_sup]
for i, target_fp in enumerate(target_fps):
result = DataStructs.TanimotoSimilarity(query_fp, target_fp)
print(i, result)
if __name__ == "__main__":
main()
So was. Vielen Dank, dass Sie argparse.
usage: StructureSimilaritySearch.py [-h] -query QUERY -target_db TARGET_DB
optional arguments:
-h, --help show this help message and exit
-query QUERY(mol)
-target_db TARGET_DB(sdf)
Suchen Sie wie gewohnt nach 1024 Zugdaten der Löslichkeit von RDkit. Abfrage ist angemessen. Dann wird es in ca. 1 Sekunde zurückgegeben. Wenn es 10.000 Einheiten sind, scheint es so, wie es ist, vernünftig zu sein.
Recommended Posts