614ca430db1c23f496ccc5655d27b469e1c53443
lrnassar
  Fri Jul 31 16:38:30 2026 -0700
Apply Cardiomyopathy VCEP feedback: BP7 splice-only, drop PS4 tracks, evidence-first Variant Evidence Summary. refs #37446

Per the CM VCEP's answers to the interpretation questions:
- BP7: remove the conservation (phyloP) requirement and set the SpliceAI cutoff
to < 0.1, per Walker 2023 (PMID 37352859).
- PS4: remove the Walsh 2017 gene-level OR and Atlas EF display tracks (the VCEP
computes PS4 from current cohorts). Scripts and data are retained in the tree;
the tracks are dropped from the hub trackDb.
- Rename the former provisional/computable-codes track to "Variant Evidence
Summary" and switch its mouseover to an evidence-first layout: each item leads
with the data and is tagged with the ACMG criterion it would support; no overall
classification is computed.
- Confirmed and reflected in the docs: EvRepo is the PS1/PM5 reference (Q1); the
PM4 last-exon / within-50-nt rule (Q2); CardioBoost stays informational (Q6);
the PM1 codon ranges are HCM-only (Q8); no functional-score dataset is currently
VCEP-approved (Q4).

diff --git src/hg/makeDb/doc/Cardiomyopathy.txt src/hg/makeDb/doc/Cardiomyopathy.txt
index d55bf901d20..2fdcad99aa9 100644
--- src/hg/makeDb/doc/Cardiomyopathy.txt
+++ src/hg/makeDb/doc/Cardiomyopathy.txt
@@ -14,31 +14,33 @@
 #   GN101  ACTC1   v1.0.0  HCM (AD)
 #   GN102  MYL2    v1.0.0  HCM (AD)
 #   GN103  MYL3    v1.0.0  HCM (AD)
 #
 # ARVC genes are out of scope (separate ClinGen panel, affiliation 40003).
 #
 # Expert contacts:
 #   Lucas Bronicki, PhD, FACMG     — Cardiomyopathy VCEP Chair
 #   Haley Garrett, MPH             — Coordinator (Haley_Garrett@med.unc.edu)
 #   ClinVar submitter ID:          506161 ("ClinGen Cardiomyopathy Variant
 #                                  Curation Expert Panel")
 #
 # Calibration sources:
 #   Walsh 2017 (PMID 27532257; Genet Med; DOI 10.1038/gim.2016.90)
 #                                   — PS4 case-control reference (Tables S5A/S5B;
-#                                     60,706 ExAC samples; 7,855 cases)
+#                                     60,706 ExAC samples; 7,855 cases). NOTE: the
+#                                     Walsh-2017 PS4 track was RETIRED from the hub
+#                                     2026-07 per the VCEP (Q5).
 #   Walsh 2019 (PMID 30696458; Genome Medicine; DOI 10.1186/s13073-019-0616-z)
 #                                   — PM1 hotspot codon ranges (Table S4),
 #                                     per-gene NonTrunc ExAC denominators
 #                                     (Table S1), and 155 pre-EvRepo per-variant
 #                                     curations (Table S6)
 #
 # MANE Select transcripts (verified against /gbdb/hg38/mane/mane.bb):
 #   MYH7    NM_000257.4    NP_000248.2    chr14 (-)
 #   MYBPC3  NM_000256.3    NP_000247.2    chr11 (-)
 #   TNNT2   NM_001276345.2 NP_001263274.1 chr1  (-)
 #   TNNI3   NM_000363.5    NP_000354.4    chr19 (-)
 #   TPM1    NM_001018005.2 NP_001018005.1 chr15 (+)  ← only plus-strand gene
 #   ACTC1   NM_005159.5    NP_005150.1    chr15 (-)
 #   MYL2    NM_000432.4    NP_000423.2    chr12 (-)
 #   MYL3    NM_000258.3    NP_000249.1    chr3  (-)
