Skip to content

Commit 58fc257

Browse files
committed
merge
2 parents 73d1669 + 92f8272 commit 58fc257

17 files changed

+143
-87
lines changed

.github/workflows/unit-tests.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ jobs:
3939
export GRCH37_TO_GRCH38_LIFTOVER_REF_PATH=v03_pipeline/var/test/liftover/grch37_to_grch38.over.chain.gz
4040
export GRCH38_TO_GRCH37_LIFTOVER_REF_PATH=v03_pipeline/var/test/liftover/grch38_to_grch37.over.chain.gz
4141
export ACCESS_PRIVATE_REFERENCE_DATASETS=1
42+
export INCLUDE_PIPELINE_VERSION_IN_PREFIX=1
4243
export PYSPARK_SUBMIT_ARGS='--driver-memory 8G pyspark-shell'
4344
nosetests --with-coverage --cover-package v03_pipeline/lib v03_pipeline/lib
4445
coverage report --omit '*test*' --fail-under=75

v03_pipeline/bin/download_vep_reference_data.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
set -eux
44

55
REFERENCE_GENOME=$1
6-
VEP_REFERENCE_DATASETS_DIR=${VEP_REFERENCE_DATASETS_DIR:-/seqr/vep-reference-data}
6+
VEP_REFERENCE_DATASETS_DIR=${VEP_REFERENCE_DATASETS_DIR:-/var/seqr/vep-reference-data}
77

88
case $REFERENCE_GENOME in
99
GRCh38)

v03_pipeline/bin/pipeline_worker.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
project_pedigree_path,
1414
project_remap_path,
1515
)
16+
<<<<<<< HEAD
1617
from v03_pipeline.lib.tasks import (
1718
UpdateVariantAnnotationsTableWithNewSamplesTask,
1819
)
20+
=======
21+
>>>>>>> 92f827224f608388fc4e20be60a08b1f675c7408
1922
from v03_pipeline.lib.tasks.trigger_hail_backend_reload import TriggerHailBackendReload
2023
from v03_pipeline.lib.tasks.write_success_file import WriteSuccessFileTask
2124

