Übersicht — Computational Anwendungsplattform
mATOMIC und SBPA sind die zwei zentralen computationalen Anwendungen der Parvotec-Plattform. Sie ergänzen die biophysikalischen Methoden (SAXS, SPR, PPMS) um strukturelle Simulationen und sequenzbasierte Vorhersagen — und erweitern den Fitness Oracle um physikalisch begründete Features die rein experimentell schwer zugänglich sind.
Computational als Oracle-Vorfilter: mATOMIC und SBPA liefern Features für 100% der ~1 Million DMS-Varianten (kein Synchrotron-Zugang nötig). Sie werden als erster Filterungsschritt eingesetzt: Kandidaten mit schlechten Stabilitäts- oder Immunogenizitäts-Scores werden vor der teuren experimentellen Validierung aussortiert.
| Tool | Typ | AAV-spezifische Information | Oracle Feature | Abdeckung |
|---|---|---|---|---|
| mATOMIC | Molekulardynamik + Coarse-Grained Simulation | Insertions-Stabilität, Bindungsfreie Energie ΔG, RMSF per Residue | ΔΔG, RMSF, Stabilitätsscore | Top-10.000 Kandidaten |
| SBPA | Sequenzbasierte Property Analysis | Konservierungsscore, T-Zell-Epitop-Vorhersage, Aggregationspropensität, Herstellbarkeit | Immuno-Risk, AggScore, Manuf-Score | Alle ~1M Varianten |
mATOMIC — Multiscale ATOMIC Molecular Dynamics
Anwendungsziel
mATOMIC (Multiscale AT/CG Simulation Infrastructure for Capsid) simuliert die strukturellen Auswirkungen von 7-Mer Insertionen auf den AAV-Capsid. Es kombiniert All-Atom Molecular Dynamics (MD) für lokale Strukturanalysen mit Coarse-Grained (CG) Simulationen für große Systeme und längere Zeitskalen. Output ist ein mechanistisch begründeter Stabilitätsscore pro Insertion.
Infrastruktur-Setup
- All-Atom MD: GROMACS 2024, CHARMM36m Kraftfeld. AAV6-Capsid Struktur (PDB 3ZGW) als Startpunkt. Protonierungszustand bei pH 7.4 via PROPKA3
- Coarse-Grained: MARTINI 3.0 Kraftfeld für AAV-Kapsidhülle. CG ermöglicht 10–100× längere Simulationen (µs-Skala) für Stabilitäts-Assessment
- GPU-Infrastruktur: 2× NVIDIA A100 (oder äquivalent). GROMACS mit CUDA-Beschleunigung. Typisch: 100 ns All-Atom-Simulation / 4h auf A100
- Validierung: Vergleich simulierter Rg mit SAXS-Messungen von WT-AAV6 (Soll: Rg_sim ≈ Rg_SAXS ± 0.5 nm)
7-Mer Insertions-Screening
- ΔΔG Berechnung: Free Energy Perturbation (FEP) oder MM-GBSA für ΔG(insertion) – ΔG(WT). Negatives ΔΔG = Insertion destabilisiert Capsid. Schwellenwert: ΔΔG > +2 kcal/mol → Kandidat verwerfen
- RMSF-Analyse: Root Mean Square Fluctuation pro Residue. Hohe RMSF an Insertionsstelle → flexible, strukturell tolerante Region (positiv für Insertionstoleranz)
- Receptor Docking: ClusPro oder HADDOCK für AAV-HSPG Docking. ΔG_bind als Vorhersage der Rezeptorbindung (validiert gegen SPR KD)
- Durchsatz: CG-Vorscreening für Top-10.000 Kandidaten (1 µs/Kandidat, ~2 min/Kandidat auf GPU). Full AA-MD für Top-500 (100 ns, ~4h/Kandidat)
Oracle-Integration
- mATOMIC-Features: [ΔΔG_norm, RMSF_insert, ΔG_HSPG_norm, contact_map_entropy] als 4 Oracle-Inputs
- Korrelationsvalidierung: ΔΔG vs. SAXS Rg (Pearson r ≥ 0.55 erwartet) · ΔG_HSPG vs. SPR KD (r ≥ 0.60 erwartet)
- Vorfilterung: Alle ~1M DMS-Kandidaten zuerst durch CG-ΔΔG Screen. Kandidaten mit ΔΔG < -3 kcal/mol (stark destabilisierend) vor experimentellem Screen eliminieren — spart ~20% Produktionsaufwand
mATOMIC Simulationsparameter
| Modus | Kraftfeld | Simulationslänge | Laufzeit/A100 | Einsatz |
|---|---|---|---|---|
| CG Prescreening | MARTINI 3.0 | 1 µs | ~2 min | Alle Top-10.000 Kandidaten |
| AA-MD Vollsimulation | CHARMM36m | 100 ns | ~4h | Top-500 nach CG-Filter |
| FEP ΔΔG | CHARMM36m | 2 × 5 ns (FEP-Fenster) | ~8h | Top-100 (Finalkandidaten) |
| Docking (HADDOCK) | CNS 1.3 | Starre Docking, 1000 Strukturen | ~30 min | Top-500 gegen HSPG/AAVR |
# mATOMIC CG Prescreening Pipeline
import subprocess, pandas as pd, numpy as np
from pathlib import Path
def run_cg_screening(insert_sequences: list[str],
aav_base_pdb: str = "aav6_wt.pdb",
output_dir: str = "matomic_results") -> pd.DataFrame:
"""CG Prescreening für alle 7-Mer Insertionen via GROMACS/MARTINI."""
results = []
for seq in insert_sequences:
# Insertion modellieren (PyMOL API oder Modeller)
pdb = model_insertion(aav_base_pdb, seq, position=587)
# GROMACS martinize2 + GROMACS run
cg_pdb = martinize2(pdb)
ddg = run_gromacs_cg(cg_pdb, sim_length="1us", output=output_dir)
rmsf = extract_rmsf(ddg["traj"], residue_range=(580, 600))
results.append({"sequence": seq, "ddg_kcal": ddg["ddg"],
"rmsf_insert": rmsf.mean(), "passed": ddg["ddg"] > -3.0})
return pd.DataFrame(results)
def prescreening_filter(df: pd.DataFrame, ddg_threshold=-3.0) -> pd.DataFrame:
"""Entfernt stark destabilisierende Insertionen vor experimentellem Screen."""
return df[df["ddg_kcal"] > ddg_threshold].copy()
SBPA — Sequence-Based Property Analysis
Anwendungsziel
SBPA (Sequence-Based Property Analysis) ist eine mehrstufige Bioinformatik-Pipeline die direkt aus der AAV-Aminosäuresequenz eine Vielzahl von Eigenschaften berechnet: evolutionäre Konservierung, Immunogenizitätsrisiko (T-Zell-Epitope), Aggregationspropensität, Hydrophobizitätsprofil und Herstellbarkeitsindex. SBPA deckt 100% der ~1M DMS-Varianten ab (keine Synchrotron- oder Instrumentenzeit nötig) und ist damit das wichtigste Vorfilterungs-Tool.
Pipeline-Setup & Validierung
- Konservierungsanalyse: BLAST gegen UniRef90 (E-value ≤1e-10). ConSurf-Server oder lokale MSA via MUSCLE/MAFFT. Output: Konservierungsrate pro Residue (0–1), evolutionärer Score
- Immunogenizitätsprädiktion: NetMHCII 4.0 für MHC-II-gebundene T-Zell-Epitope (9-mer Peptide). IEDB Immunogenicity Calculator für jede Insertion. EpitopeFinder für lineare B-Zell-Epitope
- Aggregationsprädiktion: CamSol-Intrinsic für Löslichkeitsscore. AGGRESCAN3D für strukturbasierte Aggregationspropensität. SAP (Spatial Aggregation Propensity) via BioPython
- Herstellbarkeit: Kodon-Optimierungsscore (IDT CodonOpt API), Komplementarität zu HEK293T Expressionsprofil
Massenscreening aller DMS-Varianten
- Batch-Verarbeitung aller ~1M DMS-Kandidaten (parallelisiert, ~10.000 Sequenzen/h auf 8-core CPU)
- Output pro Variante: [ConSurf_score, NetMHCII_max_score, CamSol_score, AggPropensity, Manuf_score]
- Dual-Filterung: (1) Immunogenizitäts-Hardcut: NetMHCII IC50 <50 nM → automatisch disqualifiziert. (2) Aggregations-Softcut: AggPropensity >0.8 → Flagging, nicht automatisches Ausschließen
- Korrelationsanalyse: SBPA Scores vs. In-vitro-Messdaten (Yield aus ddPCR, Immunogenizitäts-Assay ELISpot)
Oracle-Integration & Kontinuierliche Analyse
- 5 SBPA-Scores als Oracle-Features (alle ~1M Varianten gelabelt — keine fehlenden Werte)
- SBPA-Immunogenizitätsscore als Soft-Constraint im cVAE: Generierte Sequenzen mit hohem Immunogenizitätsrisiko werden down-gewichtet
- Automatisierte SBPA-Analyse für alle neu generierten BO-Kandidaten vor experimenteller Validierung
- Kontinuierliche Aktualisierung: Wenn neue experimentelle Immunogenizitätsdaten (NAb-Titer, ELISpot) verfügbar → Re-Kalibrierung des NetMHCII-Vorhersagemodells
SBPA Scores — Übersicht & Schwellenwerte
| Score | Tool | Einheit / Range | Go-Schwellenwert | Interpretation |
|---|---|---|---|---|
| Konservierung | ConSurf / MUSCLE | 0–1 (1 = hoch konserviert) | Insert-Region: ≤0.5 (flexible Region) | Hoch konservierte Positionen → Insertion wenig toleriert |
| MHC-II Immunogenizität | NetMHCII 4.0 | IC50 [nM] | ≥50 nM (schwache Bindung = gut) | <50 nM → starkes T-Zell-Epitop → Disqualifikation |
| Löslichkeit (CamSol) | CamSol-Intrinsic | -3 bis +3 (höher = löslicher) | ≥ -0.5 | Sehr negativ → Aggregationsrisiko |
| Aggregationspropensität | AGGRESCAN3D | 0–1 (1 = hoch aggregationsanfällig) | ≤0.6 | >0.8 → Flag für PPMS-Monitoring |
| Herstellbarkeitsindex | IDT CodonOpt | 0–100 (100 = optimal) | ≥60 | Niedrig → Expressionsprobleme in HEK293T |
# SBPA Pipeline — Massenscreening
from Bio import SeqIO
import pandas as pd
class SBPAPipeline:
"""Sequenzbasierte Property Analysis für AAV 7-Mer Insertionen."""
def __init__(self):
self.consurfdb = ConSurfDatabase("aav6_msa.fasta")
self.netmhcii = NetMHCIIPredictor(alleles=["DRB1*04:01", "DRB1*07:01"])
self.camsol = CamSolIntrinsic()
self.aggrescan = AGGRESCAN3D(template_pdb="aav6_wt_cg.pdb")
def analyze(self, sequence: str, position: int = 587) -> dict:
full_seq = self._insert_into_wt(sequence, position)
return {
"consurv_score": self.consurfdb.score(position, position+7),
"mhcii_ic50_min": self.netmhcii.min_ic50(full_seq[580:600]),
"camsol_score": self.camsol.score(full_seq),
"agg_propensity": self.aggrescan.score(position, position+7),
"manuf_score": self._codon_optimization_score(full_seq),
}
def batch_analyze(self, sequences: list[str]) -> pd.DataFrame:
return pd.DataFrame([self.analyze(s) for s in sequences])
def apply_hard_filter(self, df: pd.DataFrame) -> pd.DataFrame:
"""Entfernt Kandidaten mit starken T-Zell-Epitopen."""
return df[df["mhcii_ic50_min"] >= 50.0].copy()
Gantt — Implementierung 12 Monate
Oracle Integration — mATOMIC & SBPA
Zusammen liefern mATOMIC und SBPA 9 zusätzliche Oracle-Features. Da SBPA alle ~1M Varianten abdeckt, sind diese Features besonders wertvoll als Vorfilter und als maskenlose Training-Labels:
| Tool | Feature | Einheit | Normalisierung | Abdeckung |
|---|---|---|---|---|
| mATOMIC | ΔΔG (Insertionsstabilität) | kcal/mol | normalisiert auf σ(DMS-Set) | Top-10.000 (CG) / Top-500 (AA) |
| mATOMIC | RMSF Insert-Region | Å | normalisiert auf WT | Top-10.000 |
| mATOMIC | ΔG_HSPG (Docking) | kcal/mol | normalisiert | Top-500 |
| SBPA | ConSurf Konservierungsscore | 0–1 | direkt | Alle ~1M |
| SBPA | NetMHCII IC50 (min) | nM (log) | log10, normalisiert | Alle ~1M |
| SBPA | CamSol Löslichkeit | -3 bis +3 | min-max norm. | Alle ~1M |
| SBPA | AggPropensity | 0–1 | direkt | Alle ~1M |
| SBPA | Herstellbarkeitsindex | 0–100 | /100 | Alle ~1M |
Vorfilterungspotenzial: SBPA eliminiert ~15–20% aller DMS-Kandidaten durch den MHC-II Hardcut (IC50 <50 nM) und weitere ~10% durch den Aggregationssoftcut, bevor ein einziger Liter Zellkulturmedium verbraucht wird. mATOMIC eliminiert weitere ~20% durch den ΔΔG Stabilitätsfilter. Gesamteffekt: ~35–45% weniger experimentelle Validierungen nötig.
API & Integrierter Workflow
Kombinierter Vorfilterungs-Workflow (Pre-Experimental Screen)
- SBPA Massenscreening (Tag 1, automatisiert). Alle ~1M DMS-Sequenzen durch SBPA laufen lassen (batch_analyze). Hardcut: Entferne Kandidaten mit MHC-II IC50 <50 nM. Softcut: Flagge Kandidaten mit AggPropensity >0.6. Ausgabe: ~700k–800k Kandidaten nach Filter.
- mATOMIC CG Prescreening (Tag 1–2, GPU). Alle SBPA-gefilterten Kandidaten (oder Top-10k nach Oracle-Ranking) durch CG-ΔΔG Screen. Filter: ΔΔG <-3 kcal/mol → verwerfen. Ausgabe: ~600k–700k Kandidaten nach kombiniertem Filter.
- Oracle-Scoring (Tag 2, automatisiert). ESM-2 Embedding aller verbleibenden Kandidaten (Pre-computed). Fitness Predictor Vorhersage (VSMC, EC, Leber, SAXS-Features). Composite Score Berechnung. Ranking aller Kandidaten.
- BO-Selektion (Tag 2, automatisiert). Multi-objective BO (EHVI) auf Top-50.000 nach Composite Score. Ausgabe: 50 Kandidaten für experimentelle Validierung. Diese 50 sind bereits durch SBPA + mATOMIC + Oracle dreifach validiert.
- Experimentelle Validierung (Tag 3–28). Synthese und Produktion der 50 Kandidaten. PPMS-Prescreening aller 50 (Tag 3–5). SPR-Screening Top-20 (Tag 5–15). SAXS Top-10 (Synchrotron oder Labor). In vitro Transduktionsassay (FACS).
Python Integration — Unified Screening API
from parvotec.oracle import VascularOracle
from parvotec.sbpa import SBPAPipeline
from parvotec.matomic import mATOMICScreener
# Initialisierung
oracle = VascularOracle.load("vascular_oracle_v2.0.pth")
sbpa = SBPAPipeline()
matomic = mATOMICScreener(gpu_device="cuda:0")
# Kombinierter Vorfilterungs-Workflow
def prescreen_candidates(sequences: list[str]) -> list[str]:
"""Dreistufige Vorfilterung vor experimenteller Validierung."""
# Stufe 1: SBPA (100% Abdeckung, schnell)
sbpa_df = sbpa.batch_analyze(sequences)
s1 = sbpa.apply_hard_filter(sbpa_df)["sequence"].tolist()
print(f"Nach SBPA: {len(s1)}/{len(sequences)} ({100*len(s1)//len(sequences)}%)")
# Stufe 2: mATOMIC CG Prescreening (Top-10k, GPU)
top10k = oracle.rank_by_embedding(s1)[:10_000]
mat_df = matomic.cg_prescreening(top10k)
s2 = mat_df[mat_df["passed"]]["sequence"].tolist()
print(f"Nach mATOMIC: {len(s2)}/{len(top10k)}")
# Stufe 3: Oracle BO-Selektion
candidates = oracle.generate(
sequences=s2, targets={"vsmc":0.85, "liver":0.08}, n=50, strategy="bo"
)
return candidates
# Ergebnis: 50 dreifach-validierte Kandidaten für experimentellen Screen
final_50 = prescreen_candidates(all_dms_sequences)