@@ -60,34 +62,34 @@
 #     hub.txt, genomes.txt
 #     hg38/trackDb.txt, hg19/trackDb.txt
 #     cardiomyopathy.html               (shared description page)
 #     cmp_downloads/                    (source data — checked at A.0 + cached)
 #     scripts_local_copy/               (insurance copy of all 12 build scripts;
 #                                        live copy is at ~/kent/...)
 #     cmpVCEPClinDomains/               (PM1 hotspot regions)
 #     cmpVCEPPVS1/                      (MYBPC3-only PVS1 caveats)
 #     cmpVCEPAFfrequencies/             (gnomAD v4.1 BA1/BS1/PM2_supporting)
 #     cmpVCEPAnnotate/                  (hgVai consequence + HGVSp annotation TSV)
 #     cmpVCEPRevel/                     (REVEL PP3/BP4)
 #     cmpVCEPCardioBoost/               (CardioBoost missense predictor — off)
 #     cmpVCEPEvRepo/                    (VCEP Curated Variants — EvRepo, with codes)
 #     cmpVCEPClinVar506161/             (VCEP ClinVar submissions, no codes)
 #     cmpVCEPWalsh2019/                 (Walsh 2019 Pre-EvRepo Table S6 curations)
-#     cmpVCEPWalshOR/                   (Walsh 2017 gene-level OR — PS4)
+#     cmpVCEPWalshOR/                   (Walsh 2017 gene-level OR — PS4; RETIRED from hub, Q5)
 #     cmpVCEPAtlasEF/                   (Atlas of Cardiac Genetic Variation
-#                                        per-variant + UCSC-computed OR — PS4)
-#     cmpVCEPProvisionalClass/          (Computable ACMG Criteria Summary; per-variant codes)
+#                                        per-variant + UCSC OR — PS4; RETIRED from hub, Q5)
+#     cmpVCEPProvisionalClass/          (Variant Evidence Summary; per-variant evidence + criteria)
 #
 # Build scripts:                     ~/kent/src/hg/makeDb/scripts/cardiomyopathyVCEP/
 #     cmpVCEPClinDomains.py             (B.1 — PM1 hotspot regions; also provides
 #                                        parse_mane_record, cds_exons,
 #                                        aa_to_genomic_segments helpers imported
 #                                        by B.2, B.6, B.9, B.11)
 #     cmpVCEPPVS1.py                    (B.2)
 #     cmpVCEPAFfrequencies.py           (B.3; fetch_gene_variants() defines the
 #                                        shared variant universe reused by B.6/B.11)
 #     cmpVCEPAnnotate.py                (B.6 — hgVai consequence/HGVSp annotation)
 #     cmpVCEPRevel.py                   (B.4)
 #     cmpVCEPCardioBoost.py             (B.5)
 #     cmpVCEPEvRepo.py                  (B.7)
 #     cmpVCEPWalsh2019.py               (B.7c)
 #     cmpVCEPClinVar506161.py           (B.8)
@@ -148,32 +150,32 @@
 #          TNNT2   89-189       (MANE NM_001276345.2; classic NM_001001430.2 = 79-179)
 #          TNNI3   141-209
 #          (TPM1, ACTC1, MYL2, MYL3 — no PM1 region defined)
 #        MYBPC3 PVS1 caveats:
 #          NMD-escape boundary: codon 1254+
 #          Micro-exons:         10, 11, 14
 #          In-frame exons:      2, 3, 4, 8, 9, 10, 11, 14, 20, 22, 24, 25, 26, 27
 #
 #      CSpec points where the spec is silent / leaves a curator choice (provisional
 #      decisions made for the build; posed to the VCEP for confirmation):
 #        - PS1/PM5 reference DB of "established pathogenic" (spec says "per
 #          Richards 2015", names none) — build uses VCEP EvRepo P/LP, leave-one-out.
 #        - PM4 for MYH7 (PVS1 N/A): spec redirects PM4 to non-NMD truncating at
 #          Moderate/Supporting, no boundary given — build uses last exon OR within
 #          50 nt of the final exon-exon junction.
-#        - BP7 "not highly conserved": no metric/cutoff in spec — build uses
-#          phyloP470way <= 0 together with SpliceAI < 0.20.
+#        - BP7 "not highly conserved": the VCEP removed the conservation requirement
+#          and set BP7 at SpliceAI < 0.1 (Walker 2023, PMID 37352859).
 #
 #
 # A.2  ClinGen EvRepo classifications (REST JSON)
 #
 #      curl -fsSL 'https://erepo.genome.network/evrepo/api/classifications?expertpanel=Cardiomyopathy+VCEP&format=json' \
 #        -o cmp_downloads/erepo/cardiomyopathyVCEP_classifications.json
 #
 #      State at 2026-06-29 refresh: 25 variants (all MYH7). One change vs the
 #      April pull — CAR:CA016422 moved Likely Pathogenic -> Uncertain Significance.
 #      April JSON retained as *.april2026.json.bak.
 #
 #
 # A.3  ClinVar submitter 506161 (filter from weekly VCV release)
 #
 #      Precise column-10 match against the submission_summary (loose grep over-