@@ -57,6 +60,7 @@ def main():
5760
'run_id': run_id,
5861
**{k: v for k, v in lpr.model_dump().items() if k != 'projects_to_run'},
5962
}
63+
<<<<<<< HEAD
6064
tasks = [
6165
UpdateVariantAnnotationsTableWithNewSamplesTask(
6266
**loading_run_task_params,
@@ -67,6 +71,16 @@ def main():
6771
tasks.append(
6872
TriggerHailBackendReload(**loading_run_task_params),
6973
)
74+
=======
75+
if Env.SHOULD_TRIGGER_HAIL_BACKEND_RELOAD:
76+
tasks = [
77+
TriggerHailBackendReload(**loading_run_task_params),
78+
]
79+
else:
80+
tasks = [
81+
WriteSuccessFileTask(**loading_run_task_params),
82+
]
83+
>>>>>>> 92f827224f608388fc4e20be60a08b1f675c7408
7084
luigi.build(tasks)
7185
except Exception:
7286
logger.exception('Unhandled Exception')

v03_pipeline/bin/rsync_reference_data.bash

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
set -eux
44

55
REFERENCE_GENOME=$1
6-
SEQR_REFERENCE_DATA=${SEQR_REFERENCE_DATA:-/seqr/seqr-reference-data}
6+
REFERENCE_DATASETS_DIR=${REFERENCE_DATASETS_DIR:-/var/seqr/seqr-reference-data}
77

88

99
case $REFERENCE_GENOME in
@@ -16,5 +16,5 @@ case $REFERENCE_GENOME in
1616
exit 1
1717
esac
1818

19-
mkdir -p $SEQR_REFERENCE_DATA/$REFERENCE_GENOME;
20-
gsutil -m rsync -rd "gs://seqr-reference-data/v03/$REFERENCE_GENOME" $SEQR_REFERENCE_DATA/$REFERENCE_GENOME
19+
mkdir -p $REFERENCE_DATASETS_DIR/$REFERENCE_GENOME;
20+
gsutil -m rsync -rd "gs://seqr-reference-data/v03/$REFERENCE_GENOME" $REFERENCE_DATASETS_DIR/$REFERENCE_GENOME

v03_pipeline/bin/vep

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
set -eux
44

55
REFERENCE_GENOME=$1
6-
VEP_REFERENCE_DATASETS_DIR=${VEP_REFERENCE_DATASETS_DIR:-/seqr/vep-reference-data}
6+
VEP_REFERENCE_DATASETS_DIR=${VEP_REFERENCE_DATASETS_DIR:-/var/seqr/vep-reference-data}
77
VEP_DOCKER_IMAGE="gcr.io/seqr-project/vep-docker-image"
88

99
case $REFERENCE_GENOME in

v03_pipeline/deploy/Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ COPY v03_pipeline/migrations migrations
2121

2222
# Special paths
2323
COPY v03_pipeline/var/spark_config/spark-defaults.conf /usr/local/lib/python3.10/dist-packages/pyspark/conf/spark-defaults.conf
24-
COPY v03_pipeline/var/luigi_config/luigi-defaults.conf /etc/luigi/luigi.cfg
2524
COPY v03_pipeline/bin/vep /vep
2625

2726

v03_pipeline/lib/model/environment.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,23 @@
1313
HAIL_TMP_DIR = os.environ.get('HAIL_TMP_DIR', '/tmp') # noqa: S108
1414
HAIL_SEARCH_DATA_DIR = os.environ.get(
1515
'HAIL_SEARCH_DATA_DIR',
16-
'/seqr/seqr-hail-search-data',
16+
'/var/seqr/seqr-hail-search-data',
17+
)
18+
LOADING_DATASETS_DIR = os.environ.get(
19+
'LOADING_DATASETS_DIR',
20+
'/var/seqr/seqr-loading-temp',
1721
)
18-
LOADING_DATASETS_DIR = os.environ.get('LOADING_DATASETS_DIR', '/seqr/seqr-loading-temp')
1922
PRIVATE_REFERENCE_DATASETS_DIR = os.environ.get(
2023
'PRIVATE_REFERENCE_DATASETS_DIR',
21-
'/seqr/seqr-reference-data-private',
24+
'/var/seqr/seqr-reference-data-private',
2225
)
2326
REFERENCE_DATASETS_DIR = os.environ.get(
2427
'REFERENCE_DATASETS_DIR',
25-
'/seqr/seqr-reference-data',
28+
'/var/seqr/seqr-reference-data',
2629
)
2730
VEP_REFERENCE_DATASETS_DIR = os.environ.get(
2831
'VEP_REFERENCE_DATASETS_DIR',
29-
'/seqr/vep-reference-data',
32+
'/var/seqr/vep-reference-data',
3033
)
3134
HAIL_BACKEND_SERVICE_HOSTNAME = os.environ.get(
3235
'HAIL_BACKEND_SERVICE_HOSTNAME',
@@ -44,6 +47,9 @@
4447
)
4548
CHECK_SEX_AND_RELATEDNESS = os.environ.get('CHECK_SEX_AND_RELATEDNESS') == '1'
4649
EXPECT_WES_FILTERS = os.environ.get('EXPECT_WES_FILTERS') == '1'
50+
INCLUDE_PIPELINE_VERSION_IN_PREFIX = (
51+
os.environ.get('INCLUDE_PIPELINE_VERSION_IN_PREFIX') == '1'
52+
)
4753
SHOULD_REGISTER_ALLELES = os.environ.get('SHOULD_REGISTER_ALLELES') == '1'
4854
SHOULD_TRIGGER_HAIL_BACKEND_RELOAD = (
4955
os.environ.get('SHOULD_TRIGGER_HAIL_BACKEND_RELOAD') == '1'
@@ -56,12 +62,13 @@ class Env:
5662
ALLELE_REGISTRY_SECRET_NAME: str | None = ALLELE_REGISTRY_SECRET_NAME
5763
CHECK_SEX_AND_RELATEDNESS: bool = CHECK_SEX_AND_RELATEDNESS
5864
EXPECT_WES_FILTERS: bool = EXPECT_WES_FILTERS
65+
GRCH37_TO_GRCH38_LIFTOVER_REF_PATH: str = GRCH37_TO_GRCH38_LIFTOVER_REF_PATH
66+
GRCH38_TO_GRCH37_LIFTOVER_REF_PATH: str = GRCH38_TO_GRCH37_LIFTOVER_REF_PATH
5967
HAIL_BACKEND_SERVICE_HOSTNAME: str | None = HAIL_BACKEND_SERVICE_HOSTNAME
6068
HAIL_BACKEND_SERVICE_PORT: int = HAIL_BACKEND_SERVICE_PORT
6169
HAIL_TMP_DIR: str = HAIL_TMP_DIR
6270
HAIL_SEARCH_DATA_DIR: str = HAIL_SEARCH_DATA_DIR
63-
GRCH37_TO_GRCH38_LIFTOVER_REF_PATH: str = GRCH37_TO_GRCH38_LIFTOVER_REF_PATH
64-
GRCH38_TO_GRCH37_LIFTOVER_REF_PATH: str = GRCH38_TO_GRCH37_LIFTOVER_REF_PATH
71+
INCLUDE_PIPELINE_VERSION_IN_PREFIX: bool = INCLUDE_PIPELINE_VERSION_IN_PREFIX
6572
LOADING_DATASETS_DIR: str = LOADING_DATASETS_DIR
6673
PRIVATE_REFERENCE_DATASETS_DIR: str = PRIVATE_REFERENCE_DATASETS_DIR
6774
PROJECT_ID: str | None = PROJECT_ID

v03_pipeline/lib/paths.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ def _pipeline_prefix(
1919
reference_genome: ReferenceGenome,
2020
dataset_type: DatasetType,
2121
) -> str:
22+
if Env.INCLUDE_PIPELINE_VERSION_IN_PREFIX:
23+
return os.path.join(
24+
root,
25+
PipelineVersion.V3_1.value,
26+
reference_genome.value,
27+
dataset_type.value,
28+
)
2229
return os.path.join(
2330
root,
24-
PipelineVersion.V3_1.value,
2531
reference_genome.value,
2632
dataset_type.value,
2733
)
@@ -30,16 +36,24 @@ def _pipeline_prefix(
3036
def _v03_reference_data_prefix(
3137
access_control: AccessControl,
3238
reference_genome: ReferenceGenome,
39+
dataset_type: DatasetType,
3340
) -> str:
3441
root = (
3542
Env.PRIVATE_REFERENCE_DATASETS_DIR
3643
if access_control == AccessControl.PRIVATE
3744
else Env.REFERENCE_DATASETS_DIR
3845
)
46+
if Env.INCLUDE_PIPELINE_VERSION_IN_PREFIX:
47+
return os.path.join(
48+
root,
49+
PipelineVersion.V03.value,
50+
reference_genome.value,
51+
dataset_type.value,
52+
)
3953
return os.path.join(
4054
root,
41-
PipelineVersion.V03.value,
4255
reference_genome.value,
56+
dataset_type.value,
4357
)
4458

4559

@@ -52,8 +66,8 @@ def cached_reference_dataset_query_path(
5266
_v03_reference_data_prefix(
5367
AccessControl.PUBLIC,
5468
reference_genome,
69+
dataset_type,
5570
),
56-
dataset_type.value,
5771
'cached_reference_dataset_queries',
5872
f'{cached_reference_dataset_query.value}.ht',
5973
)
@@ -267,8 +281,8 @@ def valid_reference_dataset_collection_path(
267281
_v03_reference_data_prefix(
268282
reference_dataset_collection.access_control,
269283
reference_genome,
284+
dataset_type,
270285
),
271-
dataset_type.value,
272286
'reference_datasets',
273287
f'{reference_dataset_collection.value}.ht',
274288
)
@@ -338,7 +352,7 @@ def project_remap_path(
338352
),
339353
'remaps',
340354
sample_type.value,
341-
f'{project_guid}.ht',
355+
f'{project_guid}_remap.tsv',
342356
)
343357

344358

@@ -356,7 +370,7 @@ def project_pedigree_path(
356370
),
357371
'pedigrees',
358372
sample_type.value,
359-
f'{project_guid}.ht',
373+
f'{project_guid}_pedigree.tsv',
360374
)
361375

362376

v03_pipeline/lib/paths_test.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_cached_reference_dataset_query_path(self) -> None:
3737
DatasetType.SNV_INDEL,
3838
CachedReferenceDatasetQuery.CLINVAR_PATH_VARIANTS,
3939
),
40-
'/seqr/seqr-reference-data/v03/GRCh38/SNV_INDEL/cached_reference_dataset_queries/clinvar_path_variants.ht',
40+
'/var/seqr/seqr-reference-data/v03/GRCh38/SNV_INDEL/cached_reference_dataset_queries/clinvar_path_variants.ht',
4141
)
4242

