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