Catalytic Triad Plugin Reference
For a step-by-step workflow, see Catalytic Triad Analysis: Quick Start.
Configuration Reference
Top-level plugin key in comparison.yaml:
plugins:
catalytic_triad:
name: "LipA_catalytic_triad"
description: "Ser-His-Asp catalytic triad"
threshold: 3.5
pairs:
- label: "Asp133-His156"
selection_a: "midpoint(protein and resid 133 and name OD1 OD2)"
selection_b: "protein and resid 156 and name ND1"
- label: "His156-Ser77"
selection_a: "protein and resid 156 and name NE2"
selection_b: "protein and resid 77 and name OG"
CatalyticTriadSettings fields
Field |
Type |
Default |
Description |
|---|---|---|---|
|
|
required |
Triad identifier saved in output files |
|
|
|
Human-readable triad description |
|
|
|
Contact cutoff in angstroms for each pair |
|
|
required |
Pair definitions used to compute distances and contacts |
TriadPair fields
Field |
Type |
Default |
Description |
|---|---|---|---|
|
|
required |
Pair label used in tables and JSON |
|
|
required |
First MDAnalysis selection |
|
|
required |
Second MDAnalysis selection |
Selection syntax
Syntax |
Description |
Example |
|---|---|---|
Standard |
MDAnalysis atom selection |
|
|
Geometric midpoint of selected atoms |
|
|
Center of mass of selected atoms |
|
Important
Use chain-aware selections. Residue IDs restart per chain in PolyzyMD systems,
so bare resid X selections can match non-protein atoms. Prefer
protein and resid X for catalytic residues.
Output Files
Triad outputs are written under each condition plus a comparison result:
comparison_workspace/
├── analysis/
│ └── <condition>/
│ └── catalytic_triad/
│ ├── run_1/
│ │ └── triad_LipA_catalytic_triad_eq100ns.json
│ ├── run_2/
│ │ └── triad_LipA_catalytic_triad_eq100ns.json
│ ├── run_3/
│ │ └── triad_LipA_catalytic_triad_eq100ns.json
│ └── aggregated/
│ └── triad_LipA_catalytic_triad_reps1-3_eq100ns.json
└── comparison/
└── catalytic_triad/
└── result.json
Per-replicate JSON structure
{
"analysis_type": "catalytic_triad",
"triad_name": "LipA_catalytic_triad",
"triad_description": "Ser-His-Asp catalytic triad...",
"threshold": 3.5,
"simultaneous_contact_fraction": 0.741,
"n_frames_simultaneous": 1482,
"sim_contact_sem": 0.082,
"sim_contact_correlation_time": 8542.5,
"sim_contact_n_independent": 12,
"pair_results": [
{
"pair_label": "Asp133-His156",
"mean_distance": 2.91,
"std_distance": 0.45,
"fraction_below_threshold": 0.932
},
{
"pair_label": "His156-Ser77",
"mean_distance": 4.07,
"std_distance": 1.10,
"fraction_below_threshold": 0.551
}
],
"n_frames_used": 2000,
"n_frames_total": 3000
}
Aggregated JSON structure
{
"analysis_type": "catalytic_triad_aggregated",
"n_replicates": 3,
"replicates": [1, 2, 3],
"overall_simultaneous_contact": 0.499,
"sem_simultaneous_contact": 0.273,
"per_replicate_simultaneous": [0.741, 0.512, 0.245],
"pair_results": [
{
"pair_label": "Asp133-His156",
"overall_mean": 3.09,
"overall_sem": 0.21,
"per_replicate_means": [2.91, 3.05, 3.31]
},
{
"pair_label": "His156-Ser77",
"overall_mean": 4.03,
"overall_sem": 1.07,
"per_replicate_means": [3.12, 4.00, 4.97]
}
]
}
Plot Types
Catalytic triad plots are generated by polyzymd compare plot-all.
Plot output |
Description |
|---|---|
|
Condition-level comparison of simultaneous contact (%) |
|
Per-pair mean distances and uncertainty for one condition |
|
Per-pair fraction below threshold for one condition |
|
KDE of pair distance distributions for one condition |
|
2D KDE for two pair distances to inspect coupled geometry |
|
Combined summary panel for one condition |
Use top-level plot_settings in comparison.yaml to tune sizes, styles,
and output resolution for triad plots.
Common CLI Options
Option |
Default |
Description |
|---|---|---|
|
|
Path to comparison config |
|
from YAML defaults |
Equilibration time to skip |
|
off |
Ignore cached results and recompute |
|
|
Output format: |
|
off |
Suppress INFO logging |
|
off |
Enable DEBUG logging |
Use either plugin name:
polyzymd compare run triad -f comparison.yaml --eq-time 100ns
polyzymd compare run catalytic_triad -f comparison.yaml --eq-time 100ns
Troubleshooting
“No catalytic_triad section found”
Cause: plugins.catalytic_triad is missing from comparison.yaml
Fix: Add a complete catalytic_triad block with name, threshold, and
at least one pair in pairs
“Selection … returned 0 atoms”
Cause: Residue ID or atom name does not match the loaded topology
Fix:
Verify residue numbering in the topology used for analysis
Verify atom names (
OD1/OD2,ND1/NE2,OG)Use chain-aware selections like
protein and resid ...
Very high distances (> 10 Å)
Cause: Usually incorrect selections or mismatched residue numbering
Fix: Validate selections in VMD or PyMOL and confirm the exact residues
Very low simultaneous contact (< 10%)
Cause: Could be a genuine disrupted triad or a too-strict threshold
Fix:
Inspect pair-level fractions to identify the limiting pair
Re-check selections
If scientifically justified, test a slightly larger threshold (for example 4.0 Å)
“Low statistical reliability” warning
Cause: Long autocorrelation time relative to trajectory length
Fix: Informational warning only. Prefer more replicates and/or longer simulations for tighter uncertainty
“Skipping replicate N: trajectory data not found”
Cause: Replicate output is missing or path mapping is incorrect
Fix: Analysis continues with available data. Verify simulation completion and project paths if this is unexpected