4343
def test_family_table_path(self) -> None:
@@ -48,7 +48,7 @@ def test_family_table_path(self) -> None:
4848
SampleType.WES,
4949
'franklin',
5050
),
51-
'/seqr/seqr-hail-search-data/v3.1/GRCh37/SNV_INDEL/families/WES/franklin.ht',
51+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh37/SNV_INDEL/families/WES/franklin.ht',
5252
)
5353
with patch('v03_pipeline.lib.paths.Env') as mock_env:
5454
mock_env.HAIL_SEARCH_DATA_DIR = 'gs://seqr-datasets/'
@@ -61,6 +61,16 @@ def test_family_table_path(self) -> None:
6161
),
6262
'gs://seqr-datasets/v3.1/GRCh37/SNV_INDEL/families/WES/franklin.ht',
6363
)
64+
mock_env.INCLUDE_PIPELINE_VERSION_IN_PREFIX = False
65+
self.assertEqual(
66+
family_table_path(
67+
ReferenceGenome.GRCh37,
68+
DatasetType.SNV_INDEL,
69+
SampleType.WES,
70+
'franklin',
71+
),
72+
'gs://seqr-datasets/GRCh37/SNV_INDEL/families/WES/franklin.ht',
73+
)
6474

6575
def test_valid_filters_path(self) -> None:
6676
self.assertEqual(
@@ -90,7 +100,7 @@ def test_project_table_path(self) -> None:
90100
SampleType.WES,
91101
'R0652_pipeline_test',
92102
),
93-
'/seqr/seqr-hail-search-data/v3.1/GRCh38/MITO/projects/WES/R0652_pipeline_test.ht',
103+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh38/MITO/projects/WES/R0652_pipeline_test.ht',
94104
)
95105

