[PYTHON] Créez une commande pour rechercher des composés similaires dans la base de données cible avec RDKit et vérifiez le temps de traitement

introduction

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.

La source

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()

Comment utiliser

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)

temps de traitement

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.

référence

Recommended Posts

Créez une commande pour rechercher des composés similaires dans la base de données cible avec RDKit et vérifiez le temps de traitement
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
Utilisez la commande [shell] pour compresser par zip n'importe quel fichier pour créer un fichier et supprimer le fichier d'origine.
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
Je veux créer un Dockerfile pour le moment.
Créez un fichier audio avec la fonction de synthèse vocale de Google Text To Speak et vérifiez le texte comme guide de parole pendant 3 minutes.
Créez un modèle pour stocker les informations de l'API Google Livres pour une manipulation et des tests intuitifs
Traiter les données extraites d'un certain système de point de vente pour créer un tableau récapitulatif par produit et par heure
Recherchez des mots-clés Twitter avec tweepy et écrivez les résultats dans Excel
Connexion SSH au serveur cible à partir de Windows en un clic sur un raccourci
Créez une base de données propre pour les tests avec FastAPI et effectuez le test Unittest de l'API avec pytest
Créez une commande pour obtenir le journal de travail
Comment utiliser la commande grep pour rechercher de manière récursive des répertoires et des fichiers à une profondeur spécifiée
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
[Python] Mesure et affiche le temps nécessaire au traitement
"Arrêtez de soumettre des fichiers japonais à git sur Mac> <" Pour le moment, j'ai écrit un script pour rechercher des fichiers japonais incompatibles sur Mac et Linux.
Créez un script pour votre compétence Pepper dans une feuille de calcul et chargez SayText directement à partir du script
Donnez une date et une heure à la commande d'historique et collectez les fichiers d'historique de tous les utilisateurs avec un script
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 8 Mesure du temps de traitement et profileur
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Probablement le moyen le plus simple de créer un pdf avec Python 3
[Python] Créer une liste de dates et d'heures pour une période spécifiée
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Je veux obtenir des informations de fstab à la destination de la connexion ssh et exécuter la commande
Essayez de générer une image de veste de type death metal avec DCGAN + grattez le site de base de données de métaux pour cela
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
RDKit définit le modèle de réaction avec SMARTS et produit un réactif
Créez un alias pour Route53 vers CloudFront avec l'API AWS
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Créez un sélecteur de couleurs pour la roue chromatique avec Python + Qt (PySide)
Comment faire une commande pour lire le fichier de paramètres avec pyramide
[Go] Créez une commande CLI pour changer l'extension de l'image
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
[EC2] Comment installer et télécharger chromedriver à partir de la ligne de commande
J'ai essayé de créer des taureaux et des vaches avec un programme shell
Une commande pour vérifier facilement la vitesse du réseau sur la console
Créez des commandes Django personnalisées et exécutez-les à partir de la ligne de commande
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
Créez une fonction pour obtenir le contenu de la base de données dans Go
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Créer et renvoyer un fichier CSV CP932 pour Excel avec Chalice
[Python] Comment créer une liste de types de dictionnaire, ajouter / modifier / supprimer des éléments et extraire avec une instruction for
Je veux utiliser uniquement la commande SMTP MAIL FROM et la commande RCPT TO sans envoyer de courrier avec le smtplib de Python
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)