Skip to content

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 deformation
  • WHAM converged = False — insufficient sampling; ΔG_ads unreliable
  • native_contact_retention < 0.70 — extensive structural disruption

These flags do not invalidate the run but indicate where extra care is needed in interpretation.