From 5e65538f44b3b57cf2c3191f29a0f6b085e224ba Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 14 Sep 2023 11:05:11 -0400 Subject: [PATCH 01/62] cnv notebook draft --- v4-cnvs-test1.ipynb | 558 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 558 insertions(+) create mode 100644 v4-cnvs-test1.ipynb diff --git a/v4-cnvs-test1.ipynb b/v4-cnvs-test1.ipynb new file mode 100644 index 000000000..af2e5794b --- /dev/null +++ b/v4-cnvs-test1.ipynb @@ -0,0 +1,558 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "ffd65742-b1f3-4b7c-8601-a7749886a3dc", + "metadata": {}, + "outputs": [], + "source": [ + "import hail as hl" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e284a9b5-d1c2-4593-bcad-2600c8de9c62", + "metadata": {}, + "outputs": [], + "source": [ + "import itertools" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2d497a90-de5d-41f9-9436-f5cb0ba9e3ff", + "metadata": {}, + "outputs": [], + "source": [ + "cnvs_vcf_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b3d711a4-e822-46fb-a3c4-9158ebd2552a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Initializing Hail with default parameters...\n", + "SLF4J: No SLF4J providers were found.\n", + "SLF4J: Defaulting to no-operation (NOP) logger implementation\n", + "SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\n", + "SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.\n", + "SLF4J: Ignoring binding found at [jar:file:/Users/ealarman/.pyenv/versions/3.9.18/envs/myenv/lib/python3.9/site-packages/pyspark/jars/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]\n", + "SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.\n", + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", + "Running on Apache Spark version 3.3.3\n", + "SparkUI available at http://wm50c-6f4.broadinstitute.org:4040\n", + "Welcome to\n", + " __ __ <>__\n", + " / /_/ /__ __/ /\n", + " / __ / _ `/ / /\n", + " /_/ /_/\\_,_/_/_/ version 0.2.120-f00f916faf78\n", + "LOGGING: writing to /Users/ealarman/gnomad-browser/hail-20230908-1000-0.2.120-f00f916faf78.log\n" + ] + } + ], + "source": [ + "ds = hl.import_vcf(cnvs_vcf_path, reference_genome='GRCh38', force_bgz=True).rows()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "26903cba-df9f-41c8-a37d-dd5327dcc164", + "metadata": {}, + "outputs": [], + "source": [ + "ds_ht_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.ht\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1b65d9be-9245-413f-a144-4bcd7eca3e83", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-09-08 10:00:56.889 Hail: INFO: scanning VCF for sortedness...\n", + "2023-09-08 10:01:03.698 Hail: INFO: VCF is out of order... (0 + 1) / 1]\n", + " Write the dataset to disk before running multiple queries to avoid multiple costly data shuffles.\n", + "2023-09-08 10:01:05.041 Hail: INFO: Ordering unsorted dataset with network shuffle\n", + "2023-09-08 10:01:09.194 Hail: INFO: wrote table with 545 rows in 1 partition to GNOMAD_V4.4.3_browser_prototype_1.1.ht\n" + ] + } + ], + "source": [ + "ds.write(ds_ht_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "57fd9cde-95ff-4abb-aead-51686d1b4462", + "metadata": {}, + "outputs": [], + "source": [ + "ds = hl.read_table(ds_ht_path)\n", + "ds = ds.sample(0.01, seed=1234)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ece62cc3-3a7c-43fc-9e97-d106a0239909", + "metadata": {}, + "outputs": [], + "source": [ + "ds_sampled_ht_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.sampled.ht\"" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "31102dd2-6e0a-48eb-bebd-756df80ee58b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-09-08 10:01:12.605 Hail: INFO: wrote table with 5 rows in 1 partition to GNOMAD_V4.4.3_browser_prototype_1.1.sampled.ht\n" + ] + } + ], + "source": [ + "ds.write(ds_sampled_ht_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "59264bf6-b2c0-4283-a727-01069101ca4e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Initializing Hail with default parameters...\n", + "SLF4J: No SLF4J providers were found.\n", + "SLF4J: Defaulting to no-operation (NOP) logger implementation\n", + "SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\n", + "SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.\n", + "SLF4J: Ignoring binding found at [jar:file:/Users/ealarman/.pyenv/versions/3.9.18/lib/python3.9/site-packages/pyspark/jars/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]\n", + "SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.\n", + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", + "Running on Apache Spark version 3.3.3\n", + "SparkUI available at http://wm50c-6f4.broadinstitute.org:4040\n", + "Welcome to\n", + " __ __ <>__\n", + " / /_/ /__ __/ /\n", + " / __ / _ `/ / /\n", + " /_/ /_/\\_,_/_/_/ version 0.2.121-35da6f47ddcd\n", + "LOGGING: writing to /Users/ealarman/gnomad-browser/hail-20230911-1039-0.2.121-35da6f47ddcd.log\n" + ] + } + ], + "source": [ + "sampled_ds = hl.read_table(ds_sampled_ht_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "83040094-3a19-46a2-9a89-51aa6076b361", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 0:===========================================================(1 + 0) / 1]\r" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
info
locus
alleles
rsid
qual
filters
END
SVLEN
SVTYPE
POSMIN
POSMAX
ENDMIN
ENDMAX
Genes
SC
afr_SC
amr_SC
asj_SC
eas_SC
fin_SC
mid_SC
nfe_SC
sas_SC
SN
afr_SN
amr_SN
asj_SN
eas_SN
fin_SN
mid_SN
nfe_SN
sas_SN
SF
afr_SF
amr_SF
asj_SF
eas_SF
fin_SF
mid_SF
nfe_SF
sas_SF
MALE_SC
afr_MALE_SC
amr_MALE_SC
asj_MALE_SC
eas_MALE_SC
fin_MALE_SC
mid_MALE_SC
nfe_MALE_SC
sas_MALE_SC
MALE_SN
afr_MALE_SN
amr_MALE_SN
asj_MALE_SN
eas_MALE_SN
fin_MALE_SN
mid_MALE_SN
nfe_MALE_SN
sas_MALE_SN
MALE_SF
afr_MALE_SF
amr_MALE_SF
asj_MALE_SF
eas_MALE_SF
fin_MALE_SF
mid_MALE_SF
nfe_MALE_SF
sas_MALE_SF
FEMALE_SC
afr_FEMALE_SC
amr_FEMALE_SC
asj_FEMALE_SC
eas_FEMALE_SC
fin_FEMALE_SC
mid_FEMALE_SC
nfe_FEMALE_SC
sas_FEMALE_SC
FEMALE_SN
afr_FEMALE_SN
amr_FEMALE_SN
asj_FEMALE_SN
eas_FEMALE_SN
fin_FEMALE_SN
mid_FEMALE_SN
nfe_FEMALE_SN
sas_FEMALE_SN
FEMALE_SF
afr_FEMALE_SF
amr_FEMALE_SF
asj_FEMALE_SF
eas_FEMALE_SF
fin_FEMALE_SF
mid_FEMALE_SF
nfe_FEMALE_SF
sas_FEMALE_SF
locus<GRCh38>array<str>strfloat64set<str>int32int32strint32int32int32int32strfloat64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64
chr1:1034009["N","<DEL>"]"variantbs80_246__DEL"-1.00e+01{"TRUE"}10354221413"DEL"1034009103400910354221035422"None"2.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+002.00e+000.00e+003.75e+059.11e+031.66e+048.31e+031.26e+041.81e+041.16e+032.65e+052.76e+045.33e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.55e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.91e+053.76e+037.07e+034.35e+036.35e+038.68e+036.57e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.62e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.36e+039.57e+033.96e+036.29e+039.38e+035.01e+021.34e+056.36e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.47e-060.00e+00
chr1:102890354["N","<DUP>"]"variantbs80_32404__DUP"-1.00e+01{"TRUE"}10293465444300"DUP"102890354102890354102934654102934654"None"2.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.22e+031.66e+048.33e+031.26e+041.81e+041.14e+032.65e+052.76e+045.33e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.78e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.82e+037.04e+034.39e+036.33e+038.63e+036.55e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.41e+039.60e+033.95e+036.31e+039.46e+034.85e+021.34e+056.36e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.47e-060.00e+00
chr1:103550844["N","<DUP>"]"variantbs80_32704__DUP"-1.00e+01{"TRUE"}10357091120067"DUP"103550844103550844103570911103570911"None"1.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.09e+031.67e+048.37e+031.27e+041.81e+041.12e+032.65e+052.76e+042.66e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.77e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.91e+053.75e+037.05e+034.37e+036.33e+038.69e+036.60e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.62e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.84e+055.34e+039.61e+034.00e+036.33e+039.36e+034.60e+021.34e+056.42e+030.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+00
chr1:115744731["N","<DUP>"]"variantbs80_36173__DUP"-1.00e+01{"TRUE"}11576887924148"DUP"115744731115744731115768879115768879"None"8.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+003.75e+059.14e+031.66e+048.33e+031.27e+041.81e+041.13e+032.65e+052.76e+042.13e-051.09e-040.00e+000.00e+000.00e+000.00e+000.00e+002.64e-050.00e+001.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.79e+037.10e+034.35e+036.39e+038.68e+036.53e+021.31e+052.12e+045.22e-062.64e-040.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+001.84e+055.35e+039.55e+033.98e+036.28e+039.41e+034.74e+021.34e+056.39e+033.81e-050.00e+000.00e+000.00e+000.00e+000.00e+000.00e+005.24e-050.00e+00
chr1:119380407["N","<DUP>"]"variantbs80_37041__DUP"-1.00e+01{"TRUE"}119740616360209"DUP"119380407119380407119727782119744324"HAO2,HSD3B1,HSD3B2,ZNF697"1.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.14e+031.66e+048.34e+031.26e+041.81e+041.16e+032.65e+052.76e+042.66e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.78e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.77e+037.12e+034.39e+036.31e+038.63e+036.68e+021.31e+052.12e+040.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.37e+039.53e+033.95e+036.29e+039.43e+034.88e+021.34e+056.42e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.48e-060.00e+00
" + ], + "text/plain": [ + "+----------------+---------------+--------------------------+-----------+\n", + "| locus | alleles | rsid | qual |\n", + "+----------------+---------------+--------------------------+-----------+\n", + "| locus | array | str | float64 |\n", + "+----------------+---------------+--------------------------+-----------+\n", + "| chr1:1034009 | [\"N\",\"\"] | \"variantbs80_246__DEL\" | -1.00e+01 |\n", + "| chr1:102890354 | [\"N\",\"\"] | \"variantbs80_32404__DUP\" | -1.00e+01 |\n", + "| chr1:103550844 | [\"N\",\"\"] | \"variantbs80_32704__DUP\" | -1.00e+01 |\n", + "| chr1:115744731 | [\"N\",\"\"] | \"variantbs80_36173__DUP\" | -1.00e+01 |\n", + "| chr1:119380407 | [\"N\",\"\"] | \"variantbs80_37041__DUP\" | -1.00e+01 |\n", + "+----------------+---------------+--------------------------+-----------+\n", + "\n", + "+----------+-----------+------------+-------------+-------------+-------------+\n", + "| filters | info.END | info.SVLEN | info.SVTYPE | info.POSMIN | info.POSMAX |\n", + "+----------+-----------+------------+-------------+-------------+-------------+\n", + "| set | int32 | int32 | str | int32 | int32 |\n", + "+----------+-----------+------------+-------------+-------------+-------------+\n", + "| {\"TRUE\"} | 1035422 | 1413 | \"DEL\" | 1034009 | 1034009 |\n", + "| {\"TRUE\"} | 102934654 | 44300 | \"DUP\" | 102890354 | 102890354 |\n", + "| {\"TRUE\"} | 103570911 | 20067 | \"DUP\" | 103550844 | 103550844 |\n", + "| {\"TRUE\"} | 115768879 | 24148 | \"DUP\" | 115744731 | 115744731 |\n", + "| {\"TRUE\"} | 119740616 | 360209 | \"DUP\" | 119380407 | 119380407 |\n", + "+----------+-----------+------------+-------------+-------------+-------------+\n", + "\n", + "+-------------+-------------+-----------------------------+----------+\n", + "| info.ENDMIN | info.ENDMAX | info.Genes | info.SC |\n", + "+-------------+-------------+-----------------------------+----------+\n", + "| int32 | int32 | str | float64 |\n", + "+-------------+-------------+-----------------------------+----------+\n", + "| 1035422 | 1035422 | \"None\" | 2.00e+00 |\n", + "| 102934654 | 102934654 | \"None\" | 2.00e+00 |\n", + "| 103570911 | 103570911 | \"None\" | 1.00e+00 |\n", + "| 115768879 | 115768879 | \"None\" | 8.00e+00 |\n", + "| 119727782 | 119744324 | \"HAO2,HSD3B1,HSD3B2,ZNF697\" | 1.00e+00 |\n", + "+-------------+-------------+-----------------------------+----------+\n", + "\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| info.afr_SC | info.amr_SC | info.asj_SC | info.eas_SC | info.fin_SC |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| float64 | float64 | float64 | float64 | float64 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 1.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "\n", + "+-------------+-------------+-------------+----------+-------------+\n", + "| info.mid_SC | info.nfe_SC | info.sas_SC | info.SN | info.afr_SN |\n", + "+-------------+-------------+-------------+----------+-------------+\n", + "| float64 | float64 | float64 | float64 | float64 |\n", + "+-------------+-------------+-------------+----------+-------------+\n", + "| 0.00e+00 | 2.00e+00 | 0.00e+00 | 3.75e+05 | 9.11e+03 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.22e+03 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.09e+03 |\n", + "| 0.00e+00 | 7.00e+00 | 0.00e+00 | 3.75e+05 | 9.14e+03 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.14e+03 |\n", + "+-------------+-------------+-------------+----------+-------------+\n", + "\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| info.amr_SN | info.asj_SN | info.eas_SN | info.fin_SN | info.mid_SN |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| float64 | float64 | float64 | float64 | float64 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| 1.66e+04 | 8.31e+03 | 1.26e+04 | 1.81e+04 | 1.16e+03 |\n", + "| 1.66e+04 | 8.33e+03 | 1.26e+04 | 1.81e+04 | 1.14e+03 |\n", + "| 1.67e+04 | 8.37e+03 | 1.27e+04 | 1.81e+04 | 1.12e+03 |\n", + "| 1.66e+04 | 8.33e+03 | 1.27e+04 | 1.81e+04 | 1.13e+03 |\n", + "| 1.66e+04 | 8.34e+03 | 1.26e+04 | 1.81e+04 | 1.16e+03 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "\n", + "+-------------+-------------+----------+-------------+-------------+\n", + "| info.nfe_SN | info.sas_SN | info.SF | info.afr_SF | info.amr_SF |\n", + "+-------------+-------------+----------+-------------+-------------+\n", + "| float64 | float64 | float64 | float64 | float64 |\n", + "+-------------+-------------+----------+-------------+-------------+\n", + "| 2.65e+05 | 2.76e+04 | 5.33e-06 | 0.00e+00 | 0.00e+00 |\n", + "| 2.65e+05 | 2.76e+04 | 5.33e-06 | 0.00e+00 | 0.00e+00 |\n", + "| 2.65e+05 | 2.76e+04 | 2.66e-06 | 0.00e+00 | 0.00e+00 |\n", + "| 2.65e+05 | 2.76e+04 | 2.13e-05 | 1.09e-04 | 0.00e+00 |\n", + "| 2.65e+05 | 2.76e+04 | 2.66e-06 | 0.00e+00 | 0.00e+00 |\n", + "+-------------+-------------+----------+-------------+-------------+\n", + "\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| info.asj_SF | info.eas_SF | info.fin_SF | info.mid_SF | info.nfe_SF |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| float64 | float64 | float64 | float64 | float64 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 7.55e-06 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.78e-06 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.77e-06 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 2.64e-05 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.78e-06 |\n", + "+-------------+-------------+-------------+-------------+-------------+\n", + "\n", + "+-------------+--------------+------------------+------------------+\n", + "| info.sas_SF | info.MALE_SC | info.afr_MALE_SC | info.amr_MALE_SC |\n", + "+-------------+--------------+------------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+-------------+--------------+------------------+------------------+\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 1.00e+00 | 1.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+-------------+--------------+------------------+------------------+\n", + "\n", + "+------------------+------------------+------------------+------------------+\n", + "| info.asj_MALE_SC | info.eas_MALE_SC | info.fin_MALE_SC | info.mid_MALE_SC |\n", + "+------------------+------------------+------------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+------------------+------------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+------------------+------------------+------------------+------------------+\n", + "\n", + "+------------------+------------------+--------------+------------------+\n", + "| info.nfe_MALE_SC | info.sas_MALE_SC | info.MALE_SN | info.afr_MALE_SN |\n", + "+------------------+------------------+--------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+--------------+------------------+\n", + "| 1.00e+00 | 0.00e+00 | 1.91e+05 | 3.76e+03 |\n", + "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.82e+03 |\n", + "| 1.00e+00 | 0.00e+00 | 1.91e+05 | 3.75e+03 |\n", + "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.79e+03 |\n", + "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.77e+03 |\n", + "+------------------+------------------+--------------+------------------+\n", + "\n", + "+------------------+------------------+------------------+------------------+\n", + "| info.amr_MALE_SN | info.asj_MALE_SN | info.eas_MALE_SN | info.fin_MALE_SN |\n", + "+------------------+------------------+------------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+------------------+------------------+\n", + "| 7.07e+03 | 4.35e+03 | 6.35e+03 | 8.68e+03 |\n", + "| 7.04e+03 | 4.39e+03 | 6.33e+03 | 8.63e+03 |\n", + "| 7.05e+03 | 4.37e+03 | 6.33e+03 | 8.69e+03 |\n", + "| 7.10e+03 | 4.35e+03 | 6.39e+03 | 8.68e+03 |\n", + "| 7.12e+03 | 4.39e+03 | 6.31e+03 | 8.63e+03 |\n", + "+------------------+------------------+------------------+------------------+\n", + "\n", + "+------------------+------------------+------------------+--------------+\n", + "| info.mid_MALE_SN | info.nfe_MALE_SN | info.sas_MALE_SN | info.MALE_SF |\n", + "+------------------+------------------+------------------+--------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+------------------+--------------+\n", + "| 6.57e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", + "| 6.55e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", + "| 6.60e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", + "| 6.53e+02 | 1.31e+05 | 2.12e+04 | 5.22e-06 |\n", + "| 6.68e+02 | 1.31e+05 | 2.12e+04 | 0.00e+00 |\n", + "+------------------+------------------+------------------+--------------+\n", + "\n", + "+------------------+------------------+------------------+------------------+\n", + "| info.afr_MALE_SF | info.amr_MALE_SF | info.asj_MALE_SF | info.eas_MALE_SF |\n", + "+------------------+------------------+------------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+------------------+------------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 2.64e-04 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+------------------+------------------+------------------+------------------+\n", + "\n", + "+------------------+------------------+------------------+------------------+\n", + "| info.fin_MALE_SF | info.mid_MALE_SF | info.nfe_MALE_SF | info.sas_MALE_SF |\n", + "+------------------+------------------+------------------+------------------+\n", + "| float64 | float64 | float64 | float64 |\n", + "+------------------+------------------+------------------+------------------+\n", + "| 0.00e+00 | 0.00e+00 | 7.62e-06 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 7.62e-06 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+------------------+------------------+------------------+------------------+\n", + "\n", + "+----------------+--------------------+--------------------+\n", + "| info.FEMALE_SC | info.afr_FEMALE_SC | info.amr_FEMALE_SC |\n", + "+----------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+----------------+--------------------+--------------------+\n", + "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 7.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+----------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.asj_FEMALE_SC | info.eas_FEMALE_SC | info.fin_FEMALE_SC |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+--------------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.mid_FEMALE_SC | info.nfe_FEMALE_SC | info.sas_FEMALE_SC |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 7.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", + "+--------------------+--------------------+--------------------+\n", + "\n", + "+----------------+--------------------+--------------------+\n", + "| info.FEMALE_SN | info.afr_FEMALE_SN | info.amr_FEMALE_SN |\n", + "+----------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+----------------+--------------------+--------------------+\n", + "| 1.84e+05 | 5.36e+03 | 9.57e+03 |\n", + "| 1.84e+05 | 5.41e+03 | 9.60e+03 |\n", + "| 1.84e+05 | 5.34e+03 | 9.61e+03 |\n", + "| 1.84e+05 | 5.35e+03 | 9.55e+03 |\n", + "| 1.84e+05 | 5.37e+03 | 9.53e+03 |\n", + "+----------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.asj_FEMALE_SN | info.eas_FEMALE_SN | info.fin_FEMALE_SN |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 3.96e+03 | 6.29e+03 | 9.38e+03 |\n", + "| 3.95e+03 | 6.31e+03 | 9.46e+03 |\n", + "| 4.00e+03 | 6.33e+03 | 9.36e+03 |\n", + "| 3.98e+03 | 6.28e+03 | 9.41e+03 |\n", + "| 3.95e+03 | 6.29e+03 | 9.43e+03 |\n", + "+--------------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.mid_FEMALE_SN | info.nfe_FEMALE_SN | info.sas_FEMALE_SN |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 5.01e+02 | 1.34e+05 | 6.36e+03 |\n", + "| 4.85e+02 | 1.34e+05 | 6.36e+03 |\n", + "| 4.60e+02 | 1.34e+05 | 6.42e+03 |\n", + "| 4.74e+02 | 1.34e+05 | 6.39e+03 |\n", + "| 4.88e+02 | 1.34e+05 | 6.42e+03 |\n", + "+--------------------+--------------------+--------------------+\n", + "\n", + "+----------------+--------------------+--------------------+\n", + "| info.FEMALE_SF | info.afr_FEMALE_SF | info.amr_FEMALE_SF |\n", + "+----------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+----------------+--------------------+--------------------+\n", + "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", + "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 3.81e-05 | 0.00e+00 | 0.00e+00 |\n", + "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", + "+----------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.asj_FEMALE_SF | info.eas_FEMALE_SF | info.fin_FEMALE_SF |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "+--------------------+--------------------+--------------------+\n", + "\n", + "+--------------------+--------------------+--------------------+\n", + "| info.mid_FEMALE_SF | info.nfe_FEMALE_SF | info.sas_FEMALE_SF |\n", + "+--------------------+--------------------+--------------------+\n", + "| float64 | float64 | float64 |\n", + "+--------------------+--------------------+--------------------+\n", + "| 0.00e+00 | 7.47e-06 | 0.00e+00 |\n", + "| 0.00e+00 | 7.47e-06 | 0.00e+00 |\n", + "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", + "| 0.00e+00 | 5.24e-05 | 0.00e+00 |\n", + "| 0.00e+00 | 7.48e-06 | 0.00e+00 |\n", + "+--------------------+--------------------+--------------------+" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sampled_ds.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f8b581b4-6ef1-4094-abd2-36ec58e0be8c", + "metadata": {}, + "outputs": [], + "source": [ + "FREQ_FIELDS = ['SC','SN','SF']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a9852dc3-46d2-49df-a76a-958b25e80c74", + "metadata": {}, + "outputs": [], + "source": [ + "POPULATIONS = ['afr','amr','asj','eas','fin','mid','nfe','sas']" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6fdfabad-7b50-405a-af4e-470bc66afcb2", + "metadata": {}, + "outputs": [], + "source": [ + "DIVISIONS = list(\n", + " itertools.chain.from_iterable(\n", + " [(pop, pop), (f\"{pop}_XX\", f\"{pop}_FEMALE\"), (f\"{pop}_XY\", f\"{pop}_MALE\")] for pop in POPULATIONS\n", + " )\n", + ") + [(\"XX\", \"FEMALE\"), (\"XY\", \"MALE\")]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec8cb031-bf5a-42bd-9de6-5237d57910f3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 46ad865933cb1cf73fa34abd5542d822da68e2df Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 21 Sep 2023 16:21:50 -0400 Subject: [PATCH 02/62] inital pipelines and task creation --- .../datasets/gnomad_v4/__init__.py | 0 .../datasets/gnomad_v4/gnomad_v4_cnvs.py | 66 +++ .../pipelines/export_to_elasticsearch.py | 15 + v4-cnvs-test1.ipynb | 558 ------------------ 4 files changed, 81 insertions(+), 558 deletions(-) create mode 100644 data-pipeline/src/data_pipeline/datasets/gnomad_v4/__init__.py create mode 100644 data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py delete mode 100644 v4-cnvs-test1.ipynb diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/__init__.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py new file mode 100644 index 000000000..b477a8443 --- /dev/null +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py @@ -0,0 +1,66 @@ +import itertools + +import hail as hl + + +def x_position(chrom, position): + contig_number = ( + hl.case().when(chrom == "X", 23).when(chrom == "Y", 24).when(chrom[0] == "M", 25).default(hl.int(chrom)) + ) + return hl.int64(contig_number) * 1_000_000_000 + position + + +FREQ_FIELDS = ['SC','SN','SF'] +POPULATIONS = ['afr','amr','asj','eas','fin','mid','nfe','sas'] +DIVISIONS = list( + itertools.chain.from_iterable( + [(pop, pop), (f"{pop}_XX", f"{pop}_FEMALE"), (f"{pop}_XY", f"{pop}_MALE")] for pop in POPULATIONS + ) + ) + [("XX", "FEMALE"), ("XY", "MALE")] + +# vcf_paths = "GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz" +def prepare_gnomad_v4_cnvs(vcf_path): + ds = hl.import_vcf(vcf_path, force_bgz=True, min_partitions=32, reference_genome="GRCh38").rows() + + ds = ds.annotate( + variant_id=ds.rsid.replace("^variantbs80_", ""), + reference_genome="GRCh38", + # Start + chrom=ds.locus.contig.replace("chr", ""), + pos=ds.locus.position, + # End + end=ds.info.END, + # Other + length=ds.info.SVLEN, + type=ds.info.SVTYPE, + alts=ds.alleles[1:], + ) + + ds = ds.annotate( + xpos=x_position(ds.chrom, ds.pos), + xend=x_position(ds.chrom, ds.end), + ) + + ds = ds.annotate(genes=hl.set(hl.array(hl.str(ds.info.Genes).split(',')))) + + ds = ds.annotate( + freq=hl.struct( + **{field.lower(): ds.info[field] for field in FREQ_FIELDS}, + populations=[ + hl.struct(id=pop_id, **{field.lower(): ds.info[f"{pop_key}_{field}"] for field in FREQ_FIELDS}) + for (pop_id, pop_key) in DIVISIONS + ], + )) + + ds = ds.key_by("variant_id") + + ds = ds.annotate( + posmin = ds.info.POSMIN, + posmax = ds.info.POSMAX, + endmin = ds.info.ENDMIN, + endmax = ds.info.ENDMAX, + ) + + ds = ds.drop("locus", "alleles", "info", "rsid") + ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) + return ds \ No newline at end of file diff --git a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py index b6d7e5619..6495171c6 100644 --- a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py +++ b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py @@ -37,6 +37,7 @@ ) from data_pipeline.pipelines.gnomad_v3_short_tandem_repeats import pipeline as gnomad_v3_short_tandem_repeats_pipeline +from data_pipeline.pipelines.gnomad_v4_cnvs import pipeline as gnomad_v4_cnvs_pipeline logger = logging.getLogger("gnomad_data_pipeline") @@ -105,6 +106,20 @@ def add_liftover_document_id(ds): "block_size": 1_000, }, }, + ############################################################################################################## + # gnomAD v4 CNVs + ############################################################################################################## + "gnomad_v4_cnvs": { + "get_table": lambda: hl.read_table(gnomad_v4_cnvs_pipeline.get_output("cnvs").get_output_path()), + "args": { + "index": "gnomad_v4_cnvs", + "index_fields": ["variant_id", "xpos", "xend","genes"], + "id_field": "variant_id", + "num_shards": 1, + "block_size": 1_000, + }, + }, + ############################################################################################################## # gnomAD v3 ############################################################################################################## diff --git a/v4-cnvs-test1.ipynb b/v4-cnvs-test1.ipynb deleted file mode 100644 index af2e5794b..000000000 --- a/v4-cnvs-test1.ipynb +++ /dev/null @@ -1,558 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "id": "ffd65742-b1f3-4b7c-8601-a7749886a3dc", - "metadata": {}, - "outputs": [], - "source": [ - "import hail as hl" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "e284a9b5-d1c2-4593-bcad-2600c8de9c62", - "metadata": {}, - "outputs": [], - "source": [ - "import itertools" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "2d497a90-de5d-41f9-9436-f5cb0ba9e3ff", - "metadata": {}, - "outputs": [], - "source": [ - "cnvs_vcf_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "b3d711a4-e822-46fb-a3c4-9158ebd2552a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Initializing Hail with default parameters...\n", - "SLF4J: No SLF4J providers were found.\n", - "SLF4J: Defaulting to no-operation (NOP) logger implementation\n", - "SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\n", - "SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.\n", - "SLF4J: Ignoring binding found at [jar:file:/Users/ealarman/.pyenv/versions/3.9.18/envs/myenv/lib/python3.9/site-packages/pyspark/jars/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]\n", - "SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.\n", - "Setting default log level to \"WARN\".\n", - "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", - "Running on Apache Spark version 3.3.3\n", - "SparkUI available at http://wm50c-6f4.broadinstitute.org:4040\n", - "Welcome to\n", - " __ __ <>__\n", - " / /_/ /__ __/ /\n", - " / __ / _ `/ / /\n", - " /_/ /_/\\_,_/_/_/ version 0.2.120-f00f916faf78\n", - "LOGGING: writing to /Users/ealarman/gnomad-browser/hail-20230908-1000-0.2.120-f00f916faf78.log\n" - ] - } - ], - "source": [ - "ds = hl.import_vcf(cnvs_vcf_path, reference_genome='GRCh38', force_bgz=True).rows()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "26903cba-df9f-41c8-a37d-dd5327dcc164", - "metadata": {}, - "outputs": [], - "source": [ - "ds_ht_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.ht\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "1b65d9be-9245-413f-a144-4bcd7eca3e83", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-09-08 10:00:56.889 Hail: INFO: scanning VCF for sortedness...\n", - "2023-09-08 10:01:03.698 Hail: INFO: VCF is out of order... (0 + 1) / 1]\n", - " Write the dataset to disk before running multiple queries to avoid multiple costly data shuffles.\n", - "2023-09-08 10:01:05.041 Hail: INFO: Ordering unsorted dataset with network shuffle\n", - "2023-09-08 10:01:09.194 Hail: INFO: wrote table with 545 rows in 1 partition to GNOMAD_V4.4.3_browser_prototype_1.1.ht\n" - ] - } - ], - "source": [ - "ds.write(ds_ht_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "57fd9cde-95ff-4abb-aead-51686d1b4462", - "metadata": {}, - "outputs": [], - "source": [ - "ds = hl.read_table(ds_ht_path)\n", - "ds = ds.sample(0.01, seed=1234)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ece62cc3-3a7c-43fc-9e97-d106a0239909", - "metadata": {}, - "outputs": [], - "source": [ - "ds_sampled_ht_path = \"GNOMAD_V4.4.3_browser_prototype_1.1.sampled.ht\"" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "31102dd2-6e0a-48eb-bebd-756df80ee58b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2023-09-08 10:01:12.605 Hail: INFO: wrote table with 5 rows in 1 partition to GNOMAD_V4.4.3_browser_prototype_1.1.sampled.ht\n" - ] - } - ], - "source": [ - "ds.write(ds_sampled_ht_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "59264bf6-b2c0-4283-a727-01069101ca4e", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Initializing Hail with default parameters...\n", - "SLF4J: No SLF4J providers were found.\n", - "SLF4J: Defaulting to no-operation (NOP) logger implementation\n", - "SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\n", - "SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.\n", - "SLF4J: Ignoring binding found at [jar:file:/Users/ealarman/.pyenv/versions/3.9.18/lib/python3.9/site-packages/pyspark/jars/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]\n", - "SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.\n", - "Setting default log level to \"WARN\".\n", - "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", - "Running on Apache Spark version 3.3.3\n", - "SparkUI available at http://wm50c-6f4.broadinstitute.org:4040\n", - "Welcome to\n", - " __ __ <>__\n", - " / /_/ /__ __/ /\n", - " / __ / _ `/ / /\n", - " /_/ /_/\\_,_/_/_/ version 0.2.121-35da6f47ddcd\n", - "LOGGING: writing to /Users/ealarman/gnomad-browser/hail-20230911-1039-0.2.121-35da6f47ddcd.log\n" - ] - } - ], - "source": [ - "sampled_ds = hl.read_table(ds_sampled_ht_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "83040094-3a19-46a2-9a89-51aa6076b361", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 0:===========================================================(1 + 0) / 1]\r" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
info
locus
alleles
rsid
qual
filters
END
SVLEN
SVTYPE
POSMIN
POSMAX
ENDMIN
ENDMAX
Genes
SC
afr_SC
amr_SC
asj_SC
eas_SC
fin_SC
mid_SC
nfe_SC
sas_SC
SN
afr_SN
amr_SN
asj_SN
eas_SN
fin_SN
mid_SN
nfe_SN
sas_SN
SF
afr_SF
amr_SF
asj_SF
eas_SF
fin_SF
mid_SF
nfe_SF
sas_SF
MALE_SC
afr_MALE_SC
amr_MALE_SC
asj_MALE_SC
eas_MALE_SC
fin_MALE_SC
mid_MALE_SC
nfe_MALE_SC
sas_MALE_SC
MALE_SN
afr_MALE_SN
amr_MALE_SN
asj_MALE_SN
eas_MALE_SN
fin_MALE_SN
mid_MALE_SN
nfe_MALE_SN
sas_MALE_SN
MALE_SF
afr_MALE_SF
amr_MALE_SF
asj_MALE_SF
eas_MALE_SF
fin_MALE_SF
mid_MALE_SF
nfe_MALE_SF
sas_MALE_SF
FEMALE_SC
afr_FEMALE_SC
amr_FEMALE_SC
asj_FEMALE_SC
eas_FEMALE_SC
fin_FEMALE_SC
mid_FEMALE_SC
nfe_FEMALE_SC
sas_FEMALE_SC
FEMALE_SN
afr_FEMALE_SN
amr_FEMALE_SN
asj_FEMALE_SN
eas_FEMALE_SN
fin_FEMALE_SN
mid_FEMALE_SN
nfe_FEMALE_SN
sas_FEMALE_SN
FEMALE_SF
afr_FEMALE_SF
amr_FEMALE_SF
asj_FEMALE_SF
eas_FEMALE_SF
fin_FEMALE_SF
mid_FEMALE_SF
nfe_FEMALE_SF
sas_FEMALE_SF
locus<GRCh38>array<str>strfloat64set<str>int32int32strint32int32int32int32strfloat64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64
chr1:1034009["N","<DEL>"]"variantbs80_246__DEL"-1.00e+01{"TRUE"}10354221413"DEL"1034009103400910354221035422"None"2.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+002.00e+000.00e+003.75e+059.11e+031.66e+048.31e+031.26e+041.81e+041.16e+032.65e+052.76e+045.33e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.55e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.91e+053.76e+037.07e+034.35e+036.35e+038.68e+036.57e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.62e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.36e+039.57e+033.96e+036.29e+039.38e+035.01e+021.34e+056.36e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.47e-060.00e+00
chr1:102890354["N","<DUP>"]"variantbs80_32404__DUP"-1.00e+01{"TRUE"}10293465444300"DUP"102890354102890354102934654102934654"None"2.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.22e+031.66e+048.33e+031.26e+041.81e+041.14e+032.65e+052.76e+045.33e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.78e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.82e+037.04e+034.39e+036.33e+038.63e+036.55e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.41e+039.60e+033.95e+036.31e+039.46e+034.85e+021.34e+056.36e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.47e-060.00e+00
chr1:103550844["N","<DUP>"]"variantbs80_32704__DUP"-1.00e+01{"TRUE"}10357091120067"DUP"103550844103550844103570911103570911"None"1.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.09e+031.67e+048.37e+031.27e+041.81e+041.12e+032.65e+052.76e+042.66e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.77e-060.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.91e+053.75e+037.05e+034.37e+036.33e+038.69e+036.60e+021.31e+052.12e+045.23e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.62e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.84e+055.34e+039.61e+034.00e+036.33e+039.36e+034.60e+021.34e+056.42e+030.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+00
chr1:115744731["N","<DUP>"]"variantbs80_36173__DUP"-1.00e+01{"TRUE"}11576887924148"DUP"115744731115744731115768879115768879"None"8.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+003.75e+059.14e+031.66e+048.33e+031.27e+041.81e+041.13e+032.65e+052.76e+042.13e-051.09e-040.00e+000.00e+000.00e+000.00e+000.00e+002.64e-050.00e+001.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.79e+037.10e+034.35e+036.39e+038.68e+036.53e+021.31e+052.12e+045.22e-062.64e-040.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.00e+000.00e+001.84e+055.35e+039.55e+033.98e+036.28e+039.41e+034.74e+021.34e+056.39e+033.81e-050.00e+000.00e+000.00e+000.00e+000.00e+000.00e+005.24e-050.00e+00
chr1:119380407["N","<DUP>"]"variantbs80_37041__DUP"-1.00e+01{"TRUE"}119740616360209"DUP"119380407119380407119727782119744324"HAO2,HSD3B1,HSD3B2,ZNF697"1.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+003.75e+059.14e+031.66e+048.34e+031.26e+041.81e+041.16e+032.65e+052.76e+042.66e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+003.78e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.91e+053.77e+037.12e+034.39e+036.31e+038.63e+036.68e+021.31e+052.12e+040.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+000.00e+000.00e+000.00e+000.00e+000.00e+001.00e+000.00e+001.84e+055.37e+039.53e+033.95e+036.29e+039.43e+034.88e+021.34e+056.42e+035.43e-060.00e+000.00e+000.00e+000.00e+000.00e+000.00e+007.48e-060.00e+00
" - ], - "text/plain": [ - "+----------------+---------------+--------------------------+-----------+\n", - "| locus | alleles | rsid | qual |\n", - "+----------------+---------------+--------------------------+-----------+\n", - "| locus | array | str | float64 |\n", - "+----------------+---------------+--------------------------+-----------+\n", - "| chr1:1034009 | [\"N\",\"\"] | \"variantbs80_246__DEL\" | -1.00e+01 |\n", - "| chr1:102890354 | [\"N\",\"\"] | \"variantbs80_32404__DUP\" | -1.00e+01 |\n", - "| chr1:103550844 | [\"N\",\"\"] | \"variantbs80_32704__DUP\" | -1.00e+01 |\n", - "| chr1:115744731 | [\"N\",\"\"] | \"variantbs80_36173__DUP\" | -1.00e+01 |\n", - "| chr1:119380407 | [\"N\",\"\"] | \"variantbs80_37041__DUP\" | -1.00e+01 |\n", - "+----------------+---------------+--------------------------+-----------+\n", - "\n", - "+----------+-----------+------------+-------------+-------------+-------------+\n", - "| filters | info.END | info.SVLEN | info.SVTYPE | info.POSMIN | info.POSMAX |\n", - "+----------+-----------+------------+-------------+-------------+-------------+\n", - "| set | int32 | int32 | str | int32 | int32 |\n", - "+----------+-----------+------------+-------------+-------------+-------------+\n", - "| {\"TRUE\"} | 1035422 | 1413 | \"DEL\" | 1034009 | 1034009 |\n", - "| {\"TRUE\"} | 102934654 | 44300 | \"DUP\" | 102890354 | 102890354 |\n", - "| {\"TRUE\"} | 103570911 | 20067 | \"DUP\" | 103550844 | 103550844 |\n", - "| {\"TRUE\"} | 115768879 | 24148 | \"DUP\" | 115744731 | 115744731 |\n", - "| {\"TRUE\"} | 119740616 | 360209 | \"DUP\" | 119380407 | 119380407 |\n", - "+----------+-----------+------------+-------------+-------------+-------------+\n", - "\n", - "+-------------+-------------+-----------------------------+----------+\n", - "| info.ENDMIN | info.ENDMAX | info.Genes | info.SC |\n", - "+-------------+-------------+-----------------------------+----------+\n", - "| int32 | int32 | str | float64 |\n", - "+-------------+-------------+-----------------------------+----------+\n", - "| 1035422 | 1035422 | \"None\" | 2.00e+00 |\n", - "| 102934654 | 102934654 | \"None\" | 2.00e+00 |\n", - "| 103570911 | 103570911 | \"None\" | 1.00e+00 |\n", - "| 115768879 | 115768879 | \"None\" | 8.00e+00 |\n", - "| 119727782 | 119744324 | \"HAO2,HSD3B1,HSD3B2,ZNF697\" | 1.00e+00 |\n", - "+-------------+-------------+-----------------------------+----------+\n", - "\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| info.afr_SC | info.amr_SC | info.asj_SC | info.eas_SC | info.fin_SC |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| float64 | float64 | float64 | float64 | float64 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 1.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "\n", - "+-------------+-------------+-------------+----------+-------------+\n", - "| info.mid_SC | info.nfe_SC | info.sas_SC | info.SN | info.afr_SN |\n", - "+-------------+-------------+-------------+----------+-------------+\n", - "| float64 | float64 | float64 | float64 | float64 |\n", - "+-------------+-------------+-------------+----------+-------------+\n", - "| 0.00e+00 | 2.00e+00 | 0.00e+00 | 3.75e+05 | 9.11e+03 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.22e+03 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.09e+03 |\n", - "| 0.00e+00 | 7.00e+00 | 0.00e+00 | 3.75e+05 | 9.14e+03 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 3.75e+05 | 9.14e+03 |\n", - "+-------------+-------------+-------------+----------+-------------+\n", - "\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| info.amr_SN | info.asj_SN | info.eas_SN | info.fin_SN | info.mid_SN |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| float64 | float64 | float64 | float64 | float64 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| 1.66e+04 | 8.31e+03 | 1.26e+04 | 1.81e+04 | 1.16e+03 |\n", - "| 1.66e+04 | 8.33e+03 | 1.26e+04 | 1.81e+04 | 1.14e+03 |\n", - "| 1.67e+04 | 8.37e+03 | 1.27e+04 | 1.81e+04 | 1.12e+03 |\n", - "| 1.66e+04 | 8.33e+03 | 1.27e+04 | 1.81e+04 | 1.13e+03 |\n", - "| 1.66e+04 | 8.34e+03 | 1.26e+04 | 1.81e+04 | 1.16e+03 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "\n", - "+-------------+-------------+----------+-------------+-------------+\n", - "| info.nfe_SN | info.sas_SN | info.SF | info.afr_SF | info.amr_SF |\n", - "+-------------+-------------+----------+-------------+-------------+\n", - "| float64 | float64 | float64 | float64 | float64 |\n", - "+-------------+-------------+----------+-------------+-------------+\n", - "| 2.65e+05 | 2.76e+04 | 5.33e-06 | 0.00e+00 | 0.00e+00 |\n", - "| 2.65e+05 | 2.76e+04 | 5.33e-06 | 0.00e+00 | 0.00e+00 |\n", - "| 2.65e+05 | 2.76e+04 | 2.66e-06 | 0.00e+00 | 0.00e+00 |\n", - "| 2.65e+05 | 2.76e+04 | 2.13e-05 | 1.09e-04 | 0.00e+00 |\n", - "| 2.65e+05 | 2.76e+04 | 2.66e-06 | 0.00e+00 | 0.00e+00 |\n", - "+-------------+-------------+----------+-------------+-------------+\n", - "\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| info.asj_SF | info.eas_SF | info.fin_SF | info.mid_SF | info.nfe_SF |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| float64 | float64 | float64 | float64 | float64 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 7.55e-06 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.78e-06 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.77e-06 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 2.64e-05 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 | 3.78e-06 |\n", - "+-------------+-------------+-------------+-------------+-------------+\n", - "\n", - "+-------------+--------------+------------------+------------------+\n", - "| info.sas_SF | info.MALE_SC | info.afr_MALE_SC | info.amr_MALE_SC |\n", - "+-------------+--------------+------------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+-------------+--------------+------------------+------------------+\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 1.00e+00 | 1.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+-------------+--------------+------------------+------------------+\n", - "\n", - "+------------------+------------------+------------------+------------------+\n", - "| info.asj_MALE_SC | info.eas_MALE_SC | info.fin_MALE_SC | info.mid_MALE_SC |\n", - "+------------------+------------------+------------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+------------------+------------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+------------------+------------------+------------------+------------------+\n", - "\n", - "+------------------+------------------+--------------+------------------+\n", - "| info.nfe_MALE_SC | info.sas_MALE_SC | info.MALE_SN | info.afr_MALE_SN |\n", - "+------------------+------------------+--------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+--------------+------------------+\n", - "| 1.00e+00 | 0.00e+00 | 1.91e+05 | 3.76e+03 |\n", - "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.82e+03 |\n", - "| 1.00e+00 | 0.00e+00 | 1.91e+05 | 3.75e+03 |\n", - "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.79e+03 |\n", - "| 0.00e+00 | 0.00e+00 | 1.91e+05 | 3.77e+03 |\n", - "+------------------+------------------+--------------+------------------+\n", - "\n", - "+------------------+------------------+------------------+------------------+\n", - "| info.amr_MALE_SN | info.asj_MALE_SN | info.eas_MALE_SN | info.fin_MALE_SN |\n", - "+------------------+------------------+------------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+------------------+------------------+\n", - "| 7.07e+03 | 4.35e+03 | 6.35e+03 | 8.68e+03 |\n", - "| 7.04e+03 | 4.39e+03 | 6.33e+03 | 8.63e+03 |\n", - "| 7.05e+03 | 4.37e+03 | 6.33e+03 | 8.69e+03 |\n", - "| 7.10e+03 | 4.35e+03 | 6.39e+03 | 8.68e+03 |\n", - "| 7.12e+03 | 4.39e+03 | 6.31e+03 | 8.63e+03 |\n", - "+------------------+------------------+------------------+------------------+\n", - "\n", - "+------------------+------------------+------------------+--------------+\n", - "| info.mid_MALE_SN | info.nfe_MALE_SN | info.sas_MALE_SN | info.MALE_SF |\n", - "+------------------+------------------+------------------+--------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+------------------+--------------+\n", - "| 6.57e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", - "| 6.55e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", - "| 6.60e+02 | 1.31e+05 | 2.12e+04 | 5.23e-06 |\n", - "| 6.53e+02 | 1.31e+05 | 2.12e+04 | 5.22e-06 |\n", - "| 6.68e+02 | 1.31e+05 | 2.12e+04 | 0.00e+00 |\n", - "+------------------+------------------+------------------+--------------+\n", - "\n", - "+------------------+------------------+------------------+------------------+\n", - "| info.afr_MALE_SF | info.amr_MALE_SF | info.asj_MALE_SF | info.eas_MALE_SF |\n", - "+------------------+------------------+------------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+------------------+------------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 2.64e-04 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+------------------+------------------+------------------+------------------+\n", - "\n", - "+------------------+------------------+------------------+------------------+\n", - "| info.fin_MALE_SF | info.mid_MALE_SF | info.nfe_MALE_SF | info.sas_MALE_SF |\n", - "+------------------+------------------+------------------+------------------+\n", - "| float64 | float64 | float64 | float64 |\n", - "+------------------+------------------+------------------+------------------+\n", - "| 0.00e+00 | 0.00e+00 | 7.62e-06 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 7.62e-06 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+------------------+------------------+------------------+------------------+\n", - "\n", - "+----------------+--------------------+--------------------+\n", - "| info.FEMALE_SC | info.afr_FEMALE_SC | info.amr_FEMALE_SC |\n", - "+----------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+----------------+--------------------+--------------------+\n", - "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 7.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 1.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+----------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.asj_FEMALE_SC | info.eas_FEMALE_SC | info.fin_FEMALE_SC |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+--------------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.mid_FEMALE_SC | info.nfe_FEMALE_SC | info.sas_FEMALE_SC |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 7.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 1.00e+00 | 0.00e+00 |\n", - "+--------------------+--------------------+--------------------+\n", - "\n", - "+----------------+--------------------+--------------------+\n", - "| info.FEMALE_SN | info.afr_FEMALE_SN | info.amr_FEMALE_SN |\n", - "+----------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+----------------+--------------------+--------------------+\n", - "| 1.84e+05 | 5.36e+03 | 9.57e+03 |\n", - "| 1.84e+05 | 5.41e+03 | 9.60e+03 |\n", - "| 1.84e+05 | 5.34e+03 | 9.61e+03 |\n", - "| 1.84e+05 | 5.35e+03 | 9.55e+03 |\n", - "| 1.84e+05 | 5.37e+03 | 9.53e+03 |\n", - "+----------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.asj_FEMALE_SN | info.eas_FEMALE_SN | info.fin_FEMALE_SN |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 3.96e+03 | 6.29e+03 | 9.38e+03 |\n", - "| 3.95e+03 | 6.31e+03 | 9.46e+03 |\n", - "| 4.00e+03 | 6.33e+03 | 9.36e+03 |\n", - "| 3.98e+03 | 6.28e+03 | 9.41e+03 |\n", - "| 3.95e+03 | 6.29e+03 | 9.43e+03 |\n", - "+--------------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.mid_FEMALE_SN | info.nfe_FEMALE_SN | info.sas_FEMALE_SN |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 5.01e+02 | 1.34e+05 | 6.36e+03 |\n", - "| 4.85e+02 | 1.34e+05 | 6.36e+03 |\n", - "| 4.60e+02 | 1.34e+05 | 6.42e+03 |\n", - "| 4.74e+02 | 1.34e+05 | 6.39e+03 |\n", - "| 4.88e+02 | 1.34e+05 | 6.42e+03 |\n", - "+--------------------+--------------------+--------------------+\n", - "\n", - "+----------------+--------------------+--------------------+\n", - "| info.FEMALE_SF | info.afr_FEMALE_SF | info.amr_FEMALE_SF |\n", - "+----------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+----------------+--------------------+--------------------+\n", - "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", - "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 3.81e-05 | 0.00e+00 | 0.00e+00 |\n", - "| 5.43e-06 | 0.00e+00 | 0.00e+00 |\n", - "+----------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.asj_FEMALE_SF | info.eas_FEMALE_SF | info.fin_FEMALE_SF |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "+--------------------+--------------------+--------------------+\n", - "\n", - "+--------------------+--------------------+--------------------+\n", - "| info.mid_FEMALE_SF | info.nfe_FEMALE_SF | info.sas_FEMALE_SF |\n", - "+--------------------+--------------------+--------------------+\n", - "| float64 | float64 | float64 |\n", - "+--------------------+--------------------+--------------------+\n", - "| 0.00e+00 | 7.47e-06 | 0.00e+00 |\n", - "| 0.00e+00 | 7.47e-06 | 0.00e+00 |\n", - "| 0.00e+00 | 0.00e+00 | 0.00e+00 |\n", - "| 0.00e+00 | 5.24e-05 | 0.00e+00 |\n", - "| 0.00e+00 | 7.48e-06 | 0.00e+00 |\n", - "+--------------------+--------------------+--------------------+" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sampled_ds.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "f8b581b4-6ef1-4094-abd2-36ec58e0be8c", - "metadata": {}, - "outputs": [], - "source": [ - "FREQ_FIELDS = ['SC','SN','SF']" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "a9852dc3-46d2-49df-a76a-958b25e80c74", - "metadata": {}, - "outputs": [], - "source": [ - "POPULATIONS = ['afr','amr','asj','eas','fin','mid','nfe','sas']" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "6fdfabad-7b50-405a-af4e-470bc66afcb2", - "metadata": {}, - "outputs": [], - "source": [ - "DIVISIONS = list(\n", - " itertools.chain.from_iterable(\n", - " [(pop, pop), (f\"{pop}_XX\", f\"{pop}_FEMALE\"), (f\"{pop}_XY\", f\"{pop}_MALE\")] for pop in POPULATIONS\n", - " )\n", - ") + [(\"XX\", \"FEMALE\"), (\"XY\", \"MALE\")]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec8cb031-bf5a-42bd-9de6-5237d57910f3", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From d0103d847428c409c597a9b3b6afed168c33a97d Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 27 Sep 2023 15:04:41 -0400 Subject: [PATCH 03/62] create cnv resolvers --- .../graphql/resolvers/copy-number-variants.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 graphql-api/src/graphql/resolvers/copy-number-variants.ts diff --git a/graphql-api/src/graphql/resolvers/copy-number-variants.ts b/graphql-api/src/graphql/resolvers/copy-number-variants.ts new file mode 100644 index 000000000..b996f13bb --- /dev/null +++ b/graphql-api/src/graphql/resolvers/copy-number-variants.ts @@ -0,0 +1,37 @@ +import { UserVisibleError } from '../../errors' +import { + fetchCopyNumberVariantsById, + fetchCopyNumberVariantsByGene, + fetchCopyNumberVariantsByRegion, +} from '../../queries/copy-number-variant-queries' + +const resolveCopyNumberVariants = async (_: any, args: any, ctx: any) => { + const variant = await fetchCopyNumberVariantsById(ctx.esClient, args.variantId) + + if (!variant) { + throw new UserVisibleError('Variant not found') + } + + return variant +} + +const resolveCopyNumberVariantsInGene = (obj: any, ctx: any) => { + return fetchCopyNumberVariantsByGene(ctx.esClient, obj) +} + +const resolveCopyNumberVariantsInRegion = (obj: any, ctx: any) => { + return fetchCopyNumberVariantsByRegion(ctx.esClient, obj) +} + +const resolvers = { + Query: { + copy_number_variants: resolveCopyNumberVariants, + }, + Gene: { + copy_number_variants: resolveCopyNumberVariantsInGene, + }, + Region: { + copy_number_variants: resolveCopyNumberVariantsInRegion, + }, +} +export default resolvers From 0110036227066380f6c7f4a8d8467dc3d951ac6b Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 27 Sep 2023 15:04:50 -0400 Subject: [PATCH 04/62] create cnv queries --- .../queries/copy-number-variant-queries.ts | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 graphql-api/src/queries/copy-number-variant-queries.ts diff --git a/graphql-api/src/queries/copy-number-variant-queries.ts b/graphql-api/src/queries/copy-number-variant-queries.ts new file mode 100644 index 000000000..c3172d13a --- /dev/null +++ b/graphql-api/src/queries/copy-number-variant-queries.ts @@ -0,0 +1,142 @@ +import { fetchAllSearchResults } from './helpers/elasticsearch-helpers' + +const GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX = 'gnomad_v4_cnvs' + +// ================================================================================================ +// Variant query +// ================================================================================================ + +export const fetchCopyNumberVariantsById = async (esClient: any, variantId: any) => { + const response = await esClient.search({ + index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + type: '_doc', + body: { + query: { + bool: { + filter: { term: { variant_id: variantId } }, + }, + }, + }, + size: 1, + }) + + if (response.body.hits.total.value === 0) { + return null + } + + const variant = response.body.hits.hits[0]._source.value + + return variant +} + +// ================================================================================================ +// Gene query +// ================================================================================================ + +export type GeneQueryParams = { symbol: string } + +const esFieldsToFetch = () => [ + 'value.chrom', + 'value.end', + 'value.filters', + 'value.length', + 'value.pos', + 'value.reference_genome', + 'value.type', + 'value.posmin', + 'value.posmax', + 'value.endmin', + 'value.endmax', + 'value.variant_id', +] + +export const fetchCopyNumberVariantsByGene = async (esClient: any, gene: GeneQueryParams) => { + const hits = await fetchAllSearchResults(esClient, { + index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + type: '_doc', + size: 10000, + _source: esFieldsToFetch(), + body: { + query: { + bool: { + filter: { + term: { genes: gene.symbol }, + }, + }, + }, + sort: [{ xpos: { order: 'asc' } }], + }, + }) + + return hits + .map((hit: any) => hit._source.value) + .map((variant: any) => { + return variant + }) +} + +// ================================================================================================ +// Region query +// ================================================================================================ +export type RegionQueryParams = { + chrom: number + start: number + stop: number + xstart: number + xstop: number +} + +export const fetchCopyNumberVariantsByRegion = async (esClient: any, region: RegionQueryParams) => { + const hits = await fetchAllSearchResults(esClient, { + index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + type: '_doc', + size: 10000, + _source: esFieldsToFetch(), + body: { + query: { + bool: { + should: [ + { + bool: { + must: [ + { range: { xpos: { lte: region.xstop } } }, + { range: { xend: { gte: region.xstart } } }, + ], + }, + }, + { + bool: { + must: [ + { range: { xpos2: { lte: region.xstop } } }, + { range: { xend2: { gte: region.xstart } } }, + ], + }, + }, + ], + }, + }, + sort: [{ xpos: { order: 'asc' } }], + }, + }) + + return hits + .map((hit: any) => hit._source.value) + .filter((variant: any) => { + + + // deletions + if (variant.type === 'DEL') { + + } + + // duplicates + if (variant.type === 'DUP') { + + } + + return true + }) + .map((variant: any) => { + return variant + }) +} From a9adba5df1be8d5679cd98cf7e404addab42e260 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 27 Sep 2023 15:05:09 -0400 Subject: [PATCH 05/62] create cnv graphql types --- .../graphql/types/copy-number-variant.graphql | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 graphql-api/src/graphql/types/copy-number-variant.graphql diff --git a/graphql-api/src/graphql/types/copy-number-variant.graphql b/graphql-api/src/graphql/types/copy-number-variant.graphql new file mode 100644 index 000000000..8dc40a3e6 --- /dev/null +++ b/graphql-api/src/graphql/types/copy-number-variant.graphql @@ -0,0 +1,46 @@ +type CopyNumberVariantPopulation { + id: String! + sc: Float! + sn: Float! + sf: Float! +} + +type CopyNumberVariant { + sc: Float! + sn: Float! + sf: Float! + reference_genome: ReferenceGenomeId! + chrom: String! + end: Int! + filters: [String!] + length: Int + pos: Int! + type: String + posmin: Int! + posmax: Int! + endmin: Int! + endmax: Int! + variant_id: String! +} + +type CopyNumberVariantDetails { + alts: [String!] + sc: Float! + sn: Float! + sf: Float! + chrom: String! + end: Int! + filters: [String!] + genes: [String!] + length: Int + populations: [CopyNumberVariantPopulation!] + pos: Int! + qual: Float + reference_genome: ReferenceGenomeId! + type: String + posmin: Int! + posmax: Int! + endmin: Int! + endmax: Int! + variant_id: String! +} \ No newline at end of file From 2d3959a63756c6f6afe65b4993acf8b7dee27ed4 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 27 Sep 2023 15:34:53 -0400 Subject: [PATCH 06/62] create cnvs pipeline and tasks --- .../datasets/gnomad_v4/gnomad_v4_cnvs.py | 6 +++ .../data_pipeline/pipelines/gnomad_v4_cnvs.py | 41 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py index b477a8443..01f1a71f6 100644 --- a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py @@ -63,4 +63,10 @@ def prepare_gnomad_v4_cnvs(vcf_path): ds = ds.drop("locus", "alleles", "info", "rsid") ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) + return ds + +# Add uppercase ID to support case-insensitive searching +def add_variant_id_upper_case(cnvs_path): + ds = hl.read_table(cnvs_path) + ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) return ds \ No newline at end of file diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py new file mode 100644 index 000000000..fc71ef9c2 --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py @@ -0,0 +1,41 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnvs import prepare_gnomad_v4_cnvs, add_variant_id_upper_case + + +pipeline = Pipeline() + +############################################### +# Variants +############################################### + +pipeline.add_task( + "prepare_gnomad_v4_cnvs", + prepare_gnomad_v4_cnvs, + "/gnomad_v4/gnomad_v4_cnvs/v4_cnvs_step_1.ht", + { + "vcf_path": "gs://gnomad-v4-cnvs/2023-09-07-jfu-test4/GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz", + }, +) + +pipeline.add_task( + "add_variant_id_upper_case", + add_variant_id_upper_case, + "/gnomad_v4/gnomad_v4_cnvs/v4_cnvs_step_2.ht", + { + "cnvs_path": pipeline.get_task("prepare_gnomad_v4_cnvs"), + }, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"cnvs_step_1": "prepare_gnomad_v4_cnvs", "cnvs": "add_variant_id_upper_case"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) From 549d1fe05ea81c324af9a87d2a54acb7df436ae1 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:56:37 -0400 Subject: [PATCH 07/62] add cnv dataset as an enum dataset-id --- graphql-api/src/graphql/types/dataset-id.graphql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/graphql-api/src/graphql/types/dataset-id.graphql b/graphql-api/src/graphql/types/dataset-id.graphql index a891821cb..73165f935 100644 --- a/graphql-api/src/graphql/types/dataset-id.graphql +++ b/graphql-api/src/graphql/types/dataset-id.graphql @@ -19,3 +19,7 @@ enum StructuralVariantDatasetId { gnomad_sv_r2_1_non_neuro gnomad_sv_r4 } + +enum CopyNumberVariantDatasetId { + gnomad_cnv_r4 +} From 12ad7ad582c0e0c9a4cf45d8eb2dfb2f45f56177 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:56:49 -0400 Subject: [PATCH 08/62] add cnv to gene type --- graphql-api/src/graphql/types/gene.graphql | 1 + 1 file changed, 1 insertion(+) diff --git a/graphql-api/src/graphql/types/gene.graphql b/graphql-api/src/graphql/types/gene.graphql index 6fe57f3ff..40783e943 100644 --- a/graphql-api/src/graphql/types/gene.graphql +++ b/graphql-api/src/graphql/types/gene.graphql @@ -83,6 +83,7 @@ type Gene { heterozygous_variant_cooccurrence_counts: [HeterozygousVariantCooccurrenceCounts!]! @cost(value: 5) homozygous_variant_cooccurrence_counts: [HomozygousVariantCooccurrenceCounts!]! @cost(value: 5) + copy_number_variants(dataset: CopyNumberVariantDatasetId): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID } type GeneSearchResult { From eef8cfc32870f12be6fe74ed2ababb7a87682105 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:56:58 -0400 Subject: [PATCH 09/62] add cnvs to query type --- graphql-api/src/graphql/types/query.graphql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-api/src/graphql/types/query.graphql b/graphql-api/src/graphql/types/query.graphql index db4592654..726d16809 100644 --- a/graphql-api/src/graphql/types/query.graphql +++ b/graphql-api/src/graphql/types/query.graphql @@ -8,7 +8,7 @@ type Query{ multiNucleotideVariant(variant_id: String!, dataset: DatasetId!): MultiNucleotideVariantDetails @cost(value: 1) structural_variant(variantId: String!, dataset: StructuralVariantDatasetId!): StructuralVariantDetails @cost(value: 1) variant(variantId: String, rsid: String, dataset: DatasetId!): VariantDetails @cost(value: 1) - + copy_number_variant(variantId: String!, dataset: CopyNumberVariantDatasetId): CopyNumberVariantDetails @cost(value: 1) #TODO: MAKE REQUIRED DATASETID gene_search(query: String!, reference_genome: ReferenceGenomeId!): [GeneSearchResult!]! variant_search(query: String!, dataset: DatasetId!): [VariantSearchResult!]! From a1f257aa0d1904e55f2b57446d8cea2ea0721699 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:57:06 -0400 Subject: [PATCH 10/62] add cnvs to region type --- graphql-api/src/graphql/types/region.graphql | 1 + 1 file changed, 1 insertion(+) diff --git a/graphql-api/src/graphql/types/region.graphql b/graphql-api/src/graphql/types/region.graphql index 8b78cc9ba..8f2894cd8 100644 --- a/graphql-api/src/graphql/types/region.graphql +++ b/graphql-api/src/graphql/types/region.graphql @@ -31,6 +31,7 @@ type Region { variants(dataset: DatasetId!): [Variant!]! @cost(value: 10) structural_variants(dataset: StructuralVariantDatasetId!): [StructuralVariant!]! @cost(value: 10) mitochondrial_variants(dataset: DatasetId!): [MitochondrialVariant!]! @cost(value: 10) + copy_number_variants(dataset: CopyNumberVariantDatasetId ): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID clinvar_variants: [ClinVarVariant!] @cost(value: 10) From 72853ba9d3dabe47fd6f8daeabbe56ff2055268f Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:57:18 -0400 Subject: [PATCH 11/62] add cnv resolvers to schema --- graphql-api/src/graphql/schema.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/graphql-api/src/graphql/schema.ts b/graphql-api/src/graphql/schema.ts index 407040088..8bf0a294e 100644 --- a/graphql-api/src/graphql/schema.ts +++ b/graphql-api/src/graphql/schema.ts @@ -7,6 +7,7 @@ import aliasResolvers from './resolvers/aliases' import browserMetadataResolvers from './resolvers/browser-metadata' import clinVarVariantResolvers from './resolvers/clinvar-variants' import clinVarVariantFieldResolvers from './resolvers/clinvar-variant-fields' +import copyNumberVariantResolvers from './resolvers/copy-number-variants' import coverageResolvers from './resolvers/coverage' import geneResolvers from './resolvers/gene' import geneFieldResolvers from './resolvers/gene-fields' @@ -34,6 +35,7 @@ const resolvers = mergeResolvers([ browserMetadataResolvers, clinVarVariantResolvers, clinVarVariantFieldResolvers, + copyNumberVariantResolvers, coverageResolvers, geneResolvers, geneFieldResolvers, From 282385ec464046e4e45f9e47db6ac642f6cf8869 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 10:58:20 -0400 Subject: [PATCH 12/62] update singular and plural naming --- .../src/graphql/resolvers/copy-number-variants.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/graphql-api/src/graphql/resolvers/copy-number-variants.ts b/graphql-api/src/graphql/resolvers/copy-number-variants.ts index b996f13bb..84cda7f0e 100644 --- a/graphql-api/src/graphql/resolvers/copy-number-variants.ts +++ b/graphql-api/src/graphql/resolvers/copy-number-variants.ts @@ -1,13 +1,13 @@ import { UserVisibleError } from '../../errors' import { - fetchCopyNumberVariantsById, + fetchCopyNumberVariantById, fetchCopyNumberVariantsByGene, fetchCopyNumberVariantsByRegion, } from '../../queries/copy-number-variant-queries' -const resolveCopyNumberVariants = async (_: any, args: any, ctx: any) => { - const variant = await fetchCopyNumberVariantsById(ctx.esClient, args.variantId) - +//TODO: args.dataset for all three resolvers +const resolveCopyNumberVariant = async (_: any, args: any, ctx: any) => { + const variant = await fetchCopyNumberVariantById(ctx.esClient, args.variantId) if (!variant) { throw new UserVisibleError('Variant not found') } @@ -19,13 +19,13 @@ const resolveCopyNumberVariantsInGene = (obj: any, ctx: any) => { return fetchCopyNumberVariantsByGene(ctx.esClient, obj) } -const resolveCopyNumberVariantsInRegion = (obj: any, ctx: any) => { +const resolveCopyNumberVariantsInRegion = (obj: any, ctx: any) => { return fetchCopyNumberVariantsByRegion(ctx.esClient, obj) } const resolvers = { Query: { - copy_number_variants: resolveCopyNumberVariants, + copy_number_variant: resolveCopyNumberVariant, }, Gene: { copy_number_variants: resolveCopyNumberVariantsInGene, From 197ab868d1b33c7f6a38b8326522352a8456d5c4 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 11:12:48 -0400 Subject: [PATCH 13/62] python black formatter --- .../data_pipeline/datasets/gnomad_sv_v2.py | 1 + .../datasets/gnomad_v4/gnomad_v4_cnvs.py | 37 ++++++++++--------- .../pipelines/export_to_elasticsearch.py | 3 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_sv_v2.py b/data-pipeline/src/data_pipeline/datasets/gnomad_sv_v2.py index 103e637ff..a4efc3361 100644 --- a/data-pipeline/src/data_pipeline/datasets/gnomad_sv_v2.py +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_sv_v2.py @@ -56,6 +56,7 @@ def x_position(chrom, position): ) ) + [("XX", "FEMALE"), ("XY", "MALE")] + # For MCNVs, sum AC/AF for all alt alleles except CN=2 def sum_mcnv_ac_or_af(alts, values): return hl.bind( diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py index 01f1a71f6..1bccddc24 100644 --- a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py @@ -10,13 +10,14 @@ def x_position(chrom, position): return hl.int64(contig_number) * 1_000_000_000 + position -FREQ_FIELDS = ['SC','SN','SF'] -POPULATIONS = ['afr','amr','asj','eas','fin','mid','nfe','sas'] +FREQ_FIELDS = ["SC", "SN", "SF"] +POPULATIONS = ["afr", "amr", "asj", "eas", "fin", "mid", "nfe", "sas"] DIVISIONS = list( itertools.chain.from_iterable( [(pop, pop), (f"{pop}_XX", f"{pop}_FEMALE"), (f"{pop}_XY", f"{pop}_MALE")] for pop in POPULATIONS ) - ) + [("XX", "FEMALE"), ("XY", "MALE")] +) + [("XX", "FEMALE"), ("XY", "MALE")] + # vcf_paths = "GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz" def prepare_gnomad_v4_cnvs(vcf_path): @@ -40,33 +41,35 @@ def prepare_gnomad_v4_cnvs(vcf_path): xpos=x_position(ds.chrom, ds.pos), xend=x_position(ds.chrom, ds.end), ) - - ds = ds.annotate(genes=hl.set(hl.array(hl.str(ds.info.Genes).split(',')))) - + + ds = ds.annotate(genes=hl.set(hl.array(hl.str(ds.info.Genes).split(",")))) + ds = ds.annotate( freq=hl.struct( - **{field.lower(): ds.info[field] for field in FREQ_FIELDS}, - populations=[ - hl.struct(id=pop_id, **{field.lower(): ds.info[f"{pop_key}_{field}"] for field in FREQ_FIELDS}) - for (pop_id, pop_key) in DIVISIONS - ], - )) + **{field.lower(): ds.info[field] for field in FREQ_FIELDS}, + populations=[ + hl.struct(id=pop_id, **{field.lower(): ds.info[f"{pop_key}_{field}"] for field in FREQ_FIELDS}) + for (pop_id, pop_key) in DIVISIONS + ], + ) + ) ds = ds.key_by("variant_id") ds = ds.annotate( - posmin = ds.info.POSMIN, - posmax = ds.info.POSMAX, - endmin = ds.info.ENDMIN, - endmax = ds.info.ENDMAX, + posmin=ds.info.POSMIN, + posmax=ds.info.POSMAX, + endmin=ds.info.ENDMIN, + endmax=ds.info.ENDMAX, ) ds = ds.drop("locus", "alleles", "info", "rsid") ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) return ds + # Add uppercase ID to support case-insensitive searching def add_variant_id_upper_case(cnvs_path): ds = hl.read_table(cnvs_path) ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) - return ds \ No newline at end of file + return ds diff --git a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py index 6495171c6..a1c4b00d0 100644 --- a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py +++ b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py @@ -113,13 +113,12 @@ def add_liftover_document_id(ds): "get_table": lambda: hl.read_table(gnomad_v4_cnvs_pipeline.get_output("cnvs").get_output_path()), "args": { "index": "gnomad_v4_cnvs", - "index_fields": ["variant_id", "xpos", "xend","genes"], + "index_fields": ["variant_id", "xpos", "xend", "genes"], "id_field": "variant_id", "num_shards": 1, "block_size": 1_000, }, }, - ############################################################################################################## # gnomAD v3 ############################################################################################################## From 52dad6134d8bc492e37212bf98f7d2516aeb2cf8 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Tue, 3 Oct 2023 14:49:19 -0400 Subject: [PATCH 14/62] wip resolvers and queries --- .../graphql/resolvers/copy-number-variants.ts | 2 +- .../queries/copy-number-variant-queries.ts | 80 ++++++++++++------- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/graphql-api/src/graphql/resolvers/copy-number-variants.ts b/graphql-api/src/graphql/resolvers/copy-number-variants.ts index 84cda7f0e..21c80dcc2 100644 --- a/graphql-api/src/graphql/resolvers/copy-number-variants.ts +++ b/graphql-api/src/graphql/resolvers/copy-number-variants.ts @@ -5,7 +5,7 @@ import { fetchCopyNumberVariantsByRegion, } from '../../queries/copy-number-variant-queries' -//TODO: args.dataset for all three resolvers +// TODO: args.dataset for all three resolvers const resolveCopyNumberVariant = async (_: any, args: any, ctx: any) => { const variant = await fetchCopyNumberVariantById(ctx.esClient, args.variantId) if (!variant) { diff --git a/graphql-api/src/queries/copy-number-variant-queries.ts b/graphql-api/src/queries/copy-number-variant-queries.ts index c3172d13a..a5ad761d7 100644 --- a/graphql-api/src/queries/copy-number-variant-queries.ts +++ b/graphql-api/src/queries/copy-number-variant-queries.ts @@ -2,11 +2,34 @@ import { fetchAllSearchResults } from './helpers/elasticsearch-helpers' const GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX = 'gnomad_v4_cnvs' +// type CnvDatasetId = 'gnomad_cnv_r4' +// type DatasetDependentQueryParams = { +// index: string +// variantIdParams: (variantId: string) => any +// } + +// const v4VariantIdParams = (variantId: string) => ({ +// variant_id_upper_case: variantId.toUpperCase(), +// }) + +// const datasetDependentQueryParams: Record = { +// gnomad_cnv_r4: { +// index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, +// variantIdParams: v4VariantIdParams, +// }, +// } as const + // ================================================================================================ // Variant query // ================================================================================================ -export const fetchCopyNumberVariantsById = async (esClient: any, variantId: any) => { +export const fetchCopyNumberVariantById = async ( + esClient: any, + variantId: string, + // datasetId?: CnvDatasetId +) => { + // const { index, variantIdParams } = datasetDependentQueryParams[datasetId] + // console.log('esclient variant id', esClient) const response = await esClient.search({ index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, type: '_doc', @@ -26,7 +49,10 @@ export const fetchCopyNumberVariantsById = async (esClient: any, variantId: any) const variant = response.body.hits.hits[0]._source.value - return variant + return { + ...variant, + ...variant.freq, + } } // ================================================================================================ @@ -39,6 +65,7 @@ const esFieldsToFetch = () => [ 'value.chrom', 'value.end', 'value.filters', + 'value.freq', 'value.length', 'value.pos', 'value.reference_genome', @@ -50,7 +77,13 @@ const esFieldsToFetch = () => [ 'value.variant_id', ] -export const fetchCopyNumberVariantsByGene = async (esClient: any, gene: GeneQueryParams) => { +export const fetchCopyNumberVariantsByGene = async ( + esClient: any, + gene: GeneQueryParams, + // datasetId?: CnvDatasetId +) => { + // const index = datasetDependentQueryParams[datasetId] + // console.log('esclient gene', esClient) const hits = await fetchAllSearchResults(esClient, { index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, type: '_doc', @@ -70,8 +103,12 @@ export const fetchCopyNumberVariantsByGene = async (esClient: any, gene: GeneQue return hits .map((hit: any) => hit._source.value) + .filter((variant: any) => variant.freq.sc > 0) .map((variant: any) => { - return variant + return { + ...variant, + ...variant.freq, + } }) } @@ -86,7 +123,12 @@ export type RegionQueryParams = { xstop: number } -export const fetchCopyNumberVariantsByRegion = async (esClient: any, region: RegionQueryParams) => { +export const fetchCopyNumberVariantsByRegion = async ( + esClient: any, + region: RegionQueryParams, + // datasetId?: CnvDatasetId +) => { + // const index = datasetDependentQueryParams[datasetId] const hits = await fetchAllSearchResults(esClient, { index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, type: '_doc', @@ -104,14 +146,6 @@ export const fetchCopyNumberVariantsByRegion = async (esClient: any, region: Reg ], }, }, - { - bool: { - must: [ - { range: { xpos2: { lte: region.xstop } } }, - { range: { xend2: { gte: region.xstart } } }, - ], - }, - }, ], }, }, @@ -121,22 +155,14 @@ export const fetchCopyNumberVariantsByRegion = async (esClient: any, region: Reg return hits .map((hit: any) => hit._source.value) - .filter((variant: any) => { - - - // deletions - if (variant.type === 'DEL') { - - } - - // duplicates - if (variant.type === 'DUP') { - - } - + .filter((variant: any) => variant.freq.sc > 0) + .filter(() => { return true }) .map((variant: any) => { - return variant + return { + ...variant, + ...variant.freq, + } }) } From 36dae00c0733a376fa4e705151811b6c0b69bfc8 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 4 Oct 2023 11:46:57 -0400 Subject: [PATCH 15/62] minor pipeline edits --- .../datasets/gnomad_v4/gnomad_v4_cnvs.py | 8 -------- .../src/data_pipeline/pipelines/gnomad_v4_cnvs.py | 15 +++------------ 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py index 1bccddc24..eed025f38 100644 --- a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py @@ -19,7 +19,6 @@ def x_position(chrom, position): ) + [("XX", "FEMALE"), ("XY", "MALE")] -# vcf_paths = "GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz" def prepare_gnomad_v4_cnvs(vcf_path): ds = hl.import_vcf(vcf_path, force_bgz=True, min_partitions=32, reference_genome="GRCh38").rows() @@ -66,10 +65,3 @@ def prepare_gnomad_v4_cnvs(vcf_path): ds = ds.drop("locus", "alleles", "info", "rsid") ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) return ds - - -# Add uppercase ID to support case-insensitive searching -def add_variant_id_upper_case(cnvs_path): - ds = hl.read_table(cnvs_path) - ds = ds.annotate(variant_id_upper_case=ds.variant_id.upper()) - return ds diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py index fc71ef9c2..42e21586d 100644 --- a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py @@ -1,6 +1,6 @@ from data_pipeline.pipeline import Pipeline, run_pipeline -from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnvs import prepare_gnomad_v4_cnvs, add_variant_id_upper_case +from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnvs import prepare_gnomad_v4_cnvs pipeline = Pipeline() @@ -12,26 +12,17 @@ pipeline.add_task( "prepare_gnomad_v4_cnvs", prepare_gnomad_v4_cnvs, - "/gnomad_v4/gnomad_v4_cnvs/v4_cnvs_step_1.ht", + "/gnomad_v4/gnomad_v4_cnvs/cnvs.ht", { "vcf_path": "gs://gnomad-v4-cnvs/2023-09-07-jfu-test4/GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz", }, ) -pipeline.add_task( - "add_variant_id_upper_case", - add_variant_id_upper_case, - "/gnomad_v4/gnomad_v4_cnvs/v4_cnvs_step_2.ht", - { - "cnvs_path": pipeline.get_task("prepare_gnomad_v4_cnvs"), - }, -) - ############################################### # Outputs ############################################### -pipeline.set_outputs({"cnvs_step_1": "prepare_gnomad_v4_cnvs", "cnvs": "add_variant_id_upper_case"}) +pipeline.set_outputs({"cnvs": "prepare_gnomad_v4_cnvs"}) ############################################### # Run From cfcf644ea9e516a5dcf412455eb572b371168f50 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 4 Oct 2023 11:47:27 -0400 Subject: [PATCH 16/62] add CNVDatasetId to Gene, Query, Region types --- graphql-api/src/graphql/types/gene.graphql | 2 +- graphql-api/src/graphql/types/query.graphql | 2 +- graphql-api/src/graphql/types/region.graphql | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/graphql-api/src/graphql/types/gene.graphql b/graphql-api/src/graphql/types/gene.graphql index 40783e943..4c6e80862 100644 --- a/graphql-api/src/graphql/types/gene.graphql +++ b/graphql-api/src/graphql/types/gene.graphql @@ -83,7 +83,7 @@ type Gene { heterozygous_variant_cooccurrence_counts: [HeterozygousVariantCooccurrenceCounts!]! @cost(value: 5) homozygous_variant_cooccurrence_counts: [HomozygousVariantCooccurrenceCounts!]! @cost(value: 5) - copy_number_variants(dataset: CopyNumberVariantDatasetId): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID + copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID } type GeneSearchResult { diff --git a/graphql-api/src/graphql/types/query.graphql b/graphql-api/src/graphql/types/query.graphql index 726d16809..5e84f9da5 100644 --- a/graphql-api/src/graphql/types/query.graphql +++ b/graphql-api/src/graphql/types/query.graphql @@ -8,7 +8,7 @@ type Query{ multiNucleotideVariant(variant_id: String!, dataset: DatasetId!): MultiNucleotideVariantDetails @cost(value: 1) structural_variant(variantId: String!, dataset: StructuralVariantDatasetId!): StructuralVariantDetails @cost(value: 1) variant(variantId: String, rsid: String, dataset: DatasetId!): VariantDetails @cost(value: 1) - copy_number_variant(variantId: String!, dataset: CopyNumberVariantDatasetId): CopyNumberVariantDetails @cost(value: 1) #TODO: MAKE REQUIRED DATASETID + copy_number_variant(variantId: String!, dataset: CopyNumberVariantDatasetId!): CopyNumberVariantDetails @cost(value: 1) gene_search(query: String!, reference_genome: ReferenceGenomeId!): [GeneSearchResult!]! variant_search(query: String!, dataset: DatasetId!): [VariantSearchResult!]! diff --git a/graphql-api/src/graphql/types/region.graphql b/graphql-api/src/graphql/types/region.graphql index 8f2894cd8..0c3cb43d6 100644 --- a/graphql-api/src/graphql/types/region.graphql +++ b/graphql-api/src/graphql/types/region.graphql @@ -31,7 +31,7 @@ type Region { variants(dataset: DatasetId!): [Variant!]! @cost(value: 10) structural_variants(dataset: StructuralVariantDatasetId!): [StructuralVariant!]! @cost(value: 10) mitochondrial_variants(dataset: DatasetId!): [MitochondrialVariant!]! @cost(value: 10) - copy_number_variants(dataset: CopyNumberVariantDatasetId ): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID + copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID clinvar_variants: [ClinVarVariant!] @cost(value: 10) From affe4bbf3e7fbbb4be75ebe0e169c50217570b55 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 4 Oct 2023 11:47:53 -0400 Subject: [PATCH 17/62] fix resolver and query errors --- .../graphql/resolvers/copy-number-variants.ts | 11 ++- .../queries/copy-number-variant-queries.ts | 74 +++++++++---------- 2 files changed, 39 insertions(+), 46 deletions(-) diff --git a/graphql-api/src/graphql/resolvers/copy-number-variants.ts b/graphql-api/src/graphql/resolvers/copy-number-variants.ts index 21c80dcc2..897098574 100644 --- a/graphql-api/src/graphql/resolvers/copy-number-variants.ts +++ b/graphql-api/src/graphql/resolvers/copy-number-variants.ts @@ -5,9 +5,8 @@ import { fetchCopyNumberVariantsByRegion, } from '../../queries/copy-number-variant-queries' -// TODO: args.dataset for all three resolvers const resolveCopyNumberVariant = async (_: any, args: any, ctx: any) => { - const variant = await fetchCopyNumberVariantById(ctx.esClient, args.variantId) + const variant = await fetchCopyNumberVariantById(ctx.esClient, args.dataset, args.variantId) if (!variant) { throw new UserVisibleError('Variant not found') } @@ -15,12 +14,12 @@ const resolveCopyNumberVariant = async (_: any, args: any, ctx: any) => { return variant } -const resolveCopyNumberVariantsInGene = (obj: any, ctx: any) => { - return fetchCopyNumberVariantsByGene(ctx.esClient, obj) +const resolveCopyNumberVariantsInGene = (obj: any, args: any, ctx: any) => { + return fetchCopyNumberVariantsByGene(ctx.esClient, args.dataset, obj) } -const resolveCopyNumberVariantsInRegion = (obj: any, ctx: any) => { - return fetchCopyNumberVariantsByRegion(ctx.esClient, obj) +const resolveCopyNumberVariantsInRegion = (obj: any, args: any, ctx: any) => { + return fetchCopyNumberVariantsByRegion(ctx.esClient, args.dataset, obj) } const resolvers = { diff --git a/graphql-api/src/queries/copy-number-variant-queries.ts b/graphql-api/src/queries/copy-number-variant-queries.ts index a5ad761d7..51d107552 100644 --- a/graphql-api/src/queries/copy-number-variant-queries.ts +++ b/graphql-api/src/queries/copy-number-variant-queries.ts @@ -2,22 +2,27 @@ import { fetchAllSearchResults } from './helpers/elasticsearch-helpers' const GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX = 'gnomad_v4_cnvs' -// type CnvDatasetId = 'gnomad_cnv_r4' -// type DatasetDependentQueryParams = { -// index: string -// variantIdParams: (variantId: string) => any -// } - -// const v4VariantIdParams = (variantId: string) => ({ -// variant_id_upper_case: variantId.toUpperCase(), -// }) - -// const datasetDependentQueryParams: Record = { -// gnomad_cnv_r4: { -// index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, -// variantIdParams: v4VariantIdParams, -// }, -// } as const +type CnvDatasetId = 'gnomad_cnv_r4' +type DatasetDependentQueryParams = { + index: string, +} + + + +const datasetDependentQueryParams: Record = { + gnomad_cnv_r4: { + index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + } +} as const + +export type GeneQueryParams = { symbol: string } +export type RegionQueryParams = { + chrom: number + start: number + stop: number + xstart: number + xstop: number +} // ================================================================================================ // Variant query @@ -25,13 +30,12 @@ const GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX = 'gnomad_v4_cnvs' export const fetchCopyNumberVariantById = async ( esClient: any, - variantId: string, - // datasetId?: CnvDatasetId + datasetId: CnvDatasetId, + variantId: string ) => { - // const { index, variantIdParams } = datasetDependentQueryParams[datasetId] - // console.log('esclient variant id', esClient) + const { index }= datasetDependentQueryParams[datasetId] const response = await esClient.search({ - index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + index, type: '_doc', body: { query: { @@ -48,19 +52,17 @@ export const fetchCopyNumberVariantById = async ( } const variant = response.body.hits.hits[0]._source.value - return { ...variant, ...variant.freq, } } + // ================================================================================================ // Gene query // ================================================================================================ -export type GeneQueryParams = { symbol: string } - const esFieldsToFetch = () => [ 'value.chrom', 'value.end', @@ -79,13 +81,12 @@ const esFieldsToFetch = () => [ export const fetchCopyNumberVariantsByGene = async ( esClient: any, - gene: GeneQueryParams, - // datasetId?: CnvDatasetId + datasetId: CnvDatasetId, + gene: GeneQueryParams ) => { - // const index = datasetDependentQueryParams[datasetId] - // console.log('esclient gene', esClient) + const { index } = datasetDependentQueryParams[datasetId] const hits = await fetchAllSearchResults(esClient, { - index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + index, type: '_doc', size: 10000, _source: esFieldsToFetch(), @@ -115,22 +116,15 @@ export const fetchCopyNumberVariantsByGene = async ( // ================================================================================================ // Region query // ================================================================================================ -export type RegionQueryParams = { - chrom: number - start: number - stop: number - xstart: number - xstop: number -} export const fetchCopyNumberVariantsByRegion = async ( esClient: any, - region: RegionQueryParams, - // datasetId?: CnvDatasetId + datasetId: CnvDatasetId, + region: RegionQueryParams ) => { - // const index = datasetDependentQueryParams[datasetId] + const { index } = datasetDependentQueryParams[datasetId] const hits = await fetchAllSearchResults(esClient, { - index: GNOMAD_COPY_NUMBER_VARIANTS_V4_INDEX, + index, type: '_doc', size: 10000, _source: esFieldsToFetch(), From 526191bb74e1dfe7f82c9d648206321cef1ea8b7 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:50:16 -0400 Subject: [PATCH 18/62] add cnvs to dataset --- browser/src/DatasetSelector.tsx | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/browser/src/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 85df2656e..21e4db9bf 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -14,6 +14,7 @@ import { hasShortVariants, hasStructuralVariants, referenceGenome, + hasCopyNumberVariants, shortVariantDatasetId, structuralVariantDatasetId, } from '@gnomad/dataset-metadata/metadata' @@ -440,6 +441,7 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } includeGnomad2Subsets = true, includeGnomad3 = true, includeGnomad3Subsets = true, + includeCopyNumberVariants = true, } = datasetOptions const datasetLink = (datasetId: any) => ({ @@ -626,6 +628,36 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } ) } + if (includeCopyNumberVariants) { + const topLevelCopyNumberVariantDataset = hasCopyNumberVariants(selectedDataset) + ? selectedDataset + : 'gnomad_cnv_r4' + + datasets.push( + { + id: 'current_cnv_dataset', + isActive: hasCopyNumberVariants(selectedDataset), + label: labelForDataset(topLevelCopyNumberVariantDataset), + url: datasetLink(topLevelCopyNumberVariantDataset), + }, + { + id: 'other_cnv_variant', + isActive: hasCopyNumberVariants(selectedDataset), + label: 'More datasets', + children: [ + { + id: 'gnomad_cnv_r4', + label: labelForDataset('gnomad_cnv_r4'), + url: datasetLink('gnomad_cnv_r4'), + description: `samples`, + // description: `${sampleCounts.gnomad_cnv_r4.total.toLocaleString()} samples`, + childReferenceGenome: referenceGenome('gnomad_cnv_r4'), + } + ], + } + ) + } + return }) From 57a511e24956cf64b00c86b9ed8291226086cd87 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:50:40 -0400 Subject: [PATCH 19/62] add textOrMissingTextWarning --- browser/src/missingContent.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/browser/src/missingContent.ts b/browser/src/missingContent.ts index ae6a027c5..fca1a3db6 100644 --- a/browser/src/missingContent.ts +++ b/browser/src/missingContent.ts @@ -1,5 +1,6 @@ export const textOrMissingTextWarning = ( - entityType: string, - textMapping: Record, - key: string -) => textMapping[key] || `TEXT NEEDED FOR ${entityType.toUpperCase()} "${key}"` + entityType: string, + textMapping: Record, + key: string + ) => textMapping[key] || `TEXT NEEDED FOR ${entityType.toUpperCase()} "${key}"` + From 634c724260204cc4061bf556b72926fdb641d3ee Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:51:12 -0400 Subject: [PATCH 20/62] add gnomad_cnv_r4 to search dataset --- browser/src/Searchbox.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/browser/src/Searchbox.tsx b/browser/src/Searchbox.tsx index ff7f9769f..d675dc0c5 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) => { + From 26f85b6c2f9f6eab768d0fff1db9e2e76246074b Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:51:35 -0400 Subject: [PATCH 21/62] add gnomad_cnv_r4 to metadata --- dataset-metadata/metadata.ts | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/dataset-metadata/metadata.ts b/dataset-metadata/metadata.ts index d0d1ffb66..4ff9a0595 100644 --- a/dataset-metadata/metadata.ts +++ b/dataset-metadata/metadata.ts @@ -17,6 +17,8 @@ export const datasetLabels = { gnomad_sv_r2_1_controls: 'gnomAD SVs v2.1 (controls)', gnomad_sv_r2_1_non_neuro: 'gnomAD SVs v2.1 (non-neuro)', gnomad_sv_r4: 'gnomAD SVs v4', + gnomad_r4: '', //* TODO + gnomad_cnv_r4: "gnomAD CNVs v4.1", } as const export type DatasetId = keyof typeof datasetLabels @@ -29,6 +31,9 @@ const fullDatasetIds = allDatasetIds.filter( ) const extractReadsDatasetId = (datasetId: DatasetId) => { + if (datasetId.startsWith('gnomad_r4')) { + return 'gnomad_r4' + } if (datasetId.startsWith('gnomad_r3')) { return 'gnomad_r3' } @@ -60,6 +65,9 @@ const extractCoverageDatasetId = (datasetId: DatasetId): DatasetId => { if (datasetId.startsWith('gnomad_sv_r4')) { return 'gnomad_r3' } + if (datasetId.startsWith('gnomad_cnv_r4')) { + return 'gnomad_r4' + } return datasetId } @@ -97,6 +105,13 @@ const extractStructuralVariantDatasetId = (datasetId: DatasetId): DatasetId => { return 'gnomad_sv_r4' } +const extractCopyNumberVariantDatasetId = (datasetId: DatasetId): DatasetId => { + if (datasetId.startsWith('gnomad_cnv')) { + return datasetId + } + + return 'gnomad_cnv_r4' +} type DatasetMetadata = { referenceGenome: ReferenceGenome @@ -104,6 +119,7 @@ type DatasetMetadata = { isSubset: boolean hasShortVariants: boolean hasStructuralVariants: boolean + hasCopyNumberVariants: boolean hasConstraints: boolean hasVariantCoocurrence: boolean hasNonCodingConstraints: boolean @@ -122,6 +138,8 @@ type DatasetMetadata = { isExac: boolean isSVs: boolean isV4SVs: boolean + isCNVs: boolean + isV4CNVs: boolean hasV2Genome: boolean metricsIncludeLowQualityGenotypes: boolean has1000GenomesPopulationFrequencies: boolean @@ -139,12 +157,17 @@ type DatasetMetadata = { variantFeedbackDescription: string | null shortVariantDatasetId: DatasetId structuralVariantDatasetId: DatasetId + copyNumberVariantDatasetId: DatasetId } const structuralVariantDatasetIds = allDatasetIds.filter((datasetId) => datasetId.startsWith('gnomad_sv') ) +const copyNumberVariantDatasetIds = allDatasetIds.filter((datasetId) => + datasetId.startsWith('gnomad_cnv') +) + const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ label: datasetLabels[datasetId], isSubset: !fullDatasetIds.includes(datasetId), @@ -155,11 +178,13 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ hasVariantCoocurrence: datasetId.startsWith('gnomad') && datasetId.includes('r2'), hasConstraints: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', hasNonCodingConstraints: datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4', - referenceGenome: - datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4' ? 'GRCh38' : 'GRCh37', hasExome: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', genesHaveExomeCoverage: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', transcriptsHaveExomeCoverage: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', + isV4CNVs: datasetId === 'gnomad_cnv_r4', + hasCopyNumberVariants: copyNumberVariantDatasetIds.includes(datasetId), + referenceGenome: + datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_cnv_r4' ||datasetId === 'gnomad_sv_r4' ? 'GRCh38' : 'GRCh37', regionsHaveExomeCoverage: !datasetId.startsWith('gnomad_sv') && !datasetId.startsWith('gnomad_r3'), hasLocalAncestryPopulations: datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4', @@ -170,6 +195,7 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ isV2: datasetId.startsWith('gnomad_r2'), isV3: datasetId.startsWith('gnomad_r3'), isSVs: datasetId.startsWith('gnomad_sv'), + isCNVs: datasetId.startsWith('gnomad_cnv'), isExac: datasetId === 'exac', hasV2Genome: datasetId.startsWith('gnomad_r2'), metricsIncludeLowQualityGenotypes: datasetId.startsWith('gnomad_r2') || datasetId === 'exac', @@ -189,6 +215,7 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ variantFeedbackDescription: extractVariantFeedbackDescription(datasetId), shortVariantDatasetId: extractShortVariantDatasetId(datasetId), structuralVariantDatasetId: extractStructuralVariantDatasetId(datasetId), + copyNumberVariantDatasetId: extractCopyNumberVariantDatasetId(datasetId), }) const metadata = allDatasetIds.reduce( @@ -232,6 +259,9 @@ export const hasShortVariants = (datasetId: DatasetId) => getMetadata(datasetId, export const hasStructuralVariants = (datasetId: DatasetId) => getMetadata(datasetId, 'hasStructuralVariants') +export const hasCopyNumberVariants = (datasetId: DatasetId) => +getMetadata(datasetId, 'hasCopyNumberVariants') + export const hasLocalAncestryPopulations = (datasetId: DatasetId) => getMetadata(datasetId, 'hasLocalAncestryPopulations') @@ -303,3 +333,7 @@ export const shortVariantDatasetId = (datasetId: DatasetId) => export const structuralVariantDatasetId = (datasetId: DatasetId) => getMetadata(datasetId, 'structuralVariantDatasetId') +export const isV4CNVs = (datasetId: DatasetId) => getMetadata(datasetId, 'isV4CNVs') + +export const copyNumberVariantDatasetId = (datasetId: DatasetId) => + getMetadata(datasetId, 'copyNumberVariantDatasetId') From f8d54b85a57c2cf296906c5cd8b3d26c2aa3e78e Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:52:32 -0400 Subject: [PATCH 22/62] create cnv populations table --- .../CNVPopulationsTable.tsx | 327 ++++++++++++++++++ .../CopyNumberVariantPopulationsTable.tsx | 85 +++++ 2 files changed, 412 insertions(+) create mode 100644 browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx create mode 100644 browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx diff --git a/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx new file mode 100644 index 000000000..ef870e676 --- /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: 'Alternate allele count in high quality genotypes', // TODO + props: { + className: 'right-align', + }, + })} + {this.renderColumnHeader({ + key: 'sn', + label: columnLabels.sn || 'SN', + tooltip: 'Total number of called high quality genotypes', // TODO + props: { + className: 'right-align', + }, + })} + {this.renderColumnHeader({ + key: 'sf', + label: columnLabels.sf || 'SF', + tooltip: 'Total number of called high quality genotypes', // TODO + 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/CopyNumberVariantPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx new file mode 100644 index 000000000..a234afbd5 --- /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: 'SCount', + sn: 'SNumber', + sf: 'SFrequency', + } + + return ( + + ) +} + +export default CopyNumberVariantPopulationsTable From bdd1fa172dbf0387738789763cac3846e16850e3 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:52:55 -0400 Subject: [PATCH 23/62] add cnv page to variant page router --- browser/src/VariantPageRouter.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/browser/src/VariantPageRouter.tsx b/browser/src/VariantPageRouter.tsx index bffbe6933..09dd8819e 100644 --- a/browser/src/VariantPageRouter.tsx +++ b/browser/src/VariantPageRouter.tsx @@ -9,6 +9,7 @@ import { DatasetId, labelForDataset, hasStructuralVariants, + hasCopyNumberVariants, } from '@gnomad/dataset-metadata/metadata' import DocumentTitle from './DocumentTitle' import Link from './Link' @@ -21,6 +22,7 @@ const MitochondrialVariantPage = lazy( ) const MNVPage = lazy(() => import('./MNVPage/MNVPage')) const StructuralVariantPage = lazy(() => import('./StructuralVariantPage/StructuralVariantPage')) +const CopyNumberVariantPage = lazy(() => import('./CopyNumberVariantPage/CopyNumberVariantPage')) const VariantPage = lazy(() => import('./VariantPage/VariantPage')) type VariantSearchProps = { @@ -111,6 +113,10 @@ const VariantPageRouter = ({ datasetId, variantId }: VariantPageRouterProps) => return } + if (hasCopyNumberVariants(datasetId)){ + return + } + if (isVariantId(variantId)) { const normalizedVariantId = normalizeVariantId(variantId).replace(/^MT/, 'M') const [chrom, _pos, ref, alt] = normalizedVariantId.split('-') From 094ad474eb39cd0f3cc738bf54ed9789b732248e Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:53:19 -0400 Subject: [PATCH 24/62] WIP cnv page --- .../CopyNumberVariantPage.tsx | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx new file mode 100644 index 000000000..bc6e483e9 --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -0,0 +1,182 @@ +import React from 'react' +import styled from 'styled-components' + +import { ExternalLink, Page } from '@gnomad/ui' + +import { DatasetId, labelForDataset } from '@gnomad/dataset-metadata/metadata' +import DocumentTitle from '../DocumentTitle' +import GnomadPageHeading from '../GnomadPageHeading' +// import { Histogram } from '../VariantPage/VariantPage' +// import InfoButton from '../help/InfoButton' +import Query from '../Query' +import { variantFeedbackUrl } from '../variantFeedback' +// import MultiallelicCopyNumberVariantPlot from './MultiallelicCopyNumberVariantPlot' +// import CopyNumberVariantAgeDistribution from './CopyNumberVariantAgeDistribution' +import CopyNumberVariantAttributeList from './CopyNumberVariantAttributeList' +// import CopyNumberVariantConsequenceList from './CopyNumberVariantConsequenceList' +// import CopyNumberVariantGenotypeQualityMetrics from './CopyNumberVariantGenotypeQualityMetrics' +import CopyNumberVariantPopulationsTable from './CopyNumberVariantPopulationsTable' +// import SVReferenceList from './SVReferenceList' + +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

+ +
+ + + + {/* + + +

+ Age Distribution +

+ {variant.age_distribution ? ( + + {datasetId !== 'gnomad_sv_r2_1' && ( +

Age distribution is based on the full SV dataset, not the selected subset.

+ )} + +
+ ) : ( +

Age data is not available for this variant.

+ )} +
+
*/} +
+) + +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 From 5d72c9666baaff513aa3a66a58f674e46212c26f Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 6 Oct 2023 15:53:36 -0400 Subject: [PATCH 25/62] WIP cnv attribute list --- .../CopyNumberVariantAttributeList.tsx | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx new file mode 100644 index 000000000..c748d210f --- /dev/null +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -0,0 +1,149 @@ +import React from 'react' + +import { Badge } from '@gnomad/ui' + +import AttributeList from '../AttributeList' +import InfoButton from '../help/InfoButton' +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 OwnPointLinkProps = { + chrom: string + pos: number + windowSize?: number +} + +// @ts-expect-error TS(2456) FIXME: Type alias 'PointLinkProps' circularly references ... Remove this comment to see the full error message +type PointLinkProps = OwnPointLinkProps & typeof PointLink.defaultProps + +// @ts-expect-error TS(7022) FIXME: 'PointLink' implicitly has type 'any' because it d... Remove this comment to see the full error message +const PointLink = ({ chrom, pos, windowSize }: PointLinkProps) => ( + + {chrom}:{pos} + +) + +PointLink.defaultProps = { + windowSize: 10000, +} + +type OwnComplexTypeHelpButtonProps = { + complexType?: string +} + +// @ts-expect-error TS(2456) FIXME: Type alias 'ComplexTypeHelpButtonProps' circularly... Remove this comment to see the full error message +type ComplexTypeHelpButtonProps = OwnComplexTypeHelpButtonProps & + typeof ComplexTypeHelpButton.defaultProps + +// @ts-expect-error TS(7022) FIXME: 'ComplexTypeHelpButton' implicitly has type 'any' ... Remove this comment to see the full error message +const ComplexTypeHelpButton = ({ complexType }: ComplexTypeHelpButtonProps) => { + if (!complexType) { + return null + } + + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const helpTopic = { + CCR: null, + dDUP: 'sv-class_CPX_dDUP_dDUP-iDEL', + dDUP_iDEL: 'sv-class_CPX_dDUP_dDUP-iDEL', + delINV: 'sv-class_CPX_delINV_INVdel', + delINVdel: 'sv-class_CPX_delINVdel', + delINVdup: 'sv-class_CPX_delINVdup_dupINVdel', + dupINV: 'sv-class_CPX_dupINV_INVdup', + dupINVdel: 'sv-class_CPX_delINVdup_dupINVdel', + dupINVdup: 'sv-class_CPX_dupINVdup', + INS_iDEL: 'sv-class_CPX_INS-iDEL', + INVdel: 'sv-class_CPX_delINV_INVdel', + INVdup: 'sv-class_CPX_dupINV_INVdup', + piDUP_FR: 'sv-class_CPX_piDUP-FR_piDUP-RF', + piDUP_RF: 'sv-class_CPX_piDUP-FR_piDUP-RF', + }[complexType] + + if (!helpTopic) { + return null + } + + return +} + +ComplexTypeHelpButton.defaultProps = { + complexType: null, +} + +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.qual} + {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + + {variant.type === 'DUP' || variant.type === 'DEL' ? ( + + ) : ( + + {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 From d3d2e61ae01fee52c3f2075f3117554302d8afbd Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 12 Oct 2023 12:29:13 -0400 Subject: [PATCH 26/62] add cnv coverage track for percent callable --- .../data_pipeline/data_types/cnv_coverage.py | 13 ++++++++++ .../gnomad_v4_copy_number_variant_coverage.py | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 data-pipeline/src/data_pipeline/data_types/cnv_coverage.py create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py diff --git a/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py b/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py new file mode 100644 index 000000000..6d9ea70b6 --- /dev/null +++ b/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py @@ -0,0 +1,13 @@ +import hail as hl + + + +def prepare_cnv_track_callable_coverage(coverage_path): + coverage = hl.import_table(coverage_path, force_bgz=True) + + coverage = coverage.select( + "xpos", + "percent_callable" + ) + + return coverage diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py new file mode 100644 index 000000000..eebeaa996 --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py @@ -0,0 +1,26 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.data_types.cnv_coverage import prepare_cnv_track_callable_coverage + + +pipeline = Pipeline() + +pipeline.add_task( + "prepare_gnomad_v4_cnvs_track_percent_callable_coverage", + prepare_cnv_track_callable_coverage, + "/gnomad_v4/gnomad_v4_cnvs/coverage_tracks/track_percent_callable.ht", + {"coverage_path": "gs://gnomad-v4-cnvs/coverage_tracks/track_percent_callable.tsv.gz"}, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"track_percent_callable_coverage": "prepare_gnomad_v4_cnvs_track_percent_callable_coverage"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) From 8cef11dd9d8deb94ddbae5e8cd0b132ab239bbef Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:26:29 -0400 Subject: [PATCH 27/62] fix datasetselector oraganization for cnvs --- browser/src/DatasetSelector.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/browser/src/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 21e4db9bf..66d0eb520 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -449,23 +449,27 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } search: queryString.stringify({ dataset: datasetId }), }) - const topLevelShortVariantDataset = shortVariantDatasetId(selectedDataset) const topLevelStructuralVariantDataset = structuralVariantDatasetId(selectedDataset) + const defaultTopLevelShortVariantDataset = includeGnomad2 ? 'gnomad_r2_1' : 'gnomad_r3' + const topLevelShortVariantDataset = hasShortVariants(selectedDataset) + ? selectedDataset + : defaultTopLevelShortVariantDataset + 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[], }, @@ -652,7 +656,7 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } description: `samples`, // description: `${sampleCounts.gnomad_cnv_r4.total.toLocaleString()} samples`, childReferenceGenome: referenceGenome('gnomad_cnv_r4'), - } + }, ], } ) @@ -665,6 +669,7 @@ DatasetSelector.propTypes = { datasetOptions: PropTypes.shape({ includeShortVariants: PropTypes.bool, includeStructuralVariants: PropTypes.bool, + includeCopyNumberVariants: PropTypes.bool, includeExac: PropTypes.bool, includeGnomad2Subsets: PropTypes.bool, includeGnomad3: PropTypes.bool, @@ -677,6 +682,7 @@ DatasetSelector.defaultProps = { datasetOptions: { includeShortVariants: true, includeStructuralVariants: true, + includeCopyNumberVariants: true, includeExac: true, includeGnomad2: true, includeGnomad2Subsets: true, From 66875e46e793cf881819b90f965adad3d8b5acc0 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:26:45 -0400 Subject: [PATCH 28/62] add variantfeedback spec tests --- browser/src/variantFeedback.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/browser/src/variantFeedback.spec.ts b/browser/src/variantFeedback.spec.ts index fdf3b49b2..f0a0cee35 100644 --- a/browser/src/variantFeedback.spec.ts +++ b/browser/src/variantFeedback.spec.ts @@ -35,6 +35,10 @@ const expectedResults: Record = { 'http://example.com/variant_report_form?dataset_id_parameter=gnomAD%20v2&variant_id_param=1-234-A-C', gnomad_sv_r4: 'http://example.com/variant_report_form?dataset_id_parameter=gnomAD%20v3&variant_id_param=1-234-A-C', + gnomad_r4: + 'http://example.com/variant_report_form?dataset_id_parameter=gnomAD%20v2&variant_id_param=1-234-A-C', + gnomad_cnv_r4: + 'http://example.com/variant_report_form?dataset_id_parameter=gnomAD%20v2&variant_id_param=1-234-A-C', } const originalEnv = process.env From 13fbc27bb66161b75b2ed1feb046f6092fc6f338 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:27:01 -0400 Subject: [PATCH 29/62] create cnv reference list --- .../CNVReferenceList.tsx | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 browser/src/CopyNumberVariantPage/CNVReferenceList.tsx diff --git a/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx b/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx new file mode 100644 index 000000000..4261790a0 --- /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=hg19&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 From 548e0d45670f11d536c04c09f80284ecd8b97a64 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:27:17 -0400 Subject: [PATCH 30/62] add v4 and cnv v4 to metadata --- dataset-metadata/metadata.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dataset-metadata/metadata.spec.ts b/dataset-metadata/metadata.spec.ts index 3d48fed5d..e81147fa3 100644 --- a/dataset-metadata/metadata.spec.ts +++ b/dataset-metadata/metadata.spec.ts @@ -204,6 +204,8 @@ const expectedCoverageDatasetIds: Record = { gnomad_sv_r2_1_controls: 'gnomad_r2_1', gnomad_sv_r2_1_non_neuro: 'gnomad_r2_1', gnomad_sv_r4: 'gnomad_r3', + gnomad_r4: 'gnomad_r4', + gnomad_cnv_r4: 'gnomad_cnv_r4' } describe.each(allDatasetIds)('coverageDataset for dataset %s', (datasetId: DatasetId) => { From 4b2a3455f085746ad6dccf47db657fdd47de207e Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:27:58 -0400 Subject: [PATCH 31/62] add CNV info to gene page display --- browser/src/GenePage/GenePage.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/browser/src/GenePage/GenePage.tsx b/browser/src/GenePage/GenePage.tsx index a215a0573..711d69261 100644 --- a/browser/src/GenePage/GenePage.tsx +++ b/browser/src/GenePage/GenePage.tsx @@ -19,6 +19,7 @@ import { ReferenceGenome, hasExons, isExac, + hasCopyNumberVariants, isV2, } from '@gnomad/dataset-metadata/metadata' import ConstraintTable from '../ConstraintTable/ConstraintTable' @@ -51,7 +52,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 +118,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 +355,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, @@ -434,6 +443,8 @@ const GenePage = ({ datasetId, gene, geneId }: Props) => { /> ) : gene.chrom === 'M' ? ( + ) : hasCopyNumberVariants(datasetId) ? ( + // TODO: CREATE COVERAGETRACKS ) : ( { {/* eslint-disable-next-line no-nested-ternary */} {hasStructuralVariants(datasetId) ? ( + ) : hasCopyNumberVariants(datasetId) ? ( + ) : gene.chrom === 'M' ? ( ) : ( From 390ca74c85ab914227a3f92b8fd047632a008106 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:28:25 -0400 Subject: [PATCH 32/62] update cnv pop table labels --- .../CopyNumberVariantPopulationsTable.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx index a234afbd5..90b42d6a7 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx @@ -69,9 +69,9 @@ const CopyNumberVariantPopulationsTable = ({ variant }: CopyNumberVariantPopulat const populations = nestPopulations(addPopulationNames((variant as any).populations)) const columnLabels = { - sc: 'SCount', - sn: 'SNumber', - sf: 'SFrequency', + sc: 'Site Count', + sn: 'Number of Sites', + sf: 'Site Frequency', } return ( From 9e89be31783bd2dca53f494a8cded8f6f56867fe Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 14:28:48 -0400 Subject: [PATCH 33/62] WIP variant cnv page --- .../CopyNumberVariantPage.tsx | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx index bc6e483e9..b6b376a18 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -10,13 +10,10 @@ import GnomadPageHeading from '../GnomadPageHeading' // import InfoButton from '../help/InfoButton' import Query from '../Query' import { variantFeedbackUrl } from '../variantFeedback' -// import MultiallelicCopyNumberVariantPlot from './MultiallelicCopyNumberVariantPlot' // import CopyNumberVariantAgeDistribution from './CopyNumberVariantAgeDistribution' import CopyNumberVariantAttributeList from './CopyNumberVariantAttributeList' -// import CopyNumberVariantConsequenceList from './CopyNumberVariantConsequenceList' -// import CopyNumberVariantGenotypeQualityMetrics from './CopyNumberVariantGenotypeQualityMetrics' import CopyNumberVariantPopulationsTable from './CopyNumberVariantPopulationsTable' -// import SVReferenceList from './SVReferenceList' +import CNVReferenceList from './CNVReferenceList' const Wrapper = styled.div` display: flex; @@ -67,7 +64,10 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp // @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} @@ -76,7 +76,7 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp

External Resources

- {/* */} +

Feedback

{/* @ts-expect-error TS(2786) FIXME: 'ExternalLink' cannot be used as a JSX component. */} @@ -88,9 +88,7 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp

Population Frequencies

-
- - + {/* @@ -174,9 +172,7 @@ const ConnectedCopyNumberVariantPage = ({ return }} - ) - } export default ConnectedCopyNumberVariantPage From 62139f138c3589a971d9443758dac6b4d326c2d8 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 15:09:40 -0400 Subject: [PATCH 34/62] create cnv types ts --- .../CopyNumberVariantList/copyNumberVariantTypes.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 browser/src/CopyNumberVariantList/copyNumberVariantTypes.tsx 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', +} From 287f00ab620986e44c0cf8c804fea2af20b19553 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 15:09:57 -0400 Subject: [PATCH 35/62] update attribute list --- .../CopyNumberVariantAttributeList.tsx | 98 +++---------------- 1 file changed, 11 insertions(+), 87 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx index c748d210f..514305818 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -10,84 +10,19 @@ import { CopyNumberVariant } from './CopyNumberVariantPage' import { textOrMissingTextWarning } from '../missingContent' const FILTER_LABELS = { - TRUE: 'TRUE', + TRUE: 'TRUE', } const FILTER_DESCRIPTIONS = { - TRUE: 'TRUE', + TRUE: 'true', } - - const filterLabel = (filter: string) => textOrMissingTextWarning('filter label', FILTER_LABELS, filter) const filterDescription = (filter: string) => textOrMissingTextWarning('filter description', FILTER_DESCRIPTIONS, filter) -type OwnPointLinkProps = { - chrom: string - pos: number - windowSize?: number -} - -// @ts-expect-error TS(2456) FIXME: Type alias 'PointLinkProps' circularly references ... Remove this comment to see the full error message -type PointLinkProps = OwnPointLinkProps & typeof PointLink.defaultProps - -// @ts-expect-error TS(7022) FIXME: 'PointLink' implicitly has type 'any' because it d... Remove this comment to see the full error message -const PointLink = ({ chrom, pos, windowSize }: PointLinkProps) => ( - - {chrom}:{pos} - -) - -PointLink.defaultProps = { - windowSize: 10000, -} - -type OwnComplexTypeHelpButtonProps = { - complexType?: string -} - -// @ts-expect-error TS(2456) FIXME: Type alias 'ComplexTypeHelpButtonProps' circularly... Remove this comment to see the full error message -type ComplexTypeHelpButtonProps = OwnComplexTypeHelpButtonProps & - typeof ComplexTypeHelpButton.defaultProps - -// @ts-expect-error TS(7022) FIXME: 'ComplexTypeHelpButton' implicitly has type 'any' ... Remove this comment to see the full error message -const ComplexTypeHelpButton = ({ complexType }: ComplexTypeHelpButtonProps) => { - if (!complexType) { - return null - } - - // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message - const helpTopic = { - CCR: null, - dDUP: 'sv-class_CPX_dDUP_dDUP-iDEL', - dDUP_iDEL: 'sv-class_CPX_dDUP_dDUP-iDEL', - delINV: 'sv-class_CPX_delINV_INVdel', - delINVdel: 'sv-class_CPX_delINVdel', - delINVdup: 'sv-class_CPX_delINVdup_dupINVdel', - dupINV: 'sv-class_CPX_dupINV_INVdup', - dupINVdel: 'sv-class_CPX_delINVdup_dupINVdel', - dupINVdup: 'sv-class_CPX_dupINVdup', - INS_iDEL: 'sv-class_CPX_INS-iDEL', - INVdel: 'sv-class_CPX_delINV_INVdel', - INVdup: 'sv-class_CPX_dupINV_INVdup', - piDUP_FR: 'sv-class_CPX_piDUP-FR_piDUP-RF', - piDUP_RF: 'sv-class_CPX_piDUP-FR_piDUP-RF', - }[complexType] - - if (!helpTopic) { - return null - } - - return -} - -ComplexTypeHelpButton.defaultProps = { - complexType: null, -} - type CopyNumberVariantAttributeListProps = { variant: CopyNumberVariant } @@ -108,42 +43,31 @@ const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeL {/* @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} - + {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} - + {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.qual} {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} - {variant.type === 'DUP' || variant.type === 'DEL' ? ( - - ) : ( - - {variant.chrom}:{variant.pos}-{variant.end} - - )} + + {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`} - + + {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 From c111e15315a3a4ec2782b244a52c8db97dcfb3aa Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 15:10:27 -0400 Subject: [PATCH 36/62] add filter zoom region for cnvs --- .../src/RegionViewer/filterVariantsInZoomRegion.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/browser/src/RegionViewer/filterVariantsInZoomRegion.ts b/browser/src/RegionViewer/filterVariantsInZoomRegion.ts index be2190e9a..8b8e2e1f6 100644 --- a/browser/src/RegionViewer/filterVariantsInZoomRegion.ts +++ b/browser/src/RegionViewer/filterVariantsInZoomRegion.ts @@ -1,4 +1,5 @@ import { sortedIndexBy, sortedLastIndexBy } from 'lodash-es' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' const filterVariantsInZoomRegion = (variants: any, zoomRegion: any) => { 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) + ) +} From e61855385bad001c55eef9d3d11e501021e13c98 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 13 Oct 2023 15:11:30 -0400 Subject: [PATCH 37/62] update graphql types --- graphql-api/src/graphql/types/dataset-id.graphql | 1 + graphql-api/src/graphql/types/gene.graphql | 2 +- graphql-api/src/graphql/types/region.graphql | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/graphql-api/src/graphql/types/dataset-id.graphql b/graphql-api/src/graphql/types/dataset-id.graphql index 73165f935..34e5e5da4 100644 --- a/graphql-api/src/graphql/types/dataset-id.graphql +++ b/graphql-api/src/graphql/types/dataset-id.graphql @@ -1,4 +1,5 @@ enum DatasetId { + gnomad_r4 gnomad_r3 gnomad_r3_controls_and_biobanks gnomad_r3_non_cancer diff --git a/graphql-api/src/graphql/types/gene.graphql b/graphql-api/src/graphql/types/gene.graphql index 4c6e80862..5dbd91626 100644 --- a/graphql-api/src/graphql/types/gene.graphql +++ b/graphql-api/src/graphql/types/gene.graphql @@ -83,7 +83,7 @@ type Gene { heterozygous_variant_cooccurrence_counts: [HeterozygousVariantCooccurrenceCounts!]! @cost(value: 5) homozygous_variant_cooccurrence_counts: [HomozygousVariantCooccurrenceCounts!]! @cost(value: 5) - copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID + copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) } type GeneSearchResult { diff --git a/graphql-api/src/graphql/types/region.graphql b/graphql-api/src/graphql/types/region.graphql index 0c3cb43d6..91fce5bac 100644 --- a/graphql-api/src/graphql/types/region.graphql +++ b/graphql-api/src/graphql/types/region.graphql @@ -31,7 +31,7 @@ type Region { variants(dataset: DatasetId!): [Variant!]! @cost(value: 10) structural_variants(dataset: StructuralVariantDatasetId!): [StructuralVariant!]! @cost(value: 10) mitochondrial_variants(dataset: DatasetId!): [MitochondrialVariant!]! @cost(value: 10) - copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) #TODO: MAKE REQUIRED DATASETID + copy_number_variants(dataset: CopyNumberVariantDatasetId!): [CopyNumberVariant!]! @cost(value: 10) clinvar_variants: [ClinVarVariant!] @cost(value: 10) From abcf5a98e1809f19db5f87003ee7322d2f3c3b1c Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 18 Oct 2023 12:06:42 -0400 Subject: [PATCH 38/62] create tests --- .../CopyNumberVariants.spec.tsx | 23 +++++++ .../CopyNumberVariantPage.spec.tsx | 60 +++++++++++++++++++ browser/src/DatasetSelector.spec.tsx | 4 ++ browser/src/GenePage/GenePage.spec.tsx | 22 +++++++ browser/src/Searchbox.spec.tsx | 2 + 5 files changed, 111 insertions(+) create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariants.spec.tsx create mode 100644 browser/src/CopyNumberVariantPage/CopyNumberVariantPage.spec.tsx 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/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/DatasetSelector.spec.tsx b/browser/src/DatasetSelector.spec.tsx index c4c25e103..c57292d3f 100644 --- a/browser/src/DatasetSelector.spec.tsx +++ b/browser/src/DatasetSelector.spec.tsx @@ -29,6 +29,10 @@ forAllDatasets('DataSelector with "%s" dataset selected', (datasetId) => { includeGnomad2Subsets: true, includeGnomad3: true, includeGnomad3Subsets: true, +<<<<<<< HEAD +======= + includeCopyNumberVariants: true, +>>>>>>> 104caa5d (create tests) }} /> ) diff --git a/browser/src/GenePage/GenePage.spec.tsx b/browser/src/GenePage/GenePage.spec.tsx index cfaebfd78..872123c64 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() @@ -124,6 +125,25 @@ forDatasetsMatching(svRegexp, 'GenePage with SV dataset "%s"', (datasetId) => { expect(tree).toMatchSnapshot() }) + forDatasetsMatching(cnvRegexp, 'GenePage with CNV dataset "%s"', (datasetId) => { + test('has no unexpected changes', () => { + const gene = geneFactory.build() + setMockApiResponses({ + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), + RegionCoverage: () => ({ + region: { + 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({ @@ -162,6 +182,7 @@ describe.each([ ['gnomad_r3_non_neuro', false], ['gnomad_r3_non_topmed', false], ['gnomad_r3_non_v2', false], + ['gnomad_cnv_r4', false], ] 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() @@ -206,6 +227,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/Searchbox.spec.tsx b/browser/src/Searchbox.spec.tsx index e78cb8ece..89bd949e3 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_r4', + gnomad_cnv_r4: 'gnomad_cnv_r4', } test('has correct default dataset', () => { From 6ccf5e6bd37a2ee1f5efa3a0c5a0573fa5da63bf Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 18 Oct 2023 15:24:18 -0400 Subject: [PATCH 39/62] create cnv factories --- .../src/__factories__/CopyNumberVariant.ts | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 browser/src/__factories__/CopyNumberVariant.ts diff --git a/browser/src/__factories__/CopyNumberVariant.ts b/browser/src/__factories__/CopyNumberVariant.ts new file mode 100644 index 000000000..12a44239e --- /dev/null +++ b/browser/src/__factories__/CopyNumberVariant.ts @@ -0,0 +1,51 @@ +import { Factory } from 'fishery' +import { CopyNumberVariant } from '../CopyNumberVariantPage/CopyNumberVariantPage' + +const cnvFactory = Factory.define( + ({ params }) => { + const { + alts = null, + sc = 123, + sn = 345, + sf = 0.5, + chrom = '21', + end = 456, + filters = [], + genes = [], + length = 333, + populations = [], + pos = 123, + qual = 99, + type = 'DUP', + posmin = 100121281, + posmax = 100121284, + endmin = 100168738, + endmax = 100168742, + } = params + + const variant_id = `${chrom}__${type}` + + return { + alts, + sc, + sn, + sf, + chrom, + end, + filters, + genes, + length, + populations, + pos, + qual, + type, + posmin, + posmax, + endmin, + endmax, + variant_id, + } + } +) + +export default cnvFactory From a091f0dc2d8b18567b7a33f622d7d7170e205444 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 19 Oct 2023 10:23:14 -0400 Subject: [PATCH 40/62] add exome only coverage for cnvs --- browser/src/GenePage/GenePage.tsx | 4 ++-- dataset-metadata/metadata.ts | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/browser/src/GenePage/GenePage.tsx b/browser/src/GenePage/GenePage.tsx index 711d69261..e1bdaba3e 100644 --- a/browser/src/GenePage/GenePage.tsx +++ b/browser/src/GenePage/GenePage.tsx @@ -14,6 +14,7 @@ import { Badge, Button } from '@gnomad/ui' import { DatasetId, genesHaveExomeCoverage, + genesHaveGenomeCoverage, labelForDataset, hasStructuralVariants, ReferenceGenome, @@ -443,13 +444,12 @@ const GenePage = ({ datasetId, gene, geneId }: Props) => { /> ) : gene.chrom === 'M' ? ( - ) : hasCopyNumberVariants(datasetId) ? ( - // TODO: CREATE COVERAGETRACKS ) : ( )} diff --git a/dataset-metadata/metadata.ts b/dataset-metadata/metadata.ts index 4ff9a0595..3f0a545c7 100644 --- a/dataset-metadata/metadata.ts +++ b/dataset-metadata/metadata.ts @@ -18,7 +18,7 @@ export const datasetLabels = { gnomad_sv_r2_1_non_neuro: 'gnomAD SVs v2.1 (non-neuro)', gnomad_sv_r4: 'gnomAD SVs v4', gnomad_r4: '', //* TODO - gnomad_cnv_r4: "gnomAD CNVs v4.1", + gnomad_cnv_r4: "gnomAD CNVs v4.0.0", } as const export type DatasetId = keyof typeof datasetLabels @@ -120,11 +120,13 @@ type DatasetMetadata = { hasShortVariants: boolean hasStructuralVariants: boolean hasCopyNumberVariants: boolean + hasCopyNumberVariantCoverage: boolean hasConstraints: boolean hasVariantCoocurrence: boolean hasNonCodingConstraints: boolean hasExome: boolean genesHaveExomeCoverage: boolean + genesHaveGenomeCoverage: boolean transcriptsHaveExomeCoverage: boolean regionsHaveExomeCoverage: boolean hasLocalAncestryPopulations: boolean @@ -175,6 +177,8 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ isV4SVs: datasetId === 'gnomad_sv_r4', hasShortVariants: !structuralVariantDatasetIds.includes(datasetId), hasStructuralVariants: structuralVariantDatasetIds.includes(datasetId), + hasCopyNumberVariants: copyNumberVariantDatasetIds.includes(datasetId), + hasCopyNumberVariantCoverage: datasetId.startsWith('gnomad_cnv'), hasVariantCoocurrence: datasetId.startsWith('gnomad') && datasetId.includes('r2'), hasConstraints: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', hasNonCodingConstraints: datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4', @@ -182,9 +186,9 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ genesHaveExomeCoverage: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', transcriptsHaveExomeCoverage: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', isV4CNVs: datasetId === 'gnomad_cnv_r4', - hasCopyNumberVariants: copyNumberVariantDatasetIds.includes(datasetId), referenceGenome: - datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_cnv_r4' ||datasetId === 'gnomad_sv_r4' ? 'GRCh38' : 'GRCh37', + datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_cnv_r4' ||datasetId === 'gnomad_sv_r4' || datasetId.startsWith('gnomad_r4') ? 'GRCh38' : 'GRCh37', + genesHaveGenomeCoverage: !datasetId.startsWith('gnomad_cnv'), regionsHaveExomeCoverage: !datasetId.startsWith('gnomad_sv') && !datasetId.startsWith('gnomad_r3'), hasLocalAncestryPopulations: datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4', @@ -248,6 +252,9 @@ export const hasExome = (datsetId: DatasetId) => getMetadata(datsetId, 'hasExome export const genesHaveExomeCoverage = (datsetId: DatasetId) => getMetadata(datsetId, 'genesHaveExomeCoverage') + export const genesHaveGenomeCoverage = (datsetId: DatasetId) => + getMetadata(datsetId, 'genesHaveGenomeCoverage') + export const transcriptsHaveExomeCoverage = (datsetId: DatasetId) => getMetadata(datsetId, 'transcriptsHaveExomeCoverage') @@ -337,3 +344,6 @@ export const isV4CNVs = (datasetId: DatasetId) => getMetadata(datasetId, 'isV4CN export const copyNumberVariantDatasetId = (datasetId: DatasetId) => getMetadata(datasetId, 'copyNumberVariantDatasetId') + +export const hasCopyNumberVariantCoverage = (datasetId: DatasetId) => + getMetadata(datasetId, 'hasCopyNumberVariantCoverage') From d28db682d98a60747bf1e00a9c04883f4f45fdf9 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 19 Oct 2023 14:47:09 -0400 Subject: [PATCH 41/62] add param to only display exome coverage for cnvs --- browser/src/DatasetSelector.spec.tsx | 3 --- browser/src/RegionPage/RegionPage.tsx | 10 ++++++++++ dataset-metadata/metadata.ts | 5 +++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/browser/src/DatasetSelector.spec.tsx b/browser/src/DatasetSelector.spec.tsx index c57292d3f..8333850e5 100644 --- a/browser/src/DatasetSelector.spec.tsx +++ b/browser/src/DatasetSelector.spec.tsx @@ -29,10 +29,7 @@ forAllDatasets('DataSelector with "%s" dataset selected', (datasetId) => { includeGnomad2Subsets: true, includeGnomad3: true, includeGnomad3Subsets: true, -<<<<<<< HEAD -======= includeCopyNumberVariants: true, ->>>>>>> 104caa5d (create tests) }} /> ) diff --git a/browser/src/RegionPage/RegionPage.tsx b/browser/src/RegionPage/RegionPage.tsx index 681783ba6..b8d864e8c 100644 --- a/browser/src/RegionPage/RegionPage.tsx +++ b/browser/src/RegionPage/RegionPage.tsx @@ -8,7 +8,10 @@ import { labelForDataset, hasNonCodingConstraints, regionsHaveExomeCoverage, + regionsHaveGenomeCoverage, isSVs, + isV4CNVs, + hasCopyNumberVariants, } from '@gnomad/dataset-metadata/metadata' import DocumentTitle from '../DocumentTitle' import GnomadPageHeading from '../GnomadPageHeading' @@ -27,6 +30,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 +84,10 @@ const variantsInRegion = (datasetId: DatasetId, region: Region) => { return } + if (isV4CNVs(datasetId)) { + return + } + if (region.chrom === 'M') { return ( @@ -119,6 +127,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 +167,7 @@ const RegionPage = ({ datasetId, region }: RegionPageProps) => { datasetId={datasetId} chrom={chrom} includeExomeCoverage={regionsHaveExomeCoverage(datasetId)} + includeGenomeCoverage={regionsHaveGenomeCoverage(datasetId)} start={start} stop={stop} /> diff --git a/dataset-metadata/metadata.ts b/dataset-metadata/metadata.ts index 3f0a545c7..017740b7e 100644 --- a/dataset-metadata/metadata.ts +++ b/dataset-metadata/metadata.ts @@ -129,6 +129,7 @@ type DatasetMetadata = { genesHaveGenomeCoverage: boolean transcriptsHaveExomeCoverage: boolean regionsHaveExomeCoverage: boolean + regionsHaveGenomeCoverage: boolean hasLocalAncestryPopulations: boolean isLiftoverSource: boolean isLiftoverTarget: boolean @@ -192,6 +193,7 @@ const metadataForDataset = (datasetId: DatasetId): DatasetMetadata => ({ regionsHaveExomeCoverage: !datasetId.startsWith('gnomad_sv') && !datasetId.startsWith('gnomad_r3'), hasLocalAncestryPopulations: datasetId.startsWith('gnomad_r3') || datasetId === 'gnomad_sv_r4', + regionsHaveGenomeCoverage: !datasetId.startsWith('gnomad_cnv'), isLiftoverSource: datasetId.startsWith('gnomad_r2_1'), isLiftoverTarget: datasetId.startsWith('gnomad_r3'), usesGrch37: !datasetId.startsWith('gnomad_r3') && datasetId !== 'gnomad_sv_r4', @@ -261,6 +263,9 @@ export const transcriptsHaveExomeCoverage = (datsetId: DatasetId) => export const regionsHaveExomeCoverage = (datsetId: DatasetId) => getMetadata(datsetId, 'regionsHaveExomeCoverage') +export const regionsHaveGenomeCoverage = (datsetId: DatasetId) => + getMetadata(datsetId, 'regionsHaveGenomeCoverage') + export const hasShortVariants = (datasetId: DatasetId) => getMetadata(datasetId, 'hasShortVariants') export const hasStructuralVariants = (datasetId: DatasetId) => From eaa2939a23b1248afc2d47709a3a9c7706f4e511 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 19 Oct 2023 14:47:21 -0400 Subject: [PATCH 42/62] add cnv type --- browser/src/VariantPage/VariantPage.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/browser/src/VariantPage/VariantPage.tsx b/browser/src/VariantPage/VariantPage.tsx index e496a4160..b3f463252 100644 --- a/browser/src/VariantPage/VariantPage.tsx +++ b/browser/src/VariantPage/VariantPage.tsx @@ -126,6 +126,12 @@ export type StructuralVariant = { ac_hom: number | null } +export type CopyNumberVariant = { + id: string + sc: number + sn: number +} + export type Histogram = { bin_edges: number[] bin_freq: number[] @@ -825,6 +831,7 @@ const VariantPage = ({ datasetId, variantId }: VariantPageProps) => { includeGnomad3: usesGrch38(datasetId), // Variant ID not valid for SVs includeStructuralVariants: false, + includeCopyNumberVariants: false, }} selectedDataset={datasetId} extra={ From 999689d85bd1a5f6d97ec842170fc36894b0edec Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Mon, 23 Oct 2023 13:30:11 -0400 Subject: [PATCH 43/62] add format prettier --- browser/src/VariantList/sortUtilities.ts | 42 +++++++++++------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/browser/src/VariantList/sortUtilities.ts b/browser/src/VariantList/sortUtilities.ts index 405657c38..4de3bad96 100644 --- a/browser/src/VariantList/sortUtilities.ts +++ b/browser/src/VariantList/sortUtilities.ts @@ -1,30 +1,28 @@ export const isEmpty = (val: any) => val === undefined || val === null || val === '' -export const makeCompareFunction = (key: any, fn: any) => ( - v1: any, - v2: any, - order = 'ascending' -) => { - let key1 - let key2 +export const makeCompareFunction = + (key: any, fn: any) => + (v1: any, v2: any, order = 'ascending') => { + let key1 + let key2 - if (typeof key === 'function') { - key1 = key(v1) - key2 = key(v2) - } else { - key1 = v1[key] - key2 = v2[key] - } + if (typeof key === 'function') { + key1 = key(v1) + key2 = key(v2) + } else { + key1 = v1[key] + key2 = v2[key] + } - if (isEmpty(key1)) { - return 1 - } - if (isEmpty(key2)) { - return -1 - } + if (isEmpty(key1)) { + return 1 + } + if (isEmpty(key2)) { + return -1 + } - return order === 'ascending' ? fn(key1, key2) : fn(key2, key1) -} + return order === 'ascending' ? fn(key1, key2) : fn(key2, key1) + } export const makeStringCompareFunction = (key: any) => makeCompareFunction(key, (v1: any, v2: any) => v1.localeCompare(v2)) From db258fe81dae330001d7ef70d7aee664224d3339 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 25 Oct 2023 10:28:09 -0400 Subject: [PATCH 44/62] draft track callable coverage --- .../data_pipeline/data_types/cnv_coverage.py | 2 +- .../pipelines/gnomad_v4_cnv_coverage.py | 26 ++++ .../src/graphql/resolvers/cnv-coverage.ts | 76 ++++++++++ graphql-api/src/graphql/types/gene.graphql | 1 + .../src/queries/cnv-coverage-queries.ts | 132 ++++++++++++++++++ 5 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py create mode 100644 graphql-api/src/graphql/resolvers/cnv-coverage.ts create mode 100644 graphql-api/src/queries/cnv-coverage-queries.ts diff --git a/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py b/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py index 6d9ea70b6..cafe0fb88 100644 --- a/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py +++ b/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py @@ -3,7 +3,7 @@ def prepare_cnv_track_callable_coverage(coverage_path): - coverage = hl.import_table(coverage_path, force_bgz=True) + coverage = hl.import_table(coverage_path, force_bgz=True, types={'xpos': hl.tfloat64, 'percent_callable': hl.tfloat64}) coverage = coverage.select( "xpos", diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py new file mode 100644 index 000000000..eebeaa996 --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py @@ -0,0 +1,26 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.data_types.cnv_coverage import prepare_cnv_track_callable_coverage + + +pipeline = Pipeline() + +pipeline.add_task( + "prepare_gnomad_v4_cnvs_track_percent_callable_coverage", + prepare_cnv_track_callable_coverage, + "/gnomad_v4/gnomad_v4_cnvs/coverage_tracks/track_percent_callable.ht", + {"coverage_path": "gs://gnomad-v4-cnvs/coverage_tracks/track_percent_callable.tsv.gz"}, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"track_percent_callable_coverage": "prepare_gnomad_v4_cnvs_track_percent_callable_coverage"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) diff --git a/graphql-api/src/graphql/resolvers/cnv-coverage.ts b/graphql-api/src/graphql/resolvers/cnv-coverage.ts new file mode 100644 index 000000000..1f9b08bcc --- /dev/null +++ b/graphql-api/src/graphql/resolvers/cnv-coverage.ts @@ -0,0 +1,76 @@ +import { UserVisibleError } from '../../errors' +import { + fetchTrackCallableCoverageForRegion, + fetchTrackCallableCoverageForGene, +} from '../../queries/cnv-coverage-queries' + +// const formatCoverageBins = (bins: any) => +// bins.map((bin: any) => ({ +// pos: bin.pos, +// mean: bin.mean, +// median: bin.median, +// over_1: bin.over_x[0], +// over_5: bin.over_x[1], +// over_10: bin.over_x[2], +// over_15: bin.over_x[3], +// over_20: bin.over_x[4], +// over_25: bin.over_x[5], +// over_30: bin.over_x[6], +// over_50: bin.over_x[7], +// over_100: bin.over_x[8], +// })) + +const formatTrackCallableCoverageBins = (bins: any) => + bins.map((bin: any) => ({ + pos: bin.pos, + percent_callable: bin[0], + })) + +const resolveTrackCallableCoverageInRegion = async (obj: any, _args: any, ctx: any) => { + const coverage = await fetchTrackCallableCoverageForRegion(ctx.esClient, obj.dataset, obj) + return formatTrackCallableCoverageBins(coverage) +} + +const resolveTrackCallableCoverageInGene = async (obj: any, _args: any, ctx: any) => { + try { + console.log("fetchTrackCallableCoverageForGene In Resolver") + const coverage = await fetchTrackCallableCoverageForGene(ctx.esClient, obj.dataset, obj) + return formatTrackCallableCoverageBins(coverage) + } catch (e) { + console.error('Error resolver coverager:', e) + throw e + } +} + +// const resolveGenomeCoverageInRegion = async (obj: any, _args: any, ctx: any) => { +// const coverage = await fetchGenomeCoverageForRegion(ctx.esClient, obj.dataset, obj) +// return formatCoverageBins(coverage) +// } + +// const resolveCoverageInGene = async (obj: any, args: any, ctx: any) => { +// const coverage = await fetchCoverageForGene(ctx.esClient, args.dataset, obj) + +// return { +// exome: formatCoverageBins(coverage.exome), +// genome: formatCoverageBins(coverage.genome), +// } +// } + +const resolvers = { + Region: { + coverage: (obj: any, args: any) => { + if (obj.stop - obj.start >= 2.5e6) { + throw new UserVisibleError('Coverage is not available for a region this large') + } + return { ...obj, dataset: args.dataset } + }, + }, + RegionCoverage: { + track_callable: resolveTrackCallableCoverageInRegion, + }, + Gene: { + track_callable: resolveTrackCallableCoverageInGene, + }, +} + +export default resolvers diff --git a/graphql-api/src/graphql/types/gene.graphql b/graphql-api/src/graphql/types/gene.graphql index 5dbd91626..7b96e2beb 100644 --- a/graphql-api/src/graphql/types/gene.graphql +++ b/graphql-api/src/graphql/types/gene.graphql @@ -78,6 +78,7 @@ type Gene { coverage(dataset: DatasetId): FeatureCoverage! @cost(value: 5) mitochondrial_coverage(dataset: DatasetId!): [MitochondrialCoverageBin!] @cost(value: 5) + cnv_track_callable_coverage(dataset: CopyNumberVariantDatasetId!): [CNVTrackCallabeCoverageBin!] @cost(value: 5) short_tandem_repeats(dataset: DatasetId!): [ShortTandemRepeat!]! @cost(value: 5) heterozygous_variant_cooccurrence_counts: [HeterozygousVariantCooccurrenceCounts!]! diff --git a/graphql-api/src/queries/cnv-coverage-queries.ts b/graphql-api/src/queries/cnv-coverage-queries.ts new file mode 100644 index 000000000..480ce4fc1 --- /dev/null +++ b/graphql-api/src/queries/cnv-coverage-queries.ts @@ -0,0 +1,132 @@ +import { withCache } from '../cache' +import { UserVisibleError } from '../errors' + +import { extendRegions, mergeOverlappingRegions, totalRegionSize } from './helpers/region-helpers' + +import { assertDatasetAndReferenceGenomeMatch } from './helpers/validation-helpers' + +const COVERAGE_INDICES = { + gnomad_cnv_r4: { + track_callable: 'gnomad_v4_cnv_track_callable_coverage', + }, +} + +// ================================================================================================ +// Base query +// ================================================================================================ + +const fetchTrackCallableCoverage = async (esClient: any, { index, regions }: any) => { + try { + console.log('fetchtrackcallablecoverage') + const response = await esClient.search({ + index, + type: '_doc', + size: 0, + body: { + query: { + bool: { + filter: [ + { + bool: { + should: regions.map(({ start, stop }: any) => ({ + range: { xpos: { gte: start, lte: stop } }, + })), + }, + }, + ], + }, + }, + aggregations: { + chart: { + terms: { + field: 'xpos', + interval: 10000, + }, + aggregations: { + percent_callable: { avg: { field: 'percent_callable' } }, + }, + }, + }, + }, + }) + + return response.body.aggregations.chart.buckets.map((bucket: any) => ({ + pos: bucket.key, + percent_callable: [Math.ceil((bucket.percent_callable.value || 0) * 100) / 100], + })) + } catch (error) { + console.error('Error fetching coverage:', error) + throw error + } +} + +// ================================================================================================ +// Region queries +// ================================================================================================ + +export const fetchTrackCallableCoverageForRegion = (esClient: any, datasetId: any, region: any) => { + assertDatasetAndReferenceGenomeMatch(datasetId, region.reference_genome) + + if (!datasetId.startsWith('gnomad_cnv_')) { + throw new UserVisibleError('Track callabe coverage is not available for non-CNVs') + } + + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const trackCallableCoverageIndex = COVERAGE_INDICES[datasetId] + + const regionSize = region.stop - region.start + 150 + const bucketSize = Math.max(Math.floor(regionSize / 500), 1) + + return fetchTrackCallableCoverage(esClient, { + index: trackCallableCoverageIndex, + //contig: `chr${region.chrom}` , + regions: [{ start: region.start - 75, stop: region.stop + 75 }], + bucketSize, + }) +} + +// ================================================================================================ +// Gene query +// ================================================================================================ + +export const _fetchTrackCallableCoverageForGene = async ( + esClient: any, + datasetId: any, + gene: any +) => { + assertDatasetAndReferenceGenomeMatch(datasetId, gene.reference_genome) + console.log('fetch gene') + + if (!datasetId.startsWith('gnomad_cnv_')) { + throw new UserVisibleError('Track callabe coverage is not available for non-CNVs') + } + + const paddedExons = extendRegions(75, gene.exons) + console.log(paddedExons, 'paddedexons') + const mergedExons = mergeOverlappingRegions( + paddedExons.sort((a: any, b: any) => a.start - b.start) + ) + console.log(mergedExons, 'mergedExons') + + const totalIntervalSize = totalRegionSize(mergedExons) + const bucketSize = Math.max(Math.floor(totalIntervalSize / 500), 1) + + // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const trackCallableCoverageIndex = COVERAGE_INDICES[datasetId] + console.log(trackCallableCoverageIndex, 'trackCallableCoverageIndex') + + const trackCallableCoverage = await fetchTrackCallableCoverage(esClient, { + index: trackCallableCoverageIndex, + // contig: `chr${gene.chrom}`, + regions: mergedExons, + bucketSize, + }) + console.log(trackCallableCoverage, 'trackCallableCoverage') + + return { + track_callable: trackCallableCoverage, + } +} +export const fetchTrackCallableCoverageForGene = + _fetchTrackCallableCoverageForGene + From 9446351c02331a37616c1d219cc151e930c6316d Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Wed, 25 Oct 2023 10:38:41 -0400 Subject: [PATCH 45/62] add cnv coverage bin type --- .../graphql/types/copy-number-variant.graphql | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/graphql-api/src/graphql/types/copy-number-variant.graphql b/graphql-api/src/graphql/types/copy-number-variant.graphql index 8dc40a3e6..e4541e334 100644 --- a/graphql-api/src/graphql/types/copy-number-variant.graphql +++ b/graphql-api/src/graphql/types/copy-number-variant.graphql @@ -16,10 +16,10 @@ type CopyNumberVariant { length: Int pos: Int! type: String - posmin: Int! - posmax: Int! - endmin: Int! - endmax: Int! + posmin: Int + posmax: Int + endmin: Int + endmax: Int variant_id: String! } @@ -38,9 +38,14 @@ type CopyNumberVariantDetails { qual: Float reference_genome: ReferenceGenomeId! type: String - posmin: Int! - posmax: Int! - endmin: Int! - endmax: Int! + posmin: Int + posmax: Int + endmin: Int + endmax: Int variant_id: String! +} + +type CNVTrackCallabeCoverageBin { + pos: Float! + percent_callable: Float } \ No newline at end of file From f2376ea2ed1cda57c362c78a9b0df106d9c43c21 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 17:50:42 -0400 Subject: [PATCH 46/62] update metadata and sample counts --- dataset-metadata/datasets/gnomad-cnv-v4/sampleCounts.js | 5 +++++ dataset-metadata/metadata.ts | 2 +- dataset-metadata/sampleCounts.ts | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 dataset-metadata/datasets/gnomad-cnv-v4/sampleCounts.js diff --git a/dataset-metadata/datasets/gnomad-cnv-v4/sampleCounts.js b/dataset-metadata/datasets/gnomad-cnv-v4/sampleCounts.js new file mode 100644 index 000000000..ce2b38110 --- /dev/null +++ b/dataset-metadata/datasets/gnomad-cnv-v4/sampleCounts.js @@ -0,0 +1,5 @@ +const sampleCounts = { + total: 464566, + } + module.exports = sampleCounts + \ No newline at end of file diff --git a/dataset-metadata/metadata.ts b/dataset-metadata/metadata.ts index 017740b7e..cf42e29a8 100644 --- a/dataset-metadata/metadata.ts +++ b/dataset-metadata/metadata.ts @@ -18,7 +18,7 @@ export const datasetLabels = { gnomad_sv_r2_1_non_neuro: 'gnomAD SVs v2.1 (non-neuro)', gnomad_sv_r4: 'gnomAD SVs v4', gnomad_r4: '', //* TODO - gnomad_cnv_r4: "gnomAD CNVs v4.0.0", + gnomad_cnv_r4: "gnomAD exome CNVs v4.0", } as const export type DatasetId = keyof typeof datasetLabels diff --git a/dataset-metadata/sampleCounts.ts b/dataset-metadata/sampleCounts.ts index 494057632..a9e487757 100644 --- a/dataset-metadata/sampleCounts.ts +++ b/dataset-metadata/sampleCounts.ts @@ -11,6 +11,7 @@ const { subsets: gnomadSvV2SubsetSampleCounts, ...gnomadSvV2SampleCounts } = require('./datasets/gnomad-sv-v2/sampleCounts') +const gnomadCnvV4SubsetSampleCounts = require('./datasets/gnomad-cnv-v4/sampleCounts') const sampleCounts = [ { exac: exacSampleCounts }, @@ -27,6 +28,7 @@ const sampleCounts = [ [`gnomad_sv_r2_1_${subset}`]: gnomadSvV2SubsetSampleCounts[subset], })), { gnomad_sv_r4: { total: 63046 } }, + { gnomad_cnv_r4: gnomadCnvV4SubsetSampleCounts }, ].reduce(Object.assign, {}) export default sampleCounts From 10927899bfd434ea667c166104b84f06b9acc4d3 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 17:51:19 -0400 Subject: [PATCH 47/62] add final graphql edits --- graphql-api/src/datasets.ts | 4 +++ graphql-api/src/queries/coverage-queries.ts | 30 +++++++++++++++++++ .../src/queries/helpers/validation-helpers.ts | 6 ++++ 3 files changed, 40 insertions(+) diff --git a/graphql-api/src/datasets.ts b/graphql-api/src/datasets.ts index 2037b084e..be1934b9c 100644 --- a/graphql-api/src/datasets.ts +++ b/graphql-api/src/datasets.ts @@ -1,4 +1,6 @@ export const DATASET_LABELS = { + gnomad_r4: 'gnomAD v4', + gnomad_cnv_r4: 'gnomAD v4 cnv', gnomad_r3: 'gnomAD v3', gnomad_r3_controls_and_biobanks: 'gnomAD v3 (controls and biobanks)', gnomad_r3_non_cancer: 'gnomAD v3 (non-cancer)', @@ -14,6 +16,8 @@ export const DATASET_LABELS = { } export const DATASET_REFERENCE_GENOMES: Record = { + gnomad_r4: 'GRCh38', + gnomad_cnv_r4: 'GRCh38', gnomad_r3: 'GRCh38', gnomad_r3_controls_and_biobanks: 'GRCh38', gnomad_r3_non_cancer: 'GRCh38', diff --git a/graphql-api/src/queries/coverage-queries.ts b/graphql-api/src/queries/coverage-queries.ts index 3a320f8e8..6cc431700 100644 --- a/graphql-api/src/queries/coverage-queries.ts +++ b/graphql-api/src/queries/coverage-queries.ts @@ -6,6 +6,14 @@ import { extendRegions, mergeOverlappingRegions, totalRegionSize } from './helpe import { assertDatasetAndReferenceGenomeMatch } from './helpers/validation-helpers' const COVERAGE_INDICES = { + gnomad_cnv_r4: { + exome: 'gnomad_v4_exome_coverage', + genome: null, + }, + gnomad_r4: { + exome: 'gnomad_v4_exome_coverage', + genome: null, + }, gnomad_r3: { exome: null, genome: 'gnomad_v3_genome_coverage', @@ -68,6 +76,28 @@ const fetchCoverage = async (esClient: any, { index, contig, regions, bucketSize }, }) + console.log( + 'RESPONSE Hits of query COVERAGE', + response.body.aggregations.coverage.buckets.map((bucket: any) => ({ + pos: bucket.key, + mean: bucket.mean.value || 0, + median: bucket.median.value || 0, + + over_x: [ + // Round values + Math.ceil((bucket.over_1.value || 0) * 100) / 100, + Math.ceil((bucket.over_5.value || 0) * 100) / 100, + Math.ceil((bucket.over_10.value || 0) * 100) / 100, + Math.ceil((bucket.over_15.value || 0) * 100) / 100, + Math.ceil((bucket.over_20.value || 0) * 100) / 100, + Math.ceil((bucket.over_25.value || 0) * 100) / 100, + Math.ceil((bucket.over_30.value || 0) * 100) / 100, + Math.ceil((bucket.over_50.value || 0) * 100) / 100, + Math.ceil((bucket.over_100.value || 0) * 100) / 100, + ], + })) + ) + return response.body.aggregations.coverage.buckets.map((bucket: any) => ({ pos: bucket.key, mean: bucket.mean.value || 0, diff --git a/graphql-api/src/queries/helpers/validation-helpers.ts b/graphql-api/src/queries/helpers/validation-helpers.ts index 34e9bae6f..9a5ac7dbf 100644 --- a/graphql-api/src/queries/helpers/validation-helpers.ts +++ b/graphql-api/src/queries/helpers/validation-helpers.ts @@ -2,6 +2,12 @@ import { DATASET_LABELS, DATASET_REFERENCE_GENOMES } from '../../datasets' import { UserVisibleError } from '../../errors' export const assertDatasetAndReferenceGenomeMatch = (datasetId: any, referenceGenome: any) => { + if (!(datasetId in DATASET_LABELS)) { + throw new UserVisibleError( + `Dataset with id ${datasetId} does not exist` + ) + } + if (DATASET_REFERENCE_GENOMES[datasetId] !== referenceGenome) { throw new UserVisibleError( // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message From 9fb2d64ed578335b4fbea51dd2dc14b29ad3143a Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 17:51:56 -0400 Subject: [PATCH 48/62] fix pipeline edits --- .../datasets/gnomad_v4/gnomad_v4_cnvs.py | 2 +- .../pipelines/export_to_elasticsearch.py | 46 +++++++++++++++++++ .../data_pipeline/pipelines/gnomad_v4_cnvs.py | 2 +- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py index eed025f38..869b12224 100644 --- a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnvs.py @@ -23,7 +23,7 @@ def prepare_gnomad_v4_cnvs(vcf_path): ds = hl.import_vcf(vcf_path, force_bgz=True, min_partitions=32, reference_genome="GRCh38").rows() ds = ds.annotate( - variant_id=ds.rsid.replace("^variantbs80_", ""), + variant_id=ds.rsid.replace("^GD_", "").replace("^variant_is_80_", ""), reference_genome="GRCh38", # Start chrom=ds.locus.contig.replace("chr", ""), diff --git a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py index a1c4b00d0..be674106f 100644 --- a/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py +++ b/data-pipeline/src/data_pipeline/pipelines/export_to_elasticsearch.py @@ -39,6 +39,13 @@ from data_pipeline.pipelines.gnomad_v4_cnvs import pipeline as gnomad_v4_cnvs_pipeline +from data_pipeline.pipelines.gnomad_v4_cnv_track_percent_callable import pipeline as gnomad_v4_cnv_coverage_pipeline + +from data_pipeline.pipelines.gnomad_v4_cnv_del_burden import pipeline as gnomad_v4_cnv_del_burden + +from data_pipeline.pipelines.gnomad_v4_cnv_dup_burden import pipeline as gnomad_v4_cnv_dup_burden + + logger = logging.getLogger("gnomad_data_pipeline") @@ -119,6 +126,45 @@ def add_liftover_document_id(ds): "block_size": 1_000, }, }, + "gnomad_v4_exome_coverage": { + "get_table": lambda: hl.read_table( + "gs://gnomad-matt-data-pipeline/gnomad_v4_coverage_test_2023-10-12-1142/gnomad_v4_exome_coverage.ht" + ), + "args": {"index": "gnomad_v4_exome_coverage", "id_field": "xpos", "num_shards": 2, "block_size": 10_000}, + }, + "gnomad_v4_cnv_track_callable": { + "get_table": lambda: subset_table( + hl.read_table(gnomad_v4_cnv_coverage_pipeline.get_output("track_percent_callable").get_output_path()) + ), + "args": { + "index": "gnomad_v4_cnv_track_callable", + "id_field": "xpos", + "num_shards": 2, + "block_size": 10_000, + }, + }, + "gnomad_v4_cnv_del_burden": { + "get_table": lambda: subset_table( + hl.read_table(gnomad_v4_cnv_del_burden.get_output("del_burden").get_output_path()) + ), + "args": { + "index": "gnomad_v4_cnv_del_burden", + "id_field": "xpos", + "num_shards": 2, + "block_size": 10_000, + }, + }, + "gnomad_v4_cnv_dup_burden": { + "get_table": lambda: subset_table( + hl.read_table(gnomad_v4_cnv_dup_burden.get_output("dup_burden").get_output_path()) + ), + "args": { + "index": "gnomad_v4_cnv_dup_burden", + "id_field": "xpos", + "num_shards": 2, + "block_size": 10_000, + }, + }, ############################################################################################################## # gnomAD v3 ############################################################################################################## diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py index 42e21586d..0c4643b63 100644 --- a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnvs.py @@ -14,7 +14,7 @@ prepare_gnomad_v4_cnvs, "/gnomad_v4/gnomad_v4_cnvs/cnvs.ht", { - "vcf_path": "gs://gnomad-v4-cnvs/2023-09-07-jfu-test4/GNOMAD_V4.4.3_browser_prototype_1.1.vcf.gz", + "vcf_path": "gs://gnomad-v4-cnvs/2023-10-24-jfu/GNOMAD_V4_release_1.0.vcf.gz", }, ) From fa089585c74b9370d006caf5881fac587a494ec2 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 17:52:56 -0400 Subject: [PATCH 49/62] Final Gene and Region Page edits for CNV --- .../CopyNumberVariantFilterControls.tsx | 102 ++++++ .../CopyNumberVariantPlot.tsx | 99 ++++++ .../CopyNumberVariantPropType.ts | 61 ++++ .../CopyNumberVariantTracks.tsx | 128 ++++++++ .../CopyNumberVariants.tsx | 309 ++++++++++++++++++ .../CopyNumberVariantsTable.tsx | 51 +++ .../ExportCopyNumberVariantsButton.tsx | 105 ++++++ .../copyNumberVariantTableColumns.tsx | 142 ++++++++ .../filterCopyNumberVariants.ts | 40 +++ .../CNVPopulationsTable.tsx | 6 +- .../CNVReferenceList.tsx | 2 +- .../CopyNumberVariantAttributeList.tsx | 5 +- .../CopyNumberVariantPage.tsx | 19 -- .../CopyNumberVariantPopulationsTable.tsx | 2 +- browser/src/DatasetSelector.tsx | 71 ++-- .../src/GenePage/CopyNumberVariantsInGene.tsx | 91 ++++++ browser/src/GenePage/VariantsInGene.tsx | 64 ++-- .../RegionPage/CopyNumberVariantsInRegion.tsx | 96 ++++++ browser/src/Searchbox.tsx | 2 +- 19 files changed, 1306 insertions(+), 89 deletions(-) create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariantFilterControls.tsx create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariantPlot.tsx create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariantPropType.ts create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariantTracks.tsx create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariants.tsx create mode 100644 browser/src/CopyNumberVariantList/CopyNumberVariantsTable.tsx create mode 100644 browser/src/CopyNumberVariantList/ExportCopyNumberVariantsButton.tsx create mode 100644 browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx create mode 100644 browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts create mode 100644 browser/src/GenePage/CopyNumberVariantsInGene.tsx create mode 100644 browser/src/RegionPage/CopyNumberVariantsInRegion.tsx 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.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx new file mode 100644 index 000000000..f9b5aea61 --- /dev/null +++ b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx @@ -0,0 +1,309 @@ +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, SegmentedControl } 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 ControlWrapper = styled(Wrapper)` + display: flex; + justify-content: flex-end; + align-items: center; + + @media (min-width: 900px) { + margin-right: 160px; + } +` + +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))) + } + }, []) + + const [colorKey, setColorKey] = useState('type') + const trackColor = useCallback( + // @ts-expect-error TS(7006) FIXME: Parameter 'variant' implicitly has an 'any' type. + (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/copyNumberVariantTableColumns.tsx b/browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx new file mode 100644 index 000000000..447523e07 --- /dev/null +++ b/browser/src/CopyNumberVariantList/copyNumberVariantTableColumns.tsx @@ -0,0 +1,142 @@ +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: CopyNumberVariant) => variant.type === 'DEL' || 'DUP', + 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.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/filterCopyNumberVariants.ts b/browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts new file mode 100644 index 000000000..14e9f2ff2 --- /dev/null +++ b/browser/src/CopyNumberVariantList/filterCopyNumberVariants.ts @@ -0,0 +1,40 @@ +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 index ef870e676..ffcf1921a 100644 --- a/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx +++ b/browser/src/CopyNumberVariantPage/CNVPopulationsTable.tsx @@ -250,7 +250,7 @@ export class CNVPopulationsTable extends Component< {this.renderColumnHeader({ key: 'sc', label: columnLabels.sc || 'SC', - tooltip: 'Alternate allele count in high quality genotypes', // TODO + tooltip: 'Number of individuals that carry this variant', props: { className: 'right-align', }, @@ -258,7 +258,7 @@ export class CNVPopulationsTable extends Component< {this.renderColumnHeader({ key: 'sn', label: columnLabels.sn || 'SN', - tooltip: 'Total number of called high quality genotypes', // TODO + tooltip: 'Number of individuals that have a non-null genotype', props: { className: 'right-align', }, @@ -266,7 +266,7 @@ export class CNVPopulationsTable extends Component< {this.renderColumnHeader({ key: 'sf', label: columnLabels.sf || 'SF', - tooltip: 'Total number of called high quality genotypes', // TODO + tooltip: 'Proportion of individuals carrying this variant', props: { className: 'right-align', }, diff --git a/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx b/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx index 4261790a0..2308ebcb0 100644 --- a/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx +++ b/browser/src/CopyNumberVariantPage/CNVReferenceList.tsx @@ -5,7 +5,7 @@ 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=hg19&position=chr${chrom}%3A${pos}-${end}` + `https://genome.ucsc.edu/cgi-bin/hgTracks?db=hg38&position=chr${chrom}%3A${pos}-${end}` type CNVUCSCLinksProps = { variant: CopyNumberVariant diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx index 514305818..eb82cf630 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -45,7 +45,7 @@ const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeL {/* @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} + {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)} @@ -64,8 +64,9 @@ const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeL {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} + {console.log(variant.type)} {/* @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]} + {cnvTypeLabels[variant.type]} {/* TODO: ADD INFOBUTTONS*/} ) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx index b6b376a18..9cc9a7e11 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -89,25 +89,6 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp

Population Frequencies

- - {/* - - -

- Age Distribution -

- {variant.age_distribution ? ( - - {datasetId !== 'gnomad_sv_r2_1' && ( -

Age distribution is based on the full SV dataset, not the selected subset.

- )} - -
- ) : ( -

Age data is not available for this variant.

- )} -
-
*/}
) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx index 90b42d6a7..9a17b8fff 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPopulationsTable.tsx @@ -70,7 +70,7 @@ const CopyNumberVariantPopulationsTable = ({ variant }: CopyNumberVariantPopulat const columnLabels = { sc: 'Site Count', - sn: 'Number of Sites', + sn: 'Number at Site', sf: 'Site Frequency', } diff --git a/browser/src/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 66d0eb520..6b1b2e444 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -586,17 +586,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), + id: 'current_sv_or_cnv_dataset', + 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: [ { @@ -627,38 +639,35 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } description: `${sampleCounts.gnomad_sv_r2_1_controls.total.toLocaleString()} samples`, childReferenceGenome: referenceGenome('gnomad_sv_r2_1_controls'), }, - ], - } - ) - } - - if (includeCopyNumberVariants) { - const topLevelCopyNumberVariantDataset = hasCopyNumberVariants(selectedDataset) - ? selectedDataset - : 'gnomad_cnv_r4' - - datasets.push( - { - id: 'current_cnv_dataset', - isActive: hasCopyNumberVariants(selectedDataset), - label: labelForDataset(topLevelCopyNumberVariantDataset), - url: datasetLink(topLevelCopyNumberVariantDataset), - }, - { - id: 'other_cnv_variant', - isActive: hasCopyNumberVariants(selectedDataset), - label: 'More datasets', - children: [ { id: 'gnomad_cnv_r4', label: labelForDataset('gnomad_cnv_r4'), url: datasetLink('gnomad_cnv_r4'), - description: `samples`, - // description: `${sampleCounts.gnomad_cnv_r4.total.toLocaleString()} samples`, + description: `${sampleCounts.gnomad_cnv_r4.total.toLocaleString()} samples`, childReferenceGenome: referenceGenome('gnomad_cnv_r4'), }, ], - } + }, + // { + // id: 'current_cnv_dataset', + // isActive: hasCopyNumberVariants(selectedDataset), + // label: labelForDataset(topLevelCopyNumberVariantDataset), + // url: datasetLink(topLevelCopyNumberVariantDataset), + // }, + // { + // id: 'other_cnv_variant', + // isActive: hasCopyNumberVariants(selectedDataset), + // label: 'More datasets', + // children: [ + // { + // 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'), + // }, + // ], + // } ) } 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/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/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/Searchbox.tsx b/browser/src/Searchbox.tsx index d675dc0c5..94b6a2c75 100644 --- a/browser/src/Searchbox.tsx +++ b/browser/src/Searchbox.tsx @@ -89,7 +89,7 @@ export default withRouter((props: any) => { - + From a603cedb6d75a702892a932016fb37ec8447bbf0 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 18:12:52 -0400 Subject: [PATCH 50/62] eslint pass --- .../CopyNumberVariants.tsx | 13 +++------- .../CopyNumberVariantAttributeList.tsx | 4 +-- browser/src/CoverageTrack.tsx | 2 +- browser/src/GenePage/GeneCoverageTrack.tsx | 1 - browser/src/GenePage/GenePage.spec.tsx | 3 +-- browser/src/GenePage/GenePage.tsx | 1 + browser/src/RegionPage/RegionPage.tsx | 1 - .../gnomad_v4/gnomad_v4_cnv_del_burden.py | 9 +++++++ .../gnomad_v4/gnomad_v4_cnv_dup_burden.py | 9 +++++++ .../gnomad_v4_cnv_track_percent_callable.py | 11 ++++++++ .../pipelines/gnomad_v4_cnv_del_burden.py | 26 +++++++++++++++++++ .../pipelines/gnomad_v4_cnv_dup_burden.py | 26 +++++++++++++++++++ .../gnomad_v4_cnv_track_percent_callable.py | 26 +++++++++++++++++++ 13 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_del_burden.py create mode 100644 data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_dup_burden.py create mode 100644 data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_track_percent_callable.py create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_del_burden.py create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_dup_burden.py create mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_track_percent_callable.py diff --git a/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx index f9b5aea61..474086b13 100644 --- a/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx +++ b/browser/src/CopyNumberVariantList/CopyNumberVariants.tsx @@ -3,7 +3,7 @@ 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, SegmentedControl } from '@gnomad/ui' +import { Button } from '@gnomad/ui' import { showNotification } from '../Notifications' import StatusMessage from '../StatusMessage' @@ -31,15 +31,6 @@ const Wrapper = styled.div` margin-bottom: 1em; ` -const ControlWrapper = styled(Wrapper)` - display: flex; - justify-content: flex-end; - align-items: center; - - @media (min-width: 900px) { - margin-right: 160px; - } -` const HUMAN_CHROMOSOMES = [...Array.from(new Array(22), (x: any, i: any) => `${i + 1}`), 'X', 'Y'] @@ -167,9 +158,11 @@ const CopyNumberVariants = ({ context, exportFileName, variants }: CopyNumberVar } }, []) + // 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 diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx index eb82cf630..48e18e5e5 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -3,7 +3,6 @@ import React from 'react' import { Badge } from '@gnomad/ui' import AttributeList from '../AttributeList' -import InfoButton from '../help/InfoButton' import Link from '../Link' import { cnvTypeLabels } from '../CopyNumberVariantList/copyNumberVariantTypes' import { CopyNumberVariant } from './CopyNumberVariantPage' @@ -64,9 +63,8 @@ const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeL {/* @ts-expect-error TS(2604) FIXME: JSX element type 'AttributeList.Item' does not hav... Remove this comment to see the full error message */} - {console.log(variant.type)} {/* @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]} {/* TODO: ADD INFOBUTTONS*/} + {cnvTypeLabels[variant.type]} ) 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/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 872123c64..2a77958cf 100644 --- a/browser/src/GenePage/GenePage.spec.tsx +++ b/browser/src/GenePage/GenePage.spec.tsx @@ -253,5 +253,4 @@ describe.each([ expectedIncludeShortTandemRepeats ) }) - } -) + }) diff --git a/browser/src/GenePage/GenePage.tsx b/browser/src/GenePage/GenePage.tsx index e1bdaba3e..b629c054c 100644 --- a/browser/src/GenePage/GenePage.tsx +++ b/browser/src/GenePage/GenePage.tsx @@ -592,6 +592,7 @@ 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/RegionPage/RegionPage.tsx b/browser/src/RegionPage/RegionPage.tsx index b8d864e8c..534cd5260 100644 --- a/browser/src/RegionPage/RegionPage.tsx +++ b/browser/src/RegionPage/RegionPage.tsx @@ -11,7 +11,6 @@ import { regionsHaveGenomeCoverage, isSVs, isV4CNVs, - hasCopyNumberVariants, } from '@gnomad/dataset-metadata/metadata' import DocumentTitle from '../DocumentTitle' import GnomadPageHeading from '../GnomadPageHeading' diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_del_burden.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_del_burden.py new file mode 100644 index 000000000..c5ca244fd --- /dev/null +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_del_burden.py @@ -0,0 +1,9 @@ +import hail as hl + + +def prepare_cnv_del_burden(burden_path): + del_burden = hl.import_table(burden_path, force_bgz=True, types={"xpos": hl.tfloat64, "burden_del": hl.tfloat64}) + + del_burden = del_burden.select("xpos", "burden_del") + + return del_burden diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_dup_burden.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_dup_burden.py new file mode 100644 index 000000000..1a7d3aade --- /dev/null +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_dup_burden.py @@ -0,0 +1,9 @@ +import hail as hl + + +def prepare_cnv_dup_burden(burden_path): + dup_burden = hl.import_table(burden_path, force_bgz=True, types={"xpos": hl.tfloat64, "burden_dup": hl.tfloat64}) + + dup_burden = dup_burden.select("xpos", "burden_dup") + + return dup_burden diff --git a/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_track_percent_callable.py b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_track_percent_callable.py new file mode 100644 index 000000000..a2febc302 --- /dev/null +++ b/data-pipeline/src/data_pipeline/datasets/gnomad_v4/gnomad_v4_cnv_track_percent_callable.py @@ -0,0 +1,11 @@ +import hail as hl + + +def prepare_cnv_track_callable(coverage_path): + coverage = hl.import_table( + coverage_path, force_bgz=True, types={"xpos": hl.tfloat64, "percent_callable": hl.tfloat64} + ) + + coverage = coverage.select("xpos", "percent_callable") + + return coverage diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_del_burden.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_del_burden.py new file mode 100644 index 000000000..5b717656a --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_del_burden.py @@ -0,0 +1,26 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnv_del_burden import prepare_cnv_del_burden + + +pipeline = Pipeline() + +pipeline.add_task( + "prepare_gnomad_v4_cnv_del_burden", + prepare_cnv_del_burden, + "/gnomad_v4/gnomad_v4_cnvs/cnv_tracks/del_burden.ht", + {"burden_path": "gs://gnomad-v4-cnvs/2023-10-24jfu/burden_del_1.0.txt.gz"}, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"del_burden": "prepare_gnomad_v4_cnv_del_burden"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_dup_burden.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_dup_burden.py new file mode 100644 index 000000000..3c82b16f0 --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_dup_burden.py @@ -0,0 +1,26 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnv_dup_burden import prepare_cnv_dup_burden + + +pipeline = Pipeline() + +pipeline.add_task( + "prepare_gnomad_v4_cnv_dup_burden", + prepare_cnv_dup_burden, + "/gnomad_v4/gnomad_v4_cnvs/cnv_tracks/dup_burden.ht", + {"burden_path": "gs://gnomad-v4-cnvs/2023-10-24jfu/burden_dup_1.0.txt.gz"}, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"dup_burden": "prepare_gnomad_v4_cnv_dup_burden"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_track_percent_callable.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_track_percent_callable.py new file mode 100644 index 000000000..7cd44dcf9 --- /dev/null +++ b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_track_percent_callable.py @@ -0,0 +1,26 @@ +from data_pipeline.pipeline import Pipeline, run_pipeline + +from data_pipeline.datasets.gnomad_v4.gnomad_v4_cnv_track_percent_callable import prepare_cnv_track_callable + + +pipeline = Pipeline() + +pipeline.add_task( + "prepare_gnomad_v4_cnvs_track_percent_callable", + prepare_cnv_track_callable, + "/gnomad_v4/gnomad_v4_cnvs/cnv_tracks/track_percent_callable.ht", + {"coverage_path": "gs://gnomad-v4-cnvs/2023-10-24jfu/track_percent_callable.tsv.gz"}, +) + +############################################### +# Outputs +############################################### + +pipeline.set_outputs({"track_percent_callable": "prepare_gnomad_v4_cnvs_track_percent_callable"}) + +############################################### +# Run +############################################### + +if __name__ == "__main__": + run_pipeline(pipeline) From b1fabcdf373dc573b6948c4cdd7368e56254706d Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 18:15:16 -0400 Subject: [PATCH 51/62] remove inital coverage files --- browser/help/topics/dataset-selection.md | 6 +++++ .../data_pipeline/data_types/cnv_coverage.py | 13 ---------- .../pipelines/gnomad_v4_cnv_coverage.py | 26 ------------------- .../gnomad_v4_copy_number_variant_coverage.py | 26 ------------------- 4 files changed, 6 insertions(+), 65 deletions(-) delete mode 100644 data-pipeline/src/data_pipeline/data_types/cnv_coverage.py delete mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py delete mode 100644 data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py diff --git a/browser/help/topics/dataset-selection.md b/browser/help/topics/dataset-selection.md index 486d6880b..7e4d6f7e4 100644 --- a/browser/help/topics/dataset-selection.md +++ b/browser/help/topics/dataset-selection.md @@ -56,3 +56,9 @@ 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._ + +### Copy number variants + ++ gnomAD exome CNVs v4.0: Copy number variant (CNV) calls generated from a set of ES samples that largely overlaps those in gnomAD v4. This current CNV release includes 464,566 unrelated exomes + +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/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py b/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py deleted file mode 100644 index cafe0fb88..000000000 --- a/data-pipeline/src/data_pipeline/data_types/cnv_coverage.py +++ /dev/null @@ -1,13 +0,0 @@ -import hail as hl - - - -def prepare_cnv_track_callable_coverage(coverage_path): - coverage = hl.import_table(coverage_path, force_bgz=True, types={'xpos': hl.tfloat64, 'percent_callable': hl.tfloat64}) - - coverage = coverage.select( - "xpos", - "percent_callable" - ) - - return coverage diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py deleted file mode 100644 index eebeaa996..000000000 --- a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_cnv_coverage.py +++ /dev/null @@ -1,26 +0,0 @@ -from data_pipeline.pipeline import Pipeline, run_pipeline - -from data_pipeline.data_types.cnv_coverage import prepare_cnv_track_callable_coverage - - -pipeline = Pipeline() - -pipeline.add_task( - "prepare_gnomad_v4_cnvs_track_percent_callable_coverage", - prepare_cnv_track_callable_coverage, - "/gnomad_v4/gnomad_v4_cnvs/coverage_tracks/track_percent_callable.ht", - {"coverage_path": "gs://gnomad-v4-cnvs/coverage_tracks/track_percent_callable.tsv.gz"}, -) - -############################################### -# Outputs -############################################### - -pipeline.set_outputs({"track_percent_callable_coverage": "prepare_gnomad_v4_cnvs_track_percent_callable_coverage"}) - -############################################### -# Run -############################################### - -if __name__ == "__main__": - run_pipeline(pipeline) diff --git a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py b/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py deleted file mode 100644 index eebeaa996..000000000 --- a/data-pipeline/src/data_pipeline/pipelines/gnomad_v4_copy_number_variant_coverage.py +++ /dev/null @@ -1,26 +0,0 @@ -from data_pipeline.pipeline import Pipeline, run_pipeline - -from data_pipeline.data_types.cnv_coverage import prepare_cnv_track_callable_coverage - - -pipeline = Pipeline() - -pipeline.add_task( - "prepare_gnomad_v4_cnvs_track_percent_callable_coverage", - prepare_cnv_track_callable_coverage, - "/gnomad_v4/gnomad_v4_cnvs/coverage_tracks/track_percent_callable.ht", - {"coverage_path": "gs://gnomad-v4-cnvs/coverage_tracks/track_percent_callable.tsv.gz"}, -) - -############################################### -# Outputs -############################################### - -pipeline.set_outputs({"track_percent_callable_coverage": "prepare_gnomad_v4_cnvs_track_percent_callable_coverage"}) - -############################################### -# Run -############################################### - -if __name__ == "__main__": - run_pipeline(pipeline) From 004ba1e36110bd30c0ec02b599a13f77c91aca3f Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Thu, 26 Oct 2023 18:15:35 -0400 Subject: [PATCH 52/62] coverage edits --- .../src/graphql/resolvers/cnv-coverage.ts | 51 +++++------- graphql-api/src/graphql/schema.ts | 4 + .../graphql/types/copy-number-variant.graphql | 4 +- graphql-api/src/graphql/types/gene.graphql | 2 +- .../src/queries/cnv-coverage-queries.ts | 77 +++++++------------ graphql-api/src/queries/coverage-queries.ts | 21 ----- 6 files changed, 52 insertions(+), 107 deletions(-) diff --git a/graphql-api/src/graphql/resolvers/cnv-coverage.ts b/graphql-api/src/graphql/resolvers/cnv-coverage.ts index 1f9b08bcc..f1c9664c9 100644 --- a/graphql-api/src/graphql/resolvers/cnv-coverage.ts +++ b/graphql-api/src/graphql/resolvers/cnv-coverage.ts @@ -1,6 +1,4 @@ -import { UserVisibleError } from '../../errors' import { - fetchTrackCallableCoverageForRegion, fetchTrackCallableCoverageForGene, } from '../../queries/cnv-coverage-queries' @@ -20,27 +18,16 @@ import { // over_100: bin.over_x[8], // })) -const formatTrackCallableCoverageBins = (bins: any) => - bins.map((bin: any) => ({ - pos: bin.pos, - percent_callable: bin[0], - })) -const resolveTrackCallableCoverageInRegion = async (obj: any, _args: any, ctx: any) => { - const coverage = await fetchTrackCallableCoverageForRegion(ctx.esClient, obj.dataset, obj) - return formatTrackCallableCoverageBins(coverage) -} +// const resolveTrackCallableCoverageInRegion = async (obj: any, _args: any, ctx: any) => { +// const coverage = await fetchTrackCallableCoverageForRegion(ctx.esClient, obj.dataset, obj) +// return formatTrackCallableCoverageBins(coverage) +// } -const resolveTrackCallableCoverageInGene = async (obj: any, _args: any, ctx: any) => { - try { - console.log("fetchTrackCallableCoverageForGene In Resolver") - const coverage = await fetchTrackCallableCoverageForGene(ctx.esClient, obj.dataset, obj) - return formatTrackCallableCoverageBins(coverage) - } catch (e) { - console.error('Error resolver coverager:', e) - throw e +const resolveTrackCallableCoverageInGene = async (obj: any, args: any, ctx: any) => { + // Call your data fetching function + return fetchTrackCallableCoverageForGene(ctx.esClient, args.dataset, obj); } -} // const resolveGenomeCoverageInRegion = async (obj: any, _args: any, ctx: any) => { // const coverage = await fetchGenomeCoverageForRegion(ctx.esClient, obj.dataset, obj) @@ -57,19 +44,19 @@ const resolveTrackCallableCoverageInGene = async (obj: any, _args: any, ctx: any // } const resolvers = { - Region: { - coverage: (obj: any, args: any) => { - if (obj.stop - obj.start >= 2.5e6) { - throw new UserVisibleError('Coverage is not available for a region this large') - } - return { ...obj, dataset: args.dataset } - }, - }, - RegionCoverage: { - track_callable: resolveTrackCallableCoverageInRegion, - }, +// Region: { +// coverage: (obj: any, args: any) => { +// if (obj.stop - obj.start >= 2.5e6) { +// throw new UserVisibleError('Coverage is not available for a region this large') +// } +// return { ...obj, dataset: args.dataset } +// }, +// }, +// RegionCoverage: { +// track_callable: resolveTrackCallableCoverageInRegion, +// }, Gene: { - track_callable: resolveTrackCallableCoverageInGene, + cnv_track_callable_coverage: resolveTrackCallableCoverageInGene, }, } diff --git a/graphql-api/src/graphql/schema.ts b/graphql-api/src/graphql/schema.ts index 8bf0a294e..f27811d6c 100644 --- a/graphql-api/src/graphql/schema.ts +++ b/graphql-api/src/graphql/schema.ts @@ -24,18 +24,22 @@ import transcriptFieldResolvers from './resolvers/transcript-fields' import variantResolvers from './resolvers/variants' import variantFieldResolvers from './resolvers/variant-fields' import variantCooccurrenceResolvers from './resolvers/variant-cooccurrence' +import cnvCoverageResolvers from './resolvers/cnv-coverage' const typeDefs = mergeTypeDefs([ ...loadFilesSync(path.join(__dirname, './types')), 'directive @cost(value: Int!, multipliers: [String!]) on FIELD_DEFINITION', ]) + + const resolvers = mergeResolvers([ aliasResolvers, browserMetadataResolvers, clinVarVariantResolvers, clinVarVariantFieldResolvers, copyNumberVariantResolvers, + cnvCoverageResolvers, coverageResolvers, geneResolvers, geneFieldResolvers, diff --git a/graphql-api/src/graphql/types/copy-number-variant.graphql b/graphql-api/src/graphql/types/copy-number-variant.graphql index e4541e334..f9fe1af07 100644 --- a/graphql-api/src/graphql/types/copy-number-variant.graphql +++ b/graphql-api/src/graphql/types/copy-number-variant.graphql @@ -45,7 +45,7 @@ type CopyNumberVariantDetails { variant_id: String! } -type CNVTrackCallabeCoverageBin { - pos: Float! +type CNVTrackCallableCoverageBin { + xpos: Float! percent_callable: Float } \ No newline at end of file diff --git a/graphql-api/src/graphql/types/gene.graphql b/graphql-api/src/graphql/types/gene.graphql index 7b96e2beb..dfd7bd187 100644 --- a/graphql-api/src/graphql/types/gene.graphql +++ b/graphql-api/src/graphql/types/gene.graphql @@ -78,7 +78,7 @@ type Gene { coverage(dataset: DatasetId): FeatureCoverage! @cost(value: 5) mitochondrial_coverage(dataset: DatasetId!): [MitochondrialCoverageBin!] @cost(value: 5) - cnv_track_callable_coverage(dataset: CopyNumberVariantDatasetId!): [CNVTrackCallabeCoverageBin!] @cost(value: 5) + cnv_track_callable_coverage(dataset: CopyNumberVariantDatasetId!): [CNVTrackCallableCoverageBin!] @cost(value: 5) short_tandem_repeats(dataset: DatasetId!): [ShortTandemRepeat!]! @cost(value: 5) heterozygous_variant_cooccurrence_counts: [HeterozygousVariantCooccurrenceCounts!]! diff --git a/graphql-api/src/queries/cnv-coverage-queries.ts b/graphql-api/src/queries/cnv-coverage-queries.ts index 480ce4fc1..df63f93e9 100644 --- a/graphql-api/src/queries/cnv-coverage-queries.ts +++ b/graphql-api/src/queries/cnv-coverage-queries.ts @@ -1,4 +1,3 @@ -import { withCache } from '../cache' import { UserVisibleError } from '../errors' import { extendRegions, mergeOverlappingRegions, totalRegionSize } from './helpers/region-helpers' @@ -15,49 +14,33 @@ const COVERAGE_INDICES = { // Base query // ================================================================================================ -const fetchTrackCallableCoverage = async (esClient: any, { index, regions }: any) => { - try { - console.log('fetchtrackcallablecoverage') - const response = await esClient.search({ - index, - type: '_doc', - size: 0, - body: { - query: { - bool: { - filter: [ - { - bool: { - should: regions.map(({ start, stop }: any) => ({ - range: { xpos: { gte: start, lte: stop } }, - })), - }, - }, - ], - }, - }, - aggregations: { - chart: { - terms: { - field: 'xpos', - interval: 10000, - }, - aggregations: { - percent_callable: { avg: { field: 'percent_callable' } }, +const fetchTrackCallableCoverage = async (esClient: any, { regions }: any) => { + const requestBody = { + query: { + bool: { + filter: [ + { + bool: { + should: regions.map(({ xstart, xstop }: any) => ({ + range: { xpos: { gte: xstart, lte: xstop } }, + })), }, }, - }, + ], }, - }) - - return response.body.aggregations.chart.buckets.map((bucket: any) => ({ - pos: bucket.key, - percent_callable: [Math.ceil((bucket.percent_callable.value || 0) * 100) / 100], - })) - } catch (error) { - console.error('Error fetching coverage:', error) - throw error + }, } + + const response = await esClient.search({ + index: 'gnomad_v4_cnv_track_callable_coverage', + type: '_doc', + size: 2, + body: requestBody, + }) + return response.body.hits.hits.map((hit: any) => ({ + xpos: parseFloat(hit._source.xpos), + percent_callable: Math.ceil((hit._source.percent_callable || 0) * 100) / 100, + })) } // ================================================================================================ @@ -79,7 +62,6 @@ export const fetchTrackCallableCoverageForRegion = (esClient: any, datasetId: an return fetchTrackCallableCoverage(esClient, { index: trackCallableCoverageIndex, - //contig: `chr${region.chrom}` , regions: [{ start: region.start - 75, stop: region.stop + 75 }], bucketSize, }) @@ -95,38 +77,31 @@ export const _fetchTrackCallableCoverageForGene = async ( gene: any ) => { assertDatasetAndReferenceGenomeMatch(datasetId, gene.reference_genome) - console.log('fetch gene') if (!datasetId.startsWith('gnomad_cnv_')) { throw new UserVisibleError('Track callabe coverage is not available for non-CNVs') } const paddedExons = extendRegions(75, gene.exons) - console.log(paddedExons, 'paddedexons') + const mergedExons = mergeOverlappingRegions( paddedExons.sort((a: any, b: any) => a.start - b.start) ) - console.log(mergedExons, 'mergedExons') const totalIntervalSize = totalRegionSize(mergedExons) const bucketSize = Math.max(Math.floor(totalIntervalSize / 500), 1) // @ts-expect-error TS(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const trackCallableCoverageIndex = COVERAGE_INDICES[datasetId] - console.log(trackCallableCoverageIndex, 'trackCallableCoverageIndex') - const trackCallableCoverage = await fetchTrackCallableCoverage(esClient, { index: trackCallableCoverageIndex, - // contig: `chr${gene.chrom}`, regions: mergedExons, bucketSize, }) - console.log(trackCallableCoverage, 'trackCallableCoverage') return { - track_callable: trackCallableCoverage, + cnv_track_callable_coverage: trackCallableCoverage || [], } } -export const fetchTrackCallableCoverageForGene = - _fetchTrackCallableCoverageForGene +export const fetchTrackCallableCoverageForGene = _fetchTrackCallableCoverageForGene diff --git a/graphql-api/src/queries/coverage-queries.ts b/graphql-api/src/queries/coverage-queries.ts index 6cc431700..6e3ed9dba 100644 --- a/graphql-api/src/queries/coverage-queries.ts +++ b/graphql-api/src/queries/coverage-queries.ts @@ -76,27 +76,6 @@ const fetchCoverage = async (esClient: any, { index, contig, regions, bucketSize }, }) - console.log( - 'RESPONSE Hits of query COVERAGE', - response.body.aggregations.coverage.buckets.map((bucket: any) => ({ - pos: bucket.key, - mean: bucket.mean.value || 0, - median: bucket.median.value || 0, - - over_x: [ - // Round values - Math.ceil((bucket.over_1.value || 0) * 100) / 100, - Math.ceil((bucket.over_5.value || 0) * 100) / 100, - Math.ceil((bucket.over_10.value || 0) * 100) / 100, - Math.ceil((bucket.over_15.value || 0) * 100) / 100, - Math.ceil((bucket.over_20.value || 0) * 100) / 100, - Math.ceil((bucket.over_25.value || 0) * 100) / 100, - Math.ceil((bucket.over_30.value || 0) * 100) / 100, - Math.ceil((bucket.over_50.value || 0) * 100) / 100, - Math.ceil((bucket.over_100.value || 0) * 100) / 100, - ], - })) - ) return response.body.aggregations.coverage.buckets.map((bucket: any) => ({ pos: bucket.key, From 84fea62c15d1b4e6b1a365356a5bab917132b1cd Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Fri, 27 Oct 2023 14:41:12 -0400 Subject: [PATCH 53/62] Add snapshot test updates --- .../ConstraintTable.spec.tsx.snap | 2672 ++- .../CopyNumberVariants.spec.tsx.snap | 354 + .../CopyNumberVariantPage.spec.tsx.snap | 851 + browser/src/GenePage/GenePage.spec.tsx | 5 +- .../__snapshots__/GenePage.spec.tsx.snap | 4081 +++- ...riantCooccurrenceCountsTable.spec.tsx.snap | 8 + .../MitochondrialVariantPage.spec.tsx.snap | 17722 +++++++++++++++- .../__snapshots__/ReadData.spec.tsx.snap | 410 + .../CopyNumberVariantsRegionCoverageTrack.tsx | 78 + ...chondrialRegionCoverageTrack.spec.tsx.snap | 66 + ...itochondrialVariantsInRegion.spec.tsx.snap | 66 + .../__snapshots__/RegionPage.spec.tsx.snap | 875 +- .../RegionPageContainer.spec.tsx.snap | 112 + ...drialTranscriptCoverageTrack.spec.tsx.snap | 64 + ...hondrialVariantsInTranscript.spec.tsx.snap | 66 + .../TranscriptPage.spec.tsx.snap | 3722 +++- .../TranscriptPageContainer.spec.tsx.snap | 4846 ++++- .../DatasetSelector.spec.tsx.snap | 8268 ++++++- 18 files changed, 42273 insertions(+), 1993 deletions(-) create mode 100644 browser/src/CopyNumberVariantList/__snapshots__/CopyNumberVariants.spec.tsx.snap create mode 100644 browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap create mode 100644 browser/src/RegionPage/CopyNumberVariantsRegionCoverageTrack.tsx 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/__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/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap new file mode 100644 index 000000000..e0bdfbf30 --- /dev/null +++ b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap @@ -0,0 +1,851 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type DEL has no unexpected changes 1`] = ` +
+
+
+

+ Copy number variant: + 21__DEL +

+
+ +
+
+
+
+
+
+ Filter +
+
+ + Pass + +
+
+
+
+ Site Count +
+
+ 123 +
+
+
+
+ Number at Site +
+
+ 345 +
+
+
+
+ Site Frequency +
+
+ 0.3565 +
+
+
+
+ Quality score +
+
+ 99 +
+
+
+
+ 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 +
+
+
+`; + +exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type DUP has no unexpected changes 1`] = ` +
+
+
+

+ Copy number variant: + 21__DUP +

+
+ +
+
+
+
+
+
+ Filter +
+
+ + Pass + +
+
+
+
+ Site Count +
+
+ 123 +
+
+
+
+ Number at Site +
+
+ 345 +
+
+
+
+ Site Frequency +
+
+ 0.3565 +
+
+
+
+ Quality score +
+
+ 99 +
+
+
+
+ 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 +
+
+
+`; diff --git a/browser/src/GenePage/GenePage.spec.tsx b/browser/src/GenePage/GenePage.spec.tsx index 2a77958cf..1f6f83cba 100644 --- a/browser/src/GenePage/GenePage.spec.tsx +++ b/browser/src/GenePage/GenePage.spec.tsx @@ -124,6 +124,7 @@ forDatasetsMatching(svRegexp, 'GenePage with SV dataset "%s"', (datasetId) => { ) expect(tree).toMatchSnapshot() }) +}) forDatasetsMatching(cnvRegexp, 'GenePage with CNV dataset "%s"', (datasetId) => { test('has no unexpected changes', () => { @@ -143,8 +144,8 @@ forDatasetsMatching(svRegexp, 'GenePage with SV dataset "%s"', (datasetId) => { ) expect(tree).toMatchSnapshot() }) - - test('queries the API for region coverage with the correct parameters', async () => { + + test('queries the API for region coverage with the correct parameters', async () => { const gene = geneFactory.build() setMockApiResponses({ StructuralVariantsInGene: () => ({ diff --git a/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap b/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap index adf955538..df36e4d8b 100644 --- a/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap +++ b/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap @@ -301,7 +301,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] > +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -713,7 +737,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 @@ -918,7 +942,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 20 + 0.2 @@ -958,7 +982,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 30 + 0.3 @@ -998,7 +1022,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 40 + 0.4 @@ -1038,7 +1062,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 50 + 0.5 @@ -1078,7 +1102,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 60 + 0.6 @@ -1118,7 +1142,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 70 + 0.7 @@ -1158,7 +1182,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 80 + 0.8 @@ -1198,7 +1222,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 90 + 0.9 @@ -1238,7 +1262,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -1726,7 +1750,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch > +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -2138,7 +2186,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch 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 @@ -2343,7 +2391,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 20 + 0.2 @@ -2383,7 +2431,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 30 + 0.3 @@ -2423,7 +2471,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 40 + 0.4 @@ -2463,7 +2511,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 50 + 0.5 @@ -2503,7 +2551,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 60 + 0.6 @@ -2543,7 +2591,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 70 + 0.7 @@ -2583,7 +2631,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 80 + 0.8 @@ -2623,7 +2671,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 90 + 0.9 @@ -2663,7 +2711,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_controls" has no unexpected ch dy="0em" x={-8} > - 100 + 1.0 @@ -3151,7 +3199,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c > +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -3667,7 +3739,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c
    - Per-base mean depth of coverage + Fraction of individuals with coverage over 30
    - 10 + 0.1 @@ -3768,7 +3840,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 +3880,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 +3920,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 +3960,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 +4000,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 +4040,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 +4080,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 +4120,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 +4160,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -5699,7 +5771,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 SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = `
    @@ -5734,21 +5806,21 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` className="DatasetSelector__NavigationMenuWrapper-sc-1p2fxbn-0 ebZvwy" >
  • - ExAC v1.0 + gnomAD v3.1.2
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • - Constraint not available for this - gene + Constraint not yet available for gnomAD v3.

    - Viewing full - gene - . - -
    @@ -6546,7 +6606,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` } > @@ -6972,8 +7032,8 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` stroke="#333" x1={0} x2={799} - y1={190} - y2={190} + y1={200} + y2={200} /> @@ -7126,39 +7186,16 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = `
    -

    - ClinVar variants -

    -
    -

    - No ClinVar variants found in this gene. -

    -
    -

    - gnomAD variants -

    -

    - No gnomAD variants found. -

    + No variants found
    `; -exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`] = ` +exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = `
    @@ -7198,12 +7235,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` - gnomAD v2.1.1 + ExAC v1.0
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -7882,7 +7943,7 @@ exports[`GenePage with non-SV dataset "gnomad_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 @@ -8087,7 +8148,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 20 + 0.2 @@ -8127,7 +8188,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 30 + 0.3 @@ -8167,7 +8228,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 40 + 0.4 @@ -8207,7 +8268,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 50 + 0.5 @@ -8247,7 +8308,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 60 + 0.6 @@ -8287,7 +8348,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 70 + 0.7 @@ -8327,7 +8388,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 80 + 0.8 @@ -8367,7 +8428,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 90 + 0.9 @@ -8407,7 +8468,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` dy="0em" x={-8} > - 100 + 1.0 @@ -8584,101 +8645,6 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" 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. - - - -
    -
    -
    -
    @@ -8712,7 +8678,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" has no unexpected changes 1`] = `
    @@ -8752,12 +8718,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c - gnomAD v2.1.1 (controls) + gnomAD v2.1.1
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -9436,7 +9426,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c 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 @@ -9641,7 +9631,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -9681,7 +9671,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -9721,7 +9711,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -9761,7 +9751,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -9801,7 +9791,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -9841,7 +9831,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -9881,7 +9871,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -9921,7 +9911,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -9961,7 +9951,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -10266,7 +10256,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_controls" has no unexpected changes 1`] = `
    @@ -10306,12 +10296,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 (controls)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -10990,7 +11004,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" 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 @@ -11195,7 +11209,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -11235,7 +11249,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -11275,7 +11289,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -11315,7 +11329,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -11355,7 +11369,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -11395,7 +11409,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -11435,7 +11449,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -11475,7 +11489,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -11515,7 +11529,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -11820,7 +11834,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_cancer" has no unexpected changes 1`] = `
    @@ -11860,12 +11874,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-cancer)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -12544,7 +12582,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 +12787,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -12789,7 +12827,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -12829,7 +12867,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -12869,7 +12907,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -12909,7 +12947,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -12949,7 +12987,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -12989,7 +13027,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -13029,7 +13067,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -13069,7 +13107,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -13374,7 +13412,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_r2_1_non_neuro" has no unexpected changes 1`] = `
    @@ -13414,12 +13452,12 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected - gnomAD v2.1.1 (non-TOPMed) + gnomAD v2.1.1 (non-neuro)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -14098,7 +14160,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 +14365,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -14343,7 +14405,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -14383,7 +14445,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -14423,7 +14485,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -14463,7 +14525,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -14503,7 +14565,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -14543,7 +14605,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -14583,7 +14645,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -14623,7 +14685,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected dy="0em" x={-8} > - 100 + 1.0 @@ -14928,7 +14990,3067 @@ 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_r2_1_non_topmed" 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 +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + Regional missense constraint + + +
    +
    +
    +
    + + + + This gene was not searched for evidence of regional missense constraint. See our + + + + + help page + + + + for additional information. + + + +
    +
    +
    +
    +
    +

    + ClinVar variants +

    +
    +

    + No ClinVar variants found in this gene. +

    +
    +

    + gnomAD variants +

    +

    + No gnomAD variants found. +

    +
    +
    +
    +
    +`; + +exports[`GenePage with non-SV dataset "gnomad_r3" 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. +

    +
    +
    +
    + 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_r3_controls_and_biobanks" has no unexpected changes 1`] = `
    @@ -14968,12 +18090,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] - gnomAD v3.1.2 + gnomAD v3.1.2 (controls/biobanks)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -15651,7 +18797,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" 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 @@ -15856,7 +19002,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 20 + 0.2 @@ -15896,7 +19042,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 30 + 0.3 @@ -15936,7 +19082,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 40 + 0.4 @@ -15976,7 +19122,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 50 + 0.5 @@ -16016,7 +19162,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 60 + 0.6 @@ -16056,7 +19202,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 70 + 0.7 @@ -16096,7 +19242,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 80 + 0.8 @@ -16136,7 +19282,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 90 + 0.9 @@ -16176,7 +19322,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -16386,7 +19532,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 +19572,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)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -17109,7 +20279,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u 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 @@ -17314,7 +20484,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 20 + 0.2 @@ -17354,7 +20524,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 30 + 0.3 @@ -17394,7 +20564,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 40 + 0.4 @@ -17434,7 +20604,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 50 + 0.5 @@ -17474,7 +20644,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 60 + 0.6 @@ -17514,7 +20684,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 70 + 0.7 @@ -17554,7 +20724,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 80 + 0.8 @@ -17594,7 +20764,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 90 + 0.9 @@ -17634,7 +20804,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u dy="0em" x={-8} > - 100 + 1.0 @@ -17844,7 +21014,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 +21054,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)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -18567,7 +21761,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c 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 @@ -18772,7 +21966,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -18812,7 +22006,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -18852,7 +22046,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -18892,7 +22086,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -18932,7 +22126,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -18972,7 +22166,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -19012,7 +22206,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -19052,7 +22246,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -19092,7 +22286,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -19302,7 +22496,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 +22536,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)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -20025,7 +23243,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch 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 @@ -20230,7 +23448,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 20 + 0.2 @@ -20270,7 +23488,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 30 + 0.3 @@ -20310,7 +23528,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 40 + 0.4 @@ -20350,7 +23568,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 50 + 0.5 @@ -20390,7 +23608,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 60 + 0.6 @@ -20430,7 +23648,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 70 + 0.7 @@ -20470,7 +23688,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 80 + 0.8 @@ -20510,7 +23728,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 90 + 0.9 @@ -20550,7 +23768,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch dy="0em" x={-8} > - 100 + 1.0 @@ -20760,7 +23978,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 +24018,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)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -21483,7 +24725,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c 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 @@ -21688,7 +24930,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 20 + 0.2 @@ -21728,7 +24970,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 30 + 0.3 @@ -21768,7 +25010,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 40 + 0.4 @@ -21808,7 +25050,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 50 + 0.5 @@ -21848,7 +25090,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 60 + 0.6 @@ -21888,7 +25130,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 70 + 0.7 @@ -21928,7 +25170,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 80 + 0.8 @@ -21968,7 +25210,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 90 + 0.9 @@ -22008,7 +25250,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c dy="0em" x={-8} > - 100 + 1.0 @@ -22218,7 +25460,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 +25500,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
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + @@ -22887,7 +26129,8 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang

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

    @@ -22941,7 +26184,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 +26389,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 20 + 0.2 @@ -23186,7 +26429,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 30 + 0.3 @@ -23226,7 +26469,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 40 + 0.4 @@ -23266,7 +26509,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 50 + 0.5 @@ -23306,7 +26549,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 60 + 0.6 @@ -23346,7 +26589,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 70 + 0.7 @@ -23386,7 +26629,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 80 + 0.8 @@ -23426,7 +26669,7 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang dy="0em" x={-8} > - 90 + 0.9 @@ -23466,7 +26709,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..183801efc 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`] = `

    diff --git a/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap b/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap index 14e3d777c..d7b6836ac 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 +16527,8194 @@ 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/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/__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`] = ` `; +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 + +
  • +
  • + + + + + + +
  • + +
    +
    +
    +
    +
    +
    +
    + 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 + . + + +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +`; + +exports[`TranscriptPage with dataset "gnomad_r2_1_controls" 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 + . + + +
    +
    +
    +
    + Include: +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +`; + +exports[`TranscriptPage with dataset "gnomad_r2_1_non_cancer" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + + @@ -1944,7 +3870,7 @@ exports[`TranscriptPage with dataset "gnomad_r2_1_controls" has no unexpected ch
    `; -exports[`TranscriptPage with dataset "gnomad_r2_1_non_cancer" has no unexpected changes 1`] = ` +exports[`TranscriptPage with dataset "gnomad_r2_1_non_neuro" has no unexpected changes 1`] = `
    @@ -1983,12 +3909,12 @@ exports[`TranscriptPage with dataset "gnomad_r2_1_non_cancer" has no unexpected - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (non-neuro)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • @@ -3888,7 +6191,7 @@ exports[`TranscriptPage with dataset "gnomad_r2_1_non_topmed" has no unexpected
    `; -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`] = `
    @@ -3927,12 +6230,12 @@ exports[`TranscriptPage with dataset "gnomad_r3" has no unexpected changes 1`] = - gnomAD v3.1.2 + gnomAD v3.1.2 (controls/biobanks)
  • + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + +
  • `; -exports[`TranscriptPage with dataset "gnomad_r3_controls_and_biobanks" has no unexpected changes 1`] = ` +exports[`TranscriptPage with dataset "gnomad_r3_non_cancer" has no unexpected changes 1`] = `
    @@ -4574,12 +7003,12 @@ exports[`TranscriptPage with dataset "gnomad_r3_controls_and_biobanks" has no un - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (non-cancer)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • @@ -7997,68 +11057,194 @@ exports[`TranscriptPage with dataset "gnomad_sv_r2_1" has no unexpected changes
  • + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD SVs v2.1 + +
  • +
  • + + + + + +
  • +
  • + + gnomAD SVs v2.1 (controls) + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -723,7 +849,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 20 + 0.2 @@ -763,7 +889,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 30 + 0.3 @@ -803,7 +929,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 40 + 0.4 @@ -843,7 +969,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 50 + 0.5 @@ -883,7 +1009,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 60 + 0.6 @@ -923,7 +1049,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 70 + 0.7 @@ -963,7 +1089,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 80 + 0.8 @@ -1003,7 +1129,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 90 + 0.9 @@ -1043,7 +1169,7 @@ exports[`TranscriptPageContainer with dataset exac has no unexpected changes 1`] dy="0em" x={-8} > - 100 + 1.0 @@ -1247,7 +1373,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,12 +1407,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan className="DatasetSelector__NavigationMenuWrapper-sc-1p2fxbn-0 ebZvwy" >
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -1970,7 +2222,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 20 + 0.2 @@ -2010,7 +2262,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 30 + 0.3 @@ -2050,7 +2302,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 40 + 0.4 @@ -2090,7 +2342,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 50 + 0.5 @@ -2130,7 +2382,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 60 + 0.6 @@ -2170,7 +2422,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 70 + 0.7 @@ -2210,7 +2462,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 80 + 0.8 @@ -2250,7 +2502,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 90 + 0.9 @@ -2290,7 +2542,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1 has no unexpected chan dy="0em" x={-8} > - 100 + 1.0 @@ -2494,7 +2746,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`] = `
    +
    +
    +
    +
    +
    +
    + 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 + . + + +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + 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_r2_1_controls 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 + . + + +
    +
    +
    +
    +
    +
      + + +
    +
    +
    +
    +
    + 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_r2_1_non_cancer has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    + Transcript: + dummy_transcript + . + 12.34.5 +

    +
    +
    + + Dataset + + + +
    - 10 + 0.1 @@ -3217,7 +6341,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -3257,7 +6381,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -3297,7 +6421,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -3337,7 +6461,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -3377,7 +6501,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -3417,7 +6541,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -3457,7 +6581,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -3497,7 +6621,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -3537,7 +6661,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_controls has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -3741,7 +6865,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_non_neuro has no unexpected changes 1`] = `
    @@ -3780,12 +6904,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (non-neuro)
  • + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + +
  • - 10 + 0.1 @@ -4464,7 +7714,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 20 + 0.2 @@ -4504,7 +7754,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 30 + 0.3 @@ -4544,7 +7794,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 40 + 0.4 @@ -4584,7 +7834,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 50 + 0.5 @@ -4624,7 +7874,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 60 + 0.6 @@ -4664,7 +7914,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 70 + 0.7 @@ -4704,7 +7954,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 80 + 0.8 @@ -4744,7 +7994,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 90 + 0.9 @@ -4784,7 +8034,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_cancer has no unex dy="0em" x={-8} > - 100 + 1.0 @@ -4988,7 +8238,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_topmed has no unexpected changes 1`] = `
    @@ -5027,12 +8277,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp - gnomAD v2.1.1 (non-neuro) + gnomAD v2.1.1 (non-TOPMed)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -5711,7 +9087,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 20 + 0.2 @@ -5751,7 +9127,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 30 + 0.3 @@ -5791,7 +9167,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 40 + 0.4 @@ -5831,7 +9207,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 50 + 0.5 @@ -5871,7 +9247,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 60 + 0.6 @@ -5911,7 +9287,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 70 + 0.7 @@ -5951,7 +9327,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 80 + 0.8 @@ -5991,7 +9367,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 90 + 0.9 @@ -6031,7 +9407,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_neuro has no unexp dy="0em" x={-8} > - 100 + 1.0 @@ -6235,7 +9611,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_r3 has no unexpected changes 1`] = `
    @@ -6274,12 +9650,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex - gnomAD v2.1.1 (non-TOPMed) + gnomAD v3.1.2
  • + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + +
  • @@ -6753,7 +10254,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex 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 @@ -6958,7 +10459,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 20 + 0.2 @@ -6998,7 +10499,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 30 + 0.3 @@ -7038,7 +10539,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 40 + 0.4 @@ -7078,7 +10579,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 50 + 0.5 @@ -7118,7 +10619,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 60 + 0.6 @@ -7158,7 +10659,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 70 + 0.7 @@ -7198,7 +10699,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 80 + 0.8 @@ -7238,7 +10739,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 90 + 0.9 @@ -7278,7 +10779,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r2_1_non_topmed has no unex dy="0em" x={-8} > - 100 + 1.0 @@ -7482,7 +10983,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_r3_controls_and_biobanks has no unexpected changes 1`] = `
    @@ -7521,12 +11022,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change - gnomAD v3.1.2 + gnomAD v3.1.2 (controls/biobanks)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -8204,7 +11831,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 20 + 0.2 @@ -8244,7 +11871,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 30 + 0.3 @@ -8284,7 +11911,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 40 + 0.4 @@ -8324,7 +11951,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 50 + 0.5 @@ -8364,7 +11991,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 60 + 0.6 @@ -8404,7 +12031,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 70 + 0.7 @@ -8444,7 +12071,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 80 + 0.8 @@ -8484,7 +12111,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 90 + 0.9 @@ -8524,7 +12151,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3 has no unexpected change dy="0em" x={-8} > - 100 + 1.0 @@ -8728,7 +12355,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_non_cancer has no unexpected changes 1`] = `
    @@ -8767,12 +12394,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (non-cancer)
  • + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + +
  • - 10 + 0.1 @@ -9450,7 +13203,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 20 + 0.2 @@ -9490,7 +13243,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 30 + 0.3 @@ -9530,7 +13283,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 40 + 0.4 @@ -9570,7 +13323,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 50 + 0.5 @@ -9610,7 +13363,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 60 + 0.6 @@ -9650,7 +13403,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 70 + 0.7 @@ -9690,7 +13443,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 80 + 0.8 @@ -9730,7 +13483,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 90 + 0.9 @@ -9770,7 +13523,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_controls_and_biobanks ha dy="0em" x={-8} > - 100 + 1.0 @@ -9974,7 +13727,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_non_neuro has no unexpected changes 1`] = `
    @@ -10013,12 +13766,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe - gnomAD v3.1.2 (non-cancer) + gnomAD v3.1.2 (non-neuro)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -10696,7 +14575,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -10736,7 +14615,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -10776,7 +14655,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -10816,7 +14695,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -10856,7 +14735,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -10896,7 +14775,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -10936,7 +14815,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -10976,7 +14855,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -11016,7 +14895,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_cancer has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -11220,7 +15099,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_topmed has no unexpected changes 1`] = `
    @@ -11259,12 +15138,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec - gnomAD v3.1.2 (non-neuro) + gnomAD v3.1.2 (non-TOPMed)
  • - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (non-cancer) +
    + 134,187 samples +
    + +
  • +
  • + + gnomAD v2.1.1 (non-neuro) +
    + 114,704 samples +
    +
    +
  • +
  • + + gnomAD v2.1.1 (controls) +
    + 60,146 samples +
    +
    +
  • +
  • + + ExAC v1.0 +
    + 60,706 samples +
    +
    +
  • + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + +
  • - 10 + 0.1 @@ -11942,7 +15947,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 20 + 0.2 @@ -11982,7 +15987,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 30 + 0.3 @@ -12022,7 +16027,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 40 + 0.4 @@ -12062,7 +16067,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 50 + 0.5 @@ -12102,7 +16107,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 60 + 0.6 @@ -12142,7 +16147,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 70 + 0.7 @@ -12182,7 +16187,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 80 + 0.8 @@ -12222,7 +16227,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 90 + 0.9 @@ -12262,7 +16267,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_neuro has no unexpec dy="0em" x={-8} > - 100 + 1.0 @@ -12466,7 +16471,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_v2 has no unexpected changes 1`] = `
    @@ -12505,12 +16510,12 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe - gnomAD v3.1.2 (non-TOPMed) + gnomAD v3.1.2 (non-v2)
  • +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • - 10 + 0.1 @@ -13188,7 +17319,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 20 + 0.2 @@ -13228,7 +17359,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 30 + 0.3 @@ -13268,7 +17399,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 40 + 0.4 @@ -13308,7 +17439,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 50 + 0.5 @@ -13348,7 +17479,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 60 + 0.6 @@ -13388,7 +17519,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 70 + 0.7 @@ -13428,7 +17559,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 80 + 0.8 @@ -13468,7 +17599,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 90 + 0.9 @@ -13508,7 +17639,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_topmed has no unexpe dy="0em" x={-8} > - 100 + 1.0 @@ -13712,7 +17843,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_r4 has no unexpected changes 1`] = ` @@ -14229,7 +18487,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 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 @@ -14434,7 +18692,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 20 + 0.2 @@ -14474,7 +18732,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 30 + 0.3 @@ -14514,7 +18772,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 40 + 0.4 @@ -14554,7 +18812,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 50 + 0.5 @@ -14594,7 +18852,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 60 + 0.6 @@ -14634,7 +18892,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 70 + 0.7 @@ -14674,7 +18932,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 80 + 0.8 @@ -14714,7 +18972,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 90 + 0.9 @@ -14754,7 +19012,7 @@ exports[`TranscriptPageContainer with dataset gnomad_r3_non_v2 has no unexpected dy="0em" x={-8} > - 100 + 1.0 diff --git a/browser/src/__snapshots__/DatasetSelector.spec.tsx.snap b/browser/src/__snapshots__/DatasetSelector.spec.tsx.snap index 2ac5fa308..db2f5b284 100644 --- a/browser/src/__snapshots__/DatasetSelector.spec.tsx.snap +++ b/browser/src/__snapshots__/DatasetSelector.spec.tsx.snap @@ -429,6 +429,7332 @@ exports[`DataSelector with "exac" dataset selected has no unexpected changes 1`] +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • + +`; + +exports[`DataSelector with "exac" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "exac" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_cnv_r4" dataset selected has no unexpected changes 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: #cbd3da; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: none; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_cnv_r4" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: #cbd3da; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: none; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected changes 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpected changes 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unexpected changes 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + +`; + +exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 0; + border: 1px solid #6c757d; + border-radius: 0.5em; + margin: 0; + list-style-type: none; +} + +.c3 { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + box-sizing: border-box; + height: 100%; + padding: 0.375em 0.25em; + color: #000; + outline: none; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c3:visited { + color: #000; +} + +.c3:focus { + box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); +} + +.c1 { + position: relative; + display: inline-block; +} + +.c1 .c2 { + background: #cbd3da; +} + +.c1:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c1:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c9 { + position: relative; + display: inline-block; +} + +.c9 .c2 { + background: none; +} + +.c9:first-child .c2 { + padding-left: 0.75em; + border-top-left-radius: 0.5em; + border-bottom-left-radius: 0.5em; +} + +.c9:last-child .c2 { + padding-right: 0.75em; + border-top-right-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +.c4 img { + position: relative; + top: 0.11em; + width: 0.9em; + height: 0.9em; +} + +.c5 { + position: absolute; + z-index: 1; + right: 0; + display: none; + width: 220px; + padding: 0.5em 0; + border: 1px solid #6c757d; + margin: 0; + background: #f8f9fa; + list-style-type: none; +} + +.c7 { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding: 0.25em 0.5em; + color: #000; + -webkit-text-decoration: none; + text-decoration: none; +} + +.c7:visited { + color: #000; +} + +.c7:active, +.c7:focus, +.c7:hover { + background: rgba(66,139,202,0.25); +} + +.c7:focus { + outline: 2px solid #428bca; +} + +.c8 { + margin-top: 0.125em; + margin-left: 5px; + font-size: 0.8em; + opacity: 0.6; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: 2px; + font-weight: bold; +} + +@media (max-width:1200px) { + .c5 { + right: auto; + left: -100px; + } +} + +@media (max-width:900px) { + .c5 { + left: -150px; + } +} + + `; -exports[`DataSelector with "exac" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -731,12 +8081,12 @@ exports[`DataSelector with "exac" dataset selected has no unexpected changes whe - ExAC v1.0 + gnomAD v2.1.1 (non-neuro)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • - GRCh38 + GRCh37
  • - gnomAD SVs v4 + gnomAD SVs v2.1
    - 63,046 samples + 10,847 samples
  • - -
  • -
    - GRCh37 -
  • - gnomAD SVs v2.1 + gnomAD SVs v2.1 (non-neuro)
    - 10,847 samples + 8,342 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD SVs v2.1 (controls)
    - 8,342 samples + 5,192 samples
  • + +
  • +
    + GRCh38 +
  • - gnomAD SVs v2.1 (controls) + gnomAD exome CNVs v4.0
    - 5,192 samples + 464,566 samples
  • @@ -1116,7 +8466,7 @@ exports[`DataSelector with "exac" dataset selected has no unexpected changes whe `; -exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -1289,12 +8639,12 @@ exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected chan - gnomAD v2.1.1 + gnomAD v2.1.1 (non-neuro)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • `; -exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -1847,12 +9197,12 @@ exports[`DataSelector with "gnomad_r2_1" dataset selected has no unexpected chan - gnomAD v2.1.1 + gnomAD v2.1.1 (non-neuro)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -2405,12 +9779,12 @@ exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpe - gnomAD v2.1.1 (controls) + gnomAD v2.1.1 (non-TOPMed)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -2963,12 +10337,12 @@ exports[`DataSelector with "gnomad_r2_1_controls" dataset selected has no unexpe - gnomAD v2.1.1 (controls) + gnomAD v2.1.1 (non-TOPMed)
  • - gnomAD SVs v2.1 + gnomAD exome CNVs v4.0
  • `; -exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -3521,12 +10895,12 @@ exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unex - gnomAD v2.1.1 (non-cancer) + gnomAD v2.1.1 (non-TOPMed)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -4079,12 +11477,12 @@ exports[`DataSelector with "gnomad_r2_1_non_cancer" dataset selected has no unex - gnomAD v2.1.1 (non-cancer) + gnomAD v3.1.2
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • `; -exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -4637,12 +12035,12 @@ exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexp - gnomAD v2.1.1 (non-neuro) + gnomAD v3.1.2
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -5195,12 +12617,12 @@ exports[`DataSelector with "gnomad_r2_1_non_neuro" dataset selected has no unexp - gnomAD v2.1.1 (non-neuro) + gnomAD v3.1.2 (controls/biobanks)
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • `; -exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -5753,12 +13175,12 @@ exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unex - gnomAD v2.1.1 (non-TOPMed) + gnomAD v3.1.2 (controls/biobanks)
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -6311,12 +13757,12 @@ exports[`DataSelector with "gnomad_r2_1_non_topmed" dataset selected has no unex - gnomAD v2.1.1 (non-TOPMed) + gnomAD v3.1.2 (non-cancer)
  • - gnomAD SVs v2.1 + gnomAD SVs v4
  • `; -exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -6869,12 +14315,12 @@ exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected change - gnomAD v3.1.2 + gnomAD v3.1.2 (non-cancer)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -7427,12 +14897,12 @@ exports[`DataSelector with "gnomad_r3" dataset selected has no unexpected change - gnomAD v3.1.2 + gnomAD v3.1.2 (non-neuro)
  • `; -exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -7985,12 +15455,12 @@ exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected ha - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (non-neuro)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -8543,12 +16037,12 @@ exports[`DataSelector with "gnomad_r3_controls_and_biobanks" dataset selected ha - gnomAD v3.1.2 (controls/biobanks) + gnomAD v3.1.2 (non-TOPMed)
  • `; -exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -9101,12 +16595,12 @@ exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpe - gnomAD v3.1.2 (non-cancer) + gnomAD v3.1.2 (non-TOPMed)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -9659,12 +17177,12 @@ exports[`DataSelector with "gnomad_r3_non_cancer" dataset selected has no unexpe - gnomAD v3.1.2 (non-cancer) + gnomAD v3.1.2 (non-v2)
  • `; -exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -10217,12 +17735,12 @@ exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpec - gnomAD v3.1.2 (non-neuro) + gnomAD v3.1.2 (non-v2)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_r4" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -10775,12 +18317,12 @@ exports[`DataSelector with "gnomad_r3_non_neuro" dataset selected has no unexpec - gnomAD v3.1.2 (non-neuro) +
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_r4" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -11333,12 +18875,12 @@ exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpe - gnomAD v3.1.2 (non-TOPMed) +
  • - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -11760,43 +19302,43 @@ exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpe box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); } -.c1 { +.c9 { position: relative; display: inline-block; } -.c1 .c2 { +.c9 .c2 { background: #cbd3da; } -.c1:first-child .c2 { +.c9:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c1:last-child .c2 { +.c9:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; } -.c9 { +.c1 { position: relative; display: inline-block; } -.c9 .c2 { +.c1 .c2 { background: none; } -.c9:first-child .c2 { +.c1:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c9:last-child .c2 { +.c1:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; @@ -11891,12 +19433,12 @@ exports[`DataSelector with "gnomad_r3_non_topmed" dataset selected has no unexpe - gnomAD v3.1.2 (non-TOPMed) + gnomAD v2.1.1
  • - gnomAD SVs v4 + gnomAD SVs v2.1
  • `; -exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -12318,43 +19860,43 @@ exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); } -.c1 { +.c9 { position: relative; display: inline-block; } -.c1 .c2 { +.c9 .c2 { background: #cbd3da; } -.c1:first-child .c2 { +.c9:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c1:last-child .c2 { +.c9:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; } -.c9 { +.c1 { position: relative; display: inline-block; } -.c9 .c2 { +.c1 .c2 { background: none; } -.c9:first-child .c2 { +.c1:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c9:last-child .c2 { +.c1:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; @@ -12449,12 +19991,12 @@ exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected - gnomAD v3.1.2 (non-v2) + gnomAD v2.1.1
  • - gnomAD SVs v4 + gnomAD SVs v2.1
  • + gnomAD SVs v2.1 (controls) +
    + 5,192 samples +
    +
    +
  • + +
  • +
    + GRCh38 +
    +
  • + - gnomAD SVs v2.1 (controls) + gnomAD exome CNVs v4.0
    - 5,192 samples + 464,566 samples
  • @@ -12834,7 +20400,7 @@ exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected `; -exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -12876,43 +20442,43 @@ exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected box-shadow: 0 0 0 0.2em rgba(66,139,202,0.5); } -.c1 { +.c9 { position: relative; display: inline-block; } -.c1 .c2 { +.c9 .c2 { background: #cbd3da; } -.c1:first-child .c2 { +.c9:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c1:last-child .c2 { +.c9:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; } -.c9 { +.c1 { position: relative; display: inline-block; } -.c9 .c2 { +.c1 .c2 { background: none; } -.c9:first-child .c2 { +.c1:first-child .c2 { padding-left: 0.75em; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em; } -.c9:last-child .c2 { +.c1:last-child .c2 { padding-right: 0.75em; border-top-right-radius: 0.5em; border-bottom-right-radius: 0.5em; @@ -13007,12 +20573,12 @@ exports[`DataSelector with "gnomad_r3_non_v2" dataset selected has no unexpected - gnomAD v3.1.2 (non-v2) + gnomAD v2.1.1
  • - gnomAD SVs v4 + gnomAD SVs v2.1
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -13826,13 +21392,13 @@ exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected c > - gnomAD SVs v2.1 + gnomAD SVs v2.1 (controls)
  • `; -exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -14385,12 +21951,12 @@ exports[`DataSelector with "gnomad_sv_r2_1" dataset selected has no unexpected c - gnomAD SVs v2.1 + gnomAD SVs v2.1 (controls)
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -14942,7 +22532,7 @@ exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no une > -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -15500,13 +23090,13 @@ exports[`DataSelector with "gnomad_sv_r2_1_controls" dataset selected has no une > - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1 (non-neuro)
  • `; -exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -16182,7 +23772,7 @@ exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no un `; -exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected changes 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -16355,12 +23945,12 @@ exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no un - gnomAD v2.1.1 + gnomAD v3.1.2
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD SVs v4
  • `; -exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected changes 1`] = ` +exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -17293,12 +24883,36 @@ exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected cha
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + `; -exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` +exports[`DataSelector with "gnomad_sv_r2_1_non_neuro" dataset selected has no unexpected changes when showing all possible datasets 1`] = ` .c0 { display: -webkit-box; display: -webkit-flex; @@ -17471,12 +25085,12 @@ exports[`DataSelector with "gnomad_sv_r4" dataset selected has no unexpected cha - gnomAD v3.1.2 + gnomAD v2.1.1
  • - gnomAD SVs v4 + gnomAD SVs v2.1 (non-neuro)
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD SVs v4 -
    - 63,046 samples -
    -
    -
  • -
  • +
  • +
    + GRCh38 +
    +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • + From 4dc94953f729fb8e40bbdb5c7725ce800f4ecc74 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Sun, 29 Oct 2023 11:03:20 -0400 Subject: [PATCH 54/62] add page changes --- .../CopyNumberVariantAttributeList.tsx | 2 -- .../CopyNumberVariantPage.tsx | 22 +++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx index 48e18e5e5..f8222417a 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantAttributeList.tsx @@ -50,8 +50,6 @@ const CopyNumberVariantAttributeList = ({ variant }: CopyNumberVariantAttributeL {(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.qual} - {/* @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} diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx index 9cc9a7e11..5ebfb7487 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -1,16 +1,14 @@ import React from 'react' import styled from 'styled-components' -import { ExternalLink, Page } from '@gnomad/ui' +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 { Histogram } from '../VariantPage/VariantPage' -// import InfoButton from '../help/InfoButton' import Query from '../Query' import { variantFeedbackUrl } from '../variantFeedback' -// import CopyNumberVariantAgeDistribution from './CopyNumberVariantAgeDistribution' import CopyNumberVariantAttributeList from './CopyNumberVariantAttributeList' import CopyNumberVariantPopulationsTable from './CopyNumberVariantPopulationsTable' import CNVReferenceList from './CNVReferenceList' @@ -89,6 +87,22 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp

    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} + + ))} +
    +
    ) From 2b16f0788dce17c884243150ea77e466b6043f40 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Sun, 29 Oct 2023 11:03:31 -0400 Subject: [PATCH 55/62] add formatting --- .../CopyNumberVariantPage/CopyNumberVariantPage.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx index 5ebfb7487..2bfe53095 100644 --- a/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx +++ b/browser/src/CopyNumberVariantPage/CopyNumberVariantPage.tsx @@ -95,12 +95,12 @@ const CopyNumberVariantPage = ({ datasetId, variant }: CopyNumberVariantPageProp 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} - - ))} + {variant.genes.map((gene) => ( + // @ts-expect-error TS(2769) FIXME: No overload matches this call. + + {gene} + + ))} From f7096755585ec7b8102b4142d23a793d0d193800 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Sun, 29 Oct 2023 12:36:49 -0400 Subject: [PATCH 56/62] update dataset selection --- browser/help/topics/dataset-selection.md | 3 --- browser/src/DatasetSelector.tsx | 32 +++--------------------- dataset-metadata/metadata.ts | 4 +++ 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/browser/help/topics/dataset-selection.md b/browser/help/topics/dataset-selection.md index 7e4d6f7e4..625a54095 100644 --- a/browser/help/topics/dataset-selection.md +++ b/browser/help/topics/dataset-selection.md @@ -57,8 +57,5 @@ The following subsets from previous versions are currently available, but access - _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._ -### Copy number variants - -+ gnomAD exome CNVs v4.0: Copy number variant (CNV) calls generated from a set of ES samples that largely overlaps those in gnomAD v4. This current CNV release includes 464,566 unrelated exomes 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/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 6b1b2e444..5b6fe8bef 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -449,13 +449,9 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } search: queryString.stringify({ dataset: datasetId }), }) - const topLevelStructuralVariantDataset = structuralVariantDatasetId(selectedDataset) - - const defaultTopLevelShortVariantDataset = includeGnomad2 ? 'gnomad_r2_1' : 'gnomad_r3' - const topLevelShortVariantDataset = hasShortVariants(selectedDataset) - ? selectedDataset - : defaultTopLevelShortVariantDataset - + const topLevelShortVariantDataset = shortVariantDatasetId(selectedDataset) + + console.log(topLevelShortVariantDataset) let datasets: any = [] if (includeShortVariants) { @@ -601,7 +597,7 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } datasets.push( { - id: 'current_sv_or_cnv_dataset', + id: 'current_sv_dataset', isActive: hasStructuralVariants(selectedDataset) || hasCopyNumberVariants(selectedDataset), label: labelForDataset(currentDataset), url: datasetLink(currentDataset), @@ -648,26 +644,6 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } }, ], }, - // { - // id: 'current_cnv_dataset', - // isActive: hasCopyNumberVariants(selectedDataset), - // label: labelForDataset(topLevelCopyNumberVariantDataset), - // url: datasetLink(topLevelCopyNumberVariantDataset), - // }, - // { - // id: 'other_cnv_variant', - // isActive: hasCopyNumberVariants(selectedDataset), - // label: 'More datasets', - // children: [ - // { - // 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'), - // }, - // ], - // } ) } diff --git a/dataset-metadata/metadata.ts b/dataset-metadata/metadata.ts index cf42e29a8..4179534d1 100644 --- a/dataset-metadata/metadata.ts +++ b/dataset-metadata/metadata.ts @@ -83,6 +83,10 @@ const extractVariantFeedbackDescription = (datasetId: DatasetId): string | null } const extractShortVariantDatasetId = (datasetId: DatasetId): DatasetId => { + if (datasetId.startsWith('gnomad_cnv')) { + return 'gnomad_r3' + } + if (!datasetId.startsWith('gnomad_sv')) { return datasetId } From 9aa35bc48233d56a7470e100f3a56d068f485512 Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Sun, 29 Oct 2023 12:39:59 -0400 Subject: [PATCH 57/62] remove console.log --- browser/src/DatasetSelector.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/browser/src/DatasetSelector.tsx b/browser/src/DatasetSelector.tsx index 5b6fe8bef..3101bacd7 100644 --- a/browser/src/DatasetSelector.tsx +++ b/browser/src/DatasetSelector.tsx @@ -16,7 +16,6 @@ import { referenceGenome, hasCopyNumberVariants, shortVariantDatasetId, - structuralVariantDatasetId, } from '@gnomad/dataset-metadata/metadata' const NavigationMenuWrapper = styled.ul` @@ -451,7 +450,6 @@ const DatasetSelector = withRouter(({ datasetOptions, history, selectedDataset } const topLevelShortVariantDataset = shortVariantDatasetId(selectedDataset) - console.log(topLevelShortVariantDataset) let datasets: any = [] if (includeShortVariants) { From 407263b94f1c5f2d1e0b024a17df3e8dc78dfa3f Mon Sep 17 00:00:00 2001 From: Elissa Alarmani Date: Sun, 29 Oct 2023 13:32:22 -0400 Subject: [PATCH 58/62] finalize testing files --- .../CopyNumberVariantPage.spec.tsx.snap | 186 +- browser/src/GenePage/GenePage.spec.tsx | 66 +- .../__snapshots__/GenePage.spec.tsx.snap | 2501 ++++-- ...riantCooccurrenceCountsTable.spec.tsx.snap | 8 + .../MitochondrialVariantPage.spec.tsx.snap | 884 ++- .../__snapshots__/RegionPage.spec.tsx.snap | 2 + browser/src/Searchbox.spec.tsx | 2 +- .../StructuralVariantPage.spec.tsx.snap | 408 + .../TranscriptPage.spec.tsx.snap | 1296 ++-- .../TranscriptPageContainer.spec.tsx.snap | 950 ++- browser/src/__factories__/Gene.ts | 2 + .../DatasetSelector.spec.tsx.snap | 6774 +++-------------- .../src/__snapshots__/HomePage.spec.tsx.snap | 5 + .../src/__snapshots__/NavBar.spec.tsx.snap | 5 + .../src/__snapshots__/Searchbox.spec.tsx.snap | 251 + browser/src/variantFeedback.spec.ts | 4 +- dataset-metadata/metadata.spec.ts | 2 +- dataset-metadata/metadata.ts | 3 + 18 files changed, 5870 insertions(+), 7479 deletions(-) diff --git a/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap index e0bdfbf30..4f47b0274 100644 --- a/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap +++ b/browser/src/CopyNumberVariantPage/__snapshots__/CopyNumberVariantPage.spec.tsx.snap @@ -33,7 +33,7 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -237,14 +254,6 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D 0.3565 -
    -
    - Quality score -
    -
    - 99 -
    -
    Position @@ -422,6 +431,24 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D +
    +
    +

    + Consequences +

    +

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

    +
    +
    `; @@ -458,7 +485,7 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -662,14 +706,6 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D 0.3565 -
    -
    - Quality score -
    -
    - 99 -
    -
    Position @@ -847,5 +883,23 @@ exports[`CopyNumberVariantPage with dataset gnomad_cnv_r4 with variant of type D +
    +
    +

    + Consequences +

    +

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

    +
    +
    `; diff --git a/browser/src/GenePage/GenePage.spec.tsx b/browser/src/GenePage/GenePage.spec.tsx index 1f6f83cba..f4ace7de3 100644 --- a/browser/src/GenePage/GenePage.spec.tsx +++ b/browser/src/GenePage/GenePage.spec.tsx @@ -71,6 +71,9 @@ forDatasetsNotMatching(svRegexp, 'GenePage with non-SV dataset "%s"', (datasetId coverage: {}, }, }), + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), }) ) @@ -126,47 +129,52 @@ forDatasetsMatching(svRegexp, 'GenePage with SV dataset "%s"', (datasetId) => { }) }) - forDatasetsMatching(cnvRegexp, 'GenePage with CNV dataset "%s"', (datasetId) => { - test('has no unexpected changes', () => { - const gene = geneFactory.build() - setMockApiResponses({ - CopyNumberVariantsInGene: () => ({ - gene: { copy_number_variants: [] }, - }), - RegionCoverage: () => ({ - region: { - coverage: {}, - }, - }), - }) - const tree = renderer.create( - withDummyRouter() - ) - 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) }) }) @@ -183,7 +191,7 @@ describe.each([ ['gnomad_r3_non_neuro', false], ['gnomad_r3_non_topmed', false], ['gnomad_r3_non_v2', false], - ['gnomad_cnv_r4', 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() @@ -197,6 +205,9 @@ describe.each([ coverage: {}, }, }), + CopyNumberVariantsInGene: () => ({ + gene: { copy_number_variants: [] }, + }), }) renderer.create( withDummyRouter() @@ -228,7 +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], + ['gnomad_cnv_r4', 'GRCh38', false], ] as [DatasetId, ReferenceGenome, boolean][])( 'gene query with dataset %s', (datasetId, expectedReferenceGenome, expectedIncludeShortTandemRepeats) => { @@ -254,4 +265,5 @@ describe.each([ expectedIncludeShortTandemRepeats ) }) - }) + } +) diff --git a/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap b/browser/src/GenePage/__snapshots__/GenePage.spec.tsx.snap index df36e4d8b..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 +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -699,6 +692,17 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`]
    + Viewing full + gene + . + +
    @@ -860,7 +864,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1" has no unexpected changes 1`] } > @@ -1286,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} /> @@ -1449,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`] = `
    @@ -1750,13 +1754,13 @@ 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 +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -2898,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`] = `
    @@ -3199,13 +3196,13 @@ 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 +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -3635,7 +3625,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r2_1_non_neuro" has no unexpected c className="Select-sc-1lkyg9e-0 ivadCR" id="coverage-metric" onChange={[Function]} - value="mean" + value="over_30" > `; -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`] = `
    @@ -4387,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

  • @@ -5059,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
    - 10 + 0.1 @@ -5264,7 +5272,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 20 + 0.2 @@ -5304,7 +5312,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 30 + 0.3 @@ -5344,7 +5352,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 40 + 0.4 @@ -5384,7 +5392,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 50 + 0.5 @@ -5424,7 +5432,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 60 + 0.6 @@ -5464,7 +5472,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 70 + 0.7 @@ -5504,7 +5512,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 80 + 0.8 @@ -5544,7 +5552,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 90 + 0.9 @@ -5584,7 +5592,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 100 + 1.0 @@ -6132,6 +6140,23 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 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 @@ -6688,7 +6713,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 20 + 0.2 @@ -6728,7 +6753,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 30 + 0.3 @@ -6768,7 +6793,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 40 + 0.4 @@ -6808,7 +6833,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 50 + 0.5 @@ -6848,7 +6873,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 60 + 0.6 @@ -6888,7 +6913,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 70 + 0.7 @@ -6928,7 +6953,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 80 + 0.8 @@ -6968,7 +6993,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 90 + 0.9 @@ -7008,7 +7033,7 @@ exports[`GenePage with SV dataset "gnomad_sv_r4" has no unexpected changes 1`] = dy="0em" x={-8} > - 100 + 1.0 @@ -7496,7 +7521,7 @@ exports[`GenePage with non-SV dataset "exac" has no unexpected changes 1`] = ` >
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -8678,7 +8696,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_cnv_r4" has no unexpected changes 1`] = `
    @@ -8713,21 +8731,21 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1` className="DatasetSelector__NavigationMenuWrapper-sc-1p2fxbn-0 ebZvwy" >
  • - gnomAD v2.1.1 + gnomAD v3.1.2
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -10129,65 +10140,1518 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`
    -
    +
    +
    + +`; + +exports[`GenePage with non-SV dataset "gnomad_r2_1" has no unexpected changes 1`] = ` +
    +
    +
    +
    +

    -
    +

    +
    +
    + + Dataset + +
    -
    -
    -
    + + + +
  • + + gnomAD exome CNVs v4.0 + +
  • +
  • + + + + + + +
  • + + + + +
    +
    +
    +
    +
    +
    +
    + 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 +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + Regional missense constraint + + +
    +
    +
    +
    + gnomAD SVs v4 +
    + 63,046 samples +
    + + +
  • + - gnomAD SVs v4 + gnomAD exome CNVs v4.0
    - 63,046 samples + 464,566 samples
  • @@ -10676,30 +12157,6 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_controls" has no unexpected c -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -12135,7 +13592,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_cancer" has no unexpected > +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -13713,7 +15163,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_neuro" has no unexpected > +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -15291,7 +16734,7 @@ exports[`GenePage with non-SV dataset "gnomad_r2_1_non_topmed" has no unexpected > +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -16870,12 +18306,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3" has no unexpected changes 1`] - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -18352,12 +19781,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_controls_and_biobanks" has no u - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • 8,342 samples
    - -
  • -
  • - - gnomAD SVs v2.1 (controls) -
    - 5,192 samples -
    -
    -
  • - -
  • -
    - GRCh38 -
    + +
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (controls)
    - 464,566 samples + 5,192 samples
  • @@ -19834,12 +21256,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_cancer" has no unexpected c - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -21316,12 +22731,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_neuro" has no unexpected ch - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -22798,12 +24206,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_topmed" has no unexpected c - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -24280,12 +25681,12 @@ exports[`GenePage with non-SV dataset "gnomad_r3_non_v2" has no unexpected chang - gnomAD SVs v4 + gnomAD exome CNVs v4.0
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -25761,7 +27155,7 @@ exports[`GenePage with non-SV dataset "gnomad_r4" has no unexpected changes 1`] > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • diff --git a/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap b/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap index 183801efc..adb4b2029 100644 --- a/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap +++ b/browser/src/GenePage/__snapshots__/VariantCooccurrenceCountsTable.spec.tsx.snap @@ -2050,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 d7b6836ac..f5995e291 100644 --- a/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap +++ b/browser/src/MitochondrialVariantPage/__snapshots__/MitochondrialVariantPage.spec.tsx.snap @@ -125,7 +125,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_cnv_r4 has no unexpected c > - GRCh37 + GRCh38

  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -8402,7 +8419,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3 has no unexpected chang > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -16589,7 +16623,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_controls_and_biobanks h > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -24776,7 +24827,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_non_cancer has no unexp > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -32963,7 +33031,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_non_neuro has no unexpe > +
  • +
    + GRCh38 +
    +
  • + + gnomAD SVs v4 +
    + 63,046 samples +
    +
    +
  • +
  • + + gnomAD exome CNVs v4.0 +
    + 464,566 samples +
    +
    +
  • +
  • -
  • -
    - GRCh38 -
    -
  • - - gnomAD exome CNVs v4.0 -
    - 464,566 samples -
    -
    -
  • - @@ -41150,7 +41235,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_non_topmed has no unexp > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -49337,7 +49439,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r3_non_v2 has no unexpecte > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -57524,7 +57643,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_r4 has no unexpected chang > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -65711,7 +65847,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_sv_r2_1 has no unexpected > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -73898,7 +74051,7 @@ exports[`MitochondrialVariantPage with dataset gnomad_sv_r2_1_controls has no un > - GRCh37 + GRCh38
  • - gnomAD SVs v2.1 + gnomAD SVs v4
    - 10,847 samples + 63,046 samples
  • - gnomAD SVs v2.1 (non-neuro) + gnomAD exome CNVs v4.0
    - 8,342 samples + 464,566 samples
  • + +
  • +
    + GRCh37 +
  • - gnomAD SVs v2.1 (controls) + gnomAD SVs v2.1
    - 5,192 samples + 10,847 samples
  • - -
  • -
    - GRCh38 -
  • - gnomAD exome CNVs v4.0 + gnomAD SVs v2.1 (non-neuro)
    - 464,566 samples + 8,342 samples +
    +
    +
  • +
  • + + gnomAD SVs v2.1 (controls) +
    + 5,192 samples
  • @@ -82080,6 +82250,149 @@ exports[`MitochondrialVariantPage with dataset gnomad_sv_r2_1_non_neuro has no u +
  • + + gnomAD SVs v2.1 (non-neuro) + +
  • +
  • + + + + + + +