@@ -186,31 +188,31 @@
 #      expert panel". Classifications: 33 P + 32 LP + 75 VUS + 9 LB + 50 B = 199.
 #
 #
 # A.4  gnomAD v4.1 exomes (already on hgwdev; no download)
 #      /hive/data/outside/gnomAD.4/v4.1/exomes/gnomad.exomes.v4.1.sites.chr{N}.vcf.bgz
 #      Field used: fafmax_faf95_max (max FAF95 across genetic ancestry groups),
 #      queried per-region via tabix.
 #      Public mirror: https://hgdownload.soe.ucsc.edu/gbdb/hg38/gnomAD/v4.1/exomes/exomes.bb
 #
 # A.5  REVEL (already on hgwdev; no download)
 #      /gbdb/hg38/revel/{a,c,g,t}.bw  (per-alt-nucleotide bigwigs)
 #      Public mirror: https://hgdownload.soe.ucsc.edu/gbdb/hg38/revel/
 #
 # A.6  SpliceAI (already on hgwdev; no download)
 #      /gbdb/hg38/bbi/spliceAi.bb  (bed9+4; AIscore in col 9, name="ref>alt")
-#      Used by the B.11 SpliceAI safety net and BP7.
+#      Used by the B.11 splice flag and BP7 (SpliceAI < 0.1).
 #
 # A.7  CardioBoost precomputed predictions
 #      cmp_downloads/cardioboost/cm_prediction.RData  (precomputed table,
 #        ~65k rows; ~31k in our 8 genes — NOT just model objects)
 #      Source: https://github.com/ImperialCardioGenetics/CardioBoost_manuscript
 #      Loaded via /usr/bin/Rscript (the team Rscript is broken on hgwdev —
 #      missing libgfortran.so.3). Coordinates are GRCh37 with numeric chrom
 #      names; B.5 adds the chr prefix and liftOvers to hg38.
 #
 # A.8  Walsh PS4 + PM1 calibration supplements
 #      mkdir -p cmp_downloads/walsh ; cd cmp_downloads/walsh
 #      # Walsh 2017 (PS4 case-control) — Springer direct (avoids PMC PoW challenge)
 #      curl -fsSL -o walsh2017_supplement.zip \
 #        "https://static-content.springer.com/esm/art%3A10.1038%2Fgim.2016.90/MediaObjects/41436_2017_BFgim201690_MOESM9_ESM.zip"
 #      unzip -o walsh2017_supplement.zip   # -> Supplementary_Tables_resubmit.xlsx
@@ -314,122 +316,127 @@
 #      are rendered: the 32 previously unmatched-to-ClinVar entries (complex
 #      indels + 4 TNNT2 SNVs incl. R92W) are placed via walsh_coords_via_tool()
 #      = hgvsToVcf on each gene's Walsh-paper transcript, gated on FILTER==PASS.
 #      TNNT2 uses NM_001001430.2 (MANE gives HgvsRefAssertedMismatch); TNNT2 hg19
 #      coords via liftOver from hg38. 27 variants tagged "Walsh-upgraded" (the new
 #      PM1 EF rule, asterisked in Table S6). Classification strings normalized to
 #      "Uncertain Significance" (not "VUS"). Standard ACMG ramp.
 #
 # B.8  cmpVCEPClinVar506161.py — VCEP ClinVar submissions (Final, no codes)
 #      Output: 199 features. Joined to variant_summary for hg38 + hg19 coords.
 #      All carry review status "reviewed by expert panel". 25 of 199 overlap
 #      EvRepo (flagged inline in the mouseover). Standard 5-tier ACMG ramp (the
 #      earlier desaturated palette was dropped). Carries no per-code evidence.
 #
 # B.9  cmpVCEPWalshOR.py — Walsh 2017 gene-level case-control OR (PS4)
+#      [RETIRED from the hub 2026-07 per the VCEP (Q5: do not display Walsh 2017/2019
+#       PS4; ORs use current cohorts). Script + data retained in the tree for reference.]
 #      Source: Walsh 2017 Supplementary_Tables_resubmit.xlsx, Tables S5A (HCM) /
 #      S5B (DCM). Output: 48 features = 8 genes x {HCM, DCM} x {All protein-
 #      altering, Truncating, Non-truncating}, each spanning the gene CDS (MANE),
 #      filterable by gene / cohortDisease / variantClass / ps4Strength.
 #      PS4 strength by OR 95%-CI lower bound (Strong >=20, Moderate >=10,
 #      Supporting >=5, else below threshold): Strong 1, Moderate 7, Supporting 9,
 #      below threshold 31. Standout: MYBPC3 truncating-HCM OR 118.8 (86.1-163.9)
 #      -> Strong. hg38 from MANE CDS; hg19 via liftOver. Replaces the earlier
 #      Walsh-2019 EF table (a different statistic; per CSpec, PS4 cites Walsh 2017).
 #
 # B.10 cmpVCEPAtlasEF.py — Atlas per-variant case-counts + UCSC-computed OR (PS4)
