Rowan: Cloud-native Workflows für Molekülmodellierung und Wirkstoffdesign
Übersicht
Rowan ist eine cloud-native Workflow-Plattform für molekulare Simulation, medizinische Chemie und strukturbasiertes Design. Ihre Python-API bietet eine einheitliche Schnittstelle für die Modellierung kleiner Moleküle, Eigenschaftsvorhersage, Docking, Molekulardynamik und KI-Struktur-Workflows.
Nutzen Sie Rowan, wenn Sie medizinisch-chemische oder molekulare Design-Workflows programmatisch ausführen möchten, ohne lokale HPC-Infrastruktur warten, GPUs bereitstellen oder eine Sammlung separater Modellierungswerkzeuge unterhalten zu müssen. Rowan kümmert sich um die gesamte Infrastruktur, das Ergebnis-Management und die Skalierung der Berechnungen.
Wann ist Rowan geeignet?
Rowan ist eine gute Wahl für:
- Quantenchemie, semiempirische Methoden oder neuronale Netzpotentiale
- Batch-Eigenschaftsvorhersage (pKa, Deskriptoren, Permeabilität, Löslichkeit)
- Erzeugung von Konformer- und Tautomeren-Ensembles
- Docking-Workflows (Einzelligand, Analogserien, Pose-Verfeinerung)
- Protein-Ligand-Cofolding und MSA-Erzeugung
- Mehrstufige Chemie-Pipelines (z. B. Tautomerensuche → Docking → Pose-Analyse)
- Batch-Kampagnen in der medizinischen Chemie, bei denen eine konsistente, skalierbare Infrastruktur erforderlich ist
Rowan ist nicht geeignet für:
- Einfache Molekül-E/A (verwenden Sie stattdessen RDKit direkt)
- Post-HF Ab-initio-Quantenchemie oder relativistische Berechnungen
Schnellstart
uv pip install rowan-python
import rowan
rowan.api_key = "ihr_api_key_hier" # oder setzen Sie die Umgebungsvariable ROWAN_API_KEY
# Deskriptoren erfordern ein 3D-Molekül, keinen bloßen SMILES-String.
mol = rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O")
wf = rowan.submit_descriptors_workflow(mol, name="Aspirin")
result = wf.result()
print(result.descriptors["MW"]) # 180.042 — genaue Masse
print(result.descriptors["SLogP"]) # 1.31
print(result.descriptors["TopoPSA"]) # 63.6 — topologische PSA
Wenn dies fehlerfrei ausgeführt wird, ist Ihr Setup korrekt. Diese Werte und Beispiele
wurden gegen rowan-python 3.1.13 verifiziert.
Installation
uv pip install rowan-python
# oder: uv pip install rowan-python
Benutzer- und Webhook-Verwaltung
Authentifizierung
Legen Sie einen API-Schlüssel über eine Umgebungsvariable fest (empfohlen):
export ROWAN_API_KEY="ihr_api_key_hier"
Oder direkt in Python:
import rowan
rowan.api_key = "ihr_api_key_hier"
Authentifizierung überprüfen:
import rowan
user = rowan.whoami() # Gibt Benutzerinfo zurück, wenn authentifiziert
print(f"Benutzer: {user.email}")
print(f"Verfügbare Credits: {user.credits_available_string()}")
Molekül-Eingabeformate
Rowan akzeptiert Moleküle in den folgenden Formaten:
- SMILES (bevorzugt):
"CCO","c1ccccc1O" - SMARTS-Muster (für einige Workflows): Teilmenge von SMARTS für Substruktursuche
- InChI (falls von Ihrer API-Version unterstützt):
"InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3"
Die API validiert Moleküleingaben und löst einen ValueError für einen unparsbaren
SMILES oder einen workflow-inkompatiblen Eingabetyp aus. Verwenden Sie für die Reproduzierbarkeit immer kanonisierte SMILES.
SMILES-Strings versus Molekülobjekte
Die akzeptierten Eingabetypen variieren je nach Workflow in rowan-python 3.1.13. Nur diese
gängigen Workflows akzeptieren einen reinen String: pKa, Konformersuche, Membran-
permeabilität, ADMET, LogP, macropKa, Löslichkeit und Pose-Analyse MD. Die meisten
anderen – einschließlich Deskriptoren, Tautomerensuche, Docking, Analog-Docking,
BDE, NMR und Fukui – erfordern rowan.Molecule.from_smiles(smiles) oder ein RDKit
Mol/RWMol. Ein falscher Typ löst vor der Übermittlung einen ValueError aus.
Tipp: Verwenden Sie RDKit, um SMILES vor der Übermittlung zu validieren:
from rdkit import Chem
smiles = "CCO"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
raise ValueError(f"Ungültiger SMILES: {smiles}")
Kernnutzungsmuster
Die meisten Rowan-Aufgaben folgen dem gleichen dreistufigen Muster:
- Einreichen eines Workflows
- Warten auf den Abschluss (mit optionalem Streaming)
- Abrufen von typisierten Ergebnissen mit Komforteigenschaften
import rowan
# 1. Einreichen – verwenden Sie die spezifische Workflow-Funktion (nicht die generische submit_workflow)
workflow = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"),
name="Aspirin Deskriptoren",
)
# 2. & 3. Warten und abrufen
result = workflow.result() # Blockiert bis zur Fertigstellung (Standard: wait=True, poll_interval=5)
print(result.data) # Rohdaten-Dict
print(result.descriptors["MW"]) # 180.042 genaue Masse; kein result.molecular_weight-Eigenschaft
Für langlebige Workflows verwenden Sie Streaming:
for partial in workflow.stream_result(poll_interval=5):
print(f"Vollständig: {partial.complete}") # Bool, kein Prozentsatz
print(partial.data)
result() vs. stream_result()
| Muster | Verwendung wenn | Dauer |
|---|---|---|
result() | Sie können auf das vollständige Ergebnis warten | <5 Min. typisch |
stream_result() | Sie möchten Fortschrittsfeedback oder benötigen frühe Teilergebnisse | >5 Min. oder interaktive Nutzung |
Richtlinie: Verwenden Sie result() für Deskriptoren, pKa. Verwenden Sie stream_result() für Konformersuche, Docking, Cofolding.
Arbeiten mit Ergebnissen
Die Rowan-API enthält typisierte Workflow-Ergebnisobjekte mit Komforteigenschaften.
Verwendung von typisierten Eigenschaften und .data
Ergebnisse haben zwei Zugriffsmuster:
- Komforteigenschaften (zuerst empfohlen):
result.descriptors,result.best_pose,result.scores. Ergebnisklassen unterscheiden sich: Die Konformersuche verwendetget_energies()- undget_conformers()-Methoden. - Rohdaten-Fallback:
result.data— Rohdaten-Dictionary von der API
Beispiel:
result = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"),
name="Ethanol",
).result()
# Komforteigenschaft (gibt alle Deskriptoren zurück):
print(result.descriptors["MW"]) # genaue/monoisotopische Masse
print(result.descriptors["SLogP"])
print(result.descriptors["TopoPSA"]) # übliche topologische PSA
# Rohdaten-Fallback:
print(result.data["descriptors"])
Hinweis: DescriptorsResult hat keine molecular_weight-Eigenschaft.
MW ist die genaue/monoisotopische Masse, nicht das durchschnittliche Molekulargewicht. TPSA ist ein 3D-
geladener Oberflächendeskriptor; verwenden Sie TopoPSA für die übliche topologische polare
Oberfläche, die in Drug-Likeness-Regeln verwendet wird.
Cache-Invalidierung
Einige Ergebniseigenschaften werden lazy geladen (z. B. Konformer-Geometrien, Proteinstrukturen). Zum Aktualisieren:
result.clear_cache()
new_structures = result.get_conformers() # Wird für ConformerSearchResult erneut abgerufen
Projekte, Ordner und Organisation
Verwenden Sie für komplexere Kampagnen Projekte und Ordner, um die Arbeit organisiert zu halten.
Projekte
import rowan
# Ein Projekt erstellen
project = rowan.create_project(name="CDK2 Lead-Optimierung")
rowan.set_project("CDK2 Lead-Optimierung")
# Alle nachfolgenden Workflows gehören zu diesem Projekt
wf = rowan.submit_descriptors_workflow(
rowan.Molecule.from_smiles("CCO"), name="Testverbindung"
)
# retrieve_project erwartet eine UUID; list_workflows beschränkt den Bereich mit parent_uuid.
project = rowan.retrieve_project(project.uuid)
workflows = rowan.list_workflows(parent_uuid=project.uuid, size=50)
Ordner
# Hierarchische Ordnerstruktur erstellen
folder = rowan.create_folder(name="docking/batch_1/screening")
wf = rowan.submit_docking_workflow(
# ... Docking-Parameter ...
folder=folder,
name="Verbindung_001",
)
# Workflows in einem Ordner auflisten
results = rowan.list_workflows(parent_uuid=folder.uuid)
Workflow-Entscheidungsbäume
pKa vs. MacropKa
Verwenden Sie mikroskopisches pKa, wenn:
- Sie das pKa einer einzelnen ionisierbaren Gruppe benötigen
- Sie an Säure-Base-Übergängen und Protonierungsthermodynamik interessiert sind
- Das Molekül eine oder zwei ionisierbare Stellen hat
- Geschwindigkeit entscheidend ist (schneller, weniger Credits)
Verwenden Sie macropKa, wenn:
- Sie pH-abhängiges Verhalten über einen physiologisch relevanten Bereich (z. B. 0–14) benötigen
- Sie aggregierte Ladungs- und Protonierungszustandspopulationen über pH-Werte hinweg möchten
- Das Molekül mehrere ionisierbare Gruppen mit gekoppelter Protonierung hat
- Sie abgeleitete Eigenschaften wie wässrige Löslichkeit bei verschiedenen pH-Werten benötigen
Beispielentscheidung:
Phenol (pKa ~10): Mikroskopisches pKa verwenden
Amin (pKa ~9–10): Mikroskopisches pKa verwenden
Mehrfach ionisierbarer Wirkstoff (N, O, saure Gruppe): MacropKa verwenden
ADME-Bewertung über GI-pH-Wert: MacropKa verwenden
Konformersuche vs. Tautomerensuche
Verwenden Sie die Konformersuche, wenn:
- Eine einzelne tautomere Form bekannt ist
- Sie ein diverses 3D-Ensemble für Docking, MD oder SAR-Analyse benötigen
- Drehbare Bindungen den chemischen Raum dominieren
Verwenden Sie die Tautomerensuche, wenn:
- Das tautomere Gleichgewicht unsicher ist (z. B. Heterocyclen, Keto-Enol-Systeme)
- Sie alle relevanten Protonierungsisomere modellieren müssen
- Nachgelagerte Berechnungen (Docking, pKa) von der tautomeren Form abhängen
Kombinierter Workflow:
# Schritt 1: Bestes Tautomer finden
taut_wf = rowan.submit_tautomer_search_workflow(
initial_molecule=rowan.Molecule.from_smiles("O=c1[nH]ccnc1"),
name="Imidazol-Tautomere",
)
best_taut = taut_wf.result().best_tautomer
# Schritt 2: Konformere aus dem besten Tautomer erzeugen
conf_wf = rowan.submit_conformer_search_workflow(
initial_molecule=best_taut,
name="Imidazol-Konformere",
)
Docking vs. Analog-Docking vs. Cofolding
| Workflow | Verwendung wenn | Eingabe | Ausgabe |
|---|---|---|---|
| Docking | Einzelligand, bekannte Tasche | Protein + SMILES + Taschenkoordinaten | Pose, Score, dG |
| Analog-Docking | 5–100+ verwandte Verbindungen | Protein + SMILES-Liste + Referenzligand | Alle Posen, referenzausgerichtet |
| Protein-Ligand-Cofolding | Sequenz + Ligand, keine Kristallstruktur | Proteinsequenz + SMILES | ML-vorhergesagter gebundener Komplex |
Protein-Dienstprogramme
Proteine hochladen
# Aus lokaler PDB-Datei
protein = rowan.upload_protein(
name="egfr_kinase_domain",
file_path="egfr_kinase.pdb",
)
# Aus PDB-Datenbank
protein_from_pdb = rowan.create_protein_from_pdb_id(
name="CDK2 (1M17)",
code="1M17",
)
# Zuvor hochgeladenes Protein abrufen
protein = rowan.retrieve_protein("protein-uuid")
# Alle Proteine auflisten
my_proteins = rowan.list_proteins()
Hinweise zur Proteinvorbereitung
- Dateiformat: PDB, mmCIF (Rowan erkennt automatisch)
- Wassermoleküle: Rowan behält normalerweise relevante Wassermoleküle; entfernen Sie ggf. Bulk-Wasser vor dem Hochladen
- Heteroatome: Cofaktoren, Ionen und gebundene Liganden bleiben normalerweise erhalten; entfernen Sie unerwünschte Heteroatome vor dem Hochladen
- Mehrkettige Proteine: Vollständig unterstützt
- Auflösung: Funktioniert mit NMR-Strukturen, Homologiemodellen und Kryo-EM; die Qualität ist entscheidend für nachgelagerte Vorhersagen
- Validierung: Rowan validiert die PDB-Syntax; stark fehlerhafte Dateien können abgelehnt werden
Workflow-Katalog
Neun gängige Workflow-Kategorien – Deskriptoren, mikroskopisches pKa, MacropKa, Konformer- suche, Tautomerensuche, Docking, Analog-Docking, MSA-Erzeugung und Protein-Ligand- Cofolding – jeweils mit Übermittlungscode und Ergebnisformen, sowie die vollständige Liste jedes unterstützten Workflow-Typs (Kernmodellierung, strukturbasiertes Design, fortgeschrittene Computerchemie, Reaktionschemie, fortgeschrittene Eigenschaften, freie Bindungsenergie sowie Sequenz- und Strukturbiologie) finden Sie in references/workflow_catalog.md.
Batch-Einreichung, Webhooks und asynchrone Arbeit
Batch-Einreichen/Polling/Abrufen, das nicht blockierende Fire-and-Check-Muster, Webhook-Einrichtung, Geheimniserstellung und -rotation, Nutzlast- und Signaturprüfung (mit einem FastAPI- Handler) sowie Best Practices für Webhooks finden Sie in references/batch_and_webhooks.md.
Zugang, Preise und Credits
Free-Tier-Grenzen, Credit-Verbrauch pro Workflow und typische Kostenschätzungen finden Sie in references/access_and_pricing.md.
Ausgearbeitetes Beispiel und Fehlerbehebung
Eine vollständige Lead-Optimierungs-Kampagne – Projekteinrichtung, Tautomere, pKa über eine Analog- serie, Ergebnis-Sammlung und ein Docking-Follow-up – finden Sie in references/end_to_end_example.md.
Häufige Fehler mit ihren Lösungen und Debugging-Tipps finden Sie in references/troubleshooting.md.
Empfohlene Nutzungsmuster
- Bevorzugen Sie Rowan-native Workflows gegenüber Low-Level-Zusammenstellung, wenn sie existieren
- Verwenden Sie Projekte und Ordner für jede nicht triviale Kampagne (>5 Workflows)
- Verwenden Sie
result(), um bis zum Abschluss zu blockieren (Standard:wait=True, poll_interval=5) - Verwenden Sie zuerst typisierte Ergebnis-Eigenschaften, greifen Sie für nicht zugeordnete Felder auf
.datazurück - Verwenden Sie Batch-Einreichung für Verbindungsbibliotheken oder Analogserien
- Verkettung von Workflows für mehrstufige Chemie-Kampagnen:
pKa → macropKa → Permeabilität(ADME-Bewertung)Tautomerensuche → Docking → Pose-Analyse MD(Pose-Verfeinerung)MSA-Erzeugung → Protein-Ligand-Cofolding(KI-Strukturvorhersage)
- Verwenden Sie Webhooks für langlebige Kampagnen (>50 Workflows) oder asynchrone Pipelines
- Verwenden Sie Streaming für interaktives Feedback bei großen Konformer-/Docking-Suchen
Zusammenfassung
Verwenden Sie Rowan, wenn Ihr Workflow Cloud-Ausführung für molekulare Design-Aufgaben erfordert, insbesondere wenn Sie eine einheitliche API und konsistente Ergebnisbehandlung über Kleinmolekülmodellierung, Proteine, Docking, ADME-Vorhersage und ML-Strukturerzeugung hinweg wünschen.
Rowan ist eine Workflow-Plattform für molekulares Design, nicht nur eine reine Remote-Chemie-Engine. Sie kümmert sich um die Skalierung der Infrastruktur, das dauerhafte Speichern von Ergebnissen und die Orchestrierung mehrstufiger Pipelines, sodass Sie sich auf die Wissenschaft konzentrieren können.