Методика и воспроизводимость

Как построены модели комплекса человеческого XPD/ERCC2 + дуплекс ДНК с платиновым аддуктом + кластер [4Fe-4S], показанные в сравнительном 3D-вьювере.

Содержание

  1. Идея модели
  2. Программное обеспечение и версии
  3. Структуры-источники (PDB / CCD / UniProt)
  4. Последовательность действий (пайплайн)
  5. Локализация железо-серного кластера [4Fe-4S]
  6. Ключевой результат (Pt → [4Fe-4S])
  7. Ограничения и оговорки
  8. Литература
  9. Код и файлы
  10. Быстрый старт

0Идея модели

XPD (helicase-субъединица TFIIH) в ходе эксцизионной репарации нуклеотидов (NER) «верифицирует» повреждение: повреждённая одиночная нить ДНК продевается сквозь центральную пору XPD, в сужении между доменами FeS и Arch, и повреждение застревает у контрольной точки His135. Оксалиплатин образует 1,2-внутринитевой сшив d(GpG) — два ковалентных Pt–N7(гуанин) в плоскоквадратном Pt(II). Задача — получить трёхмерный комплекс XPD + Y-вилка дцДНК + Pt-аддукт + [4Fe-4S] в этой «верификационной» конформации, а затем сравнить, как разные Pt-аддукты меняют комплекс и, в частности, расстояние Pt → [4Fe-4S].

Итог во вьювере: 9 «запечатанных» структур сравнительной миссии (замороженный якорь + улучшенная база + 7 вариантов) плюс 1 ad-hoc follow-on (monoflip) — итого 10 CIF в одном селекторе 3Dmol.js. Все построены на одном фиксированном каркасе XPD/9PCP; между структурами меняется только Pt-аддукт.

1Программное обеспечение и версии

ПакетВерсияРольГде
Boltz-22.2.1 (веса MIT)ко-фолдинг протеин+ДНК+лиганды+металлGPU (Vast.ai)
PyTorch2.12.0 +cu126backend Boltz (дефолтный PyPI тянет cu130 → «driver too old»)GPU
cuequivariance-torch / -ops-cu120.10.0BoltzGPU
numpy1.26.4Boltz <2.0 / numba <2.2везде
Python3.10–3.12везде
MMseqs2публичный серверMSA для протеина (--use_msa_server)облако
OpenMM8.5.1ограниченная минимизация (forcefield amber14 + неявный сольвент)CPU (hive3070T06)
PDBFixerдобивка H / термини ДНКCPU
gemmimmCIF, геометрия, гейты, идеализация кубаCPU
RDKitcp312 wheelтолько органический скелет каррьера (кольцо DACP), не Pt-сфераCPU
Open Babel3.1.1 CLIконвертация форматов / HCPU
3Dmol.js / CaddyCDN / —3D-рендер / статический хостингбраузер / hermes

Железо: GPU-часть (Boltz) — арендованные ноды Vast.ai (RTX 6000 Ada / A6000, ≈$0.14 за прогон); CPU-часть (все минимизации/измерения) — hive3070T06 (56 vCPU / 125 GB). Пины окружения Boltz заморожены в setup_boltz_env.sh + boltz-env.lock.txt.

2Структуры-источники (PDB / CCD / UniProt)

Правило приоритета координат: экспериментальные PDB → идеальные CCD → построение de-novo. Геометрия Pt — всегда из PDB/CCD, никогда из SMILES (RDKit/openbabel плохо с плоскоквадратным d⁸).

2.1 Белок и каркас комплекса

IDЧтоРоль
UniProt P18074ERCC2_HUMAN, 760 aa — последовательность человеческого XPDвход протеина Boltz; задаёт нумерацию остатков
PDB 9PCPcryo-EM человеческого pre-incision NER (chain B = XPD, 100% id к P18074, нативный [4Fe-4S], His135, продетая повр. нить)финальный анкерный каркас всех моделей
PDB 9A88Yu et al. 2024, человеческий pre-incision complexранний каркас; вытеснен 9PCP
PDB 8REV / EMD-19109ctXPD на сшитой Y-вилкешаблон продевания ДНК (Route B) + позитивный контроль
6RO4, 6NMI, 5OF4, 4A15TFIIH/XPD (человек и археи)референс фолда; 6RO4 — источник координирующих Cys

2.2 Железо-серный кластер

IDЧтоРоль
CCD SF4лиганд-код [4Fe-4S] (FE1–FE4, S1–S4)кодирование кластера (Boltz + chain S комплекса)
PDB 2FDNферредоксин Clostridium, чистый куб [4Fe-4S]референс идеального куба + калибровка FeS-гейта
Cys116/134/155/190координирующие цистеины XPD (P18074)1:1 Fe→Sγ; в ctXPD/8REV = 115/133/154/189

