diff --git a/browser/help/topics/dataset-selection.md b/browser/help/topics/dataset-selection.md index 486d6880b..625a54095 100644 --- a/browser/help/topics/dataset-selection.md +++ b/browser/help/topics/dataset-selection.md @@ -56,3 +56,6 @@ The following subsets from previous versions are currently available, but access - _gnomAD SVs v2.1: Structural variant (SV) calls generated from a set of GS samples that largely overlaps those in gnomAD v2.1. This current SV release includes 10,847 unrelated genomes. See the [gnomAD-SV paper](https://broad.io/gnomad_sv) for details._ - _gnomAD SVs v2.1 (non-neuro): Only samples from individuals who were not ascertained for having a neurological condition in a neurological case/control study._ - _gnomAD SVs v2.1 (controls): Only samples from individuals who were not selected as a case in a case/control study of common disease._ + + +The data selection drop-down also updates accompanying data such as the coverage plot, constraint statistics, regional constraint, and variant positional distribution plot. diff --git a/browser/src/ConstraintTable/__snapshots__/ConstraintTable.spec.tsx.snap b/browser/src/ConstraintTable/__snapshots__/ConstraintTable.spec.tsx.snap index 2505d48e5..3fe6ed064 100644 --- a/browser/src/ConstraintTable/__snapshots__/ConstraintTable.spec.tsx.snap +++ b/browser/src/ConstraintTable/__snapshots__/ConstraintTable.spec.tsx.snap @@ -30,7 +30,7 @@ exports[`ConstraintTable with "exac" dataset selected with a mitochondrial trans

`; -exports[`ConstraintTable with "gnomad_r2_1" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_cnv_r4" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [
`; -exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a minimal gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_cnv_r4" dataset selected with a minimal gene has no unexpected changes 1`] = `

Constraint not available for this gene

`; -exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_cnv_r4" dataset selected with a minimal transcript has no unexpected changes 1`] = `

Constraint not available for this transcript

`; -exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_cnv_r4" dataset selected with a mitochondrial gene has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -799,7 +799,7 @@ exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondria

`; -exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_cnv_r4" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -807,11 +807,8 @@ exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondria

`; -exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [ -

- Constraint is based on the full gnomAD dataset, not the selected subset. -

,
- Constraint is based on the full gnomAD dataset, not the selected subset. -

, -
-
- - - + +
+ + + + + - + + + + + + + + + - - - - - + + + + - - + - - - + + + + - - - - - - - + - - - -
+ Category + + - Category - + + + Observed SNVs + + + Constraint metrics + +
+ Synonymous + + + 0.2 + + + + Z = + + + 0.46 + +
+ + o/e = - Expected SNVs + 0.91 - -
+ + ( - Observed SNVs + 0.8 - + 0.95 + + ) + + + + - Constraint metrics - - -
+ 0 + + + + + + 1 + + + +
+ Missense + + - Synonymous - - + 0.3 + + + + Z = + + + 0.57 + +
+ + o/e = - 0.2 + 0.89 -
- - Z = + ( - 0.46 + 0.8 -
+ - + - o/e = - - 0.91 - - - ( - - 0.8 - - - - - - 0.95 - - ) + 0.99 -
- + + + - - 0 - - - - - - 1 - - -
+ + + + + 1 + + + +
+ pLoF + + - Missense - - + 0.1 + + + + pLI = + + 0.68 + +
+ + o/e = - 0.3 + 0.79 -
- - Z = + ( - 0.57 - -
- - o/e = - - 0.89 - - - ( - - 0.8 - - - - - - 0.99 - - ) + 0.6 -
- - - 0 - - - - - - 1 - - -
- pLoF - + - + - 0.1 + 0.9 - - - pLI = - + + + - 0.68 - -
- - o/e = - - 0.79 - - - ( - - 0.6 - - - - - - 0.9 - - ) - -
- + + + + - - 0 - - - - - - 1 - - -
- , -] + 1 + + + +
+
`; -exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a minimal gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a minimal gene has no unexpected changes 1`] = `

Constraint not available for this gene

`; -exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a minimal transcript has no unexpected changes 1`] = `

Constraint not available for this transcript

`; -exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondrial gene has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -1584,7 +1576,7 @@ exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mit

`; -exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -1592,7 +1584,7 @@ exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mit

`; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -1980,7 +1972,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and gene ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -2347,21 +2339,21 @@ exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and tran ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a minimal gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a minimal gene has no unexpected changes 1`] = `

Constraint not available for this gene

`; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a minimal transcript has no unexpected changes 1`] = `

Constraint not available for this transcript

`; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mitochondrial gene has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -2369,7 +2361,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a m

`; -exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_controls" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -2377,7 +2369,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a m

`; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -2765,7 +2757,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and gene ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -3132,21 +3124,21 @@ exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and trans ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a minimal gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a minimal gene has no unexpected changes 1`] = `

Constraint not available for this gene

`; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a minimal transcript has no unexpected changes 1`] = `

Constraint not available for this transcript

`; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a mitochondrial gene has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -3154,7 +3146,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mi

`; -exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_cancer" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -3162,7 +3154,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mi

`; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -3550,7 +3542,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and gene ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` [

Constraint is based on the full gnomAD dataset, not the selected subset. @@ -3917,21 +3909,1799 @@ exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and tran ] `; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a minimal gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not available for this + gene +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not available for this + transcript +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint is not available for mitochondrial + + genes +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_neuro" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint is not available for mitochondrial + + transcripts +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +[ +

+ Constraint is based on the full gnomAD dataset, not the selected subset. +

