|
|
|
|
|
"""
|
|
|
Example: Using Docking@HOME Python API
|
|
|
|
|
|
Authors: OpenPeer AI, Riemann Computing Inc., Bleunomics, Andrew Magdy Kamal
|
|
|
"""
|
|
|
|
|
|
import asyncio
|
|
|
from pathlib import Path
|
|
|
import sys
|
|
|
|
|
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "python"))
|
|
|
|
|
|
from docking_at_home.cli import console
|
|
|
|
|
|
|
|
|
async def main():
|
|
|
"""Example workflow using Python API"""
|
|
|
|
|
|
console.print("[bold]Docking@HOME Python API Example[/bold]\n")
|
|
|
|
|
|
|
|
|
console.print("[cyan]Example 1: Submitting a docking job[/cyan]")
|
|
|
|
|
|
job_config = {
|
|
|
"ligand": "examples/data/ligand.pdbqt",
|
|
|
"receptor": "examples/data/receptor.pdbqt",
|
|
|
"num_runs": 100,
|
|
|
"use_gpu": True,
|
|
|
"distributed": False
|
|
|
}
|
|
|
|
|
|
console.print(f"Configuration: {job_config}")
|
|
|
job_id = "EXAMPLE_JOB_001"
|
|
|
console.print(f"Job ID: {job_id}\n")
|
|
|
|
|
|
|
|
|
console.print("[cyan]Example 2: Monitoring job progress[/cyan]")
|
|
|
|
|
|
progress_info = {
|
|
|
"status": "running",
|
|
|
"progress": 0.65,
|
|
|
"runs_completed": 65,
|
|
|
"total_runs": 100,
|
|
|
"time_elapsed": 120.5,
|
|
|
"estimated_completion": 185.0
|
|
|
}
|
|
|
|
|
|
console.print(f"Status: {progress_info['status']}")
|
|
|
console.print(f"Progress: {progress_info['progress']*100:.1f}%")
|
|
|
console.print(f"Time elapsed: {progress_info['time_elapsed']:.1f}s\n")
|
|
|
|
|
|
|
|
|
console.print("[cyan]Example 3: Analyzing results[/cyan]")
|
|
|
|
|
|
results = {
|
|
|
"job_id": job_id,
|
|
|
"total_poses": 100,
|
|
|
"unique_clusters": 12,
|
|
|
"best_binding_energy": -8.45,
|
|
|
"top_poses": [
|
|
|
{"rank": 1, "energy": -8.45, "rmsd": 0.85},
|
|
|
{"rank": 2, "energy": -8.23, "rmsd": 1.12},
|
|
|
{"rank": 3, "energy": -7.98, "rmsd": 1.45},
|
|
|
{"rank": 4, "energy": -7.76, "rmsd": 1.89},
|
|
|
{"rank": 5, "energy": -7.54, "rmsd": 2.01},
|
|
|
]
|
|
|
}
|
|
|
|
|
|
console.print(f"Total poses generated: {results['total_poses']}")
|
|
|
console.print(f"Unique clusters: {results['unique_clusters']}")
|
|
|
console.print(f"Best binding energy: {results['best_binding_energy']} kcal/mol")
|
|
|
|
|
|
console.print("\n[bold]Top 5 poses:[/bold]")
|
|
|
for pose in results['top_poses']:
|
|
|
console.print(
|
|
|
f" Rank {pose['rank']}: "
|
|
|
f"Energy = {pose['energy']:.2f} kcal/mol, "
|
|
|
f"RMSD = {pose['rmsd']:.2f} Å"
|
|
|
)
|
|
|
|
|
|
|
|
|
console.print("\n[cyan]Example 4: AI-powered task optimization[/cyan]")
|
|
|
|
|
|
try:
|
|
|
from src.cloud_agents.orchestrator import CloudAgentsOrchestrator, Task, ComputeNode
|
|
|
|
|
|
orchestrator = CloudAgentsOrchestrator()
|
|
|
await orchestrator.initialize()
|
|
|
|
|
|
|
|
|
node1 = ComputeNode(
|
|
|
node_id="node_gpu_01",
|
|
|
cpu_cores=16,
|
|
|
gpu_available=True,
|
|
|
gpu_type="RTX 3090",
|
|
|
memory_gb=64
|
|
|
)
|
|
|
|
|
|
orchestrator.register_node(node1)
|
|
|
|
|
|
|
|
|
task = Task(
|
|
|
task_id="task_001",
|
|
|
ligand_file="ligand.pdbqt",
|
|
|
receptor_file="receptor.pdbqt",
|
|
|
priority="high"
|
|
|
)
|
|
|
|
|
|
orchestrator.submit_task(task)
|
|
|
|
|
|
|
|
|
stats = orchestrator.get_system_statistics()
|
|
|
console.print(f"Active nodes: {stats['active_nodes']}")
|
|
|
console.print(f"GPU nodes: {stats['gpu_nodes']}")
|
|
|
console.print(f"Total tasks: {stats['total_tasks']}")
|
|
|
|
|
|
except ImportError:
|
|
|
console.print("[yellow]Cloud Agents module not available[/yellow]")
|
|
|
|
|
|
console.print("\n[bold green]Example completed successfully![/bold green]")
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
asyncio.run(main())
|
|
|
|