2.3 Химия поражения (оксалиплатин, база)

IDЧтоРоль
PDB 1IHHоксалиплатин 1,2-d(GpG) сшив, X-ray 2.4 Å (Spingler/Whittington/Lippard 2001); PT + DNH + 2×DGисточник прививки платинированного динуклеотида
CCD 1PTслитый оксалиплатин Pt(R,R-DACH), C₆H₁₄N₂Ptлиганд-код для Boltz (предпочтителен над split PT+DNH)
1PG9 / 1PGCЯМР оксалиплатин-GG, изгиб ~30–31°валидационный референс
3LPV / 1AIO / 1A84цисплатин-GG аналогитолько валидация

2.4 Референсы Pt-аддуктов для 7 вариантов

ВариантИсточник Pt-сферыТопология
S,S-оксалиплатин (энантиомер)de-novo: зеркалирование R,R→S,S от 1IHH/1PTбифункц.
Монофункц. R,R / S,S оксалиплатинde-novo от 1IHH/1PT (−2-й Pt–N7, +aqua); топология-шаблон пириплатин PDB 3M3Y/3M4O, CCD C7Pмонофункц.
ФенантриплатинPDB 4Q8E (1.55 Å)/4Q8F, CCD P9G — извлечён напрямуюмонофункц.
ПикоплатинCCD A1H58 (Pt·NH₃·Cl·2-пиколин), несётся в PDB 9EO8 (RNase A, 1.76 Å)монофункц.
R,R / S,S-DACP (кольцо-контракция)de-novo: циклогексан→циклопентан (RDKit) + эксп. Pt-центрбифункц.

De-novo варианты (S,S-окса, оба монофункц. оксалиплатина, оба DACP) не имеют PDB/CCD-подтверждения — повышенная неопределённость (зафиксировано).

3Последовательность действий (пайплайн)

Конвейер как он реально исполнялся. Исторические тупики (Route A/B) оставлены намеренно — они объясняют, почему финальный каркас именно такой.

Этап 0 — постановка и выбор движка

Не задача для ESM (только белок). Нужен all-atom ко-фолдинг. Выбран Boltz-2: MIT-веса (коммерчески чисто) + чистый путь связи «CCD-лиганд ↔ канонический остаток» для Pt–N7. (Утверждение «AF3 запрещает лиганд-полимерные связи» опровергнуто — запрещены только полимер↔полимер.)

Этап 1 — ко-фолдинг Boltz-2

Кодирование входа (build_input.pyboltz_input.yaml): 1 protein = P18074 + MSA; 2 dna (Y-вилка, не тупой дуплекс); сшитые гуанины — обычные DG, сшив через bonds; лиганды CCD 1PT и CCD SF4; сшив = 2 bond [L,1,PT]→[нить,i|i+1,N7]; FeS = 4 bond 1:1 Fe→Cys.SG. Запуск: boltz predict … --use_msa_server --diffusion_samples 5 (≥5 семплов). Раннер run_cofold.sh.

Находка №1: Boltz точно ставит белок и [4Fe-4S] (Fe→Cys 1.9–2.1 Å, каждый Fe 4-координатный), но роняет Pt–DNA-сшив (0/2 Pt–N7 во всех 5 моделях). pLDDT/PAE ≠ геометрия. Починка — прививка (Этап 5).

Этап 2 — проблема продевания нити

Находка №2: поражение «плавает» в 42–60 Å от поры; мягкий contact не протаскивает нить сквозь пору (топологический ход). Находка №3: по Yu et al. 2024 (9A88) нить продета через сужение FeS↔Arch, поражение у His135.

Route A (Boltz-шаблон 8REV + His135-контакты + прививка): химия проходит гейты, но направленность нити НЕВЕРНА (3′-конец не выходит к XPG; гейты не тестируют полярность). Route B (трансплант продетой ДНК 8REV): направленность идеальна (5′→3′ dot +1.00), но поражение ~17 Å от Boltz-кармана. Вывод: на гибриде — либо направленность, либо поражение-в-кармане.

Этап 3 — ре-граундинг на 9PCP

Дилемма решена переносом на 9PCP — напрямую определённый человеческий экспериментальный каркас, где сразу и белок, и продетая нить, и His135-регистр поражения в одном фрейме. Сборка (build_9pcp_complex.py, gemmi): chain B 9PCP → A (XPD); SF4S; повр. нить L → B; комплемент M → C; placeholder 1PTL. Финальная одиночная модель — results_threaded/c9pcp_min.cif (честные 5/5 гейтов; она же — якорь frozen_base и модель на главной странице).

