Rowan : Workflows de Modélisation Moléculaire et Conception de Médicaments Natifs du Cloud
Aperçu
Rowan est une plateforme de workflows native du cloud pour la simulation moléculaire, la chimie médicinale et la conception basée sur la structure. Son API Python expose une interface unifiée pour la modélisation de petites molécules, la prédiction de propriétés, le docking, la dynamique moléculaire et les workflows d'IA structurale.
Utilisez Rowan lorsque vous souhaitez exécuter des workflows de chimie médicinale ou de conception moléculaire de manière programmatique sans maintenir une infrastructure HPC locale, un provisionnement GPU ou une collection d'outils de modélisation séparés. Rowan gère toute l'infrastructure, la gestion des résultats et la mise à l'échelle des calculs.
Quand utiliser Rowan
Rowan est adapté pour :
- Chimie quantique, méthodes semi-empiriques ou potentiels de réseaux neuronaux
- Prédiction de propriétés par lots (pKa, descripteurs, perméabilité, solubilité)
- Génération d'ensembles de conformères et tautomères
- Workflows de docking (ligand unique, série d'analogues, affinement de pose)
- Co-repliement protéine-ligand et génération de MSA
- Pipelines chimiques en plusieurs étapes (par exemple, recherche de tautomères → docking → analyse de pose)
- Campagnes de chimie médicinale par lots nécessitant une infrastructure cohérente et évolutive
Rowan n'est pas adapté pour :
- Entrée/sortie moléculaire simple (utilisez RDKit directement)
- Chimie quantique post-HF ab initio ou calculs relativistes
Démarrage rapide
uv pip install rowan-python
import rowan
rowan.api_key = "votre_clé_api_ici" # ou définir la variable d'env ROWAN_API_KEY
# Les descripteurs nécessitent une molécule 3D, pas une simple chaîne SMILES.
mol = rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O")
wf = rowan.submit_descriptors_workflow(mol, name="aspirine")
result = wf.result()
print(result.descriptors["MW"]) # 180.042 — masse exacte
print(result.descriptors["SLogP"]) # 1.31
print(result.descriptors["TopoPSA"]) # 63.6 — PSA topologique
Si cela s'imprime sans erreur, vous êtes correctement configuré. Ces valeurs et exemples
ont été vérifiés avec rowan-python 3.1.13.
Installation
uv pip install rowan-python
# ou : uv pip install rowan-python
Gestion des utilisateurs et webhooks
Authentification
Définissez une clé API via une variable d'environnement (recommandé) :
export ROWAN_API_KEY="votre_clé_api_ici"
Ou définissez-la directement en Python :
import rowan
rowan.api_key = "votre_clé_api_ici"
Vérifiez l'authentification :
import rowan
user = rowan.whoami() # Renvoie les infos utilisateur si authentifié
print(f"Utilisateur : {user.email}")
print(f"Crédits disponibles : {user.credits_available_string()}")
Formats d'entrée des molécules
Rowan accepte les molécules dans les formats suivants :
- SMILES (préféré) :
"CCO","c1ccccc1O" - Patterns SMARTS (pour certains workflows) : sous-ensemble de SMARTS pour la correspondance de sous-structures
- InChI (si pris en charge par votre version d'API) :
"InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3"
L'API valide les entrées de molécules et lève une ValueError pour un SMILES
non analysable ou un type d'entrée incompatible avec le workflow. Utilisez toujours des SMILES
canoniques pour la reproductibilité.
Chaînes SMILES versus objets moléculaires
Les types d'entrée acceptés varient selon le workflow dans rowan-python 3.1.13. Seuls ces
workflows courants acceptent une chaîne nue : pKa, recherche de conformères, perméabilité
membranaire, ADMET, LogP, macropKa, solubilité et MD d'analyse de pose. La plupart des
autres — y compris les descripteurs, la recherche de tautomères, le docking, le docking d'analogues,
BDE, NMR et Fukui — nécessitent rowan.Molecule.from_smiles(smiles) ou un objet Mol/RWMol
de RDKit. Un mauvais type lève une ValueError avant la soumission.
Astuce : Utilisez RDKit pour valider les SMILES avant la soumission :
from rdkit import Chem
smiles = "CCO"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
raise ValueError(f"SMILES invalide : {smiles}")
Modèle d'utilisation de base
La plupart des tâches Rowan suivent le même modèle en trois étapes :
- Soumettre un workflow
- Attendre la fin (avec streaming optionnel)
- Récupérer les résultats typés avec des propriétés de commodité
import rowan
# 1. Soumettre — utilisez la fonction de workflow spécifique (pas la générique submit_workflow)
workflow = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"),
name="descripteurs aspirine",
)
# 2. & 3. Attendre et récupérer
result = workflow.result() # Bloque jusqu'à la fin (par défaut : wait=True, poll_interval=5)
print(result.data) # Dictionnaire brut
print(result.descriptors["MW"]) # 180.042 masse exacte ; pas de propriété result.molecular_weight
Pour les workflows de longue durée, utilisez le streaming :
for partial in workflow.stream_result(poll_interval=5):
print(f"Complet : {partial.complete}") # booléen, pas un pourcentage
print(partial.data)
result() vs. stream_result()
| Pattern | Quand l'utiliser | Durée |
|---|---|---|
result() | Vous pouvez attendre le résultat complet | <5 min typique |
stream_result() | Vous voulez un retour de progression ou des résultats partiels précoces | >5 min, ou utilisation interactive |
Recommandation : Utilisez result() pour les descripteurs, pKa. Utilisez stream_result() pour la recherche de conformères, le docking, le co-repliement.
Travailler avec les résultats
L'API de Rowan inclut des objets de résultat de workflow typés avec des propriétés de commodité.
Utiliser les propriétés typées et .data
Les résultats ont deux modes d'accès :
- Propriétés de commodité (recommandées en premier) :
result.descriptors,result.best_pose,result.scores. Les classes de résultat diffèrent : la recherche de conformères utilise les méthodesget_energies()etget_conformers(). - Recours aux données brutes :
result.data— dictionnaire brut de l'API
Exemple :
result = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"),
name="éthanol",
).result()
# Propriété de commodité (renvoie tous les descripteurs) :
print(result.descriptors["MW"]) # masse exacte/monoisotopique
print(result.descriptors["SLogP"])
print(result.descriptors["TopoPSA"]) # PSA topologique usuel
# Recours aux données brutes :
print(result.data["descriptors"])
Remarque : DescriptorsResult n'a PAS de propriété molecular_weight.
MW est la masse exacte/monoisotopique, pas le poids moléculaire moyen. TPSA est un
descripteur de surface chargée 3D ; utilisez TopoPSA pour la surface polaire topologique
usuelle utilisée dans les règles de similarité médicamenteuse.
Invalidation du cache
Certaines propriétés de résultat sont chargées paresseusement (par exemple, géométries de conformères, structures de protéines). Pour rafraîchir :
result.clear_cache()
new_structures = result.get_conformers() # Réextrait pour ConformerSearchResult
Projets, dossiers et organisation
Pour les campagnes non triviales, utilisez des projets et des dossiers pour garder le travail organisé.
Projets
import rowan
# Créer un projet
project = rowan.create_project(name="Optimisation de tête de série CDK2")
rowan.set_project("Optimisation de tête de série CDK2")
# Tous les workflows suivants vont dans ce projet
wf = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"), name="composé test"
)
# retrieve_project prend un UUID ; list_workflows se limite avec parent_uuid.
project = rowan.retrieve_project(project.uuid)
workflows = rowan.list_workflows(parent_uuid=project.uuid, size=50)
Dossiers
# Créer une structure de dossiers hiérarchique
dossier = rowan.create_folder(name="docking/lot_1/criblage")
wf = rowan.submit_docking_workflow(
# ... paramètres de docking ...
folder=dossier,
name="composé_001",
)
# Lister les workflows dans un dossier
results = rowan.list_workflows(parent_uuid=dossier.uuid)
Arbres de décision de workflows
pKa vs. MacropKa
Utilisez le pKa microscopique lorsque :
- Vous avez besoin du pKa d'un seul groupe ionisable
- Vous êtes intéressé par les transitions acide-base et la thermodynamique de protonation
- La molécule a un ou deux sites ionisables
- La vitesse est critique (plus rapide, moins de crédits)
Utilisez le macropKa lorsque :
- Vous avez besoin d'un comportement dépendant du pH sur une plage physiologiquement pertinente (par exemple, 0-14)
- Vous voulez une charge agrégée et des populations d'état de protonation en fonction du pH
- La molécule a plusieurs groupes ionisables avec une protonation couplée
- Vous avez besoin de propriétés en aval comme la solubilité aqueuse à différents pH
Exemple de décision :
Phénol (pKa ~10) : Utilisez le pKa microscopique
Amine (pKa ~9-10) : Utilisez le pKa microscopique
Médicament multi-ionisable (N, O, groupe acide) : Utilisez le macropKa
Évaluation ADME dans le pH gastro-intestinal : Utilisez le macropKa
Recherche de conformères vs. recherche de tautomères
Utilisez la recherche de conformères lorsque :
- Une seule forme tautomère est connue
- Vous avez besoin d'un ensemble 3D diversifié pour le docking, la MD ou l'analyse SAR
- Les liaisons rotatives dominent l'espace chimique
Utilisez la recherche de tautomères lorsque :
- L'équilibre tautomère est incertain (par exemple, hétérocycles, systèmes céto-énol)
- Vous devez modéliser tous les isomères de protonation pertinents
- Les calculs en aval (docking, pKa) dépendent de la forme tautomère
Workflow combiné :
# Étape 1 : Trouver le meilleur tautomère
taut_wf = rowan.submit_tautomer_search_workflow(
initial_molecule=rowan.Molecule.from_smiles("O=c1[nH]ccnc1"),
name="tautomères imidazole",
)
best_taut = taut_wf.result().best_tautomer
# Étape 2 : Générer des conformères à partir du meilleur tautomère
conf_wf = rowan.submit_conformer_search_workflow(
initial_molecule=best_taut,
name="conformères imidazole",
)
Docking vs. docking d'analogues vs. co-repliement
| Workflow | Quand l'utiliser | Entrée | Sortie |
|---|---|---|---|
| Docking | Ligand unique, poche connue | Protéine + SMILES + coordonnées de poche | Pose, score, dG |
| Docking d'analogues | 5-100+ composés apparentés | Protéine + liste de SMILES + ligand de référence | Toutes les poses, alignées sur la référence |
| Co-repliement protéine-ligand | Séquence + ligand, pas de structure cristalline | Séquence protéique + SMILES | Complexe lié prédit par ML |
Utilitaires protéiques
Télécharger des protéines
# À partir d'un fichier PDB local
proteine = rowan.upload_protein(
name="domaine_kinase_egfr",
file_path="egfr_kinase.pdb",
)
# À partir de la base de données PDB
proteine_from_pdb = rowan.create_protein_from_pdb_id(
name="CDK2 (1M17)",
code="1M17",
)
# Récupérer une protéine précédemment téléchargée
proteine = rowan.retrieve_protein("uuid-protéine")
# Lister toutes les protéines
mes_proteines = rowan.list_proteins()
Conseils pour la préparation des protéines
- Format de fichier : PDB, mmCIF (Rowan détecte automatiquement)
- Molécules d'eau : Rowan conserve généralement l'eau pertinente ; supprimez l'eau en vrac au préalable si souhaité
- Hétéroatomes : Les cofacteurs, ions et ligands liés sont généralement conservés ; supprimez les hétéroatomes indésirables avant le téléchargement
- Protéines multi-chaînes : Entièrement prises en charge
- Résolution : Fonctionne avec les structures NMR, les modèles d'homologie et la cryo-EM ; la qualité est importante pour les prédictions en aval
- Validation : Rowan valide la syntaxe PDB ; les fichiers gravement malformés peuvent être rejetés
Catalogue de workflows
Neuf catégories de workflows courantes — descripteurs, pKa microscopique, MacropKa, recherche de conformères, recherche de tautomères, docking, docking d'analogues, génération de MSA et co-repliement protéine-ligand — chacune avec du code de soumission et des formes de résultat, plus la liste complète de chaque type de workflow pris en charge (modélisation de base, conception basée sur la structure, chimie computationnelle avancée, chimie réactionnelle, propriétés avancées, énergie libre de liaison, et biologie séquentielle et structurale) se trouvent dans références/catalogue_workflows.md.
Soumission par lots, webhooks et travail asynchrone
La soumission/interrogation/récupération par lots, le modèle feu-et-vérifie non bloquant, la configuration de webhook, la création et la rotation de secrets, la vérification de la charge utile et de la signature (avec un gestionnaire FastAPI), et les bonnes pratiques pour les webhooks se trouvent dans références/lots_et_webhooks.md.
Accès, tarification et crédits
Les limites du niveau gratuit, la consommation de crédits par workflow, et les estimations de coûts typiques se trouvent dans références/acces_et_tarification.md.
Exemple détaillé et dépannage
Une campagne complète d'optimisation de tête de série — configuration du projet, tautomères, pKa sur une série d'analogues, collecte des résultats, et un suivi de docking — se trouve dans références/exemple_complet.md.
Les erreurs courantes avec leurs correctifs, et les conseils de débogage, se trouvent dans références/depannage.md.
Modèles d'utilisation recommandés
- Préférez les workflows natifs de Rowan plutôt que l'assemblage de bas niveau lorsqu'ils existent
- Utilisez des projets et dossiers pour toute campagne non triviale (>5 workflows)
- Utilisez
result()pour bloquer jusqu'à la fin (par défaut :wait=True, poll_interval=5) - Utilisez d'abord les propriétés de résultat typées, recourez à
.datapour les champs non mappés - Utilisez la soumission par lots pour les bibliothèques de composés ou les séries d'analogues
- Enchaînez les workflows pour les campagnes chimiques en plusieurs étapes :
pKa → macropKa → perméabilité(évaluation ADME)recherche de tautomères → docking → MD d'analyse de pose(affinement de pose)génération de MSA → co-repliement protéine-ligand(prédiction de structure par IA)
- Utilisez les webhooks pour les campagnes de longue durée (>50 workflows) ou les pipelines asynchrones
- Utilisez le streaming pour un retour interactif sur les grandes recherches de conformères/docking
Résumé
Utilisez Rowan lorsque votre workflow nécessite une exécution dans le cloud pour des tâches de conception moléculaire, en particulier lorsque vous souhaitez une API unifiée et une gestion cohérente des résultats pour la modélisation de petites molécules, les protéines, le docking, la prédiction ADME et la génération de structures par ML.
Rowan est une plateforme de workflows de conception moléculaire, pas seulement un moteur de chimie à distance. Elle gère la mise à l'échelle de l'infrastructure, la persistance des résultats et l'orchestration de pipelines en plusieurs étapes afin que vous puissiez vous concentrer sur la science.