diff --git a/CONTEXT.md b/CONTEXT.md
index 50d3e9f9..7c48c808 100644
--- a/CONTEXT.md
+++ b/CONTEXT.md
@@ -577,6 +577,14 @@ _Avoid_: shap_mode, use_shap, sample_plot.
The strategy `ShapModel.fit` selects to turn a soft label `p` ∈ (0, 1) into a SHAP estimate when **fuzzy labeling** is active. `"interpolate"` (default, new in v1.1) fits the model twice (fuzzy sample at 0 → `S0`, at 1 → `S1`) and blends `p·S1 + (1−p)·S0` — the **unbiased** exact-`p` estimate. `"threshold"` (the `Breimann25` sweep) hard-labels the fuzzy sample `1` across a non-uniform `n_rounds × n_selection` grid and averages — a **biased** approximation whose effective positive-fraction is the grid's `frac1`, not `p`; kept as a first-class option. Each fuzzy protein is explained independently against the fixed balanced 0/1 **core**, with the other fuzzy proteins excluded from that run's training data. `n_rounds` (default `5`) is interpolate's speed/stability dial: `1` = fast exact two-fit estimate, `5` = light averaging, `≈15–20` = converged Monte-Carlo mean (run-to-run spread <5% on `DOM_GSEC`).
_Avoid_: fuzzy mode, blend mode, soft-label aggregation.
+**CPPStructurePlot**:
+Public **pro** plotting class in `aaanalysis/feature_engineering_pro/` (abbr `csp`) that paints per-residue CPP / CPP-SHAP **feature impact** onto a 3D protein structure. Its single method `map_structure(df_feat, pdb=…|uniprot=…)` maps each feature to the residues it spans (`get_positions_`, shifted to absolute residue numbers by `start`) and aggregates `col_imp` per residue with the **same normalized-sum** `CPPPlot.profile` uses — never a re-implemented per-position loop. It **reuses** the shared CPP position backend and the `StructurePreprocessor` structure parser (no duplication; a thin chain-by-id Cα/pLDDT extractor is the only new structure code). Modes: `"impact"` (white→`COLOR_SHAP_POS`/`COLOR_SHAP_NEG` ramp with a `sign·sqrt` perceptual transform) and `"plddt"` (AlphaFold confidence palette); focus `"whole"`/`"fade"`/`"zoom"`. Returns a [[StructureView]]. The structure-side companion to `CPPPlot` for the **CPP-SHAP analysis** level.
+_Avoid_: structure_plot, plot_structure (the verb-noun method is `map_structure`), CPPStructure (it is a plot class, suffix `Plot`).
+
+**StructureView**:
+The thin return wrapper of [[CPPStructurePlot]]`.map_structure`, exposing a **uniform** `show()` / `write_html(path)` / `savefig(path)` / `_repr_html_` surface over its two render backends (interactive `py3Dmol` and static matplotlib `mplot3d`) whose native objects (`py3Dmol.view` vs `Figure`) are otherwise incompatible. A **pure delegator** — no rendering logic, no state beyond the backend object and the mapped `dict_impact` / `max_abs`. The package's first non-`Axes` plotting return type, a deliberate, documented exception to the "return fig/ax" rule (`savefig` is matplotlib-only; `write_html` is the py3Dmol shareable-interactive output).
+_Avoid_: view wrapper, plot handle (it is specifically the structure-render delegator), figure (it is not a matplotlib Figure).
+
### Scale-set vocabulary
**explainable scale set** (`top_explain_n`):
diff --git a/aaanalysis/__init__.py b/aaanalysis/__init__.py
index 41e71a99..25d35953 100644
--- a/aaanalysis/__init__.py
+++ b/aaanalysis/__init__.py
@@ -80,7 +80,7 @@
# the ImportError's ``.name`` (reliable for ModuleNotFoundError on the Python 3.11+ floor), never on a
# substring of the message. See .claude/rules/pro-core-boundary.md.
_EXTRA_MODULES = {
- "pro": {"shap", "Bio", "biopython", "upsetplot", "UpSetPlot", "requests", "afragmenter"},
+ "pro": {"shap", "Bio", "biopython", "upsetplot", "UpSetPlot", "requests", "afragmenter", "py3Dmol"},
"embed": {"torch", "transformers", "sentencepiece", "huggingface_hub"},
"dev": {"IPython"},
}
@@ -171,6 +171,15 @@ def missing_feature_stub(feature_name, error, mode="pro"):
"AnnotationPreprocessor", e, mode="pro")
+try:
+ from .feature_engineering_pro import CPPStructurePlot
+ __all__.append("CPPStructurePlot")
+except ImportError as e:
+ CPPStructurePlot = None
+ globals()["CPPStructurePlot"] = missing_feature_stub(
+ "CPPStructurePlot", e, mode="pro")
+
+
try:
from .show_html import display_df
__all__.append("display_df")
diff --git a/aaanalysis/_constants.py b/aaanalysis/_constants.py
index 0e109386..b5671a28 100644
--- a/aaanalysis/_constants.py
+++ b/aaanalysis/_constants.py
@@ -488,6 +488,24 @@ def _folder_path(super_folder, folder_name):
"SAMPLES_REL_NEG": COLOR_REL_NEG
}
+# pLDDT confidence palette (AlphaFold-DB), ordered low -> high confidence. Read
+# high -> low it is the familiar blue -> cyan -> yellow -> orange ramp used to
+# paint per-residue AlphaFold model confidence onto a structure.
+COLOR_PLDDT_VERY_LOW = '#FF7D45' # orange, pLDDT < 50
+COLOR_PLDDT_LOW = '#FFDB13' # yellow, 50 <= pLDDT < 70
+COLOR_PLDDT_CONFIDENT = '#65CBF3' # cyan, 70 <= pLDDT < 90
+COLOR_PLDDT_VERY_HIGH = '#0053D6' # blue, pLDDT >= 90
+COLOR_STRUCT_MISSING = '#BFBFBF' # gray for residues without a mapped value
+
+# Continuous low -> high ramp consumed by the pLDDT structure colouring.
+LIST_COLOR_PLDDT = [COLOR_PLDDT_VERY_LOW, COLOR_PLDDT_LOW,
+ COLOR_PLDDT_CONFIDENT, COLOR_PLDDT_VERY_HIGH]
+
+DICT_COLOR_PLDDT = {"very_low": COLOR_PLDDT_VERY_LOW,
+ "low": COLOR_PLDDT_LOW,
+ "confident": COLOR_PLDDT_CONFIDENT,
+ "very_high": COLOR_PLDDT_VERY_HIGH}
+
DICT_COLOR_CAT = {"ASA/Volume": "tab:blue",
"Composition": "tab:orange",
"Conformation": "tab:green",
diff --git a/aaanalysis/data_handling_pro/_backend/struct_preproc/encode_pdb.py b/aaanalysis/data_handling_pro/_backend/struct_preproc/encode_pdb.py
index b0d6b3be..fe511511 100644
--- a/aaanalysis/data_handling_pro/_backend/struct_preproc/encode_pdb.py
+++ b/aaanalysis/data_handling_pro/_backend/struct_preproc/encode_pdb.py
@@ -135,6 +135,9 @@ def _align_atom_values_to_target(target_seq: str,
# II Main Functions
+# NOTE: load_structure / _collect_chain_residues / _resolve_best_chain are reused by
+# feature_engineering_pro.CPPStructurePlot (no duplication) — they are load-bearing
+# beyond StructurePreprocessor; keep their signatures and behaviour stable.
def load_structure(pdb_path):
"""Parse a PDB or mmCIF file and return a Bio.PDB Structure (quiet mode).
diff --git a/aaanalysis/feature_engineering_pro/__init__.py b/aaanalysis/feature_engineering_pro/__init__.py
new file mode 100644
index 00000000..5dfcfbae
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/__init__.py
@@ -0,0 +1,19 @@
+"""
+Pro feature-engineering plots: CPP feature impact on 3D structure (``pro`` extra).
+
+Public objects: CPPStructurePlot.
+Gated behind the ``pro`` extra (needs ``biopython``; ``py3Dmol`` for the
+interactive backend, with a matplotlib fallback otherwise). Paints the per-residue
+CPP / CPP-SHAP feature impact from a ``df_feat`` onto a protein structure, reusing
+the shared CPP position backend (``feature_engineering``) and the structure parser
+(``data_handling_pro``). Imported lazily from the top-level package and replaced by
+an install-hint stub when ``biopython`` is absent.
+
+See ``.claude/rules/pro-core-boundary.md`` for the pro/core boundary, ``CONTEXT.md``
+for domain terms (CPPStructurePlot, StructureView).
+"""
+from ._cpp_structure_plot import CPPStructurePlot
+
+__all__ = [
+ "CPPStructurePlot",
+]
diff --git a/aaanalysis/feature_engineering_pro/_backend/__init__.py b/aaanalysis/feature_engineering_pro/_backend/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/__init__.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/colors.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/colors.py
new file mode 100644
index 00000000..ebb4905d
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/colors.py
@@ -0,0 +1,85 @@
+"""
+This is a script for the backend colour ramps of the CPPStructurePlot class:
+the signed white->SHAP-red / white->SHAP-blue impact ramp (with the
+``sign * sqrt(|t|)`` perceptual transform that keeps faint impacts visible) and
+the AlphaFold-style pLDDT confidence ramp. All colours come from the ``ut``
+constants barrel; no hex is hardcoded here.
+"""
+import numpy as np
+import matplotlib.colors as mcolors
+
+import aaanalysis.utils as ut
+
+# White anchor of the signed impact ramp (a neutral, not a domain colour).
+_WHITE = "#FFFFFF"
+
+# Reuse the package's SHAP ramps (``sns.light_palette`` via ``plot_get_cmap_``) so the
+# 3D structure colours match CPPPlot.profile / feature_map exactly instead of a
+# divergent linear interpolation. Both go white (index 0) -> saturated (index 100).
+_N_RAMP = 101
+_RAMP_POS = [mcolors.to_hex(c) for c in
+ ut.plot_get_cmap_(cmap=ut.STR_CMAP_SHAP, n_colors=_N_RAMP, only_pos=True)]
+_RAMP_NEG = [mcolors.to_hex(c) for c in
+ ut.plot_get_cmap_(cmap=ut.STR_CMAP_SHAP, n_colors=_N_RAMP, only_neg=True)][::-1]
+
+
+# I Helper Functions
+def _lerp_hex(color_lo, color_hi, frac):
+ """Linearly interpolate between two colours in RGB; return a hex string."""
+ lo = np.asarray(mcolors.to_rgb(color_lo), dtype=np.float64)
+ hi = np.asarray(mcolors.to_rgb(color_hi), dtype=np.float64)
+ frac = float(np.clip(frac, 0.0, 1.0))
+ return mcolors.to_hex(lo + (hi - lo) * frac)
+
+
+# II Main Functions
+def perceptual_transform(t):
+ """Signed square-root transform ``sign(t) * sqrt(|t|)`` on ``t`` in ``[-1, 1]``.
+
+ Compresses large magnitudes and stretches small ones so faint but real
+ impacts stay visible; the sign is preserved and the output stays in
+ ``[-1, 1]``.
+ """
+ t = np.asarray(t, dtype=np.float64)
+ return np.sign(t) * np.sqrt(np.abs(t))
+
+
+def impact_to_hex(impact, max_abs, color_pos=None, color_neg=None):
+ """Map a signed impact to a hex colour on the white->SHAP-pos / white->SHAP-neg ramp.
+
+ ``impact`` is normalised by ``max_abs`` to ``[-1, 1]`` and passed through the
+ ``sign * sqrt`` transform to get a blend fraction in ``[0, 1]``. By default the
+ colour is read off the package SHAP ramp (so it matches the 2D CPP plots); a
+ custom ``color_pos`` / ``color_neg`` falls back to a white->colour interpolation.
+ Zero / non-finite impact and a non-positive ``max_abs`` map to white.
+ """
+ if max_abs is None or max_abs <= 0 or not np.isfinite(impact) or impact == 0:
+ return _WHITE
+ t = float(np.clip(impact / max_abs, -1.0, 1.0))
+ frac = float(np.sqrt(abs(t))) # |sign * sqrt(t)| -> blend fraction in [0, 1]
+ idx = int(round(frac * (_N_RAMP - 1)))
+ if t > 0:
+ return _RAMP_POS[idx] if color_pos is None else _lerp_hex(_WHITE, color_pos, frac)
+ return _RAMP_NEG[idx] if color_neg is None else _lerp_hex(_WHITE, color_neg, frac)
+
+
+def plddt_cmap():
+ """Continuous low->high pLDDT colormap built from the ``ut.LIST_COLOR_PLDDT`` ramp."""
+ return mcolors.LinearSegmentedColormap.from_list("plddt", ut.LIST_COLOR_PLDDT)
+
+
+def plddt_to_hex(plddt):
+ """Map a pLDDT value (0-100) to a hex colour; non-finite -> gray."""
+ if plddt is None or not np.isfinite(plddt):
+ return ut.COLOR_STRUCT_MISSING
+ frac = float(np.clip(plddt / 100.0, 0.0, 1.0))
+ return mcolors.to_hex(plddt_cmap()(frac))
+
+
+def color_for_residue(resi, dict_impact, max_abs, plddt, mode,
+ color_pos=None, color_neg=None):
+ """Resolve the colour of a single residue for ``mode`` ('impact' or 'plddt')."""
+ if mode == "plddt":
+ return plddt_to_hex(plddt)
+ return impact_to_hex(dict_impact.get(resi, 0.0), max_abs,
+ color_pos=color_pos, color_neg=color_neg)
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/mapping.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/mapping.py
new file mode 100644
index 00000000..758b153c
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/mapping.py
@@ -0,0 +1,69 @@
+"""
+This is a script for the backend feature->residue mapping of the CPPStructurePlot
+class. It reuses the shared CPP feature backend (``get_positions_`` +
+``get_df_pos_`` with the normalized-sum semantics) so the per-residue impact is
+identical to what the CPP profile / feature map show, never a re-implemented
+per-position loop.
+"""
+import numpy as np
+
+import aaanalysis.utils as ut
+# Shared CPP feature backend (the deliberately shared ``_backend/cpp/`` package,
+# registered as SHARED_BACKEND_SUBPKGS for feature_engineering).
+from aaanalysis.feature_engineering._backend.cpp.utils_feature import (
+ get_positions_, get_df_pos_)
+
+
+# I Helper Functions
+def _positions_union(feat_positions):
+ """Flatten the comma-separated position strings into a sorted list of ints."""
+ positions = set()
+ for pos_str in feat_positions:
+ if not pos_str:
+ continue
+ for p in str(pos_str).split(","):
+ if p != "":
+ positions.add(int(p))
+ return sorted(positions)
+
+
+# II Main Functions
+def compute_residue_impact(df_feat=None, col_imp=None, start=1, tmd_len=20,
+ jmd_n_len=10, jmd_c_len=10, col_cat=None):
+ """Map per-feature impact onto absolute residue numbers.
+
+ The feature positions are derived with the shared ``get_positions_`` helper
+ (so ``start`` shifts them to absolute residue numbers) and aggregated with
+ ``get_df_pos_(value_type="sum")``, which divides each feature's value by the
+ number of positions it spans before summing per position — the same
+ normalized-sum the CPP profile uses. Summing across scale categories yields
+ one signed impact per residue.
+
+ Returns
+ -------
+ dict_impact : dict
+ ``{resi: impact}`` for every residue in ``[start, stop]``.
+ max_abs : float
+ Maximum absolute per-residue impact (0.0 if none finite); used to
+ normalise the colour ramp.
+ positions_union : list of int
+ Sorted residue numbers actually spanned by ``df_feat`` (the auto window).
+ """
+ col_cat = ut.COL_CAT if col_cat is None else col_cat
+ df_feat = df_feat.copy()
+ features = df_feat[ut.COL_FEATURE].to_list()
+ feat_positions = get_positions_(features=features, start=start, tmd_len=tmd_len,
+ jmd_n_len=jmd_n_len, jmd_c_len=jmd_c_len)
+ df_feat[ut.COL_POSITION] = feat_positions
+ if col_cat not in df_feat.columns:
+ df_feat[col_cat] = "feature"
+ stop = start + jmd_n_len + tmd_len + jmd_c_len - 1
+ df_pos = get_df_pos_(df_feat=df_feat, col_cat=col_cat, col_val=col_imp,
+ value_type="sum", start=start, stop=stop)
+ # Rows = scale categories, columns = positions; sum to one value per residue.
+ series = df_pos.sum(axis=0)
+ dict_impact = {int(p): float(v) for p, v in series.items()}
+ finite = [abs(v) for v in dict_impact.values() if np.isfinite(v)]
+ max_abs = max(finite) if finite else 0.0
+ positions_union = _positions_union(feat_positions)
+ return dict_impact, max_abs, positions_union
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/render.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/render.py
new file mode 100644
index 00000000..342f9be8
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/render.py
@@ -0,0 +1,148 @@
+"""
+This is a script for the backend renderers of the CPPStructurePlot class: the
+interactive py3Dmol cartoon (per-residue ``setStyle`` colouring, optional impact-
+scaled sticks, fade / zoom focus) and the static matplotlib ``mplot3d`` Cα-scatter
+fallback. Both paint the same colour ramp and are wrapped by ``StructureView``.
+``py3Dmol`` is imported lazily so the matplotlib fallback works when it is absent.
+"""
+import numpy as np
+import matplotlib.pyplot as plt
+import matplotlib.colors as mcolors
+
+import aaanalysis.utils as ut
+from .colors import color_for_residue
+from .view import StructureView
+
+
+# I Helper Functions
+def py3dmol_available():
+ """Return ``True`` if the optional ``py3Dmol`` renderer is importable."""
+ try:
+ import py3Dmol # noqa: F401
+ return True
+ except ImportError:
+ return False
+
+
+# Stick radii (Angstrom) for impact residues, matching the deployed app: a visible
+# floor so every impact-carrying residue shows a stick, growing with |impact|.
+_STICK_MIN = 0.18
+_STICK_SPAN = 0.55
+_STICK_FLAT = 0.22
+
+
+def _stick_radius(impact, max_abs, size_by_impact):
+ """Stick radius (A) for an impact residue; 0 for zero / undefined impact.
+
+ With ``size_by_impact`` the radius floors at ``_STICK_MIN`` and grows with
+ ``|impact| / max_abs`` (so even faint impacts stay visible, like the app);
+ otherwise every impact residue gets a constant ``_STICK_FLAT`` stick.
+ """
+ if max_abs is None or max_abs <= 0 or not np.isfinite(impact) or impact == 0:
+ return 0.0
+ if not size_by_impact:
+ return _STICK_FLAT
+ return float(_STICK_MIN + _STICK_SPAN * min(1.0, abs(impact) / max_abs))
+
+
+def _read_structure_text(pdb_path):
+ """Read raw PDB / CIF text to feed py3Dmol's ``addModel``."""
+ fmt = "cif" if str(pdb_path).lower().endswith(".cif") else "pdb"
+ with open(str(pdb_path), "r", encoding="utf-8") as f:
+ return f.read(), fmt
+
+
+# II Main Functions
+def render_py3dmol(pdb_path, records, dict_impact, max_abs, mode,
+ focus, window_resis, size_by_impact, chain_id=None,
+ color_pos=None, color_neg=None, width=600, height=450):
+ """Build a py3Dmol cartoon view coloured per residue and wrap it in a StructureView.
+
+ ``addModel`` loads the whole (possibly multi-chain) structure, so every
+ per-residue ``setStyle`` / ``zoomTo`` selection is qualified by ``chain_id`` —
+ otherwise residue number 50 would be coloured on every chain that has one.
+ """
+ import py3Dmol
+ pdb_text, fmt = _read_structure_text(pdb_path)
+ view = py3Dmol.view(width=width, height=height)
+ view.addModel(pdb_text, fmt)
+ view.setStyle({}, {"cartoon": {"color": ut.COLOR_STRUCT_MISSING}})
+ present_resis = {res["resi"] for res in records}
+ for res in records:
+ resi = res["resi"]
+ color = color_for_residue(resi, dict_impact, max_abs, res["plddt"], mode,
+ color_pos=color_pos, color_neg=color_neg)
+ in_window = window_resis is None or resi in window_resis
+ cartoon = {"color": color}
+ if focus == "fade" and not in_window:
+ cartoon["opacity"] = 0.2
+ style = {"cartoon": cartoon}
+ if mode == "impact":
+ radius = _stick_radius(dict_impact.get(resi, 0.0), max_abs, size_by_impact)
+ if radius > 0:
+ style["stick"] = {"radius": radius, "color": color}
+ sel = {"resi": str(resi)}
+ if chain_id is not None:
+ sel["chain"] = chain_id
+ view.setStyle(sel, style)
+ # Only zoom to window residues that actually exist in the structure, else the
+ # camera silently fails to focus on an empty selection.
+ zoom_resis = sorted((window_resis or set()) & present_resis)
+ if focus == "zoom" and zoom_resis:
+ sel = {"resi": [str(r) for r in zoom_resis]}
+ if chain_id is not None:
+ sel["chain"] = chain_id
+ view.zoomTo(sel)
+ else:
+ view.zoomTo()
+ view.setBackgroundColor("white")
+ return StructureView(backend="py3dmol", view=view, dict_impact=dict_impact,
+ max_abs=max_abs, mode=mode)
+
+
+def render_mpl(records, dict_impact, max_abs, mode, focus, window_resis,
+ size_by_impact, color_pos=None, color_neg=None, figsize=(6, 6)):
+ """Build a matplotlib ``mplot3d`` Cα scatter coloured per residue; wrap as StructureView."""
+ fig = plt.figure(figsize=figsize)
+ ax = fig.add_subplot(111, projection="3d")
+ xs, ys, zs, rgba, sizes = [], [], [], [], []
+ win_coords = []
+ for res in records:
+ coord = res["coord"]
+ if not np.all(np.isfinite(coord)):
+ continue
+ resi = res["resi"]
+ color = color_for_residue(resi, dict_impact, max_abs, res["plddt"], mode,
+ color_pos=color_pos, color_neg=color_neg)
+ in_window = window_resis is None or resi in window_resis
+ alpha = 1.0 if (focus != "fade" or in_window) else 0.15
+ xs.append(coord[0])
+ ys.append(coord[1])
+ zs.append(coord[2])
+ rgba.append(mcolors.to_rgba(color, alpha=alpha))
+ size = 30.0
+ if mode == "impact":
+ radius = _stick_radius(dict_impact.get(resi, 0.0), max_abs, size_by_impact)
+ if radius > 0:
+ size = 30.0 + 300.0 * radius # radius ~0.18..0.73 -> marker ~84..249
+ sizes.append(size)
+ if in_window:
+ win_coords.append(coord)
+ if xs:
+ # Backbone trace plus the per-residue Cα scatter.
+ ax.plot(xs, ys, zs, color=ut.COLOR_STRUCT_MISSING, linewidth=0.8, alpha=0.6)
+ ax.scatter(xs, ys, zs, c=rgba, s=sizes, depthshade=False, edgecolors="none")
+ if focus == "zoom" and win_coords:
+ win = np.vstack(win_coords)
+ lo, hi = win.min(axis=0), win.max(axis=0)
+ pad = 0.1 * np.maximum(hi - lo, 1.0)
+ ax.set_xlim(lo[0] - pad[0], hi[0] + pad[0])
+ ax.set_ylim(lo[1] - pad[1], hi[1] + pad[1])
+ ax.set_zlim(lo[2] - pad[2], hi[2] + pad[2])
+ ax.set_xlabel("x")
+ ax.set_ylabel("y")
+ ax.set_zlabel("z")
+ label = "pLDDT" if mode == "plddt" else "CPP feature impact"
+ ax.set_title(f"{label} on structure")
+ return StructureView(backend="mpl", fig=fig, ax=ax, dict_impact=dict_impact,
+ max_abs=max_abs, mode=mode)
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/structure.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/structure.py
new file mode 100644
index 00000000..538f5ebd
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/structure.py
@@ -0,0 +1,135 @@
+"""
+This is a script for the backend structure handling of the CPPStructurePlot class:
+pick the chain (explicit id, best match to a target sequence, or the first
+amino-acid chain) and extract per-residue Cα coordinates, **absolute** residue
+numbers, and pLDDT (the AlphaFold B-factor column).
+
+Parsing and best-chain selection are reused verbatim from the StructurePreprocessor
+backend (``load_structure`` / ``_collect_chain_residues`` / ``_resolve_best_chain``)
+rather than re-implemented — the only new code here is the thin chain-by-id
+Cα/pLDDT extractor, which the encoder backend does not expose because its encoders
+return sequence-aligned arrays that drop the absolute residue numbering this
+renderer needs.
+
+The top-level biopython import gates the whole CPPStructurePlot feature behind the
+``pro`` extra, matching the other ``*_pro`` subpackages.
+"""
+import numpy as np
+# Top-level biopython import: structure parsing has no fallback, so this is the
+# dependency that gates CPPStructurePlot behind the ``pro`` extra.
+from Bio.PDB.Polypeptide import protein_letters_3to1
+
+import aaanalysis.utils as ut
+# Reused (no duplication) from the StructurePreprocessor backend. These are
+# load-bearing beyond StructurePreprocessor — CPPStructurePlot depends on their
+# behaviour too; keep their contracts stable.
+from aaanalysis.data_handling_pro._backend.struct_preproc.encode_pdb import (
+ load_structure, _collect_chain_residues, _resolve_best_chain, _identity_fraction)
+
+
+# I Helper Functions
+def _residue_one_letter(residue):
+ """Return the 1-letter code for a residue, or 'X' if unknown."""
+ return protein_letters_3to1.get(residue.get_resname(), "X")
+
+
+def _ca_coord(residue):
+ """Return the residue's Cα coordinate as a ``(3,)`` array, NaN if absent."""
+ for atom in residue.get_atoms():
+ if atom.get_name() == "CA":
+ return np.asarray(atom.get_coord(), dtype=np.float64)
+ return np.array([np.nan, np.nan, np.nan])
+
+
+def _ca_plddt(residue):
+ """Return the residue's Cα B-factor (AlphaFold pLDDT); mean atom B-factor if no Cα."""
+ for atom in residue.get_atoms():
+ if atom.get_name() == "CA":
+ return float(atom.get_bfactor())
+ b_values = [atom.get_bfactor() for atom in residue.get_atoms()]
+ return float(np.mean(b_values)) if b_values else float("nan")
+
+
+def _records_from_residues(residues):
+ """Build ``{"resi", "coord", "plddt", "aa"}`` records from biopython residues.
+
+ ``residues`` is the ``[(residue, key)]`` form returned by
+ ``_collect_chain_residues`` / ``_resolve_best_chain``; ``resi`` is the
+ structure's absolute residue number (``residue.id[1]``).
+ """
+ records = []
+ for residue, _key in residues:
+ records.append({"resi": int(residue.id[1]),
+ "coord": _ca_coord(residue),
+ "plddt": _ca_plddt(residue),
+ "aa": _residue_one_letter(residue)})
+ return records
+
+
+def _chain_identity(residues, sequence):
+ """Sequence-match fraction of a chain's residues against ``sequence`` (1.0 if no seq)."""
+ if sequence is None:
+ return 1.0
+ atom_seq = "".join(_residue_one_letter(r) for r, _ in residues)
+ return _identity_fraction(sequence, atom_seq)
+
+
+def _select_chain_residues(structure, chain=None, sequence=None):
+ """Select a chain's residues: explicit id, best match to ``sequence``, or first.
+
+ Returns ``(residues, identity, chain_id)`` where ``residues`` is the
+ ``[(residue, key)]`` form, ``identity`` is the sequence-match fraction (1.0 when no
+ ``sequence`` is supplied), and ``chain_id`` is the selected chain's id (so the
+ renderer can qualify per-residue selections and not leak onto same-numbered
+ residues of other chains).
+ """
+ chains = _collect_chain_residues(structure)
+ if not chains:
+ raise ValueError("'pdb' (structure) should contain at least one "
+ "amino-acid chain")
+ if chain is not None:
+ for ch, residues in chains:
+ if ch.id == chain:
+ # Still score identity so a wrong explicit chain + sequence warns.
+ return residues, _chain_identity(residues, sequence), ch.id
+ available = [ch.id for ch, _ in chains]
+ raise ValueError(f"'chain' ('{chain}') should be one of the available "
+ f"chains {available}")
+ if sequence is not None:
+ ch, residues, _atom_seq, identity = _resolve_best_chain(structure, sequence)
+ if residues is None:
+ raise ValueError("'pdb' (structure) should contain at least one "
+ "amino-acid chain")
+ return residues, identity, ch.id
+ # Default: first amino-acid chain.
+ ch, residues = chains[0]
+ return residues, 1.0, ch.id
+
+
+# II Main Functions
+def extract_chain_residues(structure, chain=None, sequence=None):
+ """Extract per-residue records for the selected chain.
+
+ Returns
+ -------
+ records : list of dict
+ One ``{"resi": int, "coord": (3,) ndarray, "plddt": float, "aa": str}``
+ per amino-acid residue, in chain order; ``resi`` is the structure's
+ absolute residue number.
+ identity : float
+ Sequence-match fraction of the chosen chain (1.0 without ``sequence``).
+ chain_id : str
+ Id of the selected chain (qualifies per-residue rendering selections).
+ """
+ residues, identity, chain_id = _select_chain_residues(structure, chain=chain,
+ sequence=sequence)
+ return _records_from_residues(residues), identity, chain_id
+
+
+def residue_numbers(records):
+ """Return the set of absolute residue numbers present in ``records``."""
+ return {r["resi"] for r in records}
+
+
+# Re-export the reused parser so the frontend imports a single structure module.
+__all__ = ["load_structure", "extract_chain_residues", "residue_numbers"]
diff --git a/aaanalysis/feature_engineering_pro/_backend/cpp_struct/view.py b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/view.py
new file mode 100644
index 00000000..3c18240b
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_backend/cpp_struct/view.py
@@ -0,0 +1,100 @@
+"""
+This is a script for the backend StructureView wrapper of the CPPStructurePlot
+class: a thin, pure delegator that gives the interactive (py3Dmol) and static
+(matplotlib) renderers one uniform surface — ``show`` / ``write_html`` /
+``savefig`` / ``_repr_html_`` — so the return type of ``map_structure`` does not
+vary with the backend that fired.
+"""
+import base64
+import io
+
+
+# I Helper Functions
+def _figure_to_png_b64(fig):
+ """Render a matplotlib Figure to a base64-encoded PNG string."""
+ buffer = io.BytesIO()
+ fig.savefig(buffer, format="png", bbox_inches="tight")
+ buffer.seek(0)
+ return base64.b64encode(buffer.read()).decode("ascii")
+
+
+# II Main Functions
+class StructureView:
+ """Uniform handle over a py3Dmol view or a matplotlib Figure.
+
+ Returned by :meth:`CPPStructurePlot.map_structure`. A pure delegator: it
+ forwards ``show`` / ``write_html`` / ``savefig`` / ``_repr_html_`` to whichever
+ backend produced it and otherwise carries the mapped impact for inspection.
+
+ Attributes
+ ----------
+ backend : str
+ ``'py3dmol'`` or ``'mpl'``.
+ dict_impact : dict
+ ``{resi: impact}`` painted onto the structure.
+ max_abs : float
+ Normalisation constant for the impact ramp.
+ mode : str
+ ``'impact'`` or ``'plddt'``.
+ """
+
+ def __init__(self, backend, view=None, fig=None, ax=None,
+ dict_impact=None, max_abs=None, mode=None):
+ """Store the backend object and the mapped-impact metadata."""
+ self.backend = backend
+ self._view = view
+ self._fig = fig
+ self._ax = ax
+ self.dict_impact = dict_impact
+ self.max_abs = max_abs
+ self.mode = mode
+
+ @property
+ def fig(self):
+ """The matplotlib :class:`~matplotlib.figure.Figure` (``mpl`` backend only)."""
+ return self._fig
+
+ @property
+ def ax(self):
+ """The matplotlib :class:`~matplotlib.axes.Axes` (``mpl`` backend only)."""
+ return self._ax
+
+ @property
+ def view(self):
+ """The underlying ``py3Dmol`` view object (``py3dmol`` backend only)."""
+ return self._view
+
+ def show(self):
+ """Display the structure (py3Dmol viewer; the Figure for the mpl backend)."""
+ if self.backend == "py3dmol":
+ return self._view.show()
+ return self._fig
+
+ def write_html(self, path):
+ """Write a self-contained HTML file (py3Dmol export, or an embedded PNG for mpl)."""
+ path = str(path)
+ if self.backend == "py3dmol":
+ self._view.write_html(path)
+ return path
+ png_b64 = _figure_to_png_b64(self._fig)
+ html = (f"
"
+ f""
+ f"")
+ with open(path, "w", encoding="utf-8") as f:
+ f.write(html)
+ return path
+
+ def savefig(self, path, **kwargs):
+ """Save a static image (mpl backend only; py3Dmol exports via ``write_html``)."""
+ if self.backend == "mpl":
+ self._fig.savefig(str(path), **kwargs)
+ return str(path)
+ raise RuntimeError("'savefig' is only available for the matplotlib backend; "
+ "use 'write_html' for the py3Dmol backend")
+
+ def _repr_html_(self):
+ """Notebook rich display: the py3Dmol widget or an embedded PNG."""
+ if self.backend == "py3dmol":
+ return self._view._repr_html_()
+ png_b64 = _figure_to_png_b64(self._fig)
+ return f""
diff --git a/aaanalysis/feature_engineering_pro/_cpp_structure_plot.py b/aaanalysis/feature_engineering_pro/_cpp_structure_plot.py
new file mode 100644
index 00000000..65a1f4aa
--- /dev/null
+++ b/aaanalysis/feature_engineering_pro/_cpp_structure_plot.py
@@ -0,0 +1,316 @@
+"""
+This is a script for the frontend of the CPPStructurePlot class, painting
+per-residue CPP / CPP-SHAP feature impact onto a 3D protein structure.
+"""
+import os
+import tempfile
+import warnings
+from typing import Optional, List, Tuple, Union, Literal
+
+import pandas as pd
+
+import aaanalysis.utils as ut
+
+from ._backend.cpp_struct.mapping import compute_residue_impact
+from ._backend.cpp_struct.structure import (load_structure, extract_chain_residues,
+ residue_numbers)
+from ._backend.cpp_struct.render import (render_py3dmol, render_mpl,
+ py3dmol_available)
+from ._backend.cpp_struct.view import StructureView
+
+LIST_MODES = ["impact", "plddt"]
+LIST_FOCUS = ["whole", "fade", "zoom"]
+LIST_BACKENDS = ["py3dmol", "mpl"]
+
+
+# I Helper Functions
+def check_focus_region(focus_region=None):
+ """Validate ``focus_region``: ``None``, a ``(start, stop)`` tuple, or a list of them."""
+ if focus_region is None:
+ return None
+ ranges = [focus_region] if isinstance(focus_region, tuple) else focus_region
+ if not isinstance(ranges, list):
+ raise ValueError(f"'focus_region' ({focus_region}) should be a (start, stop) "
+ f"tuple or a list of such tuples")
+ for rng in ranges:
+ ut.check_tuple(name="focus_region range", val=rng, n=2, check_number=True)
+ if int(rng[0]) > int(rng[1]):
+ raise ValueError(f"'focus_region' range ({rng}) should have start <= stop")
+ return ranges
+
+
+def _resolve_window_resis(focus, focus_region, positions_union):
+ """Resolve the set of residues that define the focus window (None for 'whole')."""
+ if focus == "whole":
+ return None
+ if focus_region is None:
+ return set(positions_union)
+ ranges = [focus_region] if isinstance(focus_region, tuple) else focus_region
+ resis = set()
+ for start, stop in ranges:
+ resis.update(range(int(start), int(stop) + 1))
+ return resis
+
+
+def _resolve_backend(backend):
+ """Resolve the render backend; raise a friendly hint if py3Dmol is forced but absent."""
+ if backend == "py3dmol" and not py3dmol_available():
+ raise RuntimeError("backend='py3dmol' requires the optional 'py3Dmol' package; "
+ "install it via \"pip install 'aaanalysis[pro]'\" (or "
+ "\"pip install py3Dmol\"), or use backend='mpl'")
+ if backend is not None:
+ return backend
+ return "py3dmol" if py3dmol_available() else "mpl"
+
+
+# II Main Functions
+class CPPStructurePlot:
+ """
+ Plotting class for painting :class:`CPP` feature impact onto a 3D protein structure
+ (**[pro]**, requires ``aaanalysis[pro]``) [Breimann25]_.
+
+ The per-residue impact is the same normalized-sum that the :meth:`CPPPlot.profile` and
+ :meth:`CPPPlot.feature_map` show: each feature's signed impact is spread over the residue
+ positions it spans and summed per position, then painted residue-by-residue onto the protein
+ cartoon. A red-white-blue ramp shows where features raise (red) or lower (blue) the prediction;
+ an AlphaFold pLDDT mode shows per-residue model confidence instead.
+
+ The single method :meth:`CPPStructurePlot.map_structure` returns a ``StructureView`` — a
+ thin wrapper exposing a uniform ``show`` / ``write_html`` / ``savefig`` surface over the
+ interactive `py3Dmol `_ backend and the static matplotlib
+ fallback (which is used automatically when py3Dmol is absent or ``backend="mpl"``).
+
+ .. versionadded:: 1.1.0
+
+ Notes
+ -----
+ * The ``jmd_n_len`` and ``jmd_c_len`` values supplied at construction are stored as
+ ``_jmd_n_len`` and ``_jmd_c_len`` and reused by :meth:`map_structure`, mirroring
+ :class:`CPPPlot` so juxta-membrane domain (JMD) lengths stay consistent.
+ * This is a ``pro`` feature (needs ``biopython``; ``py3Dmol`` for the interactive backend).
+
+ """
+ def __init__(self,
+ jmd_n_len: int = 10,
+ jmd_c_len: int = 10,
+ df_scales: Optional[pd.DataFrame] = None,
+ verbose: bool = True
+ ):
+ """
+ Parameters
+ ----------
+ jmd_n_len : int, default=10
+ Length of JMD-N (>=0). Must match the value used when the features were generated.
+ jmd_c_len : int, default=10
+ Length of JMD-C (>=0). Must match the value used when the features were generated.
+ df_scales : pd.DataFrame, shape (n_letters, n_scales), optional
+ DataFrame of scales with letters typically representing amino acids. Stored for
+ consistency with :class:`CPPPlot`; not required for structure mapping.
+ verbose : bool, default=True
+ If ``True``, verbose outputs are enabled.
+
+ See Also
+ --------
+ * :class:`CPPPlot` : the group- and sample-level CPP result plots.
+ * :class:`ShapModel` : produces the sample-level ``feat_impact`` column painted here.
+ * :class:`StructurePreprocessor` : parses PDB / CIF / AlphaFold files and fetches AlphaFold models.
+
+ Examples
+ --------
+ .. include:: examples/csp_map_structure.rst
+ """
+ # Check input
+ verbose = ut.check_verbose(verbose)
+ jmd_n_len = ut.check_jmd_n_len(jmd_n_len=jmd_n_len)
+ jmd_c_len = ut.check_jmd_c_len(jmd_c_len=jmd_c_len)
+ if df_scales is not None:
+ ut.check_df(name="df_scales", df=df_scales)
+ # General settings
+ self._verbose = verbose
+ self._df_scales = df_scales
+ self._jmd_n_len = jmd_n_len
+ self._jmd_c_len = jmd_c_len
+
+ def map_structure(self,
+ df_feat: pd.DataFrame,
+ pdb: Optional[str] = None,
+ uniprot: Optional[str] = None,
+ col_imp: str = ut.COL_FEAT_IMPACT,
+ tmd_len: int = 20,
+ start: int = 1,
+ chain: Optional[str] = None,
+ sequence: Optional[str] = None,
+ mode: Literal["impact", "plddt"] = "impact",
+ focus: Literal["whole", "fade", "zoom"] = "whole",
+ focus_region: Optional[Union[Tuple[int, int], List[Tuple[int, int]]]] = None,
+ size_by_impact: bool = True,
+ backend: Optional[Literal["py3dmol", "mpl"]] = None,
+ ) -> StructureView:
+ """
+ Paint per-residue CPP feature impact onto a protein structure.
+
+ Each feature in ``df_feat`` is mapped to the residue positions it spans (shifted to
+ absolute residue numbers by ``start``) and its ``col_imp`` value is aggregated per
+ position by the normalized-sum used in :meth:`CPPPlot.profile`. The per-residue signed
+ impact is then painted onto the structure cartoon.
+
+ Parameters
+ ----------
+ df_feat : pd.DataFrame, shape (n_features, n_feature_info)
+ Feature DataFrame with a ``feature`` column and the signed per-feature impact column
+ ``col_imp`` (e.g. from :meth:`ShapModel.add_feat_impact` or :meth:`CPP.run`).
+ pdb : str, optional
+ Path to a ``.pdb`` / ``.cif`` structure file. Exactly one of ``pdb`` or ``uniprot``
+ must be given.
+ uniprot : str, optional
+ UniProt accession; the AlphaFold model is fetched from AlphaFold DB into a temporary
+ folder via :meth:`StructurePreprocessor.fetch_alphafold`. Exactly one of ``pdb`` or
+ ``uniprot`` must be given.
+ col_imp : str, default='feat_impact'
+ Column of ``df_feat`` holding the signed per-feature impact to paint.
+ tmd_len : int, default=20
+ Length of the TMD (>=1). Must match the value used when the features were generated.
+ start : int, default=1
+ Absolute residue number of the first JMD-N residue in the structure (>=0); shifts
+ window-relative feature positions onto the structure's residue numbering.
+ chain : str, optional
+ Chain id to render. Default selects the best-matching chain when ``sequence`` is
+ given, otherwise the first amino-acid chain.
+ sequence : str, optional
+ Full protein sequence; enables best-matching-chain selection (reusing the structure
+ backend's alignment) and a sanity check that ``start`` lines up with the structure.
+ mode : {'impact', 'plddt'}, default='impact'
+ ``'impact'`` paints the red-white-blue feature-impact ramp; ``'plddt'`` paints the
+ AlphaFold pLDDT confidence palette.
+ focus : {'whole', 'fade', 'zoom'}, default='whole'
+ ``'whole'`` styles every residue equally; ``'fade'`` ghosts residues outside the
+ window; ``'zoom'`` points the camera at the window.
+ focus_region : tuple or list of tuples, optional
+ ``(start, stop)`` residue range (or list of ranges) defining the focus window.
+ Default derives the window from the union of ``df_feat`` positions.
+ size_by_impact : bool, default=True
+ If ``True``, draw a stick whose radius (or marker size) is proportional to
+ ``|impact|`` (impact mode only).
+ backend : {'py3dmol', 'mpl'}, optional
+ ``'py3dmol'`` (interactive) or ``'mpl'`` (static). Default uses py3Dmol when
+ available, otherwise matplotlib.
+
+ Returns
+ -------
+ view : StructureView
+ A thin wrapper over the rendered view exposing ``show()``, ``write_html(path)``,
+ ``savefig(path)`` (matplotlib backend), and ``_repr_html_`` for inline display, plus
+ the mapped ``dict_impact`` / ``max_abs`` for inspection.
+
+ Notes
+ -----
+ ``tmd_len``, ``start``, ``jmd_n_len`` and ``jmd_c_len`` must match the geometry used when
+ the features were generated, otherwise the impact lands on the wrong residues.
+
+ Raises
+ ------
+ ValueError
+ On invalid arguments (e.g. an unknown ``mode`` / ``focus`` / ``backend``, neither or
+ both of ``pdb`` / ``uniprot``, a ``df_feat`` missing ``col_imp``, or an unknown ``chain``).
+ RuntimeError
+ If ``backend='py3dmol'`` is forced without py3Dmol installed, or an AlphaFold model
+ for ``uniprot`` cannot be fetched.
+
+ Examples
+ --------
+ .. include:: examples/csp_map_structure.rst
+ """
+ # Validate
+ ut.check_df(name="df_feat", df=df_feat, cols_required=[ut.COL_FEATURE, col_imp])
+ ut.check_str(name="col_imp", val=col_imp)
+ ut.check_number_range(name="tmd_len", val=tmd_len, min_val=1, just_int=True)
+ ut.check_number_range(name="start", val=start, min_val=0, just_int=True)
+ jmd_n_len = ut.check_jmd_n_len(jmd_n_len=self._jmd_n_len)
+ jmd_c_len = ut.check_jmd_c_len(jmd_c_len=self._jmd_c_len)
+ ut.check_str_options(name="mode", val=mode, list_str_options=LIST_MODES)
+ ut.check_str_options(name="focus", val=focus, list_str_options=LIST_FOCUS)
+ ut.check_str_options(name="backend", val=backend, list_str_options=LIST_BACKENDS,
+ accept_none=True)
+ ut.check_bool(name="size_by_impact", val=size_by_impact)
+ if chain is not None:
+ ut.check_str(name="chain", val=chain)
+ if sequence is not None:
+ ut.check_str(name="sequence", val=sequence)
+ focus_region = check_focus_region(focus_region=focus_region)
+ if (pdb is None) == (uniprot is None):
+ raise ValueError("Exactly one of 'pdb' or 'uniprot' should be given "
+ f"(got pdb={pdb}, uniprot={uniprot})")
+
+ # Compute per-residue impact (shared CPP normalized-sum backend)
+ dict_impact, max_abs, positions_union = compute_residue_impact(
+ df_feat=df_feat, col_imp=col_imp, start=start, tmd_len=tmd_len,
+ jmd_n_len=jmd_n_len, jmd_c_len=jmd_c_len)
+ resolved_backend = _resolve_backend(backend)
+ window_resis = _resolve_window_resis(focus, focus_region, positions_union)
+
+ # Resolve the structure file, parse it, and render inside one temp context
+ with tempfile.TemporaryDirectory() as tmp_dir:
+ pdb_path = pdb if uniprot is None else self._fetch_alphafold(uniprot, sequence, tmp_dir)
+ structure = load_structure(pdb_path)
+ records, identity, chain_id = extract_chain_residues(
+ structure, chain=chain, sequence=sequence)
+ self._check_start_alignment(records, positions_union, identity, sequence)
+ view = self._render(resolved_backend, pdb_path, records, dict_impact, max_abs,
+ mode, focus, window_resis, size_by_impact, chain_id)
+
+ if self._verbose:
+ struct_resis = residue_numbers(records)
+ n_painted = sum(1 for r in struct_resis if abs(dict_impact.get(r, 0.0)) > 0)
+ ut.print_out(f"CPPStructurePlot: mapped {len(df_feat)} features onto "
+ f"{len(records)} residues ({n_painted} carry non-zero impact), "
+ f"mode='{mode}', backend='{resolved_backend}'.")
+ return view
+
+ # Internal orchestration helpers
+ def _fetch_alphafold(self, uniprot, sequence, out_folder):
+ """Fetch the AlphaFold model for ``uniprot`` into ``out_folder``; return its path."""
+ from aaanalysis.data_handling_pro import StructurePreprocessor
+ # The download is by accession; the sequence column only satisfies df_seq validation.
+ seq = sequence if sequence is not None else "M"
+ df_seq = pd.DataFrame({ut.COL_ENTRY: [uniprot], ut.COL_SEQ: [seq]})
+ stp = StructurePreprocessor(verbose=self._verbose)
+ df_status = stp.fetch_alphafold(df_seq=df_seq, out_folder=out_folder,
+ file_format="pdb", on_failure="raise")
+ model_path = df_status["model_path"].iloc[0]
+ if not (isinstance(model_path, str) and os.path.isfile(model_path)):
+ raise RuntimeError(f"AlphaFold model for '{uniprot}' could not be fetched "
+ f"(model_path={model_path})")
+ return model_path
+
+ @staticmethod
+ def _check_start_alignment(records, positions_union, identity, sequence):
+ """Warn if the mapped positions miss the structure (likely a wrong ``start``)."""
+ if not positions_union:
+ return
+ struct_resis = residue_numbers(records)
+ if struct_resis and not (set(positions_union) & struct_resis):
+ warnings.warn(
+ f"None of the mapped residue positions "
+ f"[{positions_union[0]}..{positions_union[-1]}] are present in the "
+ f"structure's residues; check that 'start' matches the structure numbering.",
+ UserWarning, stacklevel=2)
+ if sequence is not None and identity < 0.5:
+ warnings.warn(
+ f"The selected chain matches 'sequence' with low identity ({identity:.2f}); "
+ f"the painted residues may be misaligned.",
+ UserWarning, stacklevel=2)
+
+ @staticmethod
+ def _render(resolved_backend, pdb_path, records, dict_impact, max_abs, mode,
+ focus, window_resis, size_by_impact, chain_id):
+ """Dispatch to the resolved render backend and return the StructureView."""
+ if resolved_backend == "py3dmol":
+ return render_py3dmol(pdb_path=pdb_path, records=records,
+ dict_impact=dict_impact, max_abs=max_abs, mode=mode,
+ focus=focus, window_resis=window_resis,
+ size_by_impact=size_by_impact, chain_id=chain_id)
+ # The mpl backend only scatters the selected chain's records, so it never
+ # leaks onto other chains and needs no chain qualifier.
+ return render_mpl(records=records, dict_impact=dict_impact, max_abs=max_abs,
+ mode=mode, focus=focus, window_resis=window_resis,
+ size_by_impact=size_by_impact)
diff --git a/docs/source/api.rst b/docs/source/api.rst
index 6826975e..ca689a91 100755
--- a/docs/source/api.rst
+++ b/docs/source/api.rst
@@ -103,6 +103,7 @@ Feature Engineering
CPP
CPPGrid
CPPPlot
+ CPPStructurePlot
.. _pu_learning_api:
diff --git a/docs/source/index/docstring_guide.rst b/docs/source/index/docstring_guide.rst
index 00c663bb..1e2bbd7d 100644
--- a/docs/source/index/docstring_guide.rst
+++ b/docs/source/index/docstring_guide.rst
@@ -335,6 +335,9 @@ Rules:
* - ``CPPGrid``
- ``cppg``
-
+ * - ``CPPStructurePlot``
+ - ``csp``
+ - ``pro``
* - ``dPULearn`` / ``dPULearnPlot``
- ``dpul`` / ``dpul_plot``
-
diff --git a/docs/source/index/release_notes.rst b/docs/source/index/release_notes.rst
index cd11c368..fe6163e1 100644
--- a/docs/source/index/release_notes.rst
+++ b/docs/source/index/release_notes.rst
@@ -94,6 +94,13 @@ Added
exact two-fit estimate (~2x faster than the threshold default on the same cell), ``5`` adds
light Monte-Carlo averaging, and the mean converges (run-to-run spread below ~5%) around
``n_rounds ≈ 15–20``; a fixed ``random_state`` keeps every run reproducible.
+- **CPPStructurePlot** (``[pro]``): Paints per-residue CPP / CPP-SHAP feature impact onto a
+ 3D protein structure. ``map_structure(df_feat, pdb=...)`` (or ``uniprot=...`` to auto-fetch
+ the AlphaFold model) reuses the same normalized-sum mapping as ``CPPPlot.profile`` and
+ returns a ``StructureView`` with a uniform ``show`` / ``write_html`` / ``savefig`` surface
+ over an interactive `py3Dmol `_ backend (added to the
+ ``[pro]`` extra) and a static matplotlib fallback. Supports an ``'impact'`` red-white-blue
+ ramp and an ``'plddt'`` AlphaFold-confidence mode, with ``whole`` / ``fade`` / ``zoom`` focus.
**Sequence Analysis**
diff --git a/examples/feature_engineering_pro/csp_map_structure.ipynb b/examples/feature_engineering_pro/csp_map_structure.ipynb
new file mode 100644
index 00000000..4f0ae3a4
--- /dev/null
+++ b/examples/feature_engineering_pro/csp_map_structure.ipynb
@@ -0,0 +1,490 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "c47449f2",
+ "metadata": {},
+ "source": [
+ "# `CPPStructurePlot.map_structure`\n",
+ "\n",
+ "Paint per-residue **CPP / CPP-SHAP feature impact** onto a 3D protein structure. Each feature in a `df_feat` is mapped to the residues it spans and its signed impact is aggregated per residue with the **same normalized-sum** as `CPPPlot.profile`, then painted onto the structure cartoon. The method returns a `StructureView` with a uniform `show()` / `write_html()` / `savefig()` surface over an interactive **py3Dmol** backend and a static **matplotlib** fallback (used here so the figures render in the docs).\n",
+ "\n",
+ "This is a `pro` feature (needs `biopython`; `py3Dmol` for the interactive backend)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "efeb7c0c",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-26T03:04:29.894099Z",
+ "iopub.status.busy": "2026-06-26T03:04:29.893668Z",
+ "iopub.status.idle": "2026-06-26T03:04:31.211989Z",
+ "shell.execute_reply": "2026-06-26T03:04:31.211739Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import aaanalysis as aa\n",
+ "import aaanalysis.utils as ut\n",
+ "\n",
+ "aa.options[\"verbose\"] = False"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8456f226",
+ "metadata": {},
+ "source": [
+ "## A tiny structure and `df_feat`\n",
+ "\n",
+ "Normally you pass a real `.pdb` / `.cif` path (`pdb=...`) or a UniProt accession (`uniprot=...`, auto-fetched from AlphaFold DB). For a self-contained example we write a small synthetic structure (one Cα per residue; the B-factor column doubles as pLDDT) and a `df_feat` with two known features — a whole-TMD segment and a whole-JMD-N segment."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "67f14989",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-26T03:04:31.213255Z",
+ "iopub.status.busy": "2026-06-26T03:04:31.213116Z",
+ "iopub.status.idle": "2026-06-26T03:04:31.275463Z",
+ "shell.execute_reply": "2026-06-26T03:04:31.275245Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DataFrame shape: (2, 3)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
feature
\n",
+ "
category
\n",
+ "
feat_impact
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1
\n",
+ "
TMD-Segment(1,1)-LDKE
\n",
+ "
Polarity
\n",
+ "
0.800000
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
JMD_N-Segment(1,1)-CHAM
\n",
+ "
Energy
\n",
+ "
-0.400000
\n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import tempfile, os\n",
+ "tmp = tempfile.mkdtemp()\n",
+ "pdb = os.path.join(tmp, 'demo.pdb')\n",
+ "lines = []\n",
+ "for i in range(40):\n",
+ " x, y, z = i*1.5, np.sin(i*0.5)*5, np.cos(i*0.5)*5\n",
+ " b = 40 + (i % 60) # pLDDT-like 40..99 in the B-factor column\n",
+ " lines.append(f\"ATOM {i+1:5d} CA ALA A{i+1:4d} {x:8.3f}{y:8.3f}{z:8.3f} 1.00{b:6.2f} C\")\n",
+ "lines.append('END')\n",
+ "open(pdb, 'w').write('\\n'.join(lines) + '\\n')\n",
+ "\n",
+ "df_feat = pd.DataFrame({\n",
+ " ut.COL_FEATURE: ['TMD-Segment(1,1)-LDKE', 'JMD_N-Segment(1,1)-CHAM'],\n",
+ " 'category': ['Polarity', 'Energy'],\n",
+ " 'feat_impact': [0.8, -0.4],\n",
+ "})\n",
+ "aa.display_df(df_feat, n_rows=10, show_shape=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c8ac952c",
+ "metadata": {},
+ "source": [
+ "## Construct the plotter\n",
+ "\n",
+ "`jmd_n_len` / `jmd_c_len` are the juxta-membrane lengths used when the features were generated (stored and reused by `map_structure`, mirroring `CPPPlot`). `df_scales` is accepted for parity with `CPPPlot` but is not needed for structure mapping."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "74b92ffe",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-26T03:04:31.276397Z",
+ "iopub.status.busy": "2026-06-26T03:04:31.276330Z",
+ "iopub.status.idle": "2026-06-26T03:04:31.277834Z",
+ "shell.execute_reply": "2026-06-26T03:04:31.277622Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "csp = aa.CPPStructurePlot(jmd_n_len=10, jmd_c_len=10, df_scales=None, verbose=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4ba25bae",
+ "metadata": {},
+ "source": [
+ "## Impact mode with fade-context\n",
+ "\n",
+ "`mode=\"impact\"` paints the white→red / white→blue ramp (red raises, blue lowers the prediction). `focus=\"fade\"` ghosts residues outside the feature window; `size_by_impact` scales the per-residue marker / stick by `|impact|`. `col_imp` selects the signed impact column, `tmd_len` the TMD length, and `start` the absolute residue number of the first JMD-N residue (here the features cover residues 1..20)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "eeb12019",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-26T03:04:31.278676Z",
+ "iopub.status.busy": "2026-06-26T03:04:31.278625Z",
+ "iopub.status.idle": "2026-06-26T03:04:31.339027Z",
+ "shell.execute_reply": "2026-06-26T03:04:31.338809Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAJOCAYAAACz5d1QAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQeYXVX19tedmkaAEHoghdBCIAmh90hViiCKoBQRxYqioti7Iip2/6KfBUUBAVFBAekdQu9EIJAQWiiBhJTJzNx7v+d3kjXuOdxyyj7tzn6f5zBhyrmn7L32u9/VStVqtSoODg4ODg4ODi2MtqwvwMHBwcHBwcEhaTjC4+Dg4ODg4NDycITHwcHBwcHBoeXhCI+Dg4ODg4NDy8MRHgcHBwcHB4eWhyM8Dg4ODg4ODi0PR3gcHBwcHBwcWh6O8Dg4ODg4ODi0PBzhcXBwcHBwcGh5OMLjMKSwcOFCede73iVjx46VUqkkX//612Wo4dRTT5VRo0ZlfRkODg4OqcIRHodEsWjRIo9UzJw5U0aPHi0jR46UrbbaSo455hi57rrrBn7vySef9AiIHm1tbbL22mvLvvvuK1deeWXo36uHz3zmM3LvvffKfffdJ3RVSYLw3HLLLd61/etf/7J+boc348Mf/rCstdZahXw0ebn2vFyHg0OScITHITE88MADst1228mFF14oX/ziF+Xpp5+WV199Vf7yl79IV1eXR1IgMCZOP/10j4j09/fLbbfd5v37bW97m1x++eWRfs+PG2+8UfbZZx/ZZJNNZKjiJz/5iSxdujTry3BwcHBIFY7wOCSCZcuWyWGHHeYpOrfffrsceeSRss4668iwYcM8teePf/yjnHPOOdLe3l57YLa1ydZbby1//vOfPTLz05/+NNbvKV555RUZPny4lXt0cHBwcCgOHOFxSAR/+MMf5JlnnpFvfetbsuaaa9b8nRNOOEEmTpzY8DwbbbSRrLHGGrJgwYJYv/eLX/zCczP19PTIL3/5ywGX2Isvvuj9HMUD1WizzTaT7u5uWX/99eWDH/ygp0gpnn322UHuNH4PsvWd73zHU5oAxGvPPff0/n3ooYcO/O4Pf/hD73uQPP5/zpw5g65Pz811Kq655hrve3z92c9+JpMmTfII4sMPPzygoL3jHe/w4pG4lilTpsivfvUriRLD8773vU822GAD736POuooz/248cYbD1zPyy+/LO9+97s9t8e6664rX/7ylz2CWesckEripDgHJPcDH/iAvP7664N+93vf+96gZ8kYmTVrlnevfnCfnI93MmLECNlhhx08lZDPP+igg+TXv/61LF68eND59L3Ww3/+8x/Za6+9vOcAKd9tt93ksssuq3k/nPu4447zrhH36YknnugR+mZ4/PHHvWfJ2OS6t912WznzzDO9MQiaXbt+Pm7hY4891vvsGTNmeD/bb7/9vOfghz5X//OO8wzDfFajawa///3vvXNxDcxXPhsXs4NDGnCExyEREE+DMTzwwANjneeFF16QN954o6kLqtnvffzjH/eMO8TgYx/7mPdvDozz8uXLZe+99/Zcb5AhFuyrr75a7r//fs/9tWLFCu8c48aNG/g7Dj7zq1/9qmf4v/3tb3u/g5G/+eabvX+zgOrvnnbaaZGfASTmtdde85Syq666yrsH4oR22WUXjwDdeuut3jV/5Stfkc997nOR45K4zlNOOUU++tGPegSM8/H///jHP+Skk06SD33oQx6J/e53v+uRvPPOO6/mOfg9yCLnuOCCC+Tf//63HHzwwVIulwd+7/Of//zAs4EssiBDHg855JABQqcuyJ133tl7B9z7Sy+9JL/5zW/kiiuu8Mgt44zPg4yY74b3Wg8XX3yxvPWtb/U+77HHHpMnnnjC+wwUSZRH//0wdiA83M+5557rjZMvfelLDZ9lpVKRAw44wCMD3AMEgL9bsmTJgNs1yLXz/yeffLI3rp566in55Cc/KWGRxDNshHrX/KlPfcqbe5Ci+fPne6R//Pjx3gbhwQcfjPRZDg6hUHVwSABTp06trrXWWoF//4knnkAuqJ5++une/5fL5eqcOXOq++23X7VUKlUvvfTSUL9XD93d3dWPfexjg7535plneue86667Bn1/7ty51fb29uqvfvWrhuc87bTTqhtssMHA/998883e+S677LI3/e4f/vAH72ePPfbYoO8vWLDA+/7Pf/7zge9dffXV3vcOPfTQN51n2223rW6zzTbVvr6+Qd//9re/7d3jK6+8Uvd6P/nJT1ZHjhw56HsnnHCC91n/+te/Bn1/u+228373H//4x6Dvz5gxozpr1qya57jooosGff/iiy/2vn/hhRdWm4HnyPNUbL311tUtttjiTfdp4kMf+lB1zTXXrAZBpVKp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",
+ "text/plain": [
+ "