Этап 5 — прививка (graft) оксалиплатина из 1IHH

graft_routeB.py: жёстко-телесная трансплантация целого платинированного d(GpG) из 1IHH на два гуанина модели (суперпозиция по сахарофосфатному остову DG62/DG63). Прививка только Pt не работает. Итог: Pt–N7 ~1.94/1.98 Å, N7–Pt–N7 ~90°, CN=4. Регистр: B DG62(5′)/DG63(3′), фланги DT/DC (контекст «TGGC»).

Этап 6 — построение 7 вариантов

Единый билдер build_adduct.py (спеки JSON в specs/). Два режима: guanine_transplant (референс уже несёт платинированный гуанин: 1IHH или 4Q8E P9G — суперпозиция и перенос всей платинированной единицы; сфера верна по построению) и fragment_swap (изолированный Pt-фрагмент, напр. пикоплатин A1H58 из 9EO8, садится на донор-роли монофункц. шаблона по donor_map). RDKit — только органический скелет (кольцо DACP). CCD-координаты: curl files.rcsb.org/ligands/download/<CCD>.cif.

Этап 7 — минимизация (improved hybrid movable-carrier)

minimize_adduct*.py на OpenMM 8.5.1 (amber14 + неявный сольвент), на hive3070T06. Pt-аддукт и SF4 вынесены как частицы исключённого объёма (нет в amber-FF). Гибридный каррьер (--carrier-mode hybrid): жёсткая плоскоквадратная Pt-сфера удерживается рестрейнтом k≈1e5, органический скелет подвижен; для S,S — --lock-carrier-chirality (+ --k-ring 1e6). Термини ДНК amber14: +OXT, снять 5′-фосфат, удалить осиротевший OP1, резать на разрывах нумерации. Cys→Fe рестрейнится «наружу», чтобы все 4 Sγ сели, не слившись.

Метод-анкер: «замороженный» каррьер (c9pcp_min.cif) vs «улучшенный» подвижный (base_improved_min.cif) дают сдвиг Pt–nearest-Fe всего −0.007 Å — он вынесен отдельно и не входит в дельты вариантов, чтобы дельта отражала химию аддукта, а не смену метода.

Этап 8 — измерение и конверт шума

Единый измеритель measure_complex.py: Pt–nearest-Fe, Pt–Fe-centroid, Pt–His135-NE2, координация, GpG-destack, пакеровка Кремера–Попла (Q), наклон ароматики, клэши. Независимая перепроверка — verify_pt_fes_independent.py. Конверт воспроизводимости: база переминимизирована идентичным протоколом из возмущённых (гаусс σ=0.05 Å на подвижные тяжёлые атомы; куб [4Fe-4S] не возмущается) и контрольных стартов → perturbed-2σ ≈ 0.039 Å, полный конверт ≈ 0.088 Å. Вердикт: |Δ|>конверт → REAL; ≤2σ → шум.

Этап 9 — валидационные гейты

validate_geometry.py (gemmi): (1) оба Pt–N7 ~1.95–2.05 Å, N7–Pt–N7 ~90° (проверено на 1IHH); (2) Pt 4-координатный плоскоквадрат; (3) куб [4Fe-4S] — каждый Fe CN=4, 1:1 Fe:Cys (проверено на 2FDN); (5) размещение в поре (soft WARN). Слепое пятно: полярность 5′→3′ не тестируется (урок Route A). Плюс адверсариальные проверки Zenith-миссии: обе линии 7/7; 15 VAL-* + 6 гейтов запечатаны.

Этап 10 — веб-вьювер

build_variants_manifest.py читает PT_FES_TABLE.json + per-variant *_measure.json, копирует 10 CIF в data/variants/ и пишет manifest.json. variants.html = селектор 3Dmol.js по семействам. Публикация: bash deploy.sh → Caddy.

4Локализация железо-серного кластера [4Fe-4S]

«Локализация» кластера прошла через несколько механизмов по мере эволюции каркаса; в финальной модели — комбинация нативного размещения из эксперимента + идеализации геометрии + жёсткого гейта.

Координирующие остатки. В человеческом XPD кластер координируют Cys116, Cys134, Cys155, Cys190 (полноразмерная каноническая нумерация P18074; эксп. свидетельство — PDB 6RO4). Рядом стоит His135 — контрольный остаток верификации (Cys134 и His135 — соседи). В ctXPD (8REV) эти цистеины = 115/133/154/189.

5Ключевой результат (Pt → [4Fe-4S])