96106
def test_valid_reference_dataset_collection_path(self) -> None:
@@ -110,7 +120,7 @@ def test_valid_reference_dataset_collection_path(self) -> None:
110120
DatasetType.SNV_INDEL,
111121
ReferenceDatasetCollection.HGMD,
112122
),
113-
'/seqr/seqr-reference-data-private/v03/GRCh38/SNV_INDEL/reference_datasets/hgmd.ht',
123+
'/var/seqr/seqr-reference-data-private/v03/GRCh38/SNV_INDEL/reference_datasets/hgmd.ht',
114124
)
115125

116126
def test_lookup_table_path(self) -> None:
@@ -119,7 +129,7 @@ def test_lookup_table_path(self) -> None:
119129
ReferenceGenome.GRCh37,
120130
DatasetType.SV,
121131
),
122-
'/seqr/seqr-hail-search-data/v3.1/GRCh37/SV/lookup.ht',
132+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh37/SV/lookup.ht',
123133
)
124134

125135
def test_sex_check_table_path(self) -> None:
@@ -129,7 +139,7 @@ def test_sex_check_table_path(self) -> None:
129139
DatasetType.SNV_INDEL,
130140
'gs://abc.efg/callset.vcf.gz',
131141
),
132-
'/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/sex_check/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.ht',
142+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/sex_check/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.ht',
133143
)
134144

135145
def test_relatedness_check_table_path(self) -> None:
@@ -139,7 +149,7 @@ def test_relatedness_check_table_path(self) -> None:
139149
DatasetType.SNV_INDEL,
140150
'gs://abc.efg/callset.vcf.gz',
141151
),
142-
'/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/relatedness_check/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.ht',
152+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/relatedness_check/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.ht',
143153
)
144154

145155
def test_validation_errors_for_run_path(self) -> None:
@@ -149,7 +159,7 @@ def test_validation_errors_for_run_path(self) -> None:
149159
DatasetType.SNV_INDEL,
150160
'manual__2023-06-26T18:30:09.349671+00:00',
151161
),
152-
'/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/validation_errors.json',
162+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/validation_errors.json',
153163
)
154164

