scout-browser 4.83__py3-none-any.whl → 4.85__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scout/__version__.py +1 -1
- scout/adapter/mongo/case.py +5 -1
- scout/adapter/mongo/cytoband.py +13 -0
- scout/adapter/mongo/hgnc.py +1 -1
- scout/adapter/mongo/variant.py +9 -0
- scout/adapter/mongo/variant_loader.py +73 -71
- scout/build/genes/hgnc_gene.py +5 -134
- scout/commands/download/ensembl.py +1 -0
- scout/commands/download/everything.py +1 -0
- scout/commands/download/exac.py +1 -0
- scout/commands/download/hgnc.py +1 -0
- scout/commands/download/hpo.py +1 -0
- scout/commands/download/omim.py +1 -0
- scout/commands/export/database.py +1 -0
- scout/commands/load/panel.py +1 -0
- scout/commands/load/report.py +1 -0
- scout/commands/update/genes.py +9 -13
- scout/commands/update/omim.py +1 -0
- scout/commands/update/panelapp.py +1 -0
- scout/constants/file_types.py +86 -17
- scout/export/exon.py +1 -0
- scout/load/all.py +5 -1
- scout/load/hgnc_gene.py +40 -7
- scout/models/hgnc_map.py +50 -87
- scout/models/phenotype_term.py +3 -3
- scout/parse/hgnc.py +1 -0
- scout/parse/orpha.py +1 -0
- scout/parse/variant/conservation.py +1 -0
- scout/parse/variant/transcript.py +1 -1
- scout/parse/variant/variant.py +10 -4
- scout/server/blueprints/cases/controllers.py +15 -1
- scout/server/blueprints/cases/templates/cases/case.html +96 -89
- scout/server/blueprints/cases/templates/cases/collapsible_actionbar.html +1 -1
- scout/server/blueprints/cases/templates/cases/gene_panel.html +27 -41
- scout/server/blueprints/cases/templates/cases/utils.html +1 -1
- scout/server/blueprints/panels/forms.py +1 -0
- scout/server/blueprints/variant/controllers.py +9 -14
- scout/server/blueprints/variants/controllers.py +11 -27
- scout/server/extensions/bionano_extension.py +1 -0
- scout/server/extensions/chanjo_extension.py +10 -9
- scout/server/extensions/gens_extension.py +1 -0
- scout/server/extensions/ldap_extension.py +5 -3
- scout/server/extensions/loqus_extension.py +16 -14
- scout/server/extensions/matchmaker_extension.py +1 -0
- scout/server/extensions/mongo_extension.py +1 -0
- scout/server/extensions/rerunner_extension.py +1 -0
- scout/server/links.py +4 -4
- scout/server/static/bs_styles.css +5 -5
- scout/server/templates/utils.html +1 -1
- scout/utils/ensembl_rest_clients.py +1 -0
- scout/utils/scout_requests.py +1 -0
- scout/utils/sort.py +21 -0
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/METADATA +3 -6
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/RECORD +58 -57
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/WHEEL +1 -1
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/entry_points.txt +0 -1
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/LICENSE +0 -0
- {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/top_level.txt +0 -0
scout/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "4.
|
1
|
+
__version__ = "4.85"
|
scout/adapter/mongo/case.py
CHANGED
@@ -14,6 +14,7 @@ from scout.constants import ACMG_MAP, FILE_TYPE_MAP, ID_PROJECTION
|
|
14
14
|
from scout.exceptions import ConfigError, IntegrityError
|
15
15
|
from scout.parse.variant.ids import parse_document_id
|
16
16
|
from scout.utils.algorithms import ui_score
|
17
|
+
from scout.utils.sort import get_load_priority
|
17
18
|
|
18
19
|
LOG = logging.getLogger(__name__)
|
19
20
|
|
@@ -904,7 +905,10 @@ class CaseHandler(object):
|
|
904
905
|
continue
|
905
906
|
load_variants.add((vcf_file["variant_type"], vcf_file["category"]))
|
906
907
|
|
907
|
-
for variant_type, category in
|
908
|
+
for variant_type, category in sorted(
|
909
|
+
load_variants,
|
910
|
+
key=lambda tup: get_load_priority(variant_type=tup[0], category=tup[1]),
|
911
|
+
):
|
908
912
|
if update:
|
909
913
|
self.delete_variants(
|
910
914
|
case_id=case_obj["_id"],
|
scout/adapter/mongo/cytoband.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
import logging
|
3
|
+
from typing import Dict
|
3
4
|
|
4
5
|
import pymongo
|
5
6
|
|
@@ -20,6 +21,18 @@ class CytobandHandler(object):
|
|
20
21
|
result = self.cytoband_collection.insert_many(cytobands)
|
21
22
|
LOG.debug(f"Number of inserted documents:{len(result.inserted_ids)}")
|
22
23
|
|
24
|
+
def cytoband_to_coordinates(self, build: str) -> Dict[str, dict]:
|
25
|
+
"""Returns a dictionary with cytoband name as key and its coordinates as value."""
|
26
|
+
cytobands = self.cytoband_collection.find({"build": build})
|
27
|
+
return {
|
28
|
+
"".join([cytoband["chrom"], cytoband["band"]]): {
|
29
|
+
"chromosome": cytoband["chrom"],
|
30
|
+
"start": int(cytoband["start"]),
|
31
|
+
"stop": int(cytoband["stop"]),
|
32
|
+
}
|
33
|
+
for cytoband in cytobands
|
34
|
+
}
|
35
|
+
|
23
36
|
def cytoband_by_chrom(self, build="37"):
|
24
37
|
"""Returns a dictionary of cytobands with chromosomes as keys
|
25
38
|
|
scout/adapter/mongo/hgnc.py
CHANGED
@@ -405,7 +405,7 @@ class GeneHandler(object):
|
|
405
405
|
add_transcripts = True
|
406
406
|
|
407
407
|
for gene_obj in self.all_genes(build=build, add_transcripts=add_transcripts):
|
408
|
-
ensg_id = gene_obj
|
408
|
+
ensg_id = gene_obj.get("ensembl_id")
|
409
409
|
hgnc_id = gene_obj["hgnc_id"]
|
410
410
|
transcript_objs = gene_obj.get("ens_transcripts")
|
411
411
|
if id_transcripts and transcript_objs:
|
scout/adapter/mongo/variant.py
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# stdlib modules
|
3
3
|
import logging
|
4
4
|
import re
|
5
|
+
from typing import Any
|
5
6
|
|
6
7
|
# Third party modules
|
7
8
|
import pymongo
|
@@ -221,6 +222,14 @@ class VariantHandler(VariantLoader):
|
|
221
222
|
query = self.build_query(case_id, query=query, variant_ids=variant_ids, category=category)
|
222
223
|
return self.variant_collection.count_documents(query)
|
223
224
|
|
225
|
+
def variant_update_field(self, variant_id: str, field_name: str, field_value: Any) -> dict:
|
226
|
+
"""Updates the value of the given key(field_name) in the variant document in the database."""
|
227
|
+
return self.variant_collection.find_one_and_update(
|
228
|
+
{"_id": variant_id},
|
229
|
+
{"$set": {field_name: field_value}},
|
230
|
+
return_document=pymongo.ReturnDocument.AFTER,
|
231
|
+
)
|
232
|
+
|
224
233
|
def variant(
|
225
234
|
self,
|
226
235
|
document_id=None,
|
@@ -27,6 +27,7 @@ from scout.parse.variant.headers import (
|
|
27
27
|
from scout.parse.variant.ids import parse_simple_id
|
28
28
|
from scout.parse.variant.managed_variant import parse_managed_variant_id
|
29
29
|
from scout.parse.variant.rank_score import parse_rank_score
|
30
|
+
from scout.utils.sort import get_load_priority
|
30
31
|
|
31
32
|
LOG = logging.getLogger(__name__)
|
32
33
|
|
@@ -200,87 +201,88 @@ class VariantLoader(object):
|
|
200
201
|
"""
|
201
202
|
|
202
203
|
case_id = case_obj["_id"]
|
203
|
-
# Possible categories 'snv', 'sv', 'str', 'cancer', 'cancer_sv'
|
204
|
-
|
205
|
-
# Possible variant types 'clinical', 'research'
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
if case_obj.get("vcf_files", {}).get(file_type)
|
210
|
-
|
211
|
-
variant_types.add(FILE_TYPE_MAP[file_type]["variant_type"])
|
204
|
+
# Possible categories 'snv', 'sv', 'str', 'cancer', 'cancer_sv'. Sort according to load order to ensure Cancer SNVs before
|
205
|
+
# Cancer SVs, in particular, and keep a consistent variant_id collision resolution order.
|
206
|
+
# Possible variant types are 'clinical', 'research'.
|
207
|
+
load_variants = {
|
208
|
+
(FILE_TYPE_MAP[file_type]["variant_type"], FILE_TYPE_MAP[file_type]["category"])
|
209
|
+
for file_type in FILE_TYPE_MAP
|
210
|
+
if case_obj.get("vcf_files", {}).get(file_type)
|
211
|
+
}
|
212
212
|
|
213
213
|
coding_intervals = self.get_coding_intervals(build=build)
|
214
214
|
# Loop over all intervals
|
215
215
|
for chrom in CHROMOSOMES:
|
216
216
|
intervals = coding_intervals.get(chrom, IntervalTree())
|
217
|
-
for var_type in
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
217
|
+
for var_type, category in sorted(
|
218
|
+
list(load_variants),
|
219
|
+
key=lambda tup: get_load_priority(variant_type=tup[0], category=tup[1]),
|
220
|
+
):
|
221
|
+
LOG.info(
|
222
|
+
"Updating compounds on chromosome:{0}, type:{1}, category:{2} for case:{3}".format(
|
223
|
+
chrom, var_type, category, case_id
|
223
224
|
)
|
225
|
+
)
|
226
|
+
|
227
|
+
# Fetch all variants from a chromosome
|
228
|
+
query = {"variant_type": var_type, "chrom": chrom}
|
229
|
+
|
230
|
+
# Get all variants from the database of the specific type
|
231
|
+
variant_objs = self.variants(
|
232
|
+
case_id=case_id,
|
233
|
+
query=query,
|
234
|
+
category=category,
|
235
|
+
nr_of_variants=-1,
|
236
|
+
sort_key="position",
|
237
|
+
)
|
238
|
+
|
239
|
+
# Initiate a bulk
|
240
|
+
bulk = {}
|
241
|
+
current_region = None
|
242
|
+
special = False
|
224
243
|
|
225
|
-
|
226
|
-
|
244
|
+
# Loop over the variants and check if they are in a coding region
|
245
|
+
for var_obj in variant_objs:
|
246
|
+
var_id = var_obj["_id"]
|
247
|
+
var_chrom = var_obj["chromosome"]
|
248
|
+
var_start = var_obj["position"]
|
249
|
+
var_end = var_obj["end"] + 1
|
227
250
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
sort_key="position",
|
251
|
+
update_bulk = True
|
252
|
+
new_region = None
|
253
|
+
|
254
|
+
# Check if the variant is in a coding region
|
255
|
+
genomic_regions = coding_intervals.get(var_chrom, IntervalTree()).overlap(
|
256
|
+
var_start, var_end
|
235
257
|
)
|
236
258
|
|
237
|
-
#
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
# we add it to the same bulk
|
265
|
-
update_bulk = False
|
266
|
-
|
267
|
-
current_region = new_region
|
268
|
-
|
269
|
-
# If the variant is not in a current region we update the compounds
|
270
|
-
# from the previous region, if any. Otherwise continue
|
271
|
-
if update_bulk and bulk:
|
272
|
-
self.update_compounds(bulk)
|
273
|
-
self.update_mongo_compound_variants(bulk)
|
274
|
-
bulk = {}
|
275
|
-
|
276
|
-
if new_region:
|
277
|
-
bulk[var_id] = var_obj
|
278
|
-
|
279
|
-
if not bulk:
|
280
|
-
continue
|
281
|
-
|
282
|
-
self.update_compounds(bulk)
|
283
|
-
self.update_mongo_compound_variants(bulk)
|
259
|
+
# If the variant is in a coding region
|
260
|
+
if genomic_regions:
|
261
|
+
# We know there is data here so get the interval id
|
262
|
+
new_region = genomic_regions.pop().data
|
263
|
+
|
264
|
+
if new_region and (new_region == current_region):
|
265
|
+
# If the variant is in the same region as previous
|
266
|
+
# we add it to the same bulk
|
267
|
+
update_bulk = False
|
268
|
+
|
269
|
+
current_region = new_region
|
270
|
+
|
271
|
+
# If the variant is not in a current region we update the compounds
|
272
|
+
# from the previous region, if any. Otherwise continue
|
273
|
+
if update_bulk and bulk:
|
274
|
+
self.update_compounds(bulk)
|
275
|
+
self.update_mongo_compound_variants(bulk)
|
276
|
+
bulk = {}
|
277
|
+
|
278
|
+
if new_region:
|
279
|
+
bulk[var_id] = var_obj
|
280
|
+
|
281
|
+
if not bulk:
|
282
|
+
continue
|
283
|
+
|
284
|
+
self.update_compounds(bulk)
|
285
|
+
self.update_mongo_compound_variants(bulk)
|
284
286
|
|
285
287
|
LOG.info("All compounds updated")
|
286
288
|
|
scout/build/genes/hgnc_gene.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
|
-
from scout.constants import GENE_CONSTRAINT_LABELS
|
4
3
|
from scout.models.hgnc_map import HgncGene
|
5
4
|
|
6
5
|
LOG = logging.getLogger(__name__)
|
@@ -16,137 +15,9 @@ def build_phenotype(phenotype_info):
|
|
16
15
|
return phenotype_obj
|
17
16
|
|
18
17
|
|
19
|
-
def build_hgnc_gene(gene_info, build="37"):
|
20
|
-
"""Build a
|
18
|
+
def build_hgnc_gene(gene_info: dict, build: bool = "37") -> dict:
|
19
|
+
"""Build a HGNC gene object"""
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
Returns:
|
26
|
-
gene_obj(dict)
|
27
|
-
|
28
|
-
{
|
29
|
-
'_id': ObjectId(),
|
30
|
-
# This is the hgnc id, required:
|
31
|
-
'hgnc_id': int,
|
32
|
-
# The primary symbol, required
|
33
|
-
'hgnc_symbol': str,
|
34
|
-
'ensembl_id': str, # required
|
35
|
-
'build': str, # '37' or '38', defaults to '37', required
|
36
|
-
|
37
|
-
'chromosome': str, # required
|
38
|
-
'start': int, # required
|
39
|
-
'end': int, # required
|
40
|
-
|
41
|
-
'description': str, # Gene description
|
42
|
-
'aliases': list(), # Gene symbol aliases, includes hgnc_symbol, str
|
43
|
-
'entrez_id': int,
|
44
|
-
'omim_id': int,
|
45
|
-
'pli_score': float,
|
46
|
-
'primary_transcripts': list(), # List of refseq transcripts (str)
|
47
|
-
'ucsc_id': str,
|
48
|
-
'uniprot_ids': list(), # List of str
|
49
|
-
'vega_id': str,
|
50
|
-
'transcripts': list(), # List of hgnc_transcript
|
51
|
-
|
52
|
-
# Inheritance information
|
53
|
-
'inheritance_models': list(), # List of model names
|
54
|
-
'incomplete_penetrance': bool, # Acquired from HPO
|
55
|
-
|
56
|
-
# Phenotype information
|
57
|
-
'phenotypes': list(), # List of dictionaries with phenotype information
|
58
|
-
}
|
59
|
-
"""
|
60
|
-
try:
|
61
|
-
hgnc_id = int(gene_info["hgnc_id"])
|
62
|
-
except KeyError as err:
|
63
|
-
raise KeyError("Gene has to have a hgnc_id")
|
64
|
-
except ValueError as err:
|
65
|
-
raise ValueError("hgnc_id has to be integer")
|
66
|
-
|
67
|
-
try:
|
68
|
-
hgnc_symbol = gene_info["hgnc_symbol"]
|
69
|
-
except KeyError as err:
|
70
|
-
raise KeyError("Gene has to have a hgnc_symbol")
|
71
|
-
|
72
|
-
try:
|
73
|
-
ensembl_id = gene_info["ensembl_gene_id"]
|
74
|
-
except KeyError as err:
|
75
|
-
raise KeyError("Gene has to have a ensembl_id")
|
76
|
-
|
77
|
-
try:
|
78
|
-
chromosome = gene_info["chromosome"]
|
79
|
-
except KeyError as err:
|
80
|
-
raise KeyError("Gene has to have a chromosome")
|
81
|
-
|
82
|
-
try:
|
83
|
-
start = int(gene_info["start"])
|
84
|
-
except KeyError as err:
|
85
|
-
raise KeyError("Gene has to have a start position")
|
86
|
-
except TypeError as err:
|
87
|
-
raise TypeError("Gene start has to be a integer")
|
88
|
-
|
89
|
-
try:
|
90
|
-
end = int(gene_info["end"])
|
91
|
-
except KeyError as err:
|
92
|
-
raise KeyError("Gene has to have a end position")
|
93
|
-
except TypeError as err:
|
94
|
-
raise TypeError("Gene end has to be a integer")
|
95
|
-
|
96
|
-
gene_obj = HgncGene(
|
97
|
-
hgnc_id=hgnc_id,
|
98
|
-
hgnc_symbol=hgnc_symbol,
|
99
|
-
ensembl_id=ensembl_id,
|
100
|
-
chrom=chromosome,
|
101
|
-
start=start,
|
102
|
-
end=end,
|
103
|
-
build=build,
|
104
|
-
)
|
105
|
-
|
106
|
-
if gene_info.get("description"):
|
107
|
-
gene_obj["description"] = gene_info["description"]
|
108
|
-
# LOG.debug("Adding info %s", gene_info['description'])
|
109
|
-
|
110
|
-
if gene_info.get("previous_symbols"):
|
111
|
-
gene_obj["aliases"] = gene_info["previous_symbols"]
|
112
|
-
|
113
|
-
if gene_info.get("entrez_id"):
|
114
|
-
gene_obj["entrez_id"] = int(gene_info["entrez_id"])
|
115
|
-
|
116
|
-
if gene_info.get("omim_id"):
|
117
|
-
gene_obj["omim_id"] = int(gene_info["omim_id"])
|
118
|
-
|
119
|
-
for constraint in GENE_CONSTRAINT_LABELS.keys():
|
120
|
-
if gene_info.get(constraint):
|
121
|
-
gene_obj[constraint] = float(gene_info[constraint])
|
122
|
-
|
123
|
-
if gene_info.get("ref_seq"):
|
124
|
-
gene_obj["primary_transcripts"] = gene_info["ref_seq"]
|
125
|
-
|
126
|
-
if gene_info.get("ucsc_id"):
|
127
|
-
gene_obj["ucsc_id"] = gene_info["ucsc_id"]
|
128
|
-
|
129
|
-
if gene_info.get("uniprot_ids"):
|
130
|
-
gene_obj["uniprot_ids"] = gene_info["uniprot_ids"]
|
131
|
-
|
132
|
-
if gene_info.get("vega_id"):
|
133
|
-
gene_obj["vega_id"] = gene_info["vega_id"]
|
134
|
-
|
135
|
-
if gene_info.get("incomplete_penetrance"):
|
136
|
-
gene_obj["incomplete_penetrance"] = True
|
137
|
-
|
138
|
-
if gene_info.get("inheritance_models"):
|
139
|
-
gene_obj["inheritance_models"] = gene_info["inheritance_models"]
|
140
|
-
|
141
|
-
phenotype_objs = []
|
142
|
-
for phenotype_info in gene_info.get("phenotypes", []):
|
143
|
-
phenotype_objs.append(build_phenotype(phenotype_info))
|
144
|
-
|
145
|
-
if phenotype_objs:
|
146
|
-
gene_obj["phenotypes"] = phenotype_objs
|
147
|
-
|
148
|
-
for key in list(gene_obj):
|
149
|
-
if gene_obj[key] is None:
|
150
|
-
gene_obj.pop(key)
|
151
|
-
|
152
|
-
return gene_obj
|
21
|
+
gene_info["build"] = build
|
22
|
+
hgnc_gene = HgncGene(**gene_info)
|
23
|
+
return hgnc_gene.model_dump(exclude_none=True)
|
scout/commands/download/exac.py
CHANGED
scout/commands/download/hgnc.py
CHANGED
scout/commands/download/hpo.py
CHANGED
scout/commands/download/omim.py
CHANGED
scout/commands/load/panel.py
CHANGED
scout/commands/load/report.py
CHANGED
scout/commands/update/genes.py
CHANGED
@@ -30,6 +30,9 @@ from scout.load import load_hgnc_genes, load_transcripts
|
|
30
30
|
from scout.server.extensions import store
|
31
31
|
from scout.utils.handle import get_file_handle
|
32
32
|
|
33
|
+
ENSEMBL_GENE_RESOURCES = {"37": "ensembl_genes_37", "38": "ensembl_genes_38"}
|
34
|
+
ENSEMBL_TX_RESOURCES = {"37": "ensembl_transcripts_37", "38": "ensembl_transcripts_38"}
|
35
|
+
|
33
36
|
LOG = logging.getLogger(__name__)
|
34
37
|
|
35
38
|
|
@@ -137,7 +140,7 @@ def genes(build, downloads_folder, api_key):
|
|
137
140
|
except Exception as ex:
|
138
141
|
LOG.error(ex)
|
139
142
|
fetch_downloaded_resources(resources, tempdir, builds)
|
140
|
-
else: # If resources have been
|
143
|
+
else: # If resources have been previously downloaded, read those file and return their lines
|
141
144
|
fetch_downloaded_resources(resources, downloads_folder, builds)
|
142
145
|
|
143
146
|
# Load genes and transcripts info
|
@@ -147,11 +150,7 @@ def genes(build, downloads_folder, api_key):
|
|
147
150
|
LOG.warning("Dropping all transcript information")
|
148
151
|
adapter.drop_transcripts(genome_build)
|
149
152
|
|
150
|
-
ensembl_gene_res = (
|
151
|
-
resources.get("ensembl_genes_37")
|
152
|
-
if genome_build == "37"
|
153
|
-
else resources.get("ensembl_genes_38")
|
154
|
-
) # It will be none if everything needs to be downloaded
|
153
|
+
ensembl_gene_res = resources.get(ENSEMBL_GENE_RESOURCES[genome_build])
|
155
154
|
|
156
155
|
# Load the genes
|
157
156
|
hgnc_genes = load_hgnc_genes(
|
@@ -167,15 +166,12 @@ def genes(build, downloads_folder, api_key):
|
|
167
166
|
|
168
167
|
ensembl_genes_dict = {}
|
169
168
|
for gene_obj in hgnc_genes:
|
170
|
-
|
171
|
-
|
169
|
+
if gene_obj.get("ensembl_id"):
|
170
|
+
ensembl_id = gene_obj["ensembl_id"]
|
171
|
+
ensembl_genes_dict[ensembl_id] = gene_obj
|
172
172
|
|
173
173
|
# Load the transcripts
|
174
|
-
ensembl_tx_res = (
|
175
|
-
resources.get("ensembl_transcripts_37")
|
176
|
-
if genome_build == "37"
|
177
|
-
else resources.get("ensembl_transcripts_38")
|
178
|
-
) # It will be none if everything needs to be downloaded
|
174
|
+
ensembl_tx_res = resources.get(ENSEMBL_TX_RESOURCES[genome_build])
|
179
175
|
|
180
176
|
load_transcripts(adapter, ensembl_tx_res, genome_build, ensembl_genes_dict)
|
181
177
|
|
scout/commands/update/omim.py
CHANGED
scout/constants/file_types.py
CHANGED
@@ -1,21 +1,90 @@
|
|
1
1
|
# Collect general information about the file types used in Scout
|
2
|
+
# Load priority determines load order, with lowest value loaded first.
|
2
3
|
|
3
4
|
FILE_TYPE_MAP = {
|
4
|
-
"vcf_cancer": {
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
"
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
"
|
20
|
-
|
5
|
+
"vcf_cancer": {
|
6
|
+
"category": "cancer",
|
7
|
+
"variant_type": "clinical",
|
8
|
+
"load_priority": 10,
|
9
|
+
},
|
10
|
+
"vcf_cancer_research": {
|
11
|
+
"category": "cancer",
|
12
|
+
"variant_type": "research",
|
13
|
+
"load_priority": 110,
|
14
|
+
},
|
15
|
+
"vcf_cancer_sv": {
|
16
|
+
"category": "cancer_sv",
|
17
|
+
"variant_type": "clinical",
|
18
|
+
"load_priority": 20,
|
19
|
+
},
|
20
|
+
"vcf_cancer_sv_research": {
|
21
|
+
"category": "cancer_sv",
|
22
|
+
"variant_type": "research",
|
23
|
+
"load_priority": 120,
|
24
|
+
},
|
25
|
+
"vcf_fusion": {
|
26
|
+
"category": "fusion",
|
27
|
+
"variant_type": "clinical",
|
28
|
+
"load_priority": 70,
|
29
|
+
},
|
30
|
+
"vcf_fusion_research": {
|
31
|
+
"category": "fusion",
|
32
|
+
"variant_type": "research",
|
33
|
+
"load_priority": 170,
|
34
|
+
},
|
35
|
+
"vcf_mei": {
|
36
|
+
"category": "mei",
|
37
|
+
"variant_type": "clinical",
|
38
|
+
"load_priority": 60,
|
39
|
+
},
|
40
|
+
"vcf_mei_research": {
|
41
|
+
"category": "mei",
|
42
|
+
"variant_type": "research",
|
43
|
+
"load_priority": 160,
|
44
|
+
},
|
45
|
+
"vcf_snv": {
|
46
|
+
"category": "snv",
|
47
|
+
"variant_type": "clinical",
|
48
|
+
"load_priority": 35,
|
49
|
+
},
|
50
|
+
"vcf_snv_mt": {
|
51
|
+
"category": "snv",
|
52
|
+
"variant_type": "clinical",
|
53
|
+
"load_priority": 30,
|
54
|
+
},
|
55
|
+
"vcf_snv_research": {
|
56
|
+
"category": "snv",
|
57
|
+
"variant_type": "research",
|
58
|
+
"load_priority": 135,
|
59
|
+
},
|
60
|
+
"vcf_snv_research_mt": {
|
61
|
+
"category": "snv",
|
62
|
+
"variant_type": "research",
|
63
|
+
"load_priority": 130,
|
64
|
+
},
|
65
|
+
"vcf_sv": {
|
66
|
+
"category": "sv",
|
67
|
+
"variant_type": "clinical",
|
68
|
+
"load_priority": 45,
|
69
|
+
},
|
70
|
+
"vcf_sv_mt": {
|
71
|
+
"category": "sv",
|
72
|
+
"variant_type": "clinical",
|
73
|
+
"load_priority": 40,
|
74
|
+
},
|
75
|
+
"vcf_sv_research": {
|
76
|
+
"category": "sv",
|
77
|
+
"variant_type": "research",
|
78
|
+
"load_priority": 145,
|
79
|
+
},
|
80
|
+
"vcf_sv_research_mt": {
|
81
|
+
"category": "sv",
|
82
|
+
"variant_type": "research",
|
83
|
+
"load_priority": 140,
|
84
|
+
},
|
85
|
+
"vcf_str": {
|
86
|
+
"category": "str",
|
87
|
+
"variant_type": "clinical",
|
88
|
+
"load_priority": 50,
|
89
|
+
},
|
21
90
|
}
|
scout/export/exon.py
CHANGED
@@ -11,6 +11,7 @@ head develop/mip_references/grch37_scout_exons_-2017-01-.bed
|
|
11
11
|
7 65413656 65413769 7-65413658-65413767 NM_173517 21492 VKORC1L1
|
12
12
|
5 159776172 159776790 5-159776174-159776788 NM_031908 14325 C1QTNF2
|
13
13
|
"""
|
14
|
+
|
14
15
|
import logging
|
15
16
|
|
16
17
|
LOG = logging.getLogger(__name__)
|