Output & Validation¶
After a successful run, all results are written to projects/<project_name>/<protein_name>/.
Output File Structure¶
projects/example/
└── Lysozyme/
├── adspro_result.html ← 3D interactive viewer (primary output)
├── logs/
│ ├── summary_report.txt ← Human-readable full summary
│ ├── summary.json ← Machine-readable results
│ ├── pmf_result.json ← Full PMF curve G(ξ)
│ ├── bond_report.csv ← Per-bond inventory (initial vs. final)
│ └── multi_run_results.json ← Multi-run statistics (if n_runs > 1)
└── working_files/
├── protein_grained_initial.json ← CG protein at start
└── protein_grained_final.json ← CG protein in adsorbed conformation
Primary Output: 3D HTML Viewer¶
Open adspro_result.html in any modern browser. It contains:
- Interactive 3D scene — NP sphere, protein initial position (transparent), protein adsorbed position (colored by residue type), backbone bonds
- Residue coloring — ARG (blue), LYS (cyan), ASP/GLU (red), HIS (orange), all others (gray)
- PMF panel — collapsible panel showing the G(ξ) curve with the ΔG_ads annotation
- Contact highlighting — residues within 0.6 nm of the surface are highlighted
No installation required — the viewer is self-contained (Three.js bundled).
summary_report.txt¶
The human-readable summary contains:
SIMULATION OUTCOME
Steps completed: 100,000 / 100,000
Convergence: No (max steps reached)
ENERGY SUMMARY
ΔG_ads (PMF/WHAM): -28.76 kJ/mol ← PRIMARY METRIC
WHAM converged: Yes
E_morse: -91.84 kJ/mol
ΔE_internal (Gō): +677.81 kJ/mol
ΔE_bonds: +565.67 kJ/mol
ΔΔG_solvation: +34.32 kJ/mol
VALIDATION OBSERVABLES
Contact residues: 31
Positive contacts: 9 (ARG/LYS/HIS)
Tilt angle: 51.07°
Native contact ret.: 73.5%
COM distance: 1.76 nm
summary.json Fields¶
| Field | Description |
|---|---|
pmf.delta_G_ads |
ΔG_ads (kJ/mol) — primary metric |
pmf.xi_min_nm |
COM distance at PMF minimum (nm) |
pmf.converged |
Whether WHAM converged |
e_morse_kJ_mol |
Morse adsorption energy at adsorbed conformation |
delta_e_internal_kJ_mol |
ΔE_Gō + ΔE_bonds upon adsorption |
delta_e_go_kJ_mol |
Change in Gō native contact energy |
delta_e_bonds_kJ_mol |
Change in bond inventory energy |
delta_sasa_nm2 |
Change in solvent-accessible surface area |
validation.tilt_angle_deg |
Angle between protein principal axis and surface normal |
validation.native_contact_retention |
Fraction of Gō contacts preserved (0–1) |
validation.contact_residues |
List of residue indices within 0.6 nm of surface |
validation.com_distance_nm |
Final COM distance from NP surface |
pmf_result.json¶
Contains the full PMF curve:
{
"xi_nm": [1.76, 1.93, 2.11, ...],
"G_kJ_mol": [-28.76, -26.4, -22.1, ...],
"delta_G_ads": -28.76,
"xi_min_nm": 1.649,
"converged": true,
"n_wham_iter": 436
}
Plot the PMF:
import json
import matplotlib.pyplot as plt
with open("projects/example/Lysozyme/logs/pmf_result.json") as f:
pmf = json.load(f)
plt.plot(pmf["xi_nm"], pmf["G_kJ_mol"])
plt.xlabel("ξ (nm from surface)")
plt.ylabel("G (kJ/mol)")
plt.axhline(0, color='gray', linestyle='--')
plt.title(f"PMF — ΔG_ads = {pmf['delta_G_ads']:.1f} kJ/mol")
plt.show()
multi_run_results.json (n_runs > 1)¶
{
"n_runs": 3,
"delta_G_all": [-28.4, -31.2, -29.7],
"delta_G_mean": -29.77,
"delta_G_sd": 1.41,
"delta_G_median": -29.7,
"selected_run": 3
}
The selected_run is the one whose ΔG_ads is closest to the median — robust to outliers.
Interpreting ΔG_ads¶
| ΔG_ads (kJ/mol) | Interpretation |
|---|---|
| > 0 | Unfavorable — does not adsorb spontaneously |
| 0 to −10 | Weakly adsorbing — reversible |
| −10 to −40 | Moderate — typical for globular proteins |
| −40 to −100 | Strong — likely irreversible |
| < −100 | Very strong — hard corona component |
WHAM convergence
ΔG_ads is only reliable when converged = true. If WHAM does not converge, increase steps_per_window (minimum 200,000 for production) and/or reduce k_window.
Interpreting Structural Observables¶
Native Contact Retention¶
The fraction of Gō contact pairs that remain within 1.2 × r_0 in the adsorbed state.
| Value | Interpretation |
|---|---|
| > 0.85 | Structure largely preserved — near-native adsorption |
| 0.70 – 0.85 | Moderate deformation — some surface-induced restructuring |
| < 0.70 | Significant deformation — partial unfolding at interface |
For Lysozyme on silica at this NP size, values of 0.70–0.80 are typical — the protein distorts slightly to optimize ARG/LYS contacts with the surface.
ΔE_internal¶
The change in internal protein energy (Gō contacts + bond inventory) upon adsorption.
ΔE_internal > 0 is normal and expected. The protein pays an energetic cost to distort from its native conformation. The PMF correctly accounts for this through thermodynamic averaging — it is not a reason to distrust the ΔG_ads result.
Very large values (> 500 kJ/mol) indicate significant structural deformation, which a reliability flag will highlight in the summary.
Contact Residues¶
Lists residues within 0.6 nm of any surface bead. For a silica surface (ζ < 0), look for ARG and LYS in this list — their presence confirms charge-complementary binding and validates the simulation physics.
Tilt Angle¶
The angle between the protein principal axis and the outward surface normal. A tilt angle near 0° means the protein "stands upright" perpendicular to the surface; 90° means it lies flat.
Reliability Flags¶
AdsPro prints warning flags when:
|ΔE_internal| > 200 kJ/mol— significant protein deformationWHAM converged = False— insufficient sampling; ΔG_ads unreliablenative_contact_retention < 0.70— extensive structural disruption
These flags do not invalidate the run but indicate where extra care is needed in interpretation.