155165
def test_metadata_for_run_path(self) -> None:
@@ -159,7 +169,7 @@ def test_metadata_for_run_path(self) -> None:
159169
DatasetType.SNV_INDEL,
160170
'manual__2023-06-26T18:30:09.349671+00:00',
161171
),
162-
'/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/metadata.json',
172+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/metadata.json',
163173
)
164174

165175
def test_variant_annotations_table_path(self) -> None:
@@ -168,7 +178,7 @@ def test_variant_annotations_table_path(self) -> None:
168178
ReferenceGenome.GRCh38,
169179
DatasetType.GCNV,
170180
),
171-
'/seqr/seqr-hail-search-data/v3.1/GRCh38/GCNV/annotations.ht',
181+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh38/GCNV/annotations.ht',
172182
)
173183

174184
def test_remapped_and_subsetted_callset_path(self) -> None:
@@ -179,7 +189,7 @@ def test_remapped_and_subsetted_callset_path(self) -> None:
179189
'gs://abc.efg/callset.vcf.gz',
180190
'R0111_tgg_bblanken_wes',
181191
),
182-
'/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/remapped_and_subsetted_callsets/R0111_tgg_bblanken_wes/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.mt',
192+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/remapped_and_subsetted_callsets/R0111_tgg_bblanken_wes/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.mt',
183193
)
184194
self.assertEqual(
185195
remapped_and_subsetted_callset_path(
@@ -188,7 +198,7 @@ def test_remapped_and_subsetted_callset_path(self) -> None:
188198
'gs://abc.efg/callset/*.vcf.gz',
189199
'R0111_tgg_bblanken_wes',
190200
),
191-
'/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/remapped_and_subsetted_callsets/R0111_tgg_bblanken_wes/bce53ccdb49a5ed2513044e1d0c6224e3ffcc323f770dc807d9175fd3c70a050.mt',
201+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/remapped_and_subsetted_callsets/R0111_tgg_bblanken_wes/bce53ccdb49a5ed2513044e1d0c6224e3ffcc323f770dc807d9175fd3c70a050.mt',
192202
)
193203

194204
def test_imported_callset_path(self) -> None:
@@ -198,7 +208,7 @@ def test_imported_callset_path(self) -> None:
198208
DatasetType.SNV_INDEL,
199209
'gs://abc.efg/callset.vcf.gz',
200210
),
201-
'/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/imported_callsets/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.mt',
211+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/imported_callsets/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.mt',
202212
)
203213

204214
def test_imputed_sex_path(self) -> None:
@@ -208,7 +218,7 @@ def test_imputed_sex_path(self) -> None:
208218
DatasetType.SNV_INDEL,
209219
'gs://abc.efg/callset.vcf.gz',
210220
),
211-
'/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/imputed_sex/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.tsv',
221+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/imputed_sex/ead56bb177a5de24178e1e622ce1d8beb3f8892bdae1c925d22ca0af4013d6dd.tsv',
212222
)
213223

214224
def test_new_variants_table_path(self) -> None:
@@ -218,7 +228,7 @@ def test_new_variants_table_path(self) -> None:
218228
DatasetType.SNV_INDEL,
219229
'manual__2023-06-26T18:30:09.349671+00:00',
220230
),
221-
'/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/new_variants.ht',
231+
'/var/seqr/seqr-hail-search-data/v3.1/GRCh38/SNV_INDEL/runs/manual__2023-06-26T18:30:09.349671+00:00/new_variants.ht',
222232
)
223233

224234
def test_project_remap_path(self) -> None:
@@ -229,7 +239,7 @@ def test_project_remap_path(self) -> None:
229239
SampleType.WGS,
230240
'R0652_pipeline_test',
231241
),
232-
'/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/remaps/WGS/R0652_pipeline_test.ht',
242+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/SNV_INDEL/remaps/WGS/R0652_pipeline_test_remap.tsv',
233243
)
234244

235245
def test_project_pedigree_path(self) -> None:
@@ -240,5 +250,5 @@ def test_project_pedigree_path(self) -> None:
240250
SampleType.WES,
241251
'R0652_pipeline_test',
242252
),
243-
'/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/pedigrees/WES/R0652_pipeline_test.ht',
253+
'/var/seqr/seqr-loading-temp/v3.1/GRCh38/GCNV/pedigrees/WES/R0652_pipeline_test_pedigree.tsv',
244254
)

0 commit comments

Comments
 (0)