Tutorial: Measure Polymer Shielding with SASA
This tutorial walks through one guided SASA (Solvent Accessible Surface Area) workflow: compare an enzyme without polymer to polymer-conjugated conditions and interpret whether the polymer shields the protein surface.
By the end, you will have:
configured paired SASA runs for an isolated and polymer-aware protein surface,
run the
sasaanalysis plugin on a comparison study,checked the expected output files, and
interpreted the main shielding signal in the comparison plots.
For task recipes, use SASA Analysis: Quick Start. For field and artifact lookup, use SASA Plugin Reference.
Prerequisites
Before starting, make sure you have:
a working PolyzyMD pixi environment,
completed production trajectories for at least two conditions,
a
comparison.yamlwith those conditions, andthe PolyzyMD chain convention in mind: A = protein, B = substrate, C = polymer, D+ = solvent/ions/other.
If you have not run a comparison analysis before, complete Tutorial: Run Your First Analysis first.
What SASA will tell us
SASA reports how much molecular surface is accessible to solvent. The SASA plugin lets each run define two selections:
Selection |
Role in this tutorial |
|---|---|
|
the atoms whose SASA is reported |
|
the atoms allowed to block the target surface |
The shielding idea is simple:
Compute protein SASA with only protein atoms in the context.
Compute protein SASA with protein plus polymer atoms in the context.
Compare the two values.
If the polymer-aware run has lower protein SASA, the polymer is shielding part of the protein surface.
Step 1: Add paired SASA runs
Add a sasa section to your comparison.yaml under plugins:.
plugins:
sasa:
runs:
- label: "protein_isolated"
target_selection: "protein"
context_selection: "protein"
- label: "protein_with_polymer"
target_selection: "protein"
context_selection: "protein or chainid C"
probe_radius_nm: 0.14
n_sphere_points: 960
The first run is the baseline. The second run lets the polymer on chain C block protein surface points.
Tip
For a no-polymer control condition, protein_with_polymer should be nearly the
same as protein_isolated because there are no chain C atoms. Treat this as a
useful consistency check.
Step 2: Use the runs in a comparison file
Here is a minimal two-condition example. Replace the config paths and labels with your own completed simulations.
name: "calb_sasa_shielding"
description: "SASA shielding tutorial"
control: "No Polymer"
conditions:
- label: "No Polymer"
config: "../no_polymer/config.yaml"
replicates: [1, 2, 3]
- label: "With Polymer"
config: "../with_polymer/config.yaml"
replicates: [1, 2, 3]
defaults:
equilibration_time: "10ns"
plugins:
sasa:
runs:
- label: "protein_isolated"
target_selection: "protein"
context_selection: "protein"
- label: "protein_with_polymer"
target_selection: "protein"
context_selection: "protein or chainid C"
probe_radius_nm: 0.14
n_sphere_points: 960
plot_settings:
format: "png"
dpi: 300
style: "compact"
Step 3: Run the SASA analysis
Run the plugin from the directory containing comparison.yaml:
pixi run -e build polyzymd compare run sasa -f comparison.yaml
PolyzyMD computes each replicate, aggregates results by condition, compares the conditions, and writes plots.
Note
SASA can be slower than RMSD or Rg because each frame must evaluate surface points around atoms in the context selection. For large studies, use the SLURM workflow in How To: Submit Analysis Jobs to a SLURM Cluster rather than copying HPC commands from this tutorial.
Step 4: Check that the run succeeded
You should see these outputs:
analysis/<condition>/sasa/run_<replicate>/result.json
analysis/<condition>/sasa/aggregated/result.json
comparison/sasa/result.json
figures/sasa/
The comparison file is the first place to check after a successful run:
python - <<'PY'
import json
from pathlib import Path
result = json.loads(Path("comparison/sasa/result.json").read_text())
print(result["run_labels"])
for condition in result["conditions"]:
print(condition["label"])
for run in condition["run_summaries"]:
print(f" {run['label']}: {run['mean_sasa']:.1f} ± {run['sem_sasa']:.1f} A^2")
PY
Success looks like one summary for each condition and one entry for each SASA run label.
Step 5: Interpret the shielding signal
Start with the protein_isolated run. It asks whether the protein itself has a
similar accessible surface across conditions before polymer blocking is counted.
Large differences here can mean the protein compactness or conformation differs
between conditions.
Then inspect protein_with_polymer. In polymer conditions, a lower mean SASA
relative to the no-polymer control is the main shielding signal.
The strongest evidence for polymer shielding is:
protein_isolatedremains similar across conditions, andprotein_with_polymerdecreases in polymer-conjugated conditions.
You can also compare the two runs within a polymer condition:
shielded area = protein_isolated mean - protein_with_polymer mean
A larger positive difference indicates that more protein surface is blocked by the polymer context.
Step 6: Use the plots
Open the SASA plots in the configured plot output directory, usually
figures/sasa/. The most useful first checks are:
sasa_comparison_protein_with_polymer.png— mean SASA by condition, with replicate scatter points.sasa_normalized_comparison_protein_with_polymer.png— percent change for each non-control condition relative to the configured control.
Negative normalized values indicate lower SASA than the control, which is
consistent with shielding for this tutorial’s protein_with_polymer run.
What you have now
You have completed a guided SASA shielding analysis and can now answer:
Did the polymer reduce protein solvent-accessible surface area?
Was the reduction specific to the polymer-aware context?
Which plots should you inspect first for replicate consistency and effect direction?
Next steps
Use SASA Analysis: Quick Start for active-site, monomer-specific, stride, and quick-command recipes.
Use SASA Plugin Reference for settings, canonical artifact paths, plot filenames, and programmatic artifact loading.
Use How To: Submit Analysis Jobs to a SLURM Cluster when the SASA workload needs SLURM.