Je me demandais combien de temps il faudrait à un composé de requête pour rechercher des composés similaires dans la base de données cible (juste SDF) avec RDKit, j'ai donc écrit une commande.
Lors du calcul de la similitude, il est courant de générer une empreinte digitale et d'utiliser le coefficient de Tanimoto pour déterminer le score de similitude. Les empreintes digitales sont des morceaux de structure chimique et il existe différentes méthodes. Ici, j'ai essayé d'utiliser les principales clés MACCS avec un petit nombre de bits.
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()
#Lire la requête
mol_block = ""
with open(args.query) as f:
for line in f:
mol_block += line
query_mol = Chem.MolFromMolBlock(mol_block)
#Chargement du SDF
target_sdf_sup = Chem.SDMolSupplier(args.target_db)
#Calcul de l'empreinte digitale(query)
query_fp = AllChem.GetMACCSKeysFingerprint(query_mol)
#Calcul de l'empreinte digitale(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()
Comme ça. Merci 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)
Comme d'habitude, recherchez en ciblant 1024 données de train de Solubilité de RDkit. la requête est appropriée. Ensuite, il sera retourné dans environ 1 seconde. Si c'est 10 000 unités, il semble que ce sera raisonnable tel quel.
Recommended Posts