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