Overview
SimAtomic provides a complete computational pipeline for solvated protein, protein-ligand and protein-protein interaction studies, from molecular dynamics simulations through rigorous ensemble analysis to final binding free energy calculations.
SIMULATION
Stage 1
ANALYSIS
Stage 2
MM-PBSA
Stage 3
| Stage | Purpose |
|---|---|
| Simulation | Run molecular dynamics to generate conformational ensembles |
| Analysis | Cluster trajectories to identify distinct conformational states and select n representative structures |
| MM-PBSA | Calculate binding free energies on the filtered subset for accurate affinity estimation |
This approach ensures your binding energy calculations capture the full conformational diversity of the system rather than relying on a single snapshot.
Quick Start
1. Install the Client
pip install requests pyyaml
Copy simatomic_client.py to your working directory.
2. Initialize the Client
from simatomic_client import SimAtomicClient, get_configs, create_input_zip
client = SimAtomicClient(api_key="YOUR_API_KEY")
3. Load Configuration
config_map = dict(zip(
["mmpbsa", "analysis", "simulation"],
get_configs("config.yaml")
))
Stage 1: Molecular Dynamics Simulation
Input
A zip file containing your prepared structure (PDB format).
Output
Trajectory files, energy-minimized structure, and topology files.
# Submit simulation job
job_id = client.run_job("my_complex_simulation_input.zip", config_map["simulation"])
# Poll until complete
results, _ = client.poll_job(job_id)
if results['job_status'] == "success":
client.download_results(job_id)
Key Parameters
Configure these in config.yaml:
md_steps— Number of simulation stepsintegrator_temperature— Simulation temperature (K)md_save_interval— How often frames are saved
Stage 2: Ensemble Analysis
Input
Create from simulation results:
analysis_zip = create_input_zip(
"results_<job_id>.zip", # Your simulation results
job_id,
"analysis"
)
Output
Interactive HTML dashboard showing clusters, representative structures, and trajectory metrics.
# Submit analysis job
analysis_job_id = client.run_job(analysis_zip, config_map["analysis"])
# Poll and download
results, _ = client.poll_job(analysis_job_id)
if results['job_status'] == "success":
client.download_results(analysis_job_id)
Key Parameters
atom_selection— Atoms used for structural comparison (e.g., "name CA" for alpha carbons)tica_lag_time— Time lag for kinetic analysismin_cluster_size— Minimum structures per cluster
Stage 3: MM-PBSA Binding Free Energy
Input
mmpbsa_zip = create_input_zip(
"results_<job_id>.zip", # Your simulation results
job_id,
"mmpbsa"
)
Output
Binding free energy values with statistical measures (mean, standard deviation across the ensemble).
# Submit MM-PBSA job
mmpbsa_job_id = client.run_job(mmpbsa_zip, config_map["mmpbsa"])
# Poll and download
results, _ = client.poll_job(mmpbsa_job_id)
if results['job_status'] == "success":
client.download_results(mmpbsa_job_id)
Key Parameters
igb— Generalized Born solvation model (5 or 8 recommended for protein-protein interactions)use_decomp— Enable per-residue energy decomposition
API Reference
Endpoints
Submit a new simulation job
Request Body
file— Input zip file (multipart/form-data)config— Job configuration object
Get job status and results
Response
job_id— Unique job identifierjob_status— Current status (queued, running, success, failed)message— Status message or error details
Download result files
Submit ensemble analysis job
Submit MM-PBSA calculation
Job Status
Jobs progress through these states:
| Status | Meaning |
|---|---|
queued |
Job submitted, waiting to start |
running |
Job is processing |
success |
Job completed successfully |
failed |
Job encountered an error |
Input File Requirements
Simulation Input
Your input zip should contain:
- Protein structure file (PDB format)
- Ligand parameters (if applicable)
Analysis/MM-PBSA Input
Use create_input_zip() to automatically extract the required files from simulation
results:
- Trajectory (
.xtc) - Energy-minimized structure (
emin.pdb) - Topology files
Complete Example
import time
from simatomic_client import SimAtomicClient, get_configs, create_input_zip
# Initialize
client = SimAtomicClient(api_key="YOUR_API_KEY")
config_map = dict(zip(["mmpbsa", "analysis", "simulation"], get_configs("config.yaml")))
def wait_for_job(job_id):
"""Poll until job completes."""
while True:
results, _ = client.poll_job(job_id)
status = results['job_status']
if status == "success":
client.download_results(job_id)
return True
elif status == "failed":
print(f"Job failed: {results.get('message')}")
return False
time.sleep(90)
# Stage 1: Simulation
sim_job_id = client.run_job("complex_simulation_input.zip", config_map["simulation"])
wait_for_job(sim_job_id)
# Stage 2: Analysis (prepare input from simulation results)
analysis_zip = create_input_zip(f"results_{sim_job_id}.zip", sim_job_id, "analysis")
analysis_job_id = client.run_job(analysis_zip, config_map["analysis"])
wait_for_job(analysis_job_id)
# Stage 3: MM-PBSA (prepare input from simulation results)
mmpbsa_zip = create_input_zip(f"results_{sim_job_id}.zip", sim_job_id, "mmpbsa")
mmpbsa_job_id = client.run_job(mmpbsa_zip, config_map["mmpbsa"])
wait_for_job(mmpbsa_job_id)
print("Pipeline complete!")
Configuration Reference
Simulation Config
simulation:
md_steps: 500000
integrator_temperature: 300
md_save_interval: 1000
pressure: 1.0
nonbonded_cutoff: 1.0
Analysis Config
analysis:
atom_selection: "name CA"
tica_lag_time: 10
min_cluster_size: 50
n_representatives: 20
MM-PBSA Config
mmpbsa:
igb: 5
use_decomp: true
saltcon: 0.15
Support
For API keys, technical support, or questions about your results, contact the SimAtomic team.