+#      [RETIRED from the hub 2026-07 per the VCEP (Q5). Script + data retained.]
 #      Source: cmp_downloads/atlas/variants/var_*.html (173 parsed; 16 parse
 #      failures). Output: 178 features (a variant renders once per disease cohort
 #      where it has data). UCSC computes the OR (Fisher 2x2 with Haldane 0.5
 #      correction; Woolf log-OR 95% CI) from Atlas case counts against ExAC
 #      controls; per-gene Walsh-2019 NonTrunc ExAC denominators are used for
 #      non-truncating vartypes, else the 60,706 baseline. PS4 strength binning:
 #      Strong 16, Moderate 30, Supporting 44, below threshold 88. Every mouseover
 #      carries the caveat that the OR is UCSC-computed against ExAC (not gnomAD).
 #
-# B.11 cmpVCEPProvisionalClass.py — Computable ACMG Criteria Summary
-#      (Formerly "NON-FINAL Provisional Classification"; reframed 2026-07-08 per
-#      the CM VCEP chair L. Bronicki. The track no longer computes an overall ACMG
-#      classification, only the computable codes that fire per variant.)
+# B.11 cmpVCEPProvisionalClass.py — Variant Evidence Summary
+#      (Formerly "NON-FINAL Provisional Classification"; reframed 2026-07 per the
+#      CM VCEP. Computes no overall classification. For each variant it lists,
+#      evidence-first, the computable evidence and the ACMG criterion each item
+#      would support.)
 #      Variant universe: identical to B.3 (10,974). Consumes the B.6 annotation
-#      TSV. Computable codes applied: BA1/BS1/PM2_supporting (B.3 FAF95),
+#      TSV. Evidence gathered: BA1/BS1/PM2_supporting (B.3 FAF95),
 #      PP3/BP4 (REVEL, missense), PM1 (CSpec hotspot region), PS1/PM5 (EvRepo
 #      P/LP reference, leave-one-out; a variant cannot earn the code from its
 #      own entry; PS1 reference excludes established splice-impact variants e.g.
 #      MYBPC3 c.2308G>A), PM4 (NMD-escaping truncating, non-MYBPC3: last exon or
 #      within 50 nt of the final exon-exon junction), BP7 (synonymous +
-#      SpliceAI < 0.20 + phyloP470way <= 0). PM1<->PM5 mutual exclusion enforced
-#      per CSpec (keep PM5, the variant-specific code; drop PM1; PM1+PS1
-#      co-occurrence flagged). HCM/DCM diseaseTag populated. A SpliceAI score
-#      >= 0.20 is recorded as an informational splice flag.
-#      Per-variant output = the list of triggered codes only; NO overall
+#      SpliceAI < 0.1, per Walker 2023 PMID 37352859; conservation requirement
+#      removed per the VCEP). PM1<->PM5 mutual exclusion enforced per CSpec (keep
+#      PM5, the variant-specific code; drop PM1; PM1+PS1 co-occurrence flagged).
+#      HCM/DCM diseaseTag populated. A SpliceAI score >= 0.20 is recorded as an
+#      informational splice flag.
+#      Mouseover is evidence-first ("evidence -> supports CODE"); NO overall
 #      classification is calculated. The GN002 combining logic remains in the
 #      script as classify() but is retired/uncalled. Clinical/functional codes
 #      (PS2/PS3/PS4/PP1/PP4/BS3/BS4) are not computed. Single neutral display
 #      color 91,107,122; no classification encoded.
-#      Output: 10,974 features. Code firing: BA1 210, BS1 367, PM2_Supporting
-#      9,893, PP3 1,436, BP4 1,647, BP7 1,356, PM1 1,293, PM4 27, PM5 11, PS1 0.
+#      Output: 10,974 features. Evidence firing: BA1 210, BS1 367, PM2_Supporting
+#      9,893, PP3 1,436, BP4 1,647, BP7 2,419, PM1 1,293, PM4 27, PM5 11, PS1 0.
 
 
 ##############################################################################
 # Phase C: Hub assembly
 ##############################################################################
 #
 # Files written/maintained by hand (NOT generated by the build scripts):
 #   hub.txt, genomes.txt
 #   cardiomyopathy.html        (shared description page; hub descriptionUrl)
 #   hg38/trackDb.txt
 #   hg19/trackDb.txt           (mirrors hg38; differs in bigDataUrl + an hg19
 #                              provenance header noting liftOver-derived coords)
 #