Компаратор — улучшенная база оксалиплатина R,R (Δ≡0). Вердикт по Pt–nearest-Fe: |Δ|>0.088 Å = REAL; ≤0.039 Å = шум.

СтруктураТопол.КаррьерPt–nearest-Fe, ÅΔ, ÅВердикт
Frozen base (окса R,R) — якорьбиR,R-DACH12.362(метод −0.007)метод-эффект
Improved base (окса R,R) — компараторбиR,R-DACH12.3550
S,S-оксалиплатин (энантиомер)биS,S-DACH12.351−0.004шум
Монофункц. R,R-оксалиплатинмоноR,R-DACH + aqua12.378+0.023шум
Монофункц. S,S-оксалиплатинмоноS,S-DACH + aqua12.398+0.043borderline
Фенантриплатинмонофенантридин + 2 NH₃12.132−0.223REAL
Пикоплатинмоно2-пиколин + NH₃ + Cl12.137−0.218REAL
R,R-DACP (кольцо-контракция)биR,R-диаминоциклопентан12.321−0.034шум
S,S-DACP (кольцо-контракция)биS,S-диаминоциклопентан12.300−0.055borderline
monoflip — монофункц. R,R на изолир. НЕ-стэкающемся G (ATG*T)моноR,R-DACH + aqua13.053+0.698REAL (follow-on)

Главный вывод: только два объёмных монофункциональных аддукта — фенантриплатин (Δ−0.223 Å) и пикоплатин (Δ−0.218 Å) — реально придвигают Pt к кластеру [4Fe-4S] (за пределами конверта шума). Все стерео (R,R↔S,S), моно-vs-би и контракция DACH→DACP — в пределах шума. Отдельно: сделать гуанин не-стэкающимся (follow-on monoflip, ATG*T, глициозидный флип −35°) — первое одиночно-гуаниновое изменение, двигающее Pt–[4Fe-4S] на реальную величину (+0.698 Å, т.е. дальше от кластера).

6Ограничения и оговорки

7Литература (сверять ID перед цитированием)

Биология XPD / верификация / His135 / продевание

Химия оксалиплатин-d(GpG) и энантио/секвенс-зависимость

Варианты аддуктов

Кластер [4Fe-4S] и движки

8Код и файлы

Ни xpd-oxaliplatin-cofold, ни biometal-xpd-viewer не являются git-репозиториями — это on-disk источники истины на хосте hermes. Внешние структуры — из RCSB.

Основной пайплайн — /root/xpd-oxaliplatin-cofold/

Вьювер — /root/biometal-xpd-viewer/: variants.html, index.html, hbonds.html, methods.html; build_variants_manifest.py; data/variants/; deploy.sh.

9Быстрый старт для полного воспроизведения

# 1) Окружение Boltz на GPU-боксе (Vast.ai; NOT hermes — здесь нет GPU)
cd /root/xpd-oxaliplatin-cofold
bash setup_boltz_env.sh                 # пины из boltz-env.lock.txt

# 2) Ко-фолдинг (P18074 + Y-вилка ДНК + CCD 1PT + CCD SF4 + bond-констрейнты)
python build_input.py                   # -> boltz_input.yaml
bash run_cofold.sh                       # boltz predict --use_msa_server --diffusion_samples 5 -> гейт

# 3) Финальный каркас из 9PCP + прививка оксалиплатина из 1IHH + идеализация куба
python build_9pcp_complex.py             # -> results_threaded/c9pcp_assembled.cif
python graft_routeB.py                   # ставит Pt-d(GpG) на B62/63
python idealize_cluster.py results_threaded/c9pcp_grafted.cif results_threaded/c9pcp_ideal.cif --ref ref_2FDN.cif
# минимизация на hive3070T06 -> results_threaded/c9pcp_min.cif (frozen base)

# 4) Варианты: единый билдер по спеку + гибридная минимизация (пример — фенантриплатин)
python build_adduct.py specs/phen.json   # guanine_transplant из 4Q8E/P9G
bash run_phen_hybrid.sh                   # minimize_adduct.py --topology monofunctional --carrier-mode hybrid

# 5) Измерение + таблица + конверт шума + вердикты
cd results_variants && ../.venv/bin/python build_pt_fes_table.py
python verify_pt_fes_independent.py
bash noise_envelope/run_noise.sh

# 6) Гейты
cd /root/xpd-oxaliplatin-cofold
./.venv/bin/python validate_geometry.py results_variants/phen/phen_min.cif --pore 158,161,192,193,196 --protein-chain A

# 7) Публикация вьювера
cd /root/biometal-xpd-viewer
python build_variants_manifest.py
bash deploy.sh                            # -> Caddy /var/www/xpd-cofold