Docking@HOME System Architecture
┌─────────────────────────────────────────────────────────────────────────┐
│ USER INTERFACES │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Web Browser │ │ Terminal │ │ Python Scripts │ │
│ │ localhost: │ │ CLI │ │ (API calls) │ │
│ │ 8080 │ │ Commands │ │ │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │
│ │ │ │ │
└─────────┼───────────────────┼────────────────────────┼─────────────────┘
│ │ │
│ │ │
┌─────────▼───────────────────▼────────────────────────▼─────────────────┐
│ APPLICATION LAYER │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ FastAPI Web Server │ │
│ │ (gui.py) │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ REST API: WebSockets: Static Files: │ │
│ │ • POST /upload • /ws • HTML/CSS/JS │ │
│ │ • POST /api/jobs • Real-time • Embedded GUI │ │
│ │ • GET /api/jobs • Job updates • Responsive │ │
│ │ • GET /api/stats • Progress • Dashboard │ │
│ │ │ │
│ └────────────────────────────┬────────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────────▼───────────────────────────────────┐ │
│ │ Job Manager │ │
│ │ (server.py) │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ • Job Queue (asyncio.Queue) │ │
│ │ • Worker Tasks (2-4 concurrent) │ │
│ │ • Job Status Tracking │ │
│ │ • Statistics & Monitoring │ │
│ │ │ │
│ └────────────────────────────┬────────────────────────────────────┘ │
│ │ │
└───────────────────────────────┼────────────────────────────────────────┘
│
┌───────────────────────────────▼────────────────────────────────────────┐
│ EXECUTION LAYER │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ AutoDock Executor │ │
│ │ (server.py) │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 1. Find AutoDock executable │ │
│ │ 2. Generate DPF file │ │
│ │ 3. Run docking calculation │ │
│ │ 4. Parse DLG results │ │
│ │ 5. Extract energies & poses │ │
│ │ │ │
│ └──────────────────┬──────────────────┬───────────────────────────┘ │
│ │ │ │
│ ┌───────────▼────────┐ ┌────▼────────────────┐ │
│ │ AutoDock Found? │ │ AutoDock NOT Found? │ │
│ └───────────┬────────┘ └────┬────────────────┘ │
│ │ │ │
└─────────────────────┼──────────────────┼───────────────────────────────┘
│ │
┌────────────▼─────┐ ┌───────▼─────────┐
│ REAL MODE │ │ SIMULATION MODE │
└────────────┬─────┘ └───────┬─────────┘
│ │
┌─────────────────────▼──────────────────▼───────────────────────────────┐
│ COMPUTATION LAYER │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ Real AutoDock │ │ Simulation Engine │ │
│ ├──────────────────────────────┤ ├─────────────────────────────┤ │
│ │ │ │ │ │
│ │ ┌────────────────────────┐ │ │ • Fast execution (0.01s) │ │
│ │ │ autodock4 (CPU) │ │ │ • Realistic energies │ │
│ │ │ or │ │ │ • JSON results │ │
│ │ │ autodock_gpu (CUDA) │ │ │ • Perfect for testing │ │
│ │ └────────────────────────┘ │ │ │ │
│ │ ↓ │ └─────────────────────────────┘ │
│ │ ┌────────────────────────┐ │ │
│ │ │ GPU Acceleration │ │ │
│ │ │ (CUDPP Primitives) │ │ │
│ │ └────────────────────────┘ │ │
│ │ ↓ │ │
│ │ ┌────────────────────────┐ │ │
│ │ │ Genetic Algorithm │ │ │
│ │ │ Energy Calculations │ │ │
│ │ │ Pose Clustering │ │ │
│ │ └────────────────────────┘ │ │
│ │ ↓ │ │
│ │ ┌────────────────────────┐ │ │
│ │ │ DLG Output File │ │ │
│ │ │ • Binding energies │ │ │
│ │ │ • Poses & conformers │ │ │
│ │ │ • Cluster analysis │ │ │
│ │ └────────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────────┐
│ RESULTS STORAGE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ results/ │
│ ├── job_abc123/ │
│ │ ├── results.json (Parsed results) │
│ │ ├── docking.dpf (AutoDock parameters) │
│ │ ├── docking.dlg (AutoDock log/results) │
│ │ └── docking.glg (AutoDock general log) │
│ │ │
│ ├── job_def456/ │
│ │ └── ... │
│ │ │
│ └── uploads/ │
│ ├── ligand_xxx.pdbqt │
│ └── receptor_yyy.pdbqt │
│ │
└─────────────────────────────────────────────────────────────────────────┘
User Action (Upload files)
↓
GUI sends POST /upload
↓
Files saved to uploads/
↓
User clicks "Start Docking"
↓
GUI sends POST /api/jobs
↓
Job Manager creates job
↓
Job added to queue
↓
Worker picks up job
↓
AutoDock Executor runs
↓
┌───────────────────┐
│ Is AutoDock │
│ installed? │
└────────┬──────────┘
│
┌────┴────┐
│ │
Yes No
│ │
│ ┌────▼────────┐
│ │ Simulation │
│ │ Mode │
│ └────┬────────┘
│ │
│ ┌────▼────────────┐
│ │ Generate random │
│ │ realistic data │
│ └────┬────────────┘
│ │
┌───▼─────────▼───┐
│ Progress updates│
│ via WebSocket │
└────────┬────────┘
│
┌────▼────┐
│ Results │
│ ready │
└────┬────┘
│
GUI displays results
↓
User sees:
• Binding energies
• Poses
• Clusters
• Statistics
┌─────────────────────────────────────┐
│ FRONTEND │
├─────────────────────────────────────┤
│ HTML5 + CSS3 + JavaScript (Vanilla) │
│ WebSockets for real-time updates │
│ Responsive design (mobile-ready) │
└─────────────────────────────────────┘
↕
┌─────────────────────────────────────┐
│ BACKEND │
├─────────────────────────────────────┤
│ FastAPI (Python async framework) │
│ Uvicorn (ASGI server) │
│ WebSockets (bidirectional comms) │
│ Pydantic (data validation) │
└─────────────────────────────────────┘
↕
┌─────────────────────────────────────┐
│ COMPUTATION ENGINE │
├─────────────────────────────────────┤
│ AutoDock Suite 4.2.6 │
│ CUDPP (GPU primitives) │
│ Python asyncio (concurrency) │
└─────────────────────────────────────┘
↕
┌─────────────────────────────────────┐
│ DISTRIBUTED LAYER │
├─────────────────────────────────────┤
│ BOINC (volunteer computing) │
│ The Decentralized Internet SDK │
│ Cloud Agents (AI orchestration) │
└─────────────────────────────────────┘
Option 1: Localhost (Current Implementation)
[Your Computer]
↓
http://localhost:8080
↓
All processing local
[Central Server]
↓
http://server-ip:8080
↓
Multiple users connect
All jobs on one machine
Option 3: Distributed (Future)
[Master Server]
↓
Task Distribution
↙ ↓ ↘
[Worker 1] [Worker 2] [Worker 3]
↓ ↓ ↓
GPU Jobs GPU Jobs GPU Jobs
[Cloud Load Balancer]
↓
┌────────┼────────┐
↓ ↓ ↓
[Node 1] [Node 2] [Node 3]
↓ ↓ ↓
[DB] [Storage] [Cache]
1. User uploads ligand.pdbqt and receptor.pdbqt
↓
2. Files saved to uploads/ directory
↓
3. Job created with file paths
↓
4. AutoDock Executor generates DPF file
↓
5. DPF specifies:
- Ligand/receptor paths
- Grid box parameters
- Search parameters
- Output file path
↓
6. AutoDock runs using DPF
↓
7. Results written to DLG file
↓
8. Parser extracts:
- Binding energies
- Conformations
- RMSD values
- Cluster information
↓
9. Results converted to JSON
↓
10. Stored in results/job_id/
↓
11. Sent to GUI for display
↓
12. User downloads or views results
OpenPeer AI
Riemann Computing Inc.
Bleunomics
Andrew Magdy Kamal