, +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + + Expected SNVs + + + + Observed SNVs + + + Constraint metrics + +
+ Synonymous + + + 0.2 + + + + Z = + + + 0.46 + +
+ + o/e = + + 0.91 + + + ( + + 0.8 + + - + + + 0.95 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ Missense + + + 0.3 + + + + Z = + + + 0.57 + +
+ + o/e = + + 0.89 + + + ( + + 0.8 + + - + + + 0.99 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ pLoF + + + 0.1 + + + + pLI = + + 0.68 + +
+ + o/e = + + 0.79 + + + ( + + 0.6 + + - + + + 0.9 + + ) + +
+ + + 0 + + + + + + 1 + + +
+
, +

+ Constraint metrics based on + Ensembl canonical + transcript ( + + transcript-999 + . + 12.34.5 + + ). +

, +] +`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +[ +

+ Constraint is based on the full gnomAD dataset, not the selected subset. +

, +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + + Expected SNVs + + + + Observed SNVs + + + Constraint metrics + +
+ Synonymous + + + 0.2 + + + + Z = + + + 0.46 + +
+ + o/e = + + 0.91 + + + ( + + 0.8 + + - + + + 0.95 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ Missense + + + 0.3 + + + + Z = + + + 0.57 + +
+ + o/e = + + 0.89 + + + ( + + 0.8 + + - + + + 0.99 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ pLoF + + + 0.1 + + + + pLI = + + 0.68 + +
+ + o/e = + + 0.79 + + + ( + + 0.6 + + - + + + 0.9 + + ) + +
+ + + 0 + + + + + + 1 + + +
+
, +] +`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not available for this + gene +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not available for this + transcript +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint is not available for mitochondrial + + genes +

+`; + +exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint is not available for mitochondrial + + transcripts +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a minimal gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +

+ Constraint not yet available for gnomAD v3. +

+`; + +exports[`ConstraintTable with "gnomad_r4" dataset selected and gene with available constraint has no unexpected changes 1`] = ` +[ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + + Expected SNVs + + + + Observed SNVs + + + Constraint metrics + +
+ Synonymous + + + 0.2 + + + + Z = + + + 0.46 + +
+ + o/e = + + 0.91 + + + ( + + 0.8 + + - + + + 0.95 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ Missense + + + 0.3 + + + + Z = + + + 0.57 + +
+ + o/e = + + 0.89 + + + ( + + 0.8 + + - + + + 0.99 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ pLoF + + + 0.1 + + + + pLI = + + 0.68 + +
+ + o/e = + + 0.79 + + + ( + + 0.6 + + - + + + 0.9 + + ) + +
+ + + 0 + + + + + + 1 + + +
+
, +

+ Constraint metrics based on + Ensembl canonical + transcript ( + + transcript-999 + . + 12.34.5 + + ). +

, +] +`; + +exports[`ConstraintTable with "gnomad_r4" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + + Expected SNVs + + + + Observed SNVs + + + Constraint metrics + +
+ Synonymous + + + 0.2 + + + + Z = + + + 0.46 + +
+ + o/e = + + 0.91 + + + ( + + 0.8 + + - + + + 0.95 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ Missense + + + 0.3 + + + + Z = + + + 0.57 + +
+ + o/e = + + 0.89 + + + ( + + 0.8 + + - + + + 0.99 + + ) + +
+ + + 0 + + + + + + 1 + + +
+ pLoF + + + 0.1 + + + + pLI = + + 0.68 + +
+ + o/e = + + 0.79 + + + ( + + 0.6 + + - + + + 0.9 + + ) + +
+ + + 0 + + + + + + 1 + + +
+
+`; + +exports[`ConstraintTable with "gnomad_r4" dataset selected with a minimal gene has no unexpected changes 1`] = `

Constraint not available for this gene

`; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a minimal transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r4" dataset selected with a minimal transcript has no unexpected changes 1`] = `

Constraint not available for this transcript

`; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r4" dataset selected with a mitochondrial gene has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -3939,7 +5709,7 @@ exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a m

`; -exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` +exports[`ConstraintTable with "gnomad_r4" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = `

Constraint is not available for mitochondrial @@ -3947,222 +5717,6 @@ exports[`ConstraintTable with "gnomad_r2_1_non_topmed" dataset selected with a m

`; -exports[`ConstraintTable with "gnomad_r3" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_controls_and_biobanks" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_cancer" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_neuro" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_topmed" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected and gene with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected and transcript with available constraint has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a minimal gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a minimal transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a mitochondrial gene has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - -exports[`ConstraintTable with "gnomad_r3_non_v2" dataset selected with a mitochondrial transcript has no unexpected changes 1`] = ` -

- Constraint not yet available for gnomAD v3. -

-`; - exports[`ConstraintTable with "gnomad_sv_r2_1" dataset selected and gene with available constraint has no unexpected changes 1`] = ` [
diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariantFilterControls.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariantFilterControls.tsx new file mode 100644 index 000000000..5d362754f --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariantFilterControls.tsx @@ -0,0 +1,102 @@ +import React from 'react' +import styled from 'styled-components' + +import { Checkbox, SearchInput } from '@gnomad/ui' + +import CategoryFilterControl from '../CategoryFilterControl' + +import { cnvTypes, cnvTypeColors } from './copyNumberVariantTypes' + +const CategoryFilterLabel = styled.span` + margin-bottom: 0.5em; + font-weight: bold; +` + +const CategoryFiltersWrapper = styled.div` + display: flex; + flex-direction: column; + + @media (max-width: 700px) { + align-items: center; + } +` + +const CheckboxWrapper = styled.div` + /* stylelint-ignore-line block-no-empty */ +` + +const SearchWrapper = styled.div` + /* stylelint-ignore-line block-no-empty */ +` + +const SettingsWrapper = styled.div` + display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: center; + + @media (max-width: 700px) { + flex-direction: column; + align-items: center; + } +` + +type Props = { + onChange: (...args: any[]) => any + colorKey: 'type' + value: { + includeTypes: { + [key: string]: boolean + } + includeFilteredVariants: boolean + searchText: string + } +} + +const CopyNumberVariantFilterControls = ({ onChange, colorKey, value }: Props) => ( + + + + Classes + + ({ + id: type, + label: type, + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + color: colorKey === 'type' ? cnvTypeColors[type] : 'gray', + }))} + categorySelections={value.includeTypes} + id="sv-type-category-filter" + onChange={(includeTypes: any) => { + onChange({ ...value, includeTypes }) + }} + /> + + + + + { + onChange({ ...value, includeFilteredVariants }) + }} + /> + + + + + { + onChange({ ...value, searchText }) + }} + value={value.searchText} + /> + + +) + +export default CopyNumberVariantFilterControls diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariantPlot.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariantPlot.tsx new file mode 100644 index 000000000..a20dce88b --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariantPlot.tsx @@ -0,0 +1,99 @@ +import React from 'react' + +type Props = { + color: string + isHighlighted: boolean + isPositionDefined: (...args: any[]) => any + scalePosition: (...args: any[]) => any + variant: { + pos: number + end: number + type: string + } + width: number +} + +const CopyNumberVariantPlot = ({ + color, + isHighlighted, + isPositionDefined, + scalePosition, + variant, + width, +}: Props) => { + const trackHeight = 14 + const barHeight = 10 + const barY = Math.floor((trackHeight - barHeight) / 2) + const arrowWidth = 3 + const halfBarHeight = barHeight / 2 + + // For SV classes that are not represented by a single point, exclude the padding base from the track. + // See https://github.com/broadinstitute/gnomad-browser/issues/687 + let startX = scalePosition(variant.pos + 1) + let stopX = scalePosition(variant.end) + + const startIsDefined = isPositionDefined(variant.pos + 1) + const stopIsDefined = isPositionDefined(variant.end) + + // Set a minimum width for bars. + if (startIsDefined && stopIsDefined && stopX - startX < 3) { + const diff = 3 - (stopX - startX) + startX -= diff / 2 + stopX += diff / 2 + } + + // If one endpoint is undefined, which should only happen if the SV extends outside the visible region, + // offset the start/stop coordinate to make room for the arrow marker at the end of the bar. + + if (!startIsDefined) { + startX += arrowWidth + } + if (!stopIsDefined) { + stopX -= arrowWidth + } + + + return ( + + {isHighlighted && ( + + )} + + ( + + {!startIsDefined && ( + + )} + + {!stopIsDefined && ( + + )} + + ) + + ) +} + +export default CopyNumberVariantPlot diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariantPropType.ts b/browser/src/CopyNumberVariantList/CopyNumberVariantPropType.ts new file mode 100644 index 000000000..b585c4968 --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariantPropType.ts @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types' + +// TODO: MATCH EVERYTHING WITH THE API TYPE +type CopyNumberVariantPropType = { + alts?: string[] | null + sc: number + sn: number + sf: number + chrom: string + end: number + filters?: string[] + genes?: string[] + length: number + populations?: { + id: string + sc: number + sn: number + sf: number + }[] + pos: number + qual?: number + type: string + posmin?: number + posmax?: number + endmin?: number + endmax?: number + variant_id: string +} + +const PopulationPropType = PropTypes.shape({ + id: PropTypes.string.isRequired, + sc: PropTypes.number.isRequired, + sn: PropTypes.number.isRequired, + sf: PropTypes.number.isRequired, + }) + +// @ts-expect-error TS(2322) FIXME: Type 'Requireable = PropTypes.shape( + { + alts: PropTypes.arrayOf(PropTypes.string), + sc: PropTypes.number.isRequired, + sn: PropTypes.number.isRequired, + sf: PropTypes.number, + chrom: PropTypes.string.isRequired, + end: PropTypes.number.isRequired, + filters: PropTypes.arrayOf(PropTypes.string.isRequired), + genes: PropTypes.arrayOf(PropTypes.string), + length: PropTypes.number.isRequired, + populations: PropTypes.arrayOf(PopulationPropType), + pos: PropTypes.number.isRequired, + qual: PropTypes.number, + type: PropTypes.string.isRequired, + posmin: PropTypes.number.isRequired, + posmax: PropTypes.number.isRequired, + endmin: PropTypes.number.isRequired, + endmax: PropTypes.number.isRequired, + variant_id: PropTypes.string.isRequired, + } +) + +export default CopyNumberVariantPropType diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariantTracks.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariantTracks.tsx new file mode 100644 index 000000000..ba82ea98d --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariantTracks.tsx @@ -0,0 +1,128 @@ +import React from 'react' +import { FixedSizeList } from 'react-window' + +// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module '@gno... Remove this comment to see the full error message +import { Track } from '@gnomad/region-viewer' + +import Link from '../Link' +import CopyNumberVariantPlot from './CopyNumberVariantPlot' +import CopyNumberVariantPropType from './CopyNumberVariantPropType' + +type RowProps = { + data: { + highlightedVariant?: string + isPositionDefined: (...args: any[]) => any + onHover: (...args: any[]) => any + scalePosition: (...args: any[]) => any + trackColor: (...args: any[]) => any + variants: CopyNumberVariantPropType[] + width: number + } + index: number + style: { + [key: string]: string | number + } +} + +const Row = ({ + data: { + highlightedVariant, + isPositionDefined, + onHover, + scalePosition, + trackColor, + variants, + width, + }, + index, + style, +}: RowProps) => { + const variant = variants[index] + return ( +
+ { + onHover(variant.variant_id) + }} + > + + +
+ ) +} + +type OwnCopyNumberVariantTracksProps = { + highlightedVariant?: string + numTracksRendered: number + onHover: (...args: any[]) => any + onScroll: (...args: any[]) => any + trackColor: (...args: any[]) => any + trackHeight: number + variants: CopyNumberVariantPropType[] +} + +// @ts-expect-error TS(2456) FIXME: Type alias 'OwnCopyNumberVariantTracksProps' circular... Remove this comment to see the full error message +type CopyNumberVariantTracksProps = OwnCopyNumberVariantTracksProps & + typeof CopyNumberVariantTracks.defaultProps + +// @ts-expect-error TS(7022) FIXME: 'CopyNumberVariantTracks' implicitly has type 'any... Remove this comment to see the full error message +const CopyNumberVariantTracks = ({ + forwardedRef, // eslint-disable-line react/prop-types + highlightedVariant, + numTracksRendered, + onHover, + onScroll, + trackColor, + trackHeight, + variants, +}: CopyNumberVariantTracksProps) => ( +
{ + onHover(null) + }} + > + + {({ isPositionDefined, scalePosition, width }: any) => ( + variants[rowIndex].variant_id} + itemSize={trackHeight} + onScroll={onScroll} + overscanCount={10} + width="100%" + > + {/* @ts-expect-error TS(2769) FIXME: No overload matches this call. */} + {Row} + + )} + +
+) + +CopyNumberVariantTracks.defaultProps = { + highlightedVariant: null, +} + +export default React.forwardRef((props, ref) => ( + +)) diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariants.spec.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariants.spec.tsx new file mode 100644 index 000000000..086a09bc5 --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariants.spec.tsx @@ -0,0 +1,23 @@ +import React from 'react' +import { describe, test, expect } from '@jest/globals' +import CopyNumberVariants, { Context } from './CopyNumberVariants' +import cnvFactory from '../__factories__/CopyNumberVariant' +import { createRenderer } from 'react-test-renderer/shallow' + +describe('CopyNumberVariants', () => { + const context: Context = { chrom: '12' } + + const variants = cnvFactory.buildList(3).map((v) => ({ + ...v, + })) + + test('has no unexpected changes', () => { + // We can't do a full render because the Grid component invoked a couple of + // layers down uses react-sizeme. Since Grid is defined in GBTK, not this + // project, the sizeme mock in this project isn't applied. + const tree = createRenderer().render( + + ) + expect(tree).toMatchSnapshot() + }) +}) diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx new file mode 100644 index 000000000..474086b13 --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx @@ -0,0 +1,302 @@ +import React, { useCallback, useMemo, useRef, useState } from 'react' +import styled from 'styled-components' + +// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module '@gno... Remove this comment to see the full error message +import { PositionAxisTrack } from '@gnomad/region-viewer' +import { Button } from '@gnomad/ui' + +import { showNotification } from '../Notifications' +import StatusMessage from '../StatusMessage' +import { TrackPageSection } from '../TrackPage' +import userPreferences from '../userPreferences' +import VariantTableConfigurationModal from '../VariantList/VariantTableConfigurationModal' + +import ExportCopyNumberVariantsButton from './ExportCopyNumberVariantsButton' +import filterCopyNumberVariants from './filterCopyNumberVariants' +import CopyNumberVariantFilterControls from './CopyNumberVariantFilterControls' + +import { cnvTypeColors } from './copyNumberVariantTypes' +import CopyNumberVariantPropType from './CopyNumberVariantPropType' +import copyNumberVariantTableColumns, { + getColumnsForContext, +} from './copyNumberVariantTableColumns' +import CopyNumberVariantsTable from './CopyNumberVariantsTable' +import CopyNumberVariantTracks from './CopyNumberVariantTracks' + +const NUM_ROWS_RENDERED = 20 +const TRACK_HEIGHT = 14 +const TABLE_ROW_HEIGHT = 25 + +const Wrapper = styled.div` + margin-bottom: 1em; +` + + +const HUMAN_CHROMOSOMES = [...Array.from(new Array(22), (x: any, i: any) => `${i + 1}`), 'X', 'Y'] + + +const DEFAULT_COLUMNS = [ + 'source', + 'class', + 'pos', + 'length', + 'sc', + 'sn', + 'sf', +] + +const sortVariants = (variants: any, { sortKey, sortOrder }: any) => { + const sortColumn = copyNumberVariantTableColumns.find((column: any) => column.key === sortKey) + // @ts-expect-error TS(2532) FIXME: Object is possibly 'undefined'. + return [...variants].sort((v1, v2) => sortColumn.compareFunction(v1, v2, sortOrder)) +} + +export interface Context { + chrom: string +} + +type CopyNumberVariantsProps = { + context: Context + exportFileName: string + variants: CopyNumberVariantPropType[] +} + +const CopyNumberVariants = ({ context, exportFileName, variants }: CopyNumberVariantsProps) => { + const table = useRef(null) + const tracks = useRef(null) + + const [selectedColumns, setSelectedColumns] = useState(() => { + try { + return userPreferences.getPreference('copyNumberVariantTableColumns') || DEFAULT_COLUMNS + } catch (error) { + return DEFAULT_COLUMNS + } + }) + + const renderedTableColumns = useMemo(() => { + const columnsForContext = getColumnsForContext(context) + return ( + ['variant_id', ...selectedColumns] + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + .map((columnKey) => columnsForContext[columnKey]) + .filter(Boolean) + .map((column) => ({ + ...column, + isSortable: Boolean(column.compareFunction), + tooltip: column.description, + })) + ) + }, [context, selectedColumns]) + + const [filter, setFilter] = useState({ + includeTypes: { + DEL: true, + DUP: true, + }, + includeFilteredVariants: false, + searchText: '', + }) + + const [sortState, setSortState] = useState({ + sortKey: 'variant_id', + sortOrder: 'ascending', + }) + const { sortKey, sortOrder } = sortState + + // @ts-expect-error TS(7006) FIXME: Parameter 'newSortKey' implicitly has an 'any' typ... Remove this comment to see the full error message + const setSortKey = useCallback((newSortKey) => { + setSortState((prevSortState) => { + if (newSortKey === prevSortState.sortKey) { + return { + sortKey: newSortKey, + sortOrder: prevSortState.sortOrder === 'ascending' ? 'descending' : 'ascending', + } + } + + return { + sortKey: newSortKey, + sortOrder: 'descending', + } + }) + }, []) + + const filteredVariants = useMemo( + () => filterCopyNumberVariants(variants, filter, renderedTableColumns), + [variants, filter, renderedTableColumns] + ) + + const renderedVariants = useMemo( + () => sortVariants(filteredVariants, sortState), + [filteredVariants, sortState] + ) + + const [showTableConfigurationModal, setShowTableConfigurationModal] = useState(false) + const [variantHoveredInTable, setVariantHoveredInTable] = useState(null) + const [variantHoveredInTrack, setVariantHoveredInTrack] = useState(null) + + const shouldHighlightTableRow = useCallback( + // @ts-expect-error TS(7006) FIXME: Parameter 'variant' implicitly has an 'any' type. + (variant) => { + return variant.variant_id === variantHoveredInTrack + }, + [variantHoveredInTrack] + ) + + // @ts-expect-error TS(7031) FIXME: Binding element 'scrollOffset' implicitly has an '... Remove this comment to see the full error message + const onScrollTable = useCallback(({ scrollOffset, scrollUpdateWasRequested }) => { + if (tracks.current && !scrollUpdateWasRequested) { + ;(tracks.current as any).scrollTo( + Math.round(scrollOffset * (TRACK_HEIGHT / TABLE_ROW_HEIGHT)) + ) + } + }, []) + + // @ts-expect-error TS(7031) FIXME: Binding element 'scrollOffset' implicitly has an '... Remove this comment to see the full error message + const onScrollTracks = useCallback(({ scrollOffset, scrollUpdateWasRequested }) => { + if (table.current && !scrollUpdateWasRequested) { + ;(table.current as any).scrollTo(Math.round(scrollOffset * (TABLE_ROW_HEIGHT / TRACK_HEIGHT))) + } + }, []) + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [colorKey, setColorKey] = useState('type') + const trackColor = useCallback( + // @ts-expect-error TS(7006) FIXME: Parameter 'variant' implicitly has an 'any' type. + // eslint-disable-next-line consistent-return + (variant) => { + if (colorKey === 'type') { + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + return cnvTypeColors[variant.type] + } + }, + [colorKey] + ) + + if (variants.length === 0) { + return No variants found + } + + const numRowsRendered = Math.min(renderedVariants.length, NUM_ROWS_RENDERED) + + // pos/end and pos2/end2 coordinates are based on the chromosome which they are located on. + // If that chromosome is not the same as the one that the region viewer's coordinates + // are based on, then offset the positions so that they are based on the + // region viewer's coordinate system. + const currentChromIndex = HUMAN_CHROMOSOMES.indexOf(context.chrom) // eslint-disable-line react/destructuring-assignment + const positionCorrectedVariants = renderedVariants.map((variant) => { + const copy = { ...variant } + + // This can only happen when chrom2/pos2/end2 is non-null + if (variant.chrom2) { + const chromIndex = HUMAN_CHROMOSOMES.indexOf(variant.chrom) + copy.pos += (chromIndex - currentChromIndex) * 1e9 + copy.end += (chromIndex - currentChromIndex) * 1e9 + } + + return copy + }) + + + return ( +
+ + ; highlightedVa... Remove this comment to see the full error message + highlightedVariant={variantHoveredInTable} + numTracksRendered={numRowsRendered} + onHover={setVariantHoveredInTrack} + onScroll={onScrollTracks} + trackColor={trackColor} + trackHeight={TRACK_HEIGHT} + variants={positionCorrectedVariants} + /> + + + + + + +
+ + + + +
+
+ + {renderedVariants.length ? ( + ; cellData: { c... Remove this comment to see the full error message + cellData={{ + colorKey, + highlightWords: filter.searchText.split(',').map((s) => s.trim()).filter((term) => term !== ''), + }} + columns={renderedTableColumns} + numRowsRendered={numRowsRendered} + onHoverVariant={setVariantHoveredInTable} + onRequestSort={setSortKey} + onScroll={onScrollTable} + rowHeight={TABLE_ROW_HEIGHT} + shouldHighlightRow={shouldHighlightTableRow} + sortKey={sortKey} + sortOrder={sortOrder} + variants={renderedVariants} + /> + ) : ( + No matching variants + )} + +
+ + {showTableConfigurationModal && ( + { + setShowTableConfigurationModal(false) + }} + onSave={(newSelectedColumns) => { + setSelectedColumns(newSelectedColumns) + setShowTableConfigurationModal(false) + + userPreferences + .savePreference('copyNumberVariantTableColumns', newSelectedColumns) + .then(null, (error: any) => { + showNotification({ + title: 'Error', + message: error.message, + status: 'error', + }) + }) + }} + /> + )} +
+ ) +} + +export default CopyNumberVariants diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariantsTable.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariantsTable.tsx new file mode 100644 index 000000000..8d0cda85d --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariantsTable.tsx @@ -0,0 +1,51 @@ +import React, { forwardRef, memo } from 'react' + +import { Grid } from '@gnomad/ui' + +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +type Props = { + columns: any[] + forwardedRef: + | ((...args: any[]) => any) + | { + current?: any + } + numRowsRendered: number + onHoverVariant: (...args: any[]) => any + rowHeight: number + variants: CopyNumberVariant[] +} + +const CopyNumberVariantsTable = ({ + columns, + forwardedRef, + numRowsRendered, + onHoverVariant, + rowHeight, + variants, + ...rest +}: Props) => { + return ( + { + onHoverVariant(rowIndex === null ? null : variants[rowIndex].variant_id) + }} + rowHeight={rowHeight} + rowKey={(variant) => variant.variant_id} + /> + ) +} + +const MemoizedCopyNumberVariantsTable = memo(CopyNumberVariantsTable) + +export default forwardRef((props, ref) => ( + // @ts-expect-error TS(2739) FIXME: Type '{ forwardedRef: ForwardedRef; }' is... Remove this comment to see the full error message + +)) diff --git a/browser/src/CopyNumberVariantList/ExportCopyNumberVariantsButton.tsx b/browser/src/CopyNumberVariantList/ExportCopyNumberVariantsButton.tsx new file mode 100644 index 000000000..db8d49a3d --- /dev/null +++ b/browser/src/CopyNumberVariantList/ExportCopyNumberVariantsButton.tsx @@ -0,0 +1,105 @@ +import React from 'react' + +import { Button } from '@gnomad/ui' + +import { cnvTypeLabels } from './copyNumberVariantTypes' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +const columns = [ + { + label: 'Variant ID', + getValue: (variant: CopyNumberVariant) => variant.variant_id, + }, + { + label: 'Class', + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + getValue: (variant: CopyNumberVariant) => cnvTypeLabels[variant.type] || variant.type, + }, + { + label: 'Position', + getValue: (variant: CopyNumberVariant) => { + return `${variant.pos}-${variant.end}` + }, + }, + { + label: 'Size', + getValue: (variant: CopyNumberVariant) => { + return `${variant.length}` + }, + }, + { + label: 'Site Count', + getValue: (variant: CopyNumberVariant) => JSON.stringify(variant.sc), + }, + { + label: 'Number at Site', + getValue: (variant: CopyNumberVariant) => JSON.stringify(variant.sn), + }, + { + label: 'Site Frequency', + getValue: (variant: CopyNumberVariant) => JSON.stringify(variant.sf), + }, +] + +const exportVariantsToCsv = (variants: CopyNumberVariant[], baseFileName: any) => { + const headerRow = columns.map((c) => c.label) + + const csv = `${headerRow}\r\n${variants + .map((variant: CopyNumberVariant) => + columns + .map((c) => c.getValue(variant)) + .map((val) => + val.includes(',') || val.includes('"') || val.includes("'") + ? `"${val.replace('"', '""')}"` + : val + ) + .join(',') + ) + .join('\r\n')}\r\n` + + const date = new Date() + const timestamp = `${date.getFullYear()}_${(date.getMonth() + 1) + .toString() + .padStart(2, '0')}_${date.getDate().toString().padStart(2, '0')}_${date + .getHours() + .toString() + .padStart(2, '0')}_${date.getMinutes().toString().padStart(2, '0')}_${date + .getSeconds() + .toString() + .padStart(2, '0')}` + + const blob = new Blob([csv], { type: 'text/csv' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.setAttribute('href', url) + link.setAttribute('download', `${baseFileName.replace(/\s+/g, '_')}_${timestamp}.csv`) + // @ts-expect-error TS(2551) FIXME: Property 'onClick' does not exist on type 'HTMLAnc... Remove this comment to see the full error message + link.onClick = () => { + URL.revokeObjectURL(url) + link.remove() + } + document.body.appendChild(link) + link.click() +} + +type ExportCopyNumberVariantsButtonProps = { + exportFileName: string + variants: any[] +} + +const ExportCopyNumberVariantsButton = ({ + exportFileName, + variants, + ...rest +}: ExportCopyNumberVariantsButtonProps) => ( + +) + +export default ExportCopyNumberVariantsButton diff --git a/browser/src/CopyNumberVariantList/__snapshots__/CopyNumberVariants.spec.tsx.snap b/browser/src/CopyNumberVariantList/__snapshots__/CopyNumberVariants.spec.tsx.snap new file mode 100644 index 000000000..95933dc4a --- /dev/null +++ b/browser/src/CopyNumberVariantList/__snapshots__/CopyNumberVariants.spec.tsx.snap @@ -0,0 +1,354 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CopyNumberVariants has no unexpected changes 1`] = ` +
+ + + + + + + + +
+ + + +
+
+ + + +
+
+`; diff --git a/browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx b/browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx new file mode 100644 index 000000000..78cb018ec --- /dev/null +++ b/browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx @@ -0,0 +1,148 @@ +import React from 'react' +import Highlighter from 'react-highlight-words' + +import Link from '../Link' +import { Cell, NumericCell, renderAlleleCountCell, renderAlleleFrequencyCell } from '../tableCells' +import SampleSourceIcon from '../VariantList/SampleSourceIcon' +import { makeNumericCompareFunction, makeStringCompareFunction } from '../VariantList/sortUtilities' +import VariantCategoryMarker from '../VariantList/VariantCategoryMarker' + +import { cnvTypeColors, cnvTypeLabels } from './copyNumberVariantTypes' +import { Context } from './CopyNumberVariants' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +const renderType = (variant: CopyNumberVariant, _: any, { colorKey, highlightWords }: any) => { + return ( + + {colorKey === 'type' && ( + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + + )} + + + ) +} + +const copyNumberVariantTableColumns = [ + { + key: 'sc', + heading: 'Site Count', + minWidth: 110, + compareFunction: makeNumericCompareFunction('sc'), + render: renderAlleleCountCell, + }, + + { + key: 'sn', + heading: 'Number at Site', + minWidth: 110, + compareFunction: makeNumericCompareFunction('sn'), + render: renderAlleleCountCell, + }, + + { + key: 'sf', + heading: 'Site Frequency', + minWidth: 110, + compareFunction: makeNumericCompareFunction('sf'), + render: renderAlleleFrequencyCell, + shouldShowInContext: (context: Context) => context.chrom !== 'Y', + }, + + { + key: 'class', + heading: 'Class', + minWidth: 130, + compareFunction: makeStringCompareFunction('type'), + getSearchTerms: (variant: any) => { + const variantType = variant.type + if (variantType === 'DEL') { + return 'deletion' + } + return 'duplication' + }, + render: renderType, + }, + + { + key: 'length', + heading: 'Size', + minWidth: 100, + compareFunction: makeNumericCompareFunction('length'), + render: (variant: CopyNumberVariant) => { + let s + if (variant.length === -1) { + s = '—' + } else { + const size = variant.length + if (size >= 1e6) { + s = `${(size / 1e6).toPrecision(3)} Mb` + } else if (size >= 1e3) { + s = `${(size / 1e3).toPrecision(3)} kb` + } else { + s = `${size} bp` + } + } + + return {s} + }, + }, + + { + key: 'pos', + heading: 'Position', + minWidth: 200, + compareFunction: makeNumericCompareFunction('pos'), + render: (variant: any) => { + const position = `${variant.chrom}:${variant.pos} - ${variant.end}` + return {position} + }, + }, + + { + key: 'source', + heading: 'Source', + grow: 0, + minWidth: 70, + render: (variant: any) => , + }, + + { + key: 'variant_id', + heading: 'Variant ID', + isRowHeader: true, + minWidth: 110, + compareFunction: makeStringCompareFunction('variant_id'), + getSearchTerms: (variant: any) => [variant.variant_id], + render: (variant: any, _: any, { highlightWords }: any) => { + return ( + + + + + + ) + }, + }, +] + +export default copyNumberVariantTableColumns + +export const getColumnsForContext = (context: Context) => { + const columns = copyNumberVariantTableColumns + .filter( + (column) => column.shouldShowInContext === undefined || column.shouldShowInContext(context) + ) + .reduce((acc, column) => ({ ...acc, [column.key]: column }), {}) + + return columns +} diff --git a/browser/src/CopyNumberVariantList/copyNumberVariantTypes.tsx b/browser/src/CopyNumberVariantList/copyNumberVariantTypes.tsx new file mode 100644 index 000000000..160e8dd7b --- /dev/null +++ b/browser/src/CopyNumberVariantList/copyNumberVariantTypes.tsx @@ -0,0 +1,11 @@ +export const cnvTypes = ['DEL', 'DUP'] + +export const cnvTypeLabels = { + DEL: 'deletion', + DUP: 'duplication', +} + +export const cnvTypeColors = { + DEL: '#D43925', + DUP: '#2376B2', +} diff --git a/browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts b/browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts new file mode 100644 index 000000000..22a7086bb --- /dev/null +++ b/browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts @@ -0,0 +1,38 @@ +const filterVariants = (variants: any, filter: any, selectedColumns: any) => { + let filteredVariants = variants + + filteredVariants = filteredVariants.filter((v: any) => + filter.includeTypes[v.type] === undefined + ? filter.includeTypes.OTH + : filter.includeTypes[v.type] + ) + + if (!filter.includeFilteredVariants) { + filteredVariants = filteredVariants.filter((v: any) => v.filters.length === 0) + } + + if (filter.searchText) { + const searchColumns = selectedColumns.filter((column: any) => !!column.getSearchTerms) + const getVariantSearchTerms = (variant: any) => + searchColumns + .flatMap((column: any) => column.getSearchTerms(variant)) + .filter(Boolean) + .map((s: any) => s.toLowerCase()) + + const searchTerms = filter.searchText + .toLowerCase() + .split(',') + .map((s: any) => s.trim()) + .filter((s: any) => s.length > 0) + + filteredVariants = filteredVariants.filter((variant: any) => + getVariantSearchTerms(variant).some((variantTerm: any) => + searchTerms.some((searchTerm: any) => variantTerm.includes(searchTerm)) + ) + ) + } + + return filteredVariants +} + +export default filterVariants diff --git a/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx new file mode 100644 index 000000000..ffcf1921a --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx @@ -0,0 +1,327 @@ +import React, { Component } from 'react' +import styled from 'styled-components' + +import { BaseTable, TextButton, TooltipAnchor, TooltipHint } from '@gnomad/ui' + +const Table = styled(BaseTable)` + min-width: 100%; + + tr.border { + td, + th { + border-top: 2px solid #aaa; + } + } + + th.right-align, + td.right-align { + padding-right: 25px; + text-align: right; + } +` + +const TogglePopulationButton = styled(TextButton)` + display: inline-flex; + flex-direction: row; + align-items: center; + padding-left: ${(props: any) => (props.isExpanded ? '15px' : '10px')}; + background-image: ${(props: any) => + props.isExpanded + ? 'url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7)' + : 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAVCAYAAABhe09AAAAATElEQVQoU2NkQAOM9BFQ1jXYf/fyBUeYbYzKugb/GRgYDsAEYQIgBWBBZAGwIIoA438GhAoQ586VCxAVMA5ID6OKjoEDSAZuLV18CwAQVSMV/9L8fgAAAABJRU5ErkJggg==)'}; + background-position: center left ${(props: any) => (props.isExpanded ? '-5px' : '0')}; + background-repeat: no-repeat; + color: inherit; + text-align: left; +` + +const SEX_IDENTIFIERS = ['XX', 'XY'] + +type Subpopulation = { + id: string + name: string + sc: number + sn: number +} + +const isSexSpecificPopulation = (pop: Subpopulation) => + SEX_IDENTIFIERS.includes(pop.id) || SEX_IDENTIFIERS.some((id) => pop.id.endsWith(`_${id}`)) + +const calculatePopSF = (sc: number, sn: number) => { + if (sn === 0) { + return '-' + } + return sc / sn +} + +const renderPopSF = (sf: number | string) => { + if (typeof sf === 'number') { + return sf.toPrecision(4) + } + return sf +} + +type OwnPopulationsTableProps = { + columnLabels?: { + sc?: string + sn?: string + sf?: string + } + populations: { + id: string + name: string + sc: number + sn: number + subpopulations?: { + id: string + name: string + sc: number + sn: number + }[] + }[] + initiallyExpandRows?: boolean +} + +type CNVPopulationsTableState = any + +type CNVPopulationsTableProps = OwnPopulationsTableProps & typeof CNVPopulationsTable.defaultProps + +export class CNVPopulationsTable extends Component< + CNVPopulationsTableProps, + CNVPopulationsTableState +> { + static defaultProps = { + columnLabels: {}, + initiallyExpandRows: false, + } + + constructor(props: CNVPopulationsTableProps) { + super(props) + + this.state = { + sortBy: 'sf', + sortAscending: false, + expandedPopulations: props.populations.reduce( + (acc, pop) => ({ ...acc, [pop.name]: props.initiallyExpandRows }), + {} + ), + } + } + + setSortBy(sortBy: any) { + this.setState((state: any) => ({ + sortBy, + sortAscending: sortBy === state.sortBy ? !state.sortAscending : state.sortAscending, + })) + } + + togglePopulationExpanded(populationName: string) { + this.setState((state: any) => ({ + ...state, + + expandedPopulations: { + ...state.expandedPopulations, + [populationName]: !state.expandedPopulations[populationName], + }, + })) + } + + renderColumnHeader({ key, label, tooltip = null, props = {} }: any) { + const { sortAscending, sortBy } = this.state + let ariaSortAttr = 'none' + if (sortBy === key) { + ariaSortAttr = sortAscending ? 'ascending' : 'descending' + } + + return ( + + + + ) + } + + renderPopulationRowHeader(pop: any) { + const { expandedPopulations } = this.state + const isExpanded = expandedPopulations[pop.name] + const colSpan = isExpanded ? 1 : 2 + const rowSpan = isExpanded ? pop.subpopulations.length + 1 : 1 + return ( + + {pop.subpopulations.length > 0 ? ( + this.togglePopulationExpanded(pop.name)} + > + {pop.name} + + ) : ( + pop.name + )} + + ) + } + + render() { + const { columnLabels, populations } = this.props + const { expandedPopulations, sortAscending, sortBy } = this.state + + const renderedPopulations = populations + .map((pop) => { + const transformedSubpopulations = (pop.subpopulations || []) + .map((subPop) => ({ + id: subPop.id, + name: subPop.name, + sc: subPop.sc, + sn: subPop.sn, + sf: calculatePopSF(subPop.sc, subPop.sn), + })) + .sort((a, b) => { + // Sort XX/XY subpopulations to bottom of list + if (isSexSpecificPopulation(a) && !isSexSpecificPopulation(b)) { + return 1 + } + if (isSexSpecificPopulation(b) && !isSexSpecificPopulation(a)) { + return -1 + } + + const [subPop1, subPop2] = sortAscending ? [a, b] : [b, a] + + return sortBy === 'name' + ? subPop1.name.localeCompare(subPop2.name) + : // @ts-expect-error TS(7053) FIXME: Element implicitly has sn 'any' type because expre... Remove this comment to see the full error message + subPop1[sortBy] - subPop2[sortBy] + }) + return { + id: pop.id, + name: pop.name, + sc: pop.sc, + sn: pop.sn, + sf: calculatePopSF(pop.sc, pop.sn), + subpopulations: transformedSubpopulations, + } + }) + .sort((a, b) => { + // Sort XX/XY populations to bottom of list + if (isSexSpecificPopulation(a) && !isSexSpecificPopulation(b)) { + return 1 + } + if (isSexSpecificPopulation(b) && !isSexSpecificPopulation(a)) { + return -1 + } + + // Always sort xx/xy populations by name + if (isSexSpecificPopulation(b) && isSexSpecificPopulation(a)) { + return a.name.localeCompare(b.name) + } + + const [pop1, pop2] = sortAscending ? [a, b] : [b, a] + + // @ts-expect-error TS(7053) FIXME: Element implicitly has sn 'any' type because expre... Remove this comment to see the full error message + return sortBy === 'name' ? pop1.name.localeCompare(pop2.name) : pop1[sortBy] - pop2[sortBy] + }) + + // XX/XY numbers are included in the ancestry populations. + const totalSC = renderedPopulations + .filter((pop) => !isSexSpecificPopulation(pop)) + .map((pop) => pop.sc) + .reduce((acc, n) => acc + n, 0) + const totalSN = renderedPopulations + .filter((pop) => !isSexSpecificPopulation(pop)) + .map((pop) => pop.sn) + .reduce((acc, n) => acc + n, 0) + const totalSF = totalSN !== 0 ? totalSC / totalSN : 0 + + return ( + + + + {this.renderColumnHeader({ key: 'name', label: 'Population', props: { colSpan: 2 } })} + {this.renderColumnHeader({ + key: 'sc', + label: columnLabels.sc || 'SC', + tooltip: 'Number of individuals that carry this variant', + props: { + className: 'right-align', + }, + })} + {this.renderColumnHeader({ + key: 'sn', + label: columnLabels.sn || 'SN', + tooltip: 'Number of individuals that have a non-null genotype', + props: { + className: 'right-align', + }, + })} + {this.renderColumnHeader({ + key: 'sf', + label: columnLabels.sf || 'SF', + tooltip: 'Proportion of individuals carrying this variant', + props: { + className: 'right-align', + }, + })} + + + {renderedPopulations.map((pop, i) => ( + + 0 && + isSexSpecificPopulation(pop) && + !isSexSpecificPopulation(renderedPopulations[i - 1]) + ? 'border' + : undefined + } + > + {this.renderPopulationRowHeader(pop)} + {expandedPopulations[pop.name] && } + + + + + {pop.subpopulations && + expandedPopulations[pop.name] && + pop.subpopulations.map((subPop, j) => ( + + + + + + + ))} + + ))} + + + + + + + + +
Overall{pop.sc}{pop.sn}{renderPopSF(pop.sf)}
{subPop.name}{subPop.sc}{subPop.sn}{renderPopSF(subPop.sf)}
+ Total + {totalSC}{totalSN}{totalSF.toPrecision(4)}
+ ) + } +} diff --git a/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx b/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx new file mode 100644 index 000000000..2308ebcb0 --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx @@ -0,0 +1,33 @@ +import React from 'react' + +import { ExternalLink, List, ListItem } from '@gnomad/ui' + +import { CopyNumberVariant } from './CopyNumberVariantPage' + +const ucscUrl = (chrom: any, pos: any, end: any) => + `https://genome.ucsc.edu/cgi-bin/hgTracks?db=hg38&position=chr${chrom}%3A${pos}-${end}` + +type CNVUCSCLinksProps = { + variant: CopyNumberVariant +} + +const CNVUCSCLinks = ({ variant }: CNVUCSCLinksProps) => { + // @ts-expect-error TS(2786) FIXME: 'ExternalLink' cannot be used as a JSX component. + return UCSC +} + +type CNVReferenceListProps = { + variant: CopyNumberVariant +} + +const CNVReferenceList = ({ variant }: CNVReferenceListProps) => ( + // @ts-expect-error TS(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message + + {/* @ts-expect-error TS(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message */} + + + + +) + +export default CNVReferenceList diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx new file mode 100644 index 000000000..f8222417a --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -0,0 +1,70 @@ +import React from 'react' + +import { Badge } from '@gnomad/ui' + +import AttributeList from '../AttributeList' +import Link from '../Link' +import { cnvTypeLabels } from '../CopyNumberVariantList/copyNumberVariantTypes' +import { CopyNumberVariant } from './CopyNumberVariantPage' +import { textOrMissingTextWarning } from '../missingContent' + +const FILTER_LABELS = { + TRUE: 'TRUE', +} + +const FILTER_DESCRIPTIONS = { + TRUE: 'true', +} + +const filterLabel = (filter: string) => + textOrMissingTextWarning('filter label', FILTER_LABELS, filter) + +const filterDescription = (filter: string) => + textOrMissingTextWarning('filter description', FILTER_DESCRIPTIONS, filter) + +type CopyNumberVariantAttributeListProps = { + variant: CopyNumberVariant +} + +const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeListProps) => ( + + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + {variant.filters.length > 0 ? ( + variant.filters.map((filter) => ( + + {filterLabel(filter)} + + )) + ) : ( + Pass + )} + + + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + {variant.sc} + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + {variant.sn} + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + {(variant.sn === 0 ? 0 : variant.sc / variant.sn).toPrecision(4)} + + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + + {variant.chrom}:{variant.pos}-{variant.end} + + + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + {variant.length === -1 ? '—' : `${variant.length.toLocaleString()} bp`} + + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + {/* @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message */} + {cnvTypeLabels[variant.type]} + + +) + +export default CopyNumberVariantAttributeList diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.spec.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.spec.tsx new file mode 100644 index 000000000..4aa3cb32c --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.spec.tsx @@ -0,0 +1,60 @@ +import React from 'react' +import renderer from 'react-test-renderer' +import { jest, expect, test, describe } from '@jest/globals' +import { mockQueries } from '../../../tests/__helpers__/queries' +import Query, { BaseQuery } from '../Query' +import { forDatasetsMatching } from '../../../tests/__helpers__/datasets' +import CopyNumberVariantPage from './CopyNumberVariantPage' +import cnvFactory from '../__factories__/CopyNumberVariant' +import { withDummyRouter } from '../../../tests/__helpers__/router' + +jest.mock('../Query', () => { + const originalModule = jest.requireActual('../Query') + + return { + __esModule: true, + ...(originalModule as object), + default: jest.fn(), + BaseQuery: jest.fn(), + } +}) + +const { resetMockApiCalls, resetMockApiResponses, simulateApiResponse, setMockApiResponses } = + mockQueries() + +beforeEach(() => { + Query.mockImplementation( + jest.fn(({ query, children, operationName, variables }) => + simulateApiResponse('Query', query, children, operationName, variables) + ) + ) + ;(BaseQuery as any).mockImplementation( + jest.fn(({ query, children, operationName, variables }) => + simulateApiResponse('BaseQuery', query, children, operationName, variables) + ) + ) +}) + +afterEach(() => { + resetMockApiCalls() + resetMockApiResponses() +}) + +forDatasetsMatching(/gnomad_cnv_r4/, 'CopyNumberVariantPage with dataset %s', (datasetId) => { + describe.each(['DEL', 'DUP'])('with variant of type %s', (variantType: string) => { + test('has no unexpected changes', () => { + const variant = cnvFactory.build({ type: variantType }) + setMockApiResponses({ + CopyNumberVariant: () => ({ + copy_number_variant: variant, + }), + }) + const tree = renderer.create( + withDummyRouter( + + ) + ) + expect(tree).toMatchSnapshot() + }) + }) +}) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx new file mode 100644 index 000000000..2bfe53095 --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -0,0 +1,173 @@ +import React from 'react' +import styled from 'styled-components' + +import { ExternalLink, Page, ListItem } from '@gnomad/ui' +import Link from '../Link' + +import { DatasetId, labelForDataset } from '@gnomad/dataset-metadata/metadata' +import DocumentTitle from '../DocumentTitle' +import GnomadPageHeading from '../GnomadPageHeading' +import Query from '../Query' +import { variantFeedbackUrl } from '../variantFeedback' +import CopyNumberVariantAttributeList from './CopyNumberVariantAttributeList' +import CopyNumberVariantPopulationsTable from './CopyNumberVariantPopulationsTable' +import CNVReferenceList from './CNVReferenceList' + +const Wrapper = styled.div` + display: flex; + flex-flow: row wrap; + justify-content: space-between; +` + +const ResponsiveSection = styled.section` + width: calc(50% - 15px); + + @media (max-width: 992px) { + width: 100%; + } +` + +export type CopyNumberVariant = { + alts: string[] | null + sc: number + sn: number + sf: number + chrom: string + end: number + filters: string[] + genes: string[] + length: number + populations: { + id: string + sc: number + sn: number + sf: number + }[] + pos: number + qual: number + type: string + posmin: number + posmax: number + endmin: number + endmax: number + variant_id: string +} + +type CopyNumberVariantPageProps = { + datasetId: DatasetId + variant: CopyNumberVariant +} + +const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProps) => ( + // @ts-expect-error TS(2746) FIXME: This JSX tag's 'children' prop expects a single ch... Remove this comment to see the full error message + + + + Copy number variant: {variant.variant_id} + + + + + + +

External Resources

+ +

Feedback

+ {/* @ts-expect-error TS(2786) FIXME: 'ExternalLink' cannot be used as a JSX component. */} + + Report an issue with this variant + +
+
+ +
+

Population Frequencies

+ +
+ + + +

Consequences

+

+ This variant has consequences in {variant.genes.length} gene + {variant.genes.length !== 1 && 's'}. +

+ {variant.genes.map((gene) => ( + // @ts-expect-error TS(2769) FIXME: No overload matches this call. + + {gene} + + ))} +
+
+
+) + +type ConnectedCopyNumberVariantPageProps = { + datasetId: DatasetId + variantId: string +} + +const ConnectedCopyNumberVariantPage = ({ + datasetId, + variantId, +}: ConnectedCopyNumberVariantPageProps) => { + const operationName = 'CopyNumberVariant' + const url = datasetId === 'gnomad_cnv_r4' ? '/api' : 'https://gnomad.broadinstitute.org/api/' + + const query = ` + query ${operationName}($datasetId: CopyNumberVariantDatasetId!, $variantId: String!) { + copy_number_variant(dataset: $datasetId, variantId: $variantId) { + alts + sc + sn + sf + chrom + end + filters + genes + length + populations { + id + sc + sn + sf + } + pos + qual + reference_genome + type + posmin + posmax + endmin + endmax + variant_id + } + } + ` + + return ( + data.copy_number_variant} + > + {({ data }: any) => { + const variant = { + ...data.copy_number_variant, + variant_id: data.copy_number_variant.variant_id.toUpperCase(), + } + return + }} + + ) +} + +export default ConnectedCopyNumberVariantPage diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx new file mode 100644 index 000000000..9a17b8fff --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx @@ -0,0 +1,85 @@ +import React from 'react' + +import { CopyNumberVariant } from './CopyNumberVariantPage' +import { populationName } from '@gnomad/dataset-metadata/gnomadPopulations' +import { CNVPopulationsTable } from './CNVPopulationsTable' + +type CopyNumberVariantPopulation = { + id: string, + sc: number, + sn: number, + sf: number, + name: string +} + +type Subpopulations = { + [key: string]: CopyNumberVariantPopulation[]; +} + + +const nestPopulations = (populations: CopyNumberVariantPopulation[]) => { + const popIndices = [] + const subpopulations: Subpopulations = {} + + + for (let i = 0; i < populations.length; i += 1) { + const pop = populations[i] + + const divisions = pop.id.split('_') + if (divisions.length === 1) { + popIndices.push(i) + } else { + const parentPop = divisions[0] + if (subpopulations[parentPop] === undefined) { + subpopulations[parentPop] = [{ ...pop }] + } else { + subpopulations[parentPop].push({ ...pop }) + } + } + } + + return popIndices.map((index) => { + const pop = populations[index] + return { + ...pop, + subpopulations: subpopulations[pop.id], + } + }) +} + +const addPopulationNames = (populations: CopyNumberVariantPopulation[]) => { + return populations.map((pop: CopyNumberVariantPopulation) => { + let name + if (pop.id === 'XX' || pop.id.endsWith('_XX')) { + name = 'XX' + } else if (pop.id === 'XY' || pop.id.endsWith('_XY')) { + name = 'XY' + } else { + name = populationName(pop.id) + } + return { ...pop, name } + }) +} + +type CopyNumberVariantPopulationsTableProps = { + variant: CopyNumberVariant +} + +const CopyNumberVariantPopulationsTable = ({ variant }: CopyNumberVariantPopulationsTableProps) => { + const populations = nestPopulations(addPopulationNames((variant as any).populations)) + + const columnLabels = { + sc: 'Site Count', + sn: 'Number at Site', + sf: 'Site Frequency', + } + + return ( + + ) +} + +export default CopyNumberVariantPopulationsTable diff --git a/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap new file mode 100644 index 000000000..4f47b0274 --- /dev/null +++ b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap @@ -0,0 +1,905 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type DEL has no unexpected changes 1`] = ` +
+ +
+
+
+
+
+ Filter +
+
+ + Pass + +
+
+
+
+ Site Count +
+
+ 123 +
+
+
+
+ Number at Site +
+
+ 345 +
+
+
+
+ Site Frequency +
+
+ 0.3565 +
+
+
+
+ Position +
+
+ + 21 + : + 123 + - + 456 + +
+
+
+
+ Size +
+
+ 333 bp +
+
+
+
+ Class +
+
+ deletion +
+
+
+
+
+

+ External Resources +

+ +

+ Feedback +

+ + Report an issue with this variant + +
+
+
+

+ Population Frequencies +

+ + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ Total + + 0 + + 0 + + 0.000 +
+
+
+
+

+ Consequences +

+

+ This variant has consequences in + 0 + gene + s + . +

+
+
+
+`; + +exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type DUP has no unexpected changes 1`] = ` +
+ +
+
+
+
+
+ Filter +
+
+ + Pass + +
+
+
+
+ Site Count +
+
+ 123 +
+
+
+
+ Number at Site +
+
+ 345 +
+
+
+
+ Site Frequency +
+
+ 0.3565 +
+
+
+
+ Position +
+
+ + 21 + : + 123 + - + 456 + +
+
+
+
+ Size +
+
+ 333 bp +
+
+
+
+ Class +
+
+ duplication +
+
+
+
+
+

+ External Resources +

+ +

+ Feedback +

+ + Report an issue with this variant + +
+
+
+

+ Population Frequencies +

+ + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ Total + + 0 + + 0 + + 0.000 +
+
+
+
+

+ Consequences +

+

+ This variant has consequences in + 0 + gene + s + . +

+
+
+
+`; diff --git a/browser/src/CoverageTrack.tsx b/browser/src/CoverageTrack.tsx index fd6ea52a5..b36ee9f64 100644 --- a/browser/src/CoverageTrack.tsx +++ b/browser/src/CoverageTrack.tsx @@ -105,7 +105,7 @@ class CoverageTrack extends Component { plotElement: any state = { - selectedMetric: 'mean', + selectedMetric: 'over_30', } plotRef = (el: any) => { diff --git a/browser/src/DatasetSelector.spec.tsx b/browser/src/DatasetSelector.spec.tsx index c4c25e103..8333850e5 100644 --- a/browser/src/DatasetSelector.spec.tsx +++ b/browser/src/DatasetSelector.spec.tsx @@ -29,6 +29,7 @@ forAllDatasets('DataSelector with "%s" dataset selected', (datasetId) => { includeGnomad2Subsets: true, includeGnomad3: true, includeGnomad3Subsets: true, + includeCopyNumberVariants: true, }} /> ) diff --git a/browser/src/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 85df2656e..3101bacd7 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -14,8 +14,8 @@ import { hasShortVariants, hasStructuralVariants, referenceGenome, + hasCopyNumberVariants, shortVariantDatasetId, - structuralVariantDatasetId, } from '@gnomad/dataset-metadata/metadata' const NavigationMenuWrapper = styled.ul` @@ -440,6 +440,7 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } includeGnomad2Subsets = true, includeGnomad3 = true, includeGnomad3Subsets = true, + includeCopyNumberVariants = true, } = datasetOptions const datasetLink = (datasetId: any) => ({ @@ -448,22 +449,21 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } }) const topLevelShortVariantDataset = shortVariantDatasetId(selectedDataset) - const topLevelStructuralVariantDataset = structuralVariantDatasetId(selectedDataset) - + let datasets: any = [] if (includeShortVariants) { const shortVariantDatasets = [ { id: 'current_short_variant', - isActive: hasShortVariants(selectedDataset), + isActive: hasShortVariants(selectedDataset) && !hasCopyNumberVariants(selectedDataset), label: labelForDataset(topLevelShortVariantDataset), url: datasetLink(topLevelShortVariantDataset), childReferenceGenome: referenceGenome(topLevelShortVariantDataset), }, { id: 'other_short_variant', - isActive: hasShortVariants(selectedDataset), + isActive: hasShortVariants(selectedDataset) && !hasCopyNumberVariants(selectedDataset), label: 'More datasets', children: [] as ChildDataset[], }, @@ -580,17 +580,29 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } datasets = datasets.concat(shortVariantDatasets) } - if (includeStructuralVariants) { + if (includeStructuralVariants || includeCopyNumberVariants) { + const topLevelStructuralVariantDataset = hasStructuralVariants(selectedDataset) + ? selectedDataset + : 'gnomad_sv_r2_1' + + const topLevelCopyNumberVariantDataset = hasCopyNumberVariants(selectedDataset) + ? selectedDataset + : 'gnomad_cnv_r4' + + const currentDataset = hasStructuralVariants(selectedDataset) + ? topLevelStructuralVariantDataset + : topLevelCopyNumberVariantDataset + datasets.push( { id: 'current_sv_dataset', - isActive: hasStructuralVariants(selectedDataset), - label: labelForDataset(topLevelStructuralVariantDataset), - url: datasetLink(topLevelStructuralVariantDataset), + isActive: hasStructuralVariants(selectedDataset) || hasCopyNumberVariants(selectedDataset), + label: labelForDataset(currentDataset), + url: datasetLink(currentDataset), }, { id: 'other_structural_variant', - isActive: hasStructuralVariants(selectedDataset), + isActive: hasStructuralVariants(selectedDataset) || hasCopyNumberVariants(selectedDataset), label: 'More datasets', children: [ { @@ -621,8 +633,15 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } description: `${sampleCounts.gnomad_sv_r2_1_controls.total.toLocaleString()} samples`, childReferenceGenome: referenceGenome('gnomad_sv_r2_1_controls'), }, + { + id: 'gnomad_cnv_r4', + label: labelForDataset('gnomad_cnv_r4'), + url: datasetLink('gnomad_cnv_r4'), + description: `${sampleCounts.gnomad_cnv_r4.total.toLocaleString()} samples`, + childReferenceGenome: referenceGenome('gnomad_cnv_r4'), + }, ], - } + }, ) } @@ -633,6 +652,7 @@ DatasetSelector.propTypes = { datasetOptions: PropTypes.shape({ includeShortVariants: PropTypes.bool, includeStructuralVariants: PropTypes.bool, + includeCopyNumberVariants: PropTypes.bool, includeExac: PropTypes.bool, includeGnomad2Subsets: PropTypes.bool, includeGnomad3: PropTypes.bool, @@ -645,6 +665,7 @@ DatasetSelector.defaultProps = { datasetOptions: { includeShortVariants: true, includeStructuralVariants: true, + includeCopyNumberVariants: true, includeExac: true, includeGnomad2: true, includeGnomad2Subsets: true, diff --git a/browser/src/GenePage/CopyNumberVariantsInGene.tsx b/browser/src/GenePage/CopyNumberVariantsInGene.tsx new file mode 100644 index 000000000..0911a17d0 --- /dev/null +++ b/browser/src/GenePage/CopyNumberVariantsInGene.tsx @@ -0,0 +1,91 @@ +import React from 'react' + +import { referenceGenome } from '@gnomad/dataset-metadata/metadata' +import Query from '../Query' +import { filterCopyNumberVariantsInZoomRegion } from '../RegionViewer/filterVariantsInZoomRegion' +import CopyNumberVariants from '../CopyNumberVariantList/CopyNumberVariants' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +type OwnProps = { + datasetId: string + gene: { + chrom: string + gene_id: string + } + zoomRegion?: { + start: number + stop: number + } +} + +// @ts-expect-error TS(2456) FIXME: Type alias 'Props' circularly references itself. +type Props = OwnProps & typeof CopyNumberVariantsInGene.defaultProps + +// @ts-expect-error TS(7022) FIXME: 'CopyNumberVariantsInGene' implicitly has type 'an... Remove this comment to see the full error message +const CopyNumberVariantsInGene = ({ datasetId, gene, zoomRegion, ...rest }: Props) => { + const operationName = 'CopyNumberVariantsInGene' + const query = ` + query ${operationName}($datasetId: CopyNumberVariantDatasetId!, $geneId: String!, $referenceGenome: ReferenceGenomeId!) { + gene(gene_id: $geneId, reference_genome: $referenceGenome) { + copy_number_variants(dataset: $datasetId) { + sc + sn + sf + chrom + end + filters + length + pos + posmin + posmax + endmin + endmax + type + variant_id + } + } + } + ` + const url = datasetId === 'gnomad_cnv_r4' ? '/api' : 'https://gnomad.broadinstitute.org/api/' + + return ( + data.gene && data.gene.copy_number_variants} + > + {({ data }: any) => { + const copy_number_variants = filterCopyNumberVariantsInZoomRegion( + data.gene.copy_number_variants, + zoomRegion + ).map((variant: CopyNumberVariant) => ({ + ...variant, + variant_id: variant.variant_id.toUpperCase(), + })) + + return ( + + ) + }} + + ) +} + +CopyNumberVariantsInGene.defaultProps = { + zoomRegion: null, +} + +export default CopyNumberVariantsInGene diff --git a/browser/src/GenePage/GeneCoverageTrack.tsx b/browser/src/GenePage/GeneCoverageTrack.tsx index 25127c39e..718eb7d9f 100644 --- a/browser/src/GenePage/GeneCoverageTrack.tsx +++ b/browser/src/GenePage/GeneCoverageTrack.tsx @@ -42,7 +42,6 @@ query ${operationName}($geneId: String!, $datasetId: DatasetId!, $referenceGenom } } ` - type OwnProps = { datasetId: string geneId: string diff --git a/browser/src/GenePage/GenePage.spec.tsx b/browser/src/GenePage/GenePage.spec.tsx index cfaebfd78..f4ace7de3 100644 --- a/browser/src/GenePage/GenePage.spec.tsx +++ b/browser/src/GenePage/GenePage.spec.tsx @@ -56,6 +56,7 @@ afterEach(() => { }) const svRegexp = /_sv/ +const cnvRegexp = /_cnv/ forDatasetsNotMatching(svRegexp, 'GenePage with non-SV dataset "%s"', (datasetId) => { const gene = geneFactory.build() @@ -70,6 +71,9 @@ forDatasetsNotMatching(svRegexp, 'GenePage with non-SV dataset "%s"', (datasetId coverage: {}, }, }), + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), }) ) @@ -123,29 +127,54 @@ forDatasetsMatching(svRegexp, 'GenePage with SV dataset "%s"', (datasetId) => { ) expect(tree).toMatchSnapshot() }) +}) - test('queries the API for region coverage with the correct parameters', async () => { +forDatasetsMatching(cnvRegexp, 'GenePage with CNV dataset "%s"', (datasetId) => { + test('has no unexpected changes', () => { const gene = geneFactory.build() setMockApiResponses({ - StructuralVariantsInGene: () => ({ - gene: { structural_variants: [] }, + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, }), RegionCoverage: () => ({ region: { coverage: {}, }, }), + GeneCoverage: () => ({ + gene: { + coverage: {}, + }, + }), + }) + const tree = renderer.create( + withDummyRouter() + ) + expect(tree).toMatchSnapshot() + }) + + test('queries the API for region coverage with the correct parameters', async () => { + const gene = geneFactory.build() + setMockApiResponses({ + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), + GeneCoverage: () => ({ + gene: { + coverage: {}, + }, + }), }) renderer.create( withDummyRouter() ) const coverageQueries = mockApiCalls().filter( - ({ operationName }) => operationName === 'RegionCoverage' + ({ operationName }) => operationName === 'GeneCoverage' ) expect(coverageQueries).toHaveLength(1) const [coverageQuery] = coverageQueries const exomeCoverageArg = coverageQuery.variables.includeExomeCoverage - expect(exomeCoverageArg).toEqual(false) + expect(exomeCoverageArg).toEqual(true) }) }) @@ -162,6 +191,7 @@ describe.each([ ['gnomad_r3_non_neuro', false], ['gnomad_r3_non_topmed', false], ['gnomad_r3_non_v2', false], + ['gnomad_cnv_r4', true], ] as [DatasetId, boolean][])('GenePage with non-SV dataset "%s"', (datasetId, expectedResult) => { test('queries the API for gene coverage with the correct parameters', async () => { const gene = geneFactory.build() @@ -175,6 +205,9 @@ describe.each([ coverage: {}, }, }), + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), }) renderer.create( withDummyRouter() @@ -206,6 +239,7 @@ describe.each([ ['gnomad_r3_non_neuro', 'GRCh38', true], ['gnomad_r3_non_topmed', 'GRCh38', true], ['gnomad_r3_non_v2', 'GRCh38', true], + ['gnomad_cnv_r4', 'GRCh38', false], ] as [DatasetId, ReferenceGenome, boolean][])( 'gene query with dataset %s', (datasetId, expectedReferenceGenome, expectedIncludeShortTandemRepeats) => { diff --git a/browser/src/GenePage/GenePage.tsx b/browser/src/GenePage/GenePage.tsx index a215a0573..b629c054c 100644 --- a/browser/src/GenePage/GenePage.tsx +++ b/browser/src/GenePage/GenePage.tsx @@ -14,11 +14,13 @@ import { Badge, Button } from '@gnomad/ui' import { DatasetId, genesHaveExomeCoverage, + genesHaveGenomeCoverage, labelForDataset, hasStructuralVariants, ReferenceGenome, hasExons, isExac, + hasCopyNumberVariants, isV2, } from '@gnomad/dataset-metadata/metadata' import ConstraintTable from '../ConstraintTable/ConstraintTable' @@ -51,7 +53,13 @@ import VariantsInGene from './VariantsInGene' import { GnomadConstraint } from '../ConstraintTable/GnomadConstraintTable' import { ExacConstraint } from '../ConstraintTable/ExacConstraintTable' -import { Variant, ClinvarVariant, StructuralVariant } from '../VariantPage/VariantPage' +import { + Variant, + ClinvarVariant, + StructuralVariant, + CopyNumberVariant, +} from '../VariantPage/VariantPage' +import CopyNumberVariantsInGene from './CopyNumberVariantsInGene' export type Strand = '+' | '-' @@ -111,6 +119,7 @@ export type Gene = GeneMetadata & { gnomad_v2_regional_missense_constraint?: RegionalMissenseConstraint variants: Variant[] structural_variants: StructuralVariant[] + copy_number_variants: CopyNumberVariant[] clinvar_variants: ClinvarVariant[] homozygous_variant_cooccurrence_counts: HomozygousVariantCooccurrenceCountsPerSeverityAndAf heterozygous_variant_cooccurrence_counts: HeterozygousVariantCooccurrenceCountsPerSeverityAndAf @@ -347,6 +356,7 @@ const GenePage = ({ datasetId, gene, geneId }: Props) => { datasetOptions={{ includeShortVariants: true, includeStructuralVariants: gene.chrom !== 'M', + includeCopyNumberVariants: true, includeExac: gene.chrom !== 'M', includeGnomad2: gene.chrom !== 'M', includeGnomad3: true, @@ -439,6 +449,7 @@ const GenePage = ({ datasetId, gene, geneId }: Props) => { datasetId={datasetId} geneId={geneId} includeExomeCoverage={genesHaveExomeCoverage(datasetId)} + includeGenomeCoverage={genesHaveGenomeCoverage(datasetId)} /> )} @@ -581,6 +592,9 @@ const GenePage = ({ datasetId, gene, geneId }: Props) => { {/* eslint-disable-next-line no-nested-ternary */} {hasStructuralVariants(datasetId) ? ( + // eslint-disable-next-line no-nested-ternary + ) : hasCopyNumberVariants(datasetId) ? ( + ) : gene.chrom === 'M' ? ( ) : ( diff --git a/browser/src/GenePage/VariantsInGene.tsx b/browser/src/GenePage/VariantsInGene.tsx index 028ef2026..042c2ce45 100644 --- a/browser/src/GenePage/VariantsInGene.tsx +++ b/browser/src/GenePage/VariantsInGene.tsx @@ -298,37 +298,39 @@ const ConnectedVariantsInGene = ({ datasetId, gene, ...otherProps -}: ConnectedVariantsInGeneProps) => ( - data.gene && data.gene.variants} - > - {({ data }: any) => { - let variants = annotateVariantsWithClinvar(data.gene.variants, data.gene.clinvar_variants) - if (gene.pext) { - variants = annotateVariantsWithPext(variants, gene.pext) - } +}: ConnectedVariantsInGeneProps) => { + return ( + data.gene && data.gene.variants} + > + {({ data }: any) => { + let variants = annotateVariantsWithClinvar(data.gene.variants, data.gene.clinvar_variants) + if (gene.pext) { + variants = annotateVariantsWithPext(variants, gene.pext) + } - return ( - - ) - }} - -) + return ( + + ) + }} + + ) +} export default ConnectedVariantsInGene diff --git a/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap b/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap index adf955538..b6d6eb7e2 100644 --- a/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap +++ b/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] = ` +exports[`GenePage with CNV dataset "gnomad_cnv_r4" has no unexpected changes 1`] = `
@@ -40,12 +40,12 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] - gnomAD v2.1.1 + gnomAD v3.1.2
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + Viewing full + gene + . + +
    @@ -713,7 +741,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -894,8 +922,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={161.4} - y2={161.4} + y1={153.4} + y2={153.4} /> - 20 + 0.2 @@ -934,8 +962,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={142.1} - y2={142.1} + y1={135.1} + y2={135.1} /> - 30 + 0.3 @@ -974,8 +1002,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={122.8} - y2={122.8} + y1={116.8} + y2={116.8} /> - 40 + 0.4 @@ -1014,8 +1042,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={103.5} - y2={103.5} + y1={98.5} + y2={98.5} /> - 50 + 0.5 @@ -1054,8 +1082,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={84.2} - y2={84.2} + y1={80.2} + y2={80.2} /> - 60 + 0.6 @@ -1094,8 +1122,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={64.9} - y2={64.9} + y1={61.900000000000006} + y2={61.900000000000006} /> - 70 + 0.7 @@ -1134,8 +1162,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={45.599999999999994} - y2={45.599999999999994} + y1={43.599999999999994} + y2={43.599999999999994} /> - 80 + 0.8 @@ -1174,8 +1202,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeLinecap="square" x1={0} x2={-8} - y1={26.299999999999997} - y2={26.299999999999997} + y1={25.299999999999997} + y2={25.299999999999997} /> - 90 + 0.9 @@ -1238,7 +1266,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -1250,7 +1278,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] strokeWidth={1} x1={0} x2={0} - y1={200.5} + y1={190.5} y2={7.5} /> @@ -1262,8 +1290,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] stroke="#333" x1={0} x2={799} - y1={200} - y2={200} + y1={190} + y2={190} /> @@ -1425,7 +1453,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`]
    `; -exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected changes 1`] = ` +exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] = `
    @@ -1727,12 +1755,12 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -2343,7 +2388,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 20 + 0.2 @@ -2383,7 +2428,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 30 + 0.3 @@ -2423,7 +2468,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 40 + 0.4 @@ -2463,7 +2508,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 50 + 0.5 @@ -2503,7 +2548,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 60 + 0.6 @@ -2543,7 +2588,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 70 + 0.7 @@ -2583,7 +2628,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 80 + 0.8 @@ -2623,7 +2668,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 90 + 0.9 @@ -2663,7 +2708,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 100 + 1.0 @@ -2850,7 +2895,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch
    `; -exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected changes 1`] = ` +exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected changes 1`] = `
    @@ -3152,12 +3197,12 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c - gnomAD SVs v2.1 (non-neuro) + gnomAD SVs v2.1 (controls)
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -3768,7 +3830,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -3808,7 +3870,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -3848,7 +3910,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -3888,7 +3950,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -3928,7 +3990,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -3968,7 +4030,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -4008,7 +4070,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -4048,7 +4110,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -4088,7 +4150,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -4275,7 +4337,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c
    `; -exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = ` +exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected changes 1`] = `
    @@ -4315,12 +4377,12 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = - gnomAD v3.1.2 + gnomAD v2.1.1
  • - gnomAD SVs v4 + gnomAD SVs v2.1 (non-neuro)
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Constraint not yet available for gnomAD v3. + Constraint not available for this + gene

  • @@ -4987,7 +5067,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    + + 0.1 + + + + + + + + + + 0.2 + + + + + + + + + + 0.3 + + + + + + + + + + 0.4 + + + + + + + + + + 0.5 + + + + + + + + + + 0.6 + + + + + + + + + + 0.7 + + + + + + + + + + 0.8 + + + + + + + + + + 0.9 + + + + + + + + + + 1.0 + + + + + + + + + + + +
    + + + +
    + Include: + +
    +
    +
    +
    +
    +
    + + Positive strand +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + No variants found +
    + + + +`; + +exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + FAKEGENE + + +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl gene ID +
    +
    + dummy_gene-1 + . + 5.6.7.8 +
    +
    +
    +
    + Symbol in GENCODE v19 +
    +
    +
    +
    +
    + Ensembl canonical transcript + +
    +
    + + transcript-999 + . + 12.34.5 + +
    +
    +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + + , + + +
    +
    +
    +
    +
    +
    +
    + Constraint + +
    +
    + Variant co-occurrence + +
    +
    +

    + Constraint not yet available for gnomAD v3. +

    +
    +
    +
    +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + Fraction of individuals with coverage over 30 +
    +
    +
    +
    + + + + + + + + 0.1 + + + + + + + + + + 0.2 + + + + + + + + + + 0.3 + + + + + + + + + + 0.4 + + + + + + + + + + 0.5 + + + + + + + + + + 0.6 + + + + + + + + + + 0.7 + + + + + + + + + + 0.8 + + + + + + + + + + 0.9 + + + + + + + + + + 1.0 + + + + + + + + + + + +
    +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + + Positive strand +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + No variants found +
    +
    +
    +
    +`; + +exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + FAKEGENE + + +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl gene ID +
    +
    + dummy_gene-1 + . + 5.6.7.8 +
    +
    +
    +
    + Symbol in GENCODE v19 +
    +
    +
    +
    +
    + Ensembl canonical transcript + +
    +
    + + transcript-999 + . + 12.34.5 + +
    +
    +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + + , + + +
    +
    +
    +
    +
    +
    +
    + Constraint + +
    +
    + Variant co-occurrence + +
    +
    +

    + Constraint not available for this + gene +

    +
    +
    +
    + Viewing full + gene + . + + +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + Fraction of individuals with coverage over 30 +
    +
    +
    +
    + + + + + + + + 0.1 + + + + + + + + + + 0.2 + + + + + + + + + + 0.3 + + + + + + + + + + 0.4 + + + + + + + + + + 0.5 + + + + + + + + + + 0.6 + + + + + + + + + + 0.7 + + + + + + + + + + 0.8 + + + + + + + + + + 0.9 + + + + + + + + + + 1.0 + + + + + + + + + + + +
    +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + + Positive strand +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +

    + ClinVar variants +

    +
    +

    + No ClinVar variants found in this gene. +

    +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    +
    +
    +
    +`; + +exports[`GenePage with non-SV dataset "gnomad_cnv_r4" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + FAKEGENE + + +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl gene ID +
    +
    + dummy_gene-1 + . + 5.6.7.8 +
    +
    +
    +
    + Symbol in GENCODE v19 +
    +
    +
    +
    +
    + Ensembl canonical transcript + +
    +
    + + transcript-999 + . + 12.34.5 + +
    +
    +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + + , + + +
    +
    +
    +
    +
    +
    +
    + Constraint + +
    +
    + Variant co-occurrence + +
    +
    +

    + Constraint not available for this + gene +

    +
    +
    +
    + Viewing full + gene + . + + +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + Fraction of individuals with coverage over 30 +
    +
    +
    +
    + + + + + + - 10 + 0.1 @@ -5168,8 +9618,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={161.4} - y2={161.4} + y1={153.4} + y2={153.4} /> - 20 + 0.2 @@ -5208,8 +9658,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={142.1} - y2={142.1} + y1={135.1} + y2={135.1} /> - 30 + 0.3 @@ -5248,8 +9698,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={122.8} - y2={122.8} + y1={116.8} + y2={116.8} /> - 40 + 0.4 @@ -5288,8 +9738,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={103.5} - y2={103.5} + y1={98.5} + y2={98.5} /> - 50 + 0.5 @@ -5328,8 +9778,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={84.2} - y2={84.2} + y1={80.2} + y2={80.2} /> - 60 + 0.6 @@ -5368,8 +9818,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={64.9} - y2={64.9} + y1={61.900000000000006} + y2={61.900000000000006} /> - 70 + 0.7 @@ -5408,8 +9858,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={45.599999999999994} - y2={45.599999999999994} + y1={43.599999999999994} + y2={43.599999999999994} /> - 80 + 0.8 @@ -5448,8 +9898,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeLinecap="square" x1={0} x2={-8} - y1={26.299999999999997} - y2={26.299999999999997} + y1={25.299999999999997} + y2={25.299999999999997} /> - 90 + 0.9 @@ -5512,7 +9962,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 100 + 1.0 @@ -5524,7 +9974,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = strokeWidth={1} x1={0} x2={0} - y1={200.5} + y1={190.5} y2={7.5} /> @@ -5536,8 +9986,8 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = stroke="#333" x1={0} x2={799} - y1={200} - y2={200} + y1={190} + y2={190} /> @@ -5699,7 +10149,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] =
    `; -exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`] = `
    @@ -5739,12 +10189,12 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` - ExAC v1.0 + gnomAD v2.1.1
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -6628,7 +11095,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 20 + 0.2 @@ -6668,7 +11135,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 30 + 0.3 @@ -6708,7 +11175,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 40 + 0.4 @@ -6748,7 +11215,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 50 + 0.5 @@ -6788,7 +11255,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 60 + 0.6 @@ -6828,7 +11295,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 70 + 0.7 @@ -6868,7 +11335,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 80 + 0.8 @@ -6908,7 +11375,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 90 + 0.9 @@ -6948,7 +11415,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` dy="0em" x={-8} > - 100 + 1.0 @@ -7125,6 +11592,101 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = `
    +
    +
    +
    +
    + + Regional missense constraint + + +
    +
    +
    +
    + + + + This gene was not searched for evidence of regional missense constraint. See our + + + + + help page + + + + for additional information. + + + +
    +
    +
    +
    @@ -7158,7 +11720,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = `
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected changes 1`] = `
    @@ -7198,12 +11760,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` - gnomAD v2.1.1 + gnomAD v2.1.1 (controls)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -8087,7 +12666,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 20 + 0.2 @@ -8127,7 +12706,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 30 + 0.3 @@ -8167,7 +12746,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 40 + 0.4 @@ -8207,7 +12786,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 50 + 0.5 @@ -8247,7 +12826,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 60 + 0.6 @@ -8287,7 +12866,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 70 + 0.7 @@ -8327,7 +12906,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 80 + 0.8 @@ -8367,7 +12946,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 90 + 0.9 @@ -8407,7 +12986,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 100 + 1.0 @@ -8712,7 +13291,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected changes 1`] = `
    @@ -8752,12 +13331,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c - gnomAD v2.1.1 (controls) + gnomAD v2.1.1 (non-cancer)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -9641,7 +14237,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -9681,7 +14277,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -9721,7 +14317,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -9761,7 +14357,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -9801,7 +14397,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -9841,7 +14437,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -9881,7 +14477,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -9921,7 +14517,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -9961,7 +14557,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -10266,7 +14862,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected changes 1`] = `
    @@ -10306,12 +14902,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (non-neuro)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -11195,7 +15808,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -11235,7 +15848,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -11275,7 +15888,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -11315,7 +15928,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -11355,7 +15968,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -11395,7 +16008,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -11435,7 +16048,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -11475,7 +16088,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -11515,7 +16128,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -11820,7 +16433,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected changes 1`] = `
    @@ -11860,12 +16473,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected - gnomAD v2.1.1 (non-neuro) + gnomAD v2.1.1 (non-TOPMed)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • + gnomAD SVs v4 +
    + 63,046 samples +
    +
    +
  • +
  • + - gnomAD SVs v4 + gnomAD exome CNVs v4.0
    - 63,046 samples + 464,566 samples
  • @@ -12544,7 +17174,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -12749,7 +17379,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -12789,7 +17419,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -12829,7 +17459,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -12869,7 +17499,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -12909,7 +17539,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -12949,7 +17579,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -12989,7 +17619,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -13029,7 +17659,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -13069,7 +17699,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -13374,7 +18004,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] = `
    @@ -13414,12 +18044,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected - gnomAD v2.1.1 (non-TOPMed) + gnomAD v3.1.2
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Constraint not available for this - gene + Constraint not yet available for gnomAD v3.

  • @@ -14098,7 +18744,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -14303,7 +18949,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -14343,7 +18989,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -14383,7 +19029,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -14423,7 +19069,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -14463,7 +19109,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -14503,7 +19149,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -14543,7 +19189,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -14583,7 +19229,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -14623,7 +19269,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -14800,101 +19446,6 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected
    -
    -
    -
    -
    - - Regional missense constraint - - -
    -
    -
    -
    - - - - This gene was not searched for evidence of regional missense constraint. See our - - - - - help page - - - - for additional information. - - - -
    -
    -
    -
    @@ -14928,7 +19479,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected
    `; -exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no unexpected changes 1`] = `
    @@ -14968,12 +19519,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] - gnomAD v3.1.2 + gnomAD v3.1.2 (controls/biobanks)
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -15856,7 +20424,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 20 + 0.2 @@ -15896,7 +20464,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 30 + 0.3 @@ -15936,7 +20504,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 40 + 0.4 @@ -15976,7 +20544,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 50 + 0.5 @@ -16016,7 +20584,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 60 + 0.6 @@ -16056,7 +20624,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 70 + 0.7 @@ -16096,7 +20664,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 80 + 0.8 @@ -16136,7 +20704,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 90 + 0.9 @@ -16176,7 +20744,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -16386,7 +20954,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`]
    `; -exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected changes 1`] = `
    @@ -16426,12 +20994,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (non-cancer)
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -17314,7 +21899,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 20 + 0.2 @@ -17354,7 +21939,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 30 + 0.3 @@ -17394,7 +21979,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 40 + 0.4 @@ -17434,7 +22019,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 50 + 0.5 @@ -17474,7 +22059,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 60 + 0.6 @@ -17514,7 +22099,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 70 + 0.7 @@ -17554,7 +22139,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 80 + 0.8 @@ -17594,7 +22179,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 90 + 0.9 @@ -17634,7 +22219,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 100 + 1.0 @@ -17844,7 +22429,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u
    `; -exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected changes 1`] = `
    @@ -17884,12 +22469,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c - gnomAD v3.1.2 (non-cancer) + gnomAD v3.1.2 (non-neuro)
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -18772,7 +23374,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -18812,7 +23414,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -18852,7 +23454,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -18892,7 +23494,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -18932,7 +23534,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -18972,7 +23574,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -19012,7 +23614,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -19052,7 +23654,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -19092,7 +23694,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -19302,7 +23904,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c
    `; -exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected changes 1`] = `
    @@ -19342,12 +23944,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch - gnomAD v3.1.2 (non-neuro) + gnomAD v3.1.2 (non-TOPMed)
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -20230,7 +24849,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 20 + 0.2 @@ -20270,7 +24889,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 30 + 0.3 @@ -20310,7 +24929,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 40 + 0.4 @@ -20350,7 +24969,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 50 + 0.5 @@ -20390,7 +25009,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 60 + 0.6 @@ -20430,7 +25049,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 70 + 0.7 @@ -20470,7 +25089,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 80 + 0.8 @@ -20510,7 +25129,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 90 + 0.9 @@ -20550,7 +25169,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 100 + 1.0 @@ -20760,7 +25379,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch
    `; -exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected changes 1`] = `
    @@ -20800,12 +25419,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c - gnomAD v3.1.2 (non-TOPMed) + gnomAD v3.1.2 (non-v2)
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
  • - 10 + 0.1 @@ -21688,7 +26324,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -21728,7 +26364,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -21768,7 +26404,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -21808,7 +26444,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -21848,7 +26484,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -21888,7 +26524,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -21928,7 +26564,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -21968,7 +26604,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -22008,7 +26644,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -22218,7 +26854,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c
    `; -exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "gnomad_r4" has no unexpected changes 1`] = `
    @@ -22258,12 +26894,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang - gnomAD v3.1.2 (non-v2) +
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • - Constraint not yet available for gnomAD v3. + Constraint not available for this + gene

  • @@ -22941,7 +27595,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -23146,7 +27800,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 20 + 0.2 @@ -23186,7 +27840,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 30 + 0.3 @@ -23226,7 +27880,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 40 + 0.4 @@ -23266,7 +27920,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 50 + 0.5 @@ -23306,7 +27960,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 60 + 0.6 @@ -23346,7 +28000,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 70 + 0.7 @@ -23386,7 +28040,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 80 + 0.8 @@ -23426,7 +28080,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 90 + 0.9 @@ -23466,7 +28120,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 100 + 1.0 diff --git a/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap b/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap index d9a796fb8..adb4b2029 100644 --- a/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap +++ b/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap @@ -1994,6 +1994,14 @@ exports[`VariantCoocurrenceCountsTable with non v2 dataset "exac" has no unexpec `; +exports[`VariantCoocurrenceCountsTable with non v2 dataset "gnomad_cnv_r4" has no unexpected changes and renders as placeholder text 1`] = ` + +

    + Variant co-occurrence is only available for gnomAD v2. +

    +
    +`; + exports[`VariantCoocurrenceCountsTable with non v2 dataset "gnomad_r3" has no unexpected changes and renders as placeholder text 1`] = `

    @@ -2042,6 +2050,14 @@ exports[`VariantCoocurrenceCountsTable with non v2 dataset "gnomad_r3_non_v2" ha `; +exports[`VariantCoocurrenceCountsTable with non v2 dataset "gnomad_r4" has no unexpected changes and renders as placeholder text 1`] = ` + +

    + Variant co-occurrence is only available for gnomAD v2. +

    +
    +`; + exports[`VariantCoocurrenceCountsTable with non v2 dataset "gnomad_sv_r4" has no unexpected changes and renders as placeholder text 1`] = `

    diff --git a/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap b/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap index 14e3d777c..f5995e291 100644 --- a/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap +++ b/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap @@ -18,97 +18,7 @@ exports[`MitochondrialVariantPage with dataset exac has no unexpected changes 1`

    `; -exports[`MitochondrialVariantPage with dataset gnomad_r2_1 has no unexpected changes 1`] = ` -
    - Mitochondrial variants are not available in - gnomAD v2.1.1 -
    -
    - - Search for this variant in gnomAD v3 - -
    -`; - -exports[`MitochondrialVariantPage with dataset gnomad_r2_1_controls has no unexpected changes 1`] = ` -
    - Mitochondrial variants are not available in - gnomAD v2.1.1 (controls) -
    -
    - - Search for this variant in gnomAD v3 - -
    -`; - -exports[`MitochondrialVariantPage with dataset gnomad_r2_1_non_cancer has no unexpected changes 1`] = ` -
    - Mitochondrial variants are not available in - gnomAD v2.1.1 (non-cancer) -
    -
    - - Search for this variant in gnomAD v3 - -
    -`; - -exports[`MitochondrialVariantPage with dataset gnomad_r2_1_non_neuro has no unexpected changes 1`] = ` -
    - Mitochondrial variants are not available in - gnomAD v2.1.1 (non-neuro) -
    -
    - - Search for this variant in gnomAD v3 - -
    -`; - -exports[`MitochondrialVariantPage with dataset gnomad_r2_1_non_topmed has no unexpected changes 1`] = ` -
    - Mitochondrial variants are not available in - gnomAD v2.1.1 (non-TOPMed) -
    -
    - - Search for this variant in gnomAD v3 - -
    -`; - -exports[`MitochondrialVariantPage with dataset gnomad_r3 has no unexpected changes 1`] = ` +exports[`MitochondrialVariantPage with dataset gnomad_cnv_r4 has no unexpected changes 1`] = `
    @@ -143,7 +53,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3 has no unexpected chang className="DatasetSelector__NavigationMenuWrapper-sc-1p2fxbn-0 ebZvwy" >
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • + +
    + +
    +
    +
    +
    +
    + + Filters + +
    +
    + + Pass + +
    +
    +
    +
    + + Allele Number + +
    +
    + 0 +
    +
    +
    +
    + + Homoplasmic AC + +
    +
    + 0 +
    +
    +
    +
    + + Homoplasmic AF + +
    +
    + 0 +
    +
    +
    +
    + + Heteroplasmic AC + +
    +
    + 0 +
    +
    +
    +
    + + Heteroplasmic AF + +
    +
    + 0 +
    +
    +
    +
    + + Max Observed Heteroplasmy + +
    +
    + 0.1000 +
    +
    +
    +
    + + Excluded Allele Count + +
    +
    +
    +
    +
    + + Haplogroup Defining + +
    +
    + No +
    +
    +
    +
    +
    +

    + External Resources +

    + +

    + Feedback +

    + + Report an issue with this variant + +
    +
    +
    +

    + Population Frequencies +

    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + Total + + + 0 + + + + 0 + + + 0.000 + + + 0 + + + 0.000 +
    +
    +
    +

    + Haplogroup Frequencies + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + Total + + + 0 + + + + 0 + + + 0.000 + + + 0 + + + 0.000 +
    + +
    +
    +
    +
    +
    +

    + Heteroplasmy Distribution +

    +
    +
    +
    + + + + + + + Heteroplasmy level + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Individuals + + + + + + + + + + + + + + +
    +
    +
    +
    +

    + Age Distribution + +

    +
    +
    +
      +
    • + + + + + Variant carriers + +
    • +
    • + + + + + + + + + + + + + + All individuals + +
    • +
    +
    +
    + + + + + + + + < 30 + + + + + + + + + + 30-35 + + + + + + + + + + 35-40 + + + + + + + + + + 40-45 + + + + + + + + + + 45-50 + + + + + + + + + + 50-55 + + + + + + + + + + 55-60 + + + + + + + + + + 60-65 + + + + + + + + + + 65-70 + + + + + + + + + + 70-75 + + + + + + + + + + 75-80 + + + + + + + + + + > 80 + + + + + + + + + Age + + + + + + + + + + + 0 + + + + + + + + + + 20 + + + + + + + + + + 40 + + + + + + + + + + 60 + + + + + + + + + + 80 + + + + + + + + + + 100 + + + + + + + + + + 120 + + + + + + + + + + 140 + + + + + + + + + + 160 + + + + + + + + + + 180 + + + + + + + + + + 200 + + + + + + + + + Variant carriers + + + + + + + + + + + 0 + + + + + + + + + + 500 + + + + + + + + + + 1.00K + + + + + + + + + + 1.50K + + + + + + + + + + 2.00K + + + + + + + + + + 2.50K + + + + + + + + + + 3.00K + + + + + + + + + + 3.50K + + + + + + + + + All individuals + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + Annotations +

    +
      +
    +
    +
    +
    +

    + Genotype Quality Metrics +

    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
      +
    • + + + + + Variant carriers + +
    • +
    • + + + + + + + + + + + + + + All individuals + +
    • +
    +
    +
    + + + + + + + + > 0.5 + + + + + + + + + Depth + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Variant carriers + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + All individuals + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + Heteroplasmy level + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Individuals failing filter + + + + + + + + + + + + + + +
    +
    + +
    +

    + Note: This plot may include low-quality genotypes that were excluded from allele counts in the tables above. + + + More information. + +

    +
    +
    +
    +
    +
    +
    +

    + Site Quality Metrics +

    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + 0 + + + + + + + + + + 200 + + + + + + + + + + 400 + + + + + + + + + + 600 + + + + + + + + + + 800 + + + + + + + + + + 1000 + + + + + + + + + + 1200 + + + + + + + + + + 1400 + + + + + + + + + + 1600 + + + + + + + + + + 1800 + + + + + + + + + + 2000 + + + + + + + + + + 2200 + + + + + + + + + + 2400 + + + + + + + + + + 2600 + + + + + + + + + + 2800 + + + + + + + + + + 3000 + + + + + + + + + + 3200 + + + + + + + + + + 3400 + + + + + + + + + + 3600 + + + + + + + + + + 3800 + + + + + + + + + + 4000 + + + + + + + + + Mean Depth + + + + + + + + + + + 0 + + + + + + + + + + 500 + + + + + + + + + + 1.00K + + + + + + + + + + 1.50K + + + + + + + + + + 2.00K + + + + + + + + + + 2.50K + + + + + + + + + + 3.00K + + + + + + + + + + 3.50K + + + + + + + + + + 4.00K + + + + + + + + + + 4.50K + + + + + + + + + + 5.00K + + + + + + + + + Variants + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + +
    + Metric + + Value +
    + Mean Depth + + 0 +
    +
    +
    +
    +
    +
    +
    +

    + Read Data +

    +

    + Read data is not yet available for mitochondrial variants. +

    +
    + +`; + +exports[`MitochondrialVariantPage with dataset gnomad_r3_controls_and_biobanks has no unexpected changes 1`] = `
    @@ -8214,7 +16561,8211 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_controls_and_biobanks h onClick={[Function]} onKeyDown={[Function]} > - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (controls/biobanks) + + +
  • + + + + + + +
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • + + + + +
    + +
    +
    +
    +
    +
    + + Filters + +
    +
    + + Pass + +
    +
    +
    +
    + + Allele Number + +
    +
    + 0 +
    +
    +
    +
    + + Homoplasmic AC + +
    +
    + 0 +
    +
    +
    +
    + + Homoplasmic AF + +
    +
    + 0 +
    +
    +
    +
    + + Heteroplasmic AC + +
    +
    + 0 +
    +
    +
    +
    + + Heteroplasmic AF + +
    +
    + 0 +
    +
    +
    +
    + + Max Observed Heteroplasmy + +
    +
    + 0.1000 +
    +
    +
    +
    + + Excluded Allele Count + +
    +
    +
    +
    +
    + + Haplogroup Defining + +
    +
    + No +
    +
    +
    +
    +
    +

    + External Resources +

    + +

    + Feedback +

    + + Report an issue with this variant + +
    +
    +
    +

    + Population Frequencies +

    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + Total + + + 0 + + + + 0 + + + 0.000 + + + 0 + + + 0.000 +
    +
    +
    +

    + Haplogroup Frequencies + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + Total + + + 0 + + + + 0 + + + 0.000 + + + 0 + + + 0.000 +
    + +
    +
    +
    +
    +
    +

    + Heteroplasmy Distribution +

    +
    +
    +
    + + + + + + + Heteroplasmy level + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Individuals + + + + + + + + + + + + + + +
    +
    +
    +
    +

    + Age Distribution + +

    +
    +
    +
      +
    • + + + + + Variant carriers + +
    • +
    • + + + + + + + + + + + + + + All individuals + +
    • +
    +
    +
    + + + + + + + + < 30 + + + + + + + + + + 30-35 + + + + + + + + + + 35-40 + + + + + + + + + + 40-45 + + + + + + + + + + 45-50 + + + + + + + + + + 50-55 + + + + + + + + + + 55-60 + + + + + + + + + + 60-65 + + + + + + + + + + 65-70 + + + + + + + + + + 70-75 + + + + + + + + + + 75-80 + + + + + + + + + + > 80 + + + + + + + + + Age + + + + + + + + + + + 0 + + + + + + + + + + 20 + + + + + + + + + + 40 + + + + + + + + + + 60 + + + + + + + + + + 80 + + + + + + + + + + 100 + + + + + + + + + + 120 + + + + + + + + + + 140 + + + + + + + + + + 160 + + + + + + + + + + 180 + + + + + + + + + + 200 + + + + + + + + + Variant carriers + + + + + + + + + + + 0 + + + + + + + + + + 500 + + + + + + + + + + 1.00K + + + + + + + + + + 1.50K + + + + + + + + + + 2.00K + + + + + + + + + + 2.50K + + + + + + + + + + 3.00K + + + + + + + + + + 3.50K + + + + + + + + + All individuals + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + Annotations +

    +
      +
    +
    +
    +
    +

    + Genotype Quality Metrics +

    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
      +
    • + + + + + Variant carriers + +
    • +
    • + + + + + + + + + + + + + + All individuals + +
    • +
    +
    +
    + + + + + + + + > 0.5 + + + + + + + + + Depth + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Variant carriers + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + All individuals + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + Heteroplasmy level + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 20 + + + + + + + + + + 30 + + + + + + + + + + 40 + + + + + + + + + + 50 + + + + + + + + + + 60 + + + + + + + + + + 70 + + + + + + + + + + 80 + + + + + + + + + + 90 + + + + + + + + + + 100 + + + + + + + + + Individuals failing filter + + + + + + + + + + + + + + +
    +
    + +
    +

    + Note: This plot may include low-quality genotypes that were excluded from allele counts in the tables above. + + + More information. + +

    +
    +
    +
    +
    +
    +
    +

    + Site Quality Metrics +

    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + 0 + + + + + + + + + + 200 + + + + + + + + + + 400 + + + + + + + + + + 600 + + + + + + + + + + 800 + + + + + + + + + + 1000 + + + + + + + + + + 1200 + + + + + + + + + + 1400 + + + + + + + + + + 1600 + + + + + + + + + + 1800 + + + + + + + + + + 2000 + + + + + + + + + + 2200 + + + + + + + + + + 2400 + + + + + + + + + + 2600 + + + + + + + + + + 2800 + + + + + + + + + + 3000 + + + + + + + + + + 3200 + + + + + + + + + + 3400 + + + + + + + + + + 3600 + + + + + + + + + + 3800 + + + + + + + + + + 4000 + + + + + + + + + Mean Depth + + + + + + + + + + + 0 + + + + + + + + + + 500 + + + + + + + + + + 1.00K + + + + + + + + + + 1.50K + + + + + + + + + + 2.00K + + + + + + + + + + 2.50K + + + + + + + + + + 3.00K + + + + + + + + + + 3.50K + + + + + + + + + + 4.00K + + + + + + + + + + 4.50K + + + + + + + + + + 5.00K + + + + + + + + + Variants + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + +
    + Metric + + Value +
    + Mean Depth + + 0 +
    +
    +
    +
    +
    +
    +
    +

    + Read Data +

    +

    + Read data is not yet available for mitochondrial variants. +

    +
    + +`; + +exports[`MitochondrialVariantPage with dataset gnomad_r3_non_cancer has no unexpected changes 1`] = ` +
    +
    +
    +

    + Single nucleotide variant + : + + M-123-A-C + (GRCh38) + +

    +
    +
    + + Dataset + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • +`; + +exports[`ReadData with "gnomad_cnv_r4" dataset selected has no unexpected changes with exome data present 1`] = ` +.c2 { + box-sizing: border-box; + height: calc(2em + 2px); + padding: 0.375em 0.75em; + border-color: #6c757d; + border-style: solid; + border-width: 1px; + border-radius: 0.5em; + background-color: #f8f9fa; + cursor: pointer; + font-size: 1em; + line-height: 1.25; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.c2:active, +.c2:hover { + background-color: #cbd3da; +} + +.c2:disabled { + background-color: rgba(248,249,250,0.5); + cursor: not-allowed; +} + +.c2:focus { + box-shadow: 0 0 0 0.2em rgba(108,117,125,0.5); +} + +.c2 svg { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c0 { + color: #1173bb; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c0:visited, +.c0:active { + color: #1173bb; +} + +.c0:focus, +.c0:hover { + -webkit-text-decoration: underline; + text-decoration: underline; +} + +.c1 { + padding-right: 80px; + margin-top: 1em; + text-align: center; +} + +.c1 strong { + display: inline-block; + width: 80px; + text-align: right; +} + +.c1 button { + margin-left: 2em; +} + +@media (max-width:500px) { + .c1 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding-right: 0; + } + + .c1 strong { + width: auto; + margin-bottom: 0.5em; + } + + .c1 button { + margin-left: 0 !important; + } + + .c1 button:last-child { + margin-top: 1em; + } +} + +
    +

    + This interactive + + + IGV.js + + visualization shows reads that went into calling this variant. Reads may not be available for every sample carrying this variant. +

    +

    + These are reassembled reads produced by + + + GATK HaplotypeCaller --bamOutput + + , so they accurately represent what HaplotypeCaller was seeing when it called this variant. +

    +
    + + Exomes: + + + +
    +
    + +
    +
    +`; + +exports[`ReadData with "gnomad_cnv_r4" dataset selected queries against the correct dataset 1`] = ` +" + query ReadData { + variant_0: variantReads(dataset: gnomad_cnv_r4, variantId: "123-45-A-G") { + exome { + bamPath + category + indexPath + readGroup + } + genome { + bamPath + category + indexPath + readGroup + } + } + } + " +`; + exports[`ReadData with "gnomad_r2_1" dataset selected has no unexpected changes with exome and genome data both missing 1`] = ` .c0 { position: relative; @@ -2844,6 +3049,211 @@ exports[`ReadData with "gnomad_r3_non_v2" dataset selected queries against the c " `; +exports[`ReadData with "gnomad_r4" dataset selected has no unexpected changes with exome and genome data both missing 1`] = ` +
    +

    + No read data available for this variant. +

    +
    +`; + +exports[`ReadData with "gnomad_r4" dataset selected has no unexpected changes with exome data present 1`] = ` +.c2 { + box-sizing: border-box; + height: calc(2em + 2px); + padding: 0.375em 0.75em; + border-color: #6c757d; + border-style: solid; + border-width: 1px; + border-radius: 0.5em; + background-color: #f8f9fa; + cursor: pointer; + font-size: 1em; + line-height: 1.25; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.c2:active, +.c2:hover { + background-color: #cbd3da; +} + +.c2:disabled { + background-color: rgba(248,249,250,0.5); + cursor: not-allowed; +} + +.c2:focus { + box-shadow: 0 0 0 0.2em rgba(108,117,125,0.5); +} + +.c2 svg { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c0 { + color: #1173bb; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c0:visited, +.c0:active { + color: #1173bb; +} + +.c0:focus, +.c0:hover { + -webkit-text-decoration: underline; + text-decoration: underline; +} + +.c1 { + padding-right: 80px; + margin-top: 1em; + text-align: center; +} + +.c1 strong { + display: inline-block; + width: 80px; + text-align: right; +} + +.c1 button { + margin-left: 2em; +} + +@media (max-width:500px) { + .c1 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding-right: 0; + } + + .c1 strong { + width: auto; + margin-bottom: 0.5em; + } + + .c1 button { + margin-left: 0 !important; + } + + .c1 button:last-child { + margin-top: 1em; + } +} + +
    +

    + This interactive + + + IGV.js + + visualization shows reads that went into calling this variant. Reads may not be available for every sample carrying this variant. +

    +

    + These are reassembled reads produced by + + + GATK HaplotypeCaller --bamOutput + + , so they accurately represent what HaplotypeCaller was seeing when it called this variant. +

    +
    + + Exomes: + + + +
    +
    + +
    +
    +`; + +exports[`ReadData with "gnomad_r4" dataset selected queries against the correct dataset 1`] = ` +" + query ReadData { + variant_0: variantReads(dataset: gnomad_r4, variantId: "123-45-A-G") { + exome { + bamPath + category + indexPath + readGroup + } + genome { + bamPath + category + indexPath + readGroup + } + } + } + " +`; + exports[`ReadData with "gnomad_sv_r2_1" dataset selected has no unexpected changes with exome and genome data both missing 1`] = `

    diff --git a/browser/src/RegionPage/CopyNumberVariantsInRegion.tsx b/browser/src/RegionPage/CopyNumberVariantsInRegion.tsx new file mode 100644 index 000000000..1ee791fc1 --- /dev/null +++ b/browser/src/RegionPage/CopyNumberVariantsInRegion.tsx @@ -0,0 +1,96 @@ +import React from 'react' + +import { referenceGenome } from '@gnomad/dataset-metadata/metadata' +import Query from '../Query' +import { filterCopyNumberVariantsInZoomRegion } from '../RegionViewer/filterVariantsInZoomRegion' +import CopyNumberVariants from '../CopyNumberVariantList/CopyNumberVariants' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +type OwnProps = { + datasetId: string + region: { + chrom: string + start: number + stop: number + } + zoomRegion?: { + start: number + stop: number + } +} + +// @ts-expect-error TS(2456) FIXME: Type alias 'Props' circularly references itself. +type Props = OwnProps & typeof CopyNumberVariantsInRegion.defaultProps + +// @ts-expect-error TS(7022) FIXME: 'CopyNumberVariantsInRegion' implicitly has type '... Remove this comment to see the full error message +const CopyNumberVariantsInRegion = ({ datasetId, region, zoomRegion, ...rest }: Props) => { + const url = datasetId === 'gnomad_cnv_r4' ? '/api' : 'https://gnomad.broadinstitute.org/api/' + + const operationName = 'CopyNumberVariantsInRegion' + const query = ` + query ${operationName}($datasetId: CopyNumberVariantDatasetId!, $chrom: String!, $start: Int!, $stop: Int!, $referenceGenome: ReferenceGenomeId!) { + region(chrom: $chrom, start: $start, stop: $stop, reference_genome: $referenceGenome) { + copy_number_variants(dataset: $datasetId) { + sc + sn + sf + chrom + end + filters + length + pos + posmin + posmax + endmin + endmax + type + variant_id + } + } + } + ` + + return ( + data.region && data.region.copy_number_variants} + > + {({ data }: any) => { + const regionId = `${region.chrom}-${region.start}-${region.stop}` + const variants = filterCopyNumberVariantsInZoomRegion( + data.region.copy_number_variants, + zoomRegion + ).map((variant: CopyNumberVariant) => ({ + ...variant, + variant_id: variant.variant_id.toUpperCase(), + })) + + return ( + + ) + }} + + ) +} + +CopyNumberVariantsInRegion.defaultProps = { + zoomRegion: null, +} + +export default CopyNumberVariantsInRegion diff --git a/browser/src/RegionPage/CopyNumberVariantsRegionCoverageTrack.tsx b/browser/src/RegionPage/CopyNumberVariantsRegionCoverageTrack.tsx new file mode 100644 index 000000000..98bd579be --- /dev/null +++ b/browser/src/RegionPage/CopyNumberVariantsRegionCoverageTrack.tsx @@ -0,0 +1,78 @@ +import React from 'react' + +import { + DatasetId, + labelForDataset, + referenceGenome, + hasMitochondrialGenomeCoverage, +} from '@gnomad/dataset-metadata/metadata' +import CoverageTrack from '../CoverageTrack' +import Query from '../Query' +import StatusMessage from '../StatusMessage' + +const operationName = 'CopyNumberVariantsCoverageInRegion' +const query = ` +query ${operationName}($start: Int!, $stop: Int!, $datasetId: DatasetId!, $referenceGenome: ReferenceGenomeId!) { + region(chrom: $chrom, start: $start, stop: $stop, reference_genome: $referenceGenome) { + copy_number_variants_coverage(dataset: $datasetId) { + xpos + percent_callable + } + } +} +` + +type Props = { + datasetId: DatasetId + chrom: number + start: number + stop: number +} + +const CopyNumberVariantsRegionCoverageTrack = ({ datasetId, chrom, start, stop }: Props) => { + if (!hasMitochondrialGenomeCoverage(datasetId)) { + return ( + + Copy Number Variant exome coverage is not available in {labelForDataset(datasetId)} + + ) + } + + return ( + { + return data.region && data.region.copy_number_variant_coverage + }} + > + {({ data }: any) => { + const coverage = [ + { + color: 'rgb(115, 171, 61)', + buckets: data.region.copy_number_variant_coverage, + name: 'copy number variant coverage', // TODO + opacity: 0.7, + }, + ] + + return ( + // @ts-expect-error TS(2769) FIXME: No overload matches this call. + `${chrom}-${start}-${stop}_coverage`} + height={190} + maxCoverage={3000} + /> + ) + }} + + ) +} + +export default CopyNumberVariantsRegionCoverageTrack diff --git a/browser/src/RegionPage/RegionPage.tsx b/browser/src/RegionPage/RegionPage.tsx index 681783ba6..534cd5260 100644 --- a/browser/src/RegionPage/RegionPage.tsx +++ b/browser/src/RegionPage/RegionPage.tsx @@ -8,7 +8,9 @@ import { labelForDataset, hasNonCodingConstraints, regionsHaveExomeCoverage, + regionsHaveGenomeCoverage, isSVs, + isV4CNVs, } from '@gnomad/dataset-metadata/metadata' import DocumentTitle from '../DocumentTitle' import GnomadPageHeading from '../GnomadPageHeading' @@ -27,6 +29,7 @@ import RegionCoverageTrack from './RegionCoverageTrack' import RegionInfo from './RegionInfo' import RegularVariantsInRegion from './VariantsInRegion' import StructuralVariantsInRegion from './StructuralVariantsInRegion' +import CopyNumberVariantsInRegion from './CopyNumberVariantsInRegion' const RegionInfoColumnWrapper = styled.div` display: flex; @@ -80,6 +83,10 @@ const variantsInRegion = (datasetId: DatasetId, region: Region) => { return } + if (isV4CNVs(datasetId)) { + return + } + if (region.chrom === 'M') { return ( @@ -119,6 +126,7 @@ const RegionPage = ({ datasetId, region }: RegionPageProps) => { datasetOptions={{ includeShortVariants: true, includeStructuralVariants: chrom !== 'M', + includeCopyNumberVariants: true, includeExac: region.reference_genome === 'GRCh37' && chrom !== 'M', includeGnomad2: region.reference_genome === 'GRCh37' && chrom !== 'M', includeGnomad3: region.reference_genome === 'GRCh38' || chrom === 'M', @@ -158,6 +166,7 @@ const RegionPage = ({ datasetId, region }: RegionPageProps) => { datasetId={datasetId} chrom={chrom} includeExomeCoverage={regionsHaveExomeCoverage(datasetId)} + includeGenomeCoverage={regionsHaveGenomeCoverage(datasetId)} start={start} stop={stop} /> diff --git a/browser/src/RegionPage/__snapshots__/MitochondrialRegionCoverageTrack.spec.tsx.snap b/browser/src/RegionPage/__snapshots__/MitochondrialRegionCoverageTrack.spec.tsx.snap index 040003272..a46b2a410 100644 --- a/browser/src/RegionPage/__snapshots__/MitochondrialRegionCoverageTrack.spec.tsx.snap +++ b/browser/src/RegionPage/__snapshots__/MitochondrialRegionCoverageTrack.spec.tsx.snap @@ -9,6 +9,39 @@ exports[`MitochondrialRegionCoverageTrack with dataset exac has no unexpected ch

    `; +exports[`MitochondrialRegionCoverageTrack with dataset gnomad_cnv_r4 queries with appropriate params 1`] = ` + + [Function] + +`; + exports[`MitochondrialRegionCoverageTrack with dataset gnomad_r2_1 has no unexpected changes 1`] = `
    `; +exports[`MitochondrialRegionCoverageTrack with dataset gnomad_r4 queries with appropriate params 1`] = ` + + [Function] + +`; + exports[`MitochondrialRegionCoverageTrack with dataset gnomad_sv_r2_1 queries with appropriate params 1`] = ` `; +exports[`MitochondrialVariantsInRegion with dataset gnomad_cnv_r4 has no unexpected changes 1`] = ` +[ +
    +

    + ClinVar variants +

    +
    , +

    + No ClinVar variants found in this region. +

    , +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    , +] +`; + exports[`MitochondrialVariantsInRegion with dataset gnomad_r2_1 has no unexpected changes 1`] = `
    +

    + ClinVar variants +

    +
    , +

    + No ClinVar variants found in this region. +

    , +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    , +] +`; + exports[`MitochondrialVariantsInRegion with dataset gnomad_sv_r2_1 has no unexpected changes 1`] = ` [
    `; +exports[`RegionPage with "gnomad_cnv_r4" dataset has no unexpected changes for a mitochondrial region 1`] = ` + + + + + } + selectedDataset="gnomad_cnv_r4" + > + M-345-456 + + +
    + +
    + + + +
    +
    + + + + + +
    +`; + +exports[`RegionPage with "gnomad_cnv_r4" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` + + + + + } + selectedDataset="gnomad_cnv_r4" + > + 12-345-456 + + +
    + +
    + + + +
    +
    + + + + + +
    +`; + exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a mitochondrial region 1`] = ` + + } + selectedDataset="gnomad_r2_1" + > + M-345-456 + + +
    + +
    + + + +
    +
    + + + + + +
    +`; + +exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` + + + + + } + selectedDataset="gnomad_r2_1" + > + 12-345-456 + + +
    + +
    + + + +
    +
    + + + + + +
    +`; + +exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected changes for a mitochondrial region 1`] = ` + + + } - selectedDataset="gnomad_r2_1" + selectedDataset="gnomad_r2_1_controls" > M-345-456 @@ -365,7 +927,7 @@ exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a m width={994} > @@ -384,7 +946,7 @@ exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a m } /> `; -exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1" + selectedDataset="gnomad_r2_1_controls" > 12-345-456 @@ -506,7 +1069,7 @@ exports[`RegionPage with "gnomad_r2_1" dataset has no unexpected changes for a n > `; -exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_controls" + selectedDataset="gnomad_r2_1_non_cancer" > M-345-456 @@ -637,7 +1201,7 @@ exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected change width={994} > @@ -656,7 +1220,7 @@ exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected change } /> `; -exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_controls" + selectedDataset="gnomad_r2_1_non_cancer" > 12-345-456 @@ -778,7 +1343,7 @@ exports[`RegionPage with "gnomad_r2_1_controls" dataset has no unexpected change > `; -exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_cancer" + selectedDataset="gnomad_r2_1_non_neuro" > M-345-456 @@ -909,7 +1475,7 @@ exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected chan width={994} > @@ -928,7 +1494,7 @@ exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected chan } /> `; -exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_cancer" + selectedDataset="gnomad_r2_1_non_neuro" > 12-345-456 @@ -1050,7 +1617,7 @@ exports[`RegionPage with "gnomad_r2_1_non_cancer" dataset has no unexpected chan > `; -exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_neuro" + selectedDataset="gnomad_r2_1_non_topmed" > M-345-456 @@ -1181,7 +1749,7 @@ exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected chang width={994} > @@ -1200,7 +1768,7 @@ exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected chang } /> `; -exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_neuro" + selectedDataset="gnomad_r2_1_non_topmed" > 12-345-456 @@ -1322,7 +1891,7 @@ exports[`RegionPage with "gnomad_r2_1_non_neuro" dataset has no unexpected chang > `; -exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_topmed" + selectedDataset="gnomad_r3" > M-345-456 @@ -1409,7 +1979,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "M", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1424,7 +1994,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "M", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1442,7 +2012,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "M", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1453,7 +2023,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan width={994} > @@ -1464,21 +2034,29 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "M", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, } } /> + + + `; -exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r2_1_non_topmed" + selectedDataset="gnomad_r3" > 12-345-456 @@ -1549,7 +2128,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "12", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1564,7 +2143,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "12", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1582,7 +2161,7 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan "chrom": "12", "genes": [], "non_coding_constraints": [], - "reference_genome": "GRCh37", + "reference_genome": "GRCh38", "short_tandem_repeats": [], "start": 345, "stop": 456, @@ -1594,8 +2173,8 @@ exports[`RegionPage with "gnomad_r2_1_non_topmed" dataset has no unexpected chan > + + + `; -exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3" + selectedDataset="gnomad_r3_controls_and_biobanks" > M-345-456 @@ -1725,7 +2313,7 @@ exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a mit width={994} > @@ -1752,7 +2340,7 @@ exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a mit /> `; -exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3" + selectedDataset="gnomad_r3_controls_and_biobanks" > 12-345-456 @@ -1874,7 +2463,7 @@ exports[`RegionPage with "gnomad_r3" dataset has no unexpected changes for a non > `; -exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_controls_and_biobanks" + selectedDataset="gnomad_r3_non_cancer" > M-345-456 @@ -2013,7 +2603,7 @@ exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpe width={994} > @@ -2040,7 +2630,7 @@ exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpe /> `; -exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_controls_and_biobanks" + selectedDataset="gnomad_r3_non_cancer" > 12-345-456 @@ -2162,7 +2753,7 @@ exports[`RegionPage with "gnomad_r3_controls_and_biobanks" dataset has no unexpe > `; -exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_cancer" + selectedDataset="gnomad_r3_non_neuro" > M-345-456 @@ -2301,7 +2893,7 @@ exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected change width={994} > @@ -2328,7 +2920,7 @@ exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected change /> `; -exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_cancer" + selectedDataset="gnomad_r3_non_neuro" > 12-345-456 @@ -2450,7 +3043,7 @@ exports[`RegionPage with "gnomad_r3_non_cancer" dataset has no unexpected change > `; -exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_neuro" + selectedDataset="gnomad_r3_non_topmed" > M-345-456 @@ -2589,7 +3183,7 @@ exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes width={994} > @@ -2616,7 +3210,7 @@ exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes /> `; -exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_neuro" + selectedDataset="gnomad_r3_non_topmed" > 12-345-456 @@ -2738,7 +3333,7 @@ exports[`RegionPage with "gnomad_r3_non_neuro" dataset has no unexpected changes > `; -exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_topmed" + selectedDataset="gnomad_r3_non_v2" > M-345-456 @@ -2877,7 +3473,7 @@ exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected change width={994} > @@ -2904,7 +3500,7 @@ exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected change /> `; -exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_topmed" + selectedDataset="gnomad_r3_non_v2" > 12-345-456 @@ -3026,7 +3623,7 @@ exports[`RegionPage with "gnomad_r3_non_topmed" dataset has no unexpected change > `; -exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes for a mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r4" dataset has no unexpected changes for a mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_v2" + selectedDataset="gnomad_r4" > M-345-456 @@ -3165,7 +3763,7 @@ exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes fo width={994} > @@ -3183,16 +3781,8 @@ exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes fo } } /> - - - `; -exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` +exports[`RegionPage with "gnomad_r4" dataset has no unexpected changes for a non-mitochondrial region 1`] = ` } - selectedDataset="gnomad_r3_non_v2" + selectedDataset="gnomad_r4" > 12-345-456 @@ -3314,8 +3905,8 @@ exports[`RegionPage with "gnomad_r3_non_v2" dataset has no unexpected changes fo > - - - `; +exports[`RegionPageContainer with dataset gnomad_cnv_r4 queries API with correct parameters 1`] = ` + + [Function] + +`; + exports[`RegionPageContainer with dataset gnomad_r2_1 queries API with correct parameters 1`] = ` `; +exports[`RegionPageContainer with dataset gnomad_r4 queries API with correct parameters 1`] = ` + + [Function] + +`; + exports[`RegionPageContainer with dataset gnomad_sv_r2_1 queries API with correct parameters 1`] = ` { if (!zoomRegion) { @@ -23,3 +24,14 @@ export const filterStructuralVariantsInZoomRegion = (structuralVariants: any, zo (variant.pos2 <= stop && variant.end2 >= start) ) } + +export const filterCopyNumberVariantsInZoomRegion = (copyNumberVariants: CopyNumberVariant[], zoomRegion: any) => { + if (!zoomRegion) { + return copyNumberVariants + } + const { start, stop } = zoomRegion + return copyNumberVariants.filter( + (variant: any) => + (variant.pos <= stop && variant.end >= start) + ) +} diff --git a/browser/src/Searchbox.spec.tsx b/browser/src/Searchbox.spec.tsx index e78cb8ece..c1ed69e41 100644 --- a/browser/src/Searchbox.spec.tsx +++ b/browser/src/Searchbox.spec.tsx @@ -39,6 +39,8 @@ describe('Searchbox', () => { gnomad_sv_r2_1_controls: 'gnomad_sv_r2_1', gnomad_sv_r2_1_non_neuro: 'gnomad_sv_r2_1', gnomad_sv_r4: 'gnomad_sv_r4', + gnomad_r4: 'gnomad_r2_1', // FIX AFTER V4 MERGED + gnomad_cnv_r4: 'gnomad_cnv_r4', } test('has correct default dataset', () => { diff --git a/browser/src/Searchbox.tsx b/browser/src/Searchbox.tsx index ff7f9769f..94b6a2c75 100644 --- a/browser/src/Searchbox.tsx +++ b/browser/src/Searchbox.tsx @@ -41,6 +41,9 @@ const getDefaultSearchDataset = (selectedDataset: any) => { if (selectedDataset === 'gnomad_sv_r4') { return 'gnomad_sv_r4' } + if (selectedDataset === 'gnomad_cnv_r4') { + return 'gnomad_cnv_r4' + } } return 'gnomad_r2_1' } @@ -86,6 +89,7 @@ export default withRouter((props: any) => { + diff --git a/browser/src/StructuralVariantPage/__snapshots__/StructuralVariantPage.spec.tsx.snap b/browser/src/StructuralVariantPage/__snapshots__/StructuralVariantPage.spec.tsx.snap index e1d190dda..e889f00ce 100644 --- a/browser/src/StructuralVariantPage/__snapshots__/StructuralVariantPage.spec.tsx.snap +++ b/browser/src/StructuralVariantPage/__snapshots__/StructuralVariantPage.spec.tsx.snap @@ -93,6 +93,23 @@ exports[`StructuralVariantPage with dataset gnomad_sv_r2_1 with a complex varian
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • `; +exports[`MitochondrialTranscriptCoverageTrack with dataset gnomad_cnv_r4 queries with proper parameters 1`] = ` + + [Function] + +`; + exports[`MitochondrialTranscriptCoverageTrack with dataset gnomad_r2_1 has no unexpected changes 1`] = `
    `; +exports[`MitochondrialTranscriptCoverageTrack with dataset gnomad_r4 queries with proper parameters 1`] = ` + + [Function] + +`; + exports[`MitochondrialTranscriptCoverageTrack with dataset gnomad_sv_r2_1 queries with proper parameters 1`] = ` `; +exports[`MitochondrialVariantsInTranscript with dataset gnomad_cnv_r4 has no unexpected changes 1`] = ` +[ +
    +

    + ClinVar variants +

    +
    , +

    + No ClinVar variants found in this transcript. +

    , +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    , +] +`; + exports[`MitochondrialVariantsInTranscript with dataset gnomad_r2_1 has no unexpected changes 1`] = `
    +

    + ClinVar variants +

    +
    , +

    + No ClinVar variants found in this transcript. +

    , +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    , +] +`; + exports[`MitochondrialVariantsInTranscript with dataset gnomad_sv_r2_1 has no unexpected changes 1`] = ` [
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • @@ -4535,7 +5537,7 @@ exports[`TranscriptPage with dataset "gnomad_r3" has no unexpected changes 1`] =
    `; -exports[`TranscriptPage with dataset "gnomad_r3_controls_and_biobanks" has no unexpected changes 1`] = ` +exports[`TranscriptPage with dataset "gnomad_r3" has no unexpected changes 1`] = `
    @@ -4574,12 +5576,12 @@ exports[`TranscriptPage with dataset "gnomad_r3_controls_and_biobanks" has no un - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • + +
    + +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl ID +
    +
    + dummy_transcript + . + 12.34.5 +
    +
    + +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + +
    +
    +
    +
    +
    +

    + Constraint + +

    +

    + Constraint not yet available for gnomAD v3. +

    +
    +
    + + Viewing full + transcript + . + + +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +`; + +exports[`TranscriptPage with dataset "gnomad_r3_non_topmed" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl ID +
    +
    + dummy_transcript + . + 12.34.5 +
    +
    + +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + +
    +
    +
    +
    +
    +

    + Constraint + +

    +

    + Constraint not yet available for gnomAD v3. +

    +
    +
    +
    + Viewing full + transcript + . + + +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +`; + +exports[`TranscriptPage with dataset "gnomad_r3_non_v2" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + +

    - Constraint not yet available for gnomAD v3. + Constraint not available for this + transcript

    @@ -8065,6 +11363,149 @@ exports[`TranscriptPage with dataset "gnomad_sv_r2_1" has no unexpected changes +
  • + + gnomAD SVs v2.1 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -723,7 +866,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 20 + 0.2 @@ -763,7 +906,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 30 + 0.3 @@ -803,7 +946,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 40 + 0.4 @@ -843,7 +986,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 50 + 0.5 @@ -883,7 +1026,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 60 + 0.6 @@ -923,7 +1066,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 70 + 0.7 @@ -963,7 +1106,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 80 + 0.8 @@ -1003,7 +1146,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 90 + 0.9 @@ -1043,7 +1186,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -1247,7 +1390,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`]
    `; -exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_cnv_r4 has no unexpected changes 1`] = `
    @@ -1281,21 +1424,21 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan className="DatasetSelector__NavigationMenuWrapper-sc-1p2fxbn-0 ebZvwy" >
  • - gnomAD v2.1.1 + gnomAD v3.1.2
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -1970,7 +2256,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 20 + 0.2 @@ -2010,7 +2296,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 30 + 0.3 @@ -2050,7 +2336,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 40 + 0.4 @@ -2090,7 +2376,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 50 + 0.5 @@ -2130,7 +2416,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 60 + 0.6 @@ -2170,7 +2456,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 70 + 0.7 @@ -2210,7 +2496,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 80 + 0.8 @@ -2250,7 +2536,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 90 + 0.9 @@ -2290,7 +2576,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 100 + 1.0 @@ -2494,7 +2780,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan
    `; -exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected changes 1`] = `
    @@ -2533,12 +2819,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe - gnomAD v2.1.1 (controls) + gnomAD v2.1.1
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -3217,7 +3646,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -3257,7 +3686,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -3297,7 +3726,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -3337,7 +3766,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -3377,7 +3806,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -3417,7 +3846,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -3457,7 +3886,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -3497,7 +3926,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -3537,7 +3966,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -3741,7 +4170,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe
    `; -exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpected changes 1`] = `
    @@ -3780,12 +4209,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (controls)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -4464,7 +5036,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 20 + 0.2 @@ -4504,7 +5076,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 30 + 0.3 @@ -4544,7 +5116,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 40 + 0.4 @@ -4584,7 +5156,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 50 + 0.5 @@ -4624,7 +5196,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 60 + 0.6 @@ -4664,7 +5236,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 70 + 0.7 @@ -4704,7 +5276,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 80 + 0.8 @@ -4744,7 +5316,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 90 + 0.9 @@ -4784,7 +5356,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 100 + 1.0 @@ -4988,7 +5560,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex
    `; -exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unexpected changes 1`] = `
    @@ -5027,12 +5599,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp - gnomAD v2.1.1 (non-neuro) + gnomAD v2.1.1 (non-cancer)
  • - - -
    - 10 + 0.1 @@ -5711,7 +6426,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 20 + 0.2 @@ -5751,7 +6466,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 30 + 0.3 @@ -5791,7 +6506,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 40 + 0.4 @@ -5831,7 +6546,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 50 + 0.5 @@ -5871,7 +6586,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 60 + 0.6 @@ -5911,7 +6626,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 70 + 0.7 @@ -5951,7 +6666,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 80 + 0.8 @@ -5991,7 +6706,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 90 + 0.9 @@ -6031,7 +6746,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 100 + 1.0 @@ -6235,7 +6950,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp
    `; -exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexpected changes 1`] = `
    @@ -6274,12 +6989,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex - gnomAD v2.1.1 (non-TOPMed) + gnomAD v2.1.1 (non-neuro)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -6958,7 +7816,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 20 + 0.2 @@ -6998,7 +7856,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 30 + 0.3 @@ -7038,7 +7896,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 40 + 0.4 @@ -7078,7 +7936,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 50 + 0.5 @@ -7118,7 +7976,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 60 + 0.6 @@ -7158,7 +8016,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 70 + 0.7 @@ -7198,7 +8056,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 80 + 0.8 @@ -7238,7 +8096,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 90 + 0.9 @@ -7278,7 +8136,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 100 + 1.0 @@ -7482,7 +8340,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unexpected changes 1`] = `
    @@ -7521,12 +8379,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change - gnomAD v3.1.2 + gnomAD v2.1.1 (non-TOPMed)
  • - - -
    @@ -7999,7 +9001,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -8204,7 +9206,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 20 + 0.2 @@ -8244,7 +9246,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 30 + 0.3 @@ -8284,7 +9286,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 40 + 0.4 @@ -8324,7 +9326,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 50 + 0.5 @@ -8364,7 +9366,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 60 + 0.6 @@ -8404,7 +9406,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 70 + 0.7 @@ -8444,7 +9446,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 80 + 0.8 @@ -8484,7 +9486,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 90 + 0.9 @@ -8524,7 +9526,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 100 + 1.0 @@ -8728,7 +9730,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected changes 1`] = `
    @@ -8767,12 +9769,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -9450,7 +10595,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 20 + 0.2 @@ -9490,7 +10635,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 30 + 0.3 @@ -9530,7 +10675,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 40 + 0.4 @@ -9570,7 +10715,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 50 + 0.5 @@ -9610,7 +10755,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 60 + 0.6 @@ -9650,7 +10795,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 70 + 0.7 @@ -9690,7 +10835,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 80 + 0.8 @@ -9730,7 +10875,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 90 + 0.9 @@ -9770,7 +10915,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 100 + 1.0 @@ -9974,7 +11119,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks has no unexpected changes 1`] = `
    @@ -10013,12 +11158,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe - gnomAD v3.1.2 (non-cancer) + gnomAD v3.1.2 (controls/biobanks)
  • - +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • +
    - 10 + 0.1 @@ -10696,7 +11984,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -10736,7 +12024,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -10776,7 +12064,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -10816,7 +12104,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -10856,7 +12144,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -10896,7 +12184,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -10936,7 +12224,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -10976,7 +12264,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -11016,7 +12304,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -11220,7 +12508,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpected changes 1`] = `
    @@ -11259,12 +12547,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec - gnomAD v3.1.2 (non-neuro) + gnomAD v3.1.2 (non-cancer)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -11942,7 +13373,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 20 + 0.2 @@ -11982,7 +13413,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 30 + 0.3 @@ -12022,7 +13453,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 40 + 0.4 @@ -12062,7 +13493,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 50 + 0.5 @@ -12102,7 +13533,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 60 + 0.6 @@ -12142,7 +13573,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 70 + 0.7 @@ -12182,7 +13613,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 80 + 0.8 @@ -12222,7 +13653,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 90 + 0.9 @@ -12262,7 +13693,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 100 + 1.0 @@ -12466,7 +13897,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpected changes 1`] = `
    @@ -12505,12 +13936,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe - gnomAD v3.1.2 (non-TOPMed) + gnomAD v3.1.2 (non-neuro)
  • - - -
    - 10 + 0.1 @@ -13188,7 +14762,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -13228,7 +14802,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -13268,7 +14842,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -13308,7 +14882,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -13348,7 +14922,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -13388,7 +14962,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -13428,7 +15002,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -13468,7 +15042,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -13508,7 +15082,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -13712,7 +15286,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe
    `; -exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected changes 1`] = ` +exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpected changes 1`] = `
    @@ -13751,12 +15325,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected - gnomAD v3.1.2 (non-v2) + gnomAD v3.1.2 (non-TOPMed)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • +
    + +
    +
    +
    + Fraction of individuals with coverage over 30 +
    +
    +
    +
    + + + + + + + + 0.1 + + + + + + + + + + 0.2 + + + + + + + + + + 0.3 + + + + + + + + + + 0.4 + + + + + + + + + + 0.5 + + + + + + + + + + 0.6 + + + + + + + + + + 0.7 + + + + + + + + + + 0.8 + + + + + + + + + + 0.9 + + + + + + + + + + 1.0 + + + + + + + + + + + +
    +
    +
    + +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +

    + ClinVar variants +

    +
    +

    + No ClinVar variants found in this transcript. +

    +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    + + + +`; + +exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl ID +
    +
    + dummy_transcript + . + 12.34.5 +
    +
    + +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + +
    +
    +
    +
    +
    +

    + Constraint + +

    +

    + Constraint not yet available for gnomAD v3. +

    +
    +
    +
    + Viewing full + transcript + . + + +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + Fraction of individuals with coverage over 30 +
    +
    +
    +
    + + + + + + + + 0.1 + + + + + + + + + + 0.2 + + + + + + + + + + 0.3 + + + + + + + + + + 0.4 + + + + + + + + + + 0.5 + + + + + + + + + + 0.6 + + + + + + + + + + 0.7 + + + + + + + + + + 0.8 + + + + + + + + + + 0.9 + + + + + + + + + + 1.0 + + + + + + + + + + + +
    +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +

    + ClinVar variants +

    +
    +

    + No ClinVar variants found in this transcript. +

    +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    +
    +
    +
    +`; + +exports[`TranscriptPageContainer with dataset gnomad_r4 has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + + + +
    +
    +
    +
    +
    +
    +
    + Genome build +
    +
    + GRCh37 + / + hg19 +
    +
    +
    +
    + Ensembl ID +
    +
    + dummy_transcript + . + 12.34.5 +
    +
    + +
    +
    + Region +
    +
    + + 13 + : + 123 + - + 321 + +
    +
    +
    +
    + External resources +
    +
    + + Ensembl + + , + + + UCSC Browser + +
    +
    +
    +
    +
    +

    + Constraint + +

    +

    + Constraint not available for this + transcript +

    +
    +
    +
    + Viewing full + transcript + . + + +
    +
    +
    +
    +
    +
      +
    +`; + +exports[`Searchbox with selected dataset gnomad_cnv_r4 has no unexpected changes 1`] = ` +
    + + +
    + +
    +
    +
    +`; + +exports[`Searchbox with selected dataset gnomad_r4 has no unexpected changes 1`] = ` +
    +