copy-number/germline-cnv-interpretation/SKILL.md
Classify constitutional (germline) copy number variants for clinical reporting using the 2019 ACMG/ClinGen technical standards points-based framework, with ClassifyCNV and AnnotSV for semi-automated scoring. Covers the separate copy-number-loss and copy-number-gain rubrics, the five-tier classification, ClinGen haploinsufficiency/triplosensitivity and dosage-sensitive regions, de novo and segregation evidence, and population-frequency benign evidence. Use when assigning pathogenic/likely-pathogenic/VUS/likely-benign/benign to a constitutional CNV, scoring a CNV against ACMG/ClinGen criteria, or distinguishing the automatable evidence from the case-specific evidence requiring manual input.
npx skillsauth add GPTomics/bioSkills bio-copy-number-germline-cnv-interpretationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reference examples tested with: ClassifyCNV 1.1+, AnnotSV 3.4+, Python 3.10+ with pandas 2.2+; bedtools 2.31+.
Before using code patterns, verify installed versions match. If versions differ:
python ClassifyCNV.py --help, AnnotSV --versionupdate_clingen.sh; dosage curation changes, and a stale database silently mis-scores.This skill is for constitutional/germline CNVs only. Somatic tumor CNVs use a different framework (AMP/ASCO/CAP and OncoKB tiers) — do not apply ACMG/ClinGen constitutional scoring to a tumor.
"Is this constitutional CNV pathogenic" -> Apply the 2019 ACMG/ClinGen technical standards: a semiquantitative, points-based rubric that sums evidence into one of five clinical categories. There are two separate rubrics — one for copy-number loss, one for copy-number gain — because the evidence for deletion and duplication pathogenicity is different. The total score maps to a five-tier classification.
ClassifyCNV (automates the observed-evidence sections), AnnotSV (ACMG-aligned rank)| Total score | Classification | |-------------|----------------| | >= 0.99 | Pathogenic | | 0.90 to 0.98 | Likely pathogenic | | -0.89 to 0.89 | Variant of uncertain significance (VUS) | | -0.90 to -0.98 | Likely benign | | <= -0.99 | Benign |
Evidence is grouped into sections (the loss and gain rubrics each have five). For copy-number loss: Section 1 — does the CNV contain protein-coding or functionally important elements; Section 2 — overlap with established haploinsufficient genes/regions (strong positive) or established benign regions (strong negative); Section 3 — number of protein-coding genes; Section 4 — detailed case/literature evidence (case-control, prior probands, phenotype specificity); Section 5 — inheritance (de novo with confirmed parentage is strong positive; inherited from an unaffected parent is negative). The gain rubric is structured the same way but keyed to triplosensitivity and the distinct evidence base for duplications.
The decisive postdoc-level point: a tool can only score the evidence it is given. ClassifyCNV and AnnotSV automate Sections 1-3 (gene content, dosage-region overlap, population frequency) well; Sections 4-5 (de novo status, segregation, literature) require the interpreter to supply points. An unsupervised tool run therefore systematically lands CNVs in VUS — the absence of family/literature evidence is not neutral, it is unscored.
| Step | Source | Automatable | |------|--------|-------------| | Gene content, functional elements | RefSeq/GENCODE | Yes (ClassifyCNV/AnnotSV) | | Established HI/TS gene & region overlap | ClinGen dosage map | Yes | | Protein-coding gene count | Gene model | Yes | | Population frequency (benign evidence) | gnomAD-SV, DGV | Yes | | Case-control / prior probands / phenotype fit | Literature, DECIPHER, internal DB | Partial — interpreter scores | | De novo status, segregation | Trio/family data | No — interpreter scores |
Goal: Score the automatable ACMG/ClinGen sections for a set of constitutional CNVs.
Approach: Provide CNVs as a BED with an explicit DEL/DUP type; ClassifyCNV applies the 2019 rubric against the bundled ClinGen databases and emits a per-CNV scoresheet.
# Input BED: chrom, start, end, type (type = DEL or DUP)
python ClassifyCNV.py \
--infile constitutional_cnvs.bed \
--GenomeBuild hg38 \
--precise \
--outdir classifycnv_out
# Output Scoresheet.txt: per-CNV total score, classification, and per-criterion points.
import pandas as pd
def review_classifycnv(scoresheet):
'''Flag CNVs whose ACMG class likely changes once case-specific evidence is added.'''
df = pd.read_csv(scoresheet, sep='\t')
# VUS CNVs near a tier boundary are the ones where de novo / segregation evidence
# (Sections 4-5, not scored automatically) would tip the classification.
df['near_boundary'] = df['Total score'].between(0.60, 0.89) | \
df['Total score'].between(-0.89, -0.60)
df['needs_manual_evidence'] = (df['Classification'] == 'VUS') & df['near_boundary']
return df
AnnotSV -SVinputFile constitutional_cnvs.vcf -genomeBuild GRCh38 \
-annotationMode both -outputFile annotsv_out.tsv
# AnnotSV emits an ACMG-aligned rank (1 benign - 5 pathogenic) per SV; use it to
# cross-check ClassifyCNV, not as a standalone clinical classification.
Trigger: Running ACMG/ClinGen germline classification on tumor copy number.
Mechanism: The 2019 standards are explicitly constitutional; somatic CNV clinical significance uses the AMP/ASCO/CAP tier system and oncology evidence (therapy, prognosis).
Symptom: Tumor amplifications classified as "pathogenic germline variants"; clinically meaningless report.
Fix: Confirm the CNV is constitutional (present in germline DNA). For tumors, use somatic oncology frameworks — see clinical-databases/variant-prioritization.
Trigger: Reporting ClassifyCNV/AnnotSV output verbatim without adding case evidence.
Mechanism: Tools score gene content, dosage overlap, and frequency, but not de novo status, segregation, or literature; absent that input the score sits in the VUS band.
Symptom: Nearly every novel CNV classified VUS; clinically relevant de novo deletions under-called.
Fix: Treat tool output as the Section 1-3 baseline. Add Section 4-5 points from trio data, segregation, DECIPHER, and literature before issuing a classification. A VUS near a tier boundary specifically signals missing case evidence.
Trigger: Using ClassifyCNV/AnnotSV bundled databases without updating.
Mechanism: ClinGen dosage curation is ongoing; HI/TS scores and dosage-sensitive regions change. A stale database scores Section 2 wrong.
Symptom: A gene with a newly curated HI score 3 is scored as having no dosage evidence; classification too low.
Fix: Run the database update script before a classification batch; record the ClinGen release date in the report.
Trigger: CNV coordinates and the --GenomeBuild argument (or annotation databases) on different builds.
Mechanism: Coordinates silently shift; the wrong genes and dosage regions are scored.
Symptom: Implausible gene content; a known disorder locus scored as gene-poor.
Fix: Confirm CNV coordinates, --GenomeBuild, and all databases are the same build; verify a landmark CNV.
Trigger: Scoring a deletion that removes only part of a haploinsufficient gene as a full-gene loss.
Mechanism: The rubric distinguishes whole-gene loss from partial overlap; a deletion of a few exons may create a truncating allele with different (sometimes greater) impact, scored under different criteria.
Symptom: Partial-gene CNVs mis-scored; truncating deletions under- or over-weighted.
Fix: Record whether the CNV removes the whole gene or part of it, and which exons; apply the rubric's partial-overlap criteria explicitly.
| Pattern | Likely cause | Action | |---------|--------------|--------| | ClassifyCNV VUS, AnnotSV rank 4 | Different weighting of the same evidence | Re-derive points manually against the 2019 standard | | Tool says benign, locus is a known disorder | Stale dosage database or build mismatch | Update databases; verify build | | Two interpreters disagree on a VUS | Section 4-5 evidence weighted differently | Use the ClinGen calculator; document each criterion | | De novo deletion still VUS | Section 5 points not added | Add confirmed-de-novo points |
Operational rule: A clinical CNV classification is final only when (1) the CNV is confirmed constitutional, (2) databases and builds are current and consistent, (3) the automatable Sections 1-3 are scored by a tool, and (4) the interpreter has scored Sections 4-5 from case-specific evidence. Document each criterion and its points; the ClinGen web calculator is the reference tally.
| Threshold | Value | Source / Rationale | |-----------|-------|--------------------| | Pathogenic | total score >= 0.99 | Riggs 2020 ACMG/ClinGen technical standards | | Likely pathogenic | 0.90 to 0.98 | Riggs 2020 | | VUS | -0.89 to 0.89 | Riggs 2020 | | Likely benign | -0.90 to -0.98 | Riggs 2020 | | Benign | <= -0.99 | Riggs 2020 | | Established dosage sensitivity | ClinGen HI/TS score = 3 | ClinGen: sufficient evidence | | Common-CNV benign frequency | high population frequency | Section 2/4 benign evidence |
| Error / symptom | Cause | Solution | |-----------------|-------|----------| | Tumor CNVs classified "pathogenic germline" | Constitutional rubric applied to somatic | Use somatic oncology frameworks | | Almost everything classified VUS | Sections 4-5 not scored | Add de novo/segregation/literature points | | Known disorder locus scored benign | Stale dosage DB or build mismatch | Update ClinGen databases; check build | | Wrong genes scored | Build mismatch | Align coordinates, --GenomeBuild, databases | | Partial-gene deletion mis-scored | Whole-gene assumption | Apply partial-overlap criteria | | ClassifyCNV vs AnnotSV disagree | Different evidence weighting | Re-derive against the 2019 standard manually |
tools
End-to-end CLIP-seq pipeline from FASTQ to ENCODE-compliant binding sites, single-nucleotide crosslink maps, annotation, motifs, and (optionally) differential binding. Use when running the full Yeo lab eCLIP / iCLIP / iCLIP2 / iCLIP3 / irCLIP / PAR-CLIP analysis with SMInput control, protocol-specific UMI extraction, ENCODE STAR parameters, CLIPper or Skipper peak calling with stringent log2 FC and -log10 p thresholds, IDR rescue and self-consistency QC, and downstream motif registration with mCross or PEKA.
development
Detect, date, and contextualize whole-genome duplication (WGD / paleopolyploidy) events using wgd v2 (Chen et al 2024), KsRates (Sensalari 2022 substitution-rate-corrected Ks dating), DupGen_finder (Qiao 2019), MAPS (Li 2018 phylogenomic), POInT (Conant 2008 ordered-block), SLEDGe (2024 ML-based), Whale.jl (Bayesian DL+WGD), and synteny-anchored paranome construction. Use when identifying ancient polyploidy from Ks distributions and synteny block analysis, positioning WGD events relative to speciation, distinguishing tandem from segmental from WGD duplications, dating the 2R/3R vertebrate / fish / salmonid WGDs, building paranome and Ks-age mixture models, applying KsRates substitution-rate correction across lineages, or testing alternative biased-fractionation / dosage-balance models post-WGD.
tools
Build whole-genome alignments using Progressive Cactus (Armstrong 2020 reference-free clade-level WGA), Minigraph-Cactus (Hickey 2024 pangenome-aware), LASTZ chain/net (UCSC pipeline), MUMmer4 (Marçais 2018 pairwise), minimap2 -x asm5/10/20 (Li 2018 fast pairwise), AnchorWave (Song 2022 WGD-aware), and Mauve / progressiveMauve (bacterial). Operates the HAL toolkit (Hickey 2013) for downstream extraction including halSynteny, halLiftover, halBranchMutations, and hal2maf. Use when constructing multi-species alignments for comparative-annotation projection (TOGA), synteny detection, conservation analyses (phyloP / PhastCons), or pangenome graph construction; selecting between reference-free (Cactus) and reference-anchored (LASTZ chains/nets) approaches; tuning sensitivity for closely vs distantly related genomes; or producing HAL files for genome-wide downstream tools.
development
Detect syntenic blocks and structural rearrangements between genomes using MCScanX (Wang 2012), JCVI/MCScan (Tang 2008 Python), GENESPACE (Lovell 2022) for orthology-anchored riparian visualization, SyRI for structural variation, AnchorWave for sequence-level synteny, i-ADHoRe 3.0 for highly diverged species, SynNet for synteny networks, and ntSynt for multi-genome macrosynteny. Use when identifying collinear gene blocks across species, distinguishing macrosynteny from microsynteny, detecting inversions/translocations/duplications, anchoring orthology in WGD lineages, producing publication riparian plots, computing synteny block age via Ks (cross-references whole-genome-duplication), or running synteny-aware ortholog inference in polyploids.