-# trackDb structure: 7 top-level groups -> 11 tracks. Three are composites:
-#   Bioinformatic (REVEL on + CardioBoost off), VCEP Curated Variants (EvRepo on
-#   + ClinVar off + Walsh 2019 off), PS4 Case-Control (Walsh OR on + Atlas EF off).
+# trackDb structure: 6 top-level groups -> 9 tracks. Two are composites:
+#   Bioinformatic (REVEL on + CardioBoost off) and VCEP Curated Variants (EvRepo on
+#   + ClinVar off + Walsh 2019 off). (The PS4 Case-Control composite was retired
+#   from the hub per the VCEP, 2026-07.)
 # bigBed filterValues on the ACMG-code / ps4Strength fields; default visibility
 # tuned so the first view is clean (dense for the big per-variant tracks).
 #
 # Validation:
 #   hubCheck https://hgwdev.gi.ucsc.edu/~lrnassar/track_hubs/cardiomyopathyVCEP/hub.txt
 #
 # Web access (sandbox; working dir served directly via symlink):
 #   ln -sf /hive/users/lrnassar/claude/RM37446 \
 #          /cluster/home/lrnassar/public_html/track_hubs/cardiomyopathyVCEP
 #   Hub URL: https://hgwdev.gi.ucsc.edu/~lrnassar/track_hubs/cardiomyopathyVCEP/hub.txt
 
 
 ##############################################################################
 # Phase D: Verification
 ##############################################################################
 #
 # (Build verification only. QA history, audit findings, and review/release
 #  readiness are tracked in Redmine #37446, not here.)
 #
 #   - hubCheck: silent pass (exit 0) on hg38 + hg19.
 #   - Cross-assembly parity (hg38 == hg19 feature counts):
 #       PM1 28 | PVS1 16 | AF 10,974 | REVEL 22,466 | EvRepo 25 | Walsh2019 155 |
-#       ClinVar 199 | WalshOR 48 | AtlasEF 178 | Computable codes 10,974 |
-#       CardioBoost 31,236
+#       ClinVar 199 | Variant evidence 10,974 | CardioBoost 31,236
 #   - Worked example, MYH7 p.Arg870His (NM_000257.4:c.2609G>A, chr14:23424839 hg38):
 #       EvRepo:       Pathogenic, codes PM1;PM2;PP1_Strong;PS4
 #       EvRepo R870C: Likely Pathogenic at the adjacent codon-870 position
 #                     (the PS1/PM5 partner)
 #       PM1:          within MYH7 167-931
 #       REVEL:        0.853 -> PP3_supporting
 #       gnomAD AF:    absent from v4.1 exomes -> PM2_supporting
-#       Walsh OR:     MYH7 non-truncating HCM, OR 12.0 (10.9-13.3) -> Moderate
-#       Computable codes: PM1+PM2+PP3 triggered; no overall classification is
-#                     computed (the VCEP Pathogenic call rests on PS4+PP1, manual)
+#       Variant evidence: PM1 hotspot, PM2 rarity, PP3/REVEL shown (each tagged with
+#                     the criterion it supports); no overall classification (the VCEP
+#                     Pathogenic call rests on PS4+PP1, manual)
 
 
 ##############################################################################
 # Phase E: Otto cron (TODO — gated on VCEP sign-off; do AFTER deployment)
 ##############################################################################
 #
 # DO NOT enable until the VCEP signs off (Phase F gate). The weekly refresh
 # touches EvRepo + ClinVar 506161 only; premature activation could surface
 # unreviewed VCEP curations on the public hub.
 #
 # Mirror the TP53 pattern at /hive/data/outside/otto/cardiomyopathyVCEP/
 # (doUpdate.sh + checkCMPVCEPClinVar.sh). Crontab (NOT activated until sign-off):
 #   # Cardiomyopathy VCEP weekly EvRepo + ClinVar update
 #   2x 03 * * 2 umask 002; /hive/data/outside/otto/cardiomyopathyVCEP/doUpdate.sh
 # Tuesday ~03:2x UTC — offset a few minutes from TP53 (03:15) and InSiGHT (03:10).