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.
Files changed (58) hide show
  1. scout/__version__.py +1 -1
  2. scout/adapter/mongo/case.py +5 -1
  3. scout/adapter/mongo/cytoband.py +13 -0
  4. scout/adapter/mongo/hgnc.py +1 -1
  5. scout/adapter/mongo/variant.py +9 -0
  6. scout/adapter/mongo/variant_loader.py +73 -71
  7. scout/build/genes/hgnc_gene.py +5 -134
  8. scout/commands/download/ensembl.py +1 -0
  9. scout/commands/download/everything.py +1 -0
  10. scout/commands/download/exac.py +1 -0
  11. scout/commands/download/hgnc.py +1 -0
  12. scout/commands/download/hpo.py +1 -0
  13. scout/commands/download/omim.py +1 -0
  14. scout/commands/export/database.py +1 -0
  15. scout/commands/load/panel.py +1 -0
  16. scout/commands/load/report.py +1 -0
  17. scout/commands/update/genes.py +9 -13
  18. scout/commands/update/omim.py +1 -0
  19. scout/commands/update/panelapp.py +1 -0
  20. scout/constants/file_types.py +86 -17
  21. scout/export/exon.py +1 -0
  22. scout/load/all.py +5 -1
  23. scout/load/hgnc_gene.py +40 -7
  24. scout/models/hgnc_map.py +50 -87
  25. scout/models/phenotype_term.py +3 -3
  26. scout/parse/hgnc.py +1 -0
  27. scout/parse/orpha.py +1 -0
  28. scout/parse/variant/conservation.py +1 -0
  29. scout/parse/variant/transcript.py +1 -1
  30. scout/parse/variant/variant.py +10 -4
  31. scout/server/blueprints/cases/controllers.py +15 -1
  32. scout/server/blueprints/cases/templates/cases/case.html +96 -89
  33. scout/server/blueprints/cases/templates/cases/collapsible_actionbar.html +1 -1
  34. scout/server/blueprints/cases/templates/cases/gene_panel.html +27 -41
  35. scout/server/blueprints/cases/templates/cases/utils.html +1 -1
  36. scout/server/blueprints/panels/forms.py +1 -0
  37. scout/server/blueprints/variant/controllers.py +9 -14
  38. scout/server/blueprints/variants/controllers.py +11 -27
  39. scout/server/extensions/bionano_extension.py +1 -0
  40. scout/server/extensions/chanjo_extension.py +10 -9
  41. scout/server/extensions/gens_extension.py +1 -0
  42. scout/server/extensions/ldap_extension.py +5 -3
  43. scout/server/extensions/loqus_extension.py +16 -14
  44. scout/server/extensions/matchmaker_extension.py +1 -0
  45. scout/server/extensions/mongo_extension.py +1 -0
  46. scout/server/extensions/rerunner_extension.py +1 -0
  47. scout/server/links.py +4 -4
  48. scout/server/static/bs_styles.css +5 -5
  49. scout/server/templates/utils.html +1 -1
  50. scout/utils/ensembl_rest_clients.py +1 -0
  51. scout/utils/scout_requests.py +1 -0
  52. scout/utils/sort.py +21 -0
  53. {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/METADATA +3 -6
  54. {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/RECORD +58 -57
  55. {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/WHEEL +1 -1
  56. {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/entry_points.txt +0 -1
  57. {scout_browser-4.83.dist-info → scout_browser-4.85.dist-info}/LICENSE +0 -0
  58. {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.83"
1
+ __version__ = "4.85"
@@ -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 load_variants:
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"],
@@ -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
 
@@ -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["ensembl_id"]
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:
@@ -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
- categories = set()
205
- # Possible variant types 'clinical', 'research':
206
- variant_types = set()
207
-
208
- for file_type in FILE_TYPE_MAP:
209
- if case_obj.get("vcf_files", {}).get(file_type):
210
- categories.add(FILE_TYPE_MAP[file_type]["category"])
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 variant_types:
218
- for category in categories:
219
- LOG.info(
220
- "Updating compounds on chromosome:{0}, type:{1}, category:{2} for case:{3}".format(
221
- chrom, var_type, category, case_id
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
- # Fetch all variants from a chromosome
226
- query = {"variant_type": var_type, "chrom": chrom}
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
- # Get all variants from the database of the specific type
229
- variant_objs = self.variants(
230
- case_id=case_id,
231
- query=query,
232
- category=category,
233
- nr_of_variants=-1,
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
- # Initiate a bulk
238
- bulk = {}
239
- current_region = None
240
- special = False
241
-
242
- # Loop over the variants and check if they are in a coding region
243
- for var_obj in variant_objs:
244
- var_id = var_obj["_id"]
245
- var_chrom = var_obj["chromosome"]
246
- var_start = var_obj["position"]
247
- var_end = var_obj["end"] + 1
248
-
249
- update_bulk = True
250
- new_region = None
251
-
252
- # Check if the variant is in a coding region
253
- genomic_regions = coding_intervals.get(var_chrom, IntervalTree()).overlap(
254
- var_start, var_end
255
- )
256
-
257
- # If the variant is in a coding region
258
- if genomic_regions:
259
- # We know there is data here so get the interval id
260
- new_region = genomic_regions.pop().data
261
-
262
- if new_region and (new_region == current_region):
263
- # If the variant is in the same region as previous
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
 
@@ -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 hgnc_gene object
18
+ def build_hgnc_gene(gene_info: dict, build: bool = "37") -> dict:
19
+ """Build a HGNC gene object"""
21
20
 
22
- Args:
23
- gene_info(dict): Gene information
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)
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of ensembl files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
  from typing import List, Optional
@@ -1,6 +1,7 @@
1
1
  """Code for handling downloading Download all necessary resources for scout used by scout from
2
2
  CLI
3
3
  """
4
+
4
5
  import logging
5
6
  import pathlib
6
7
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of the ExAC genes file used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  from pathlib import Path
4
5
  from typing import Dict
@@ -3,6 +3,7 @@
3
3
  Since the variants collection is very large this dump will be optional.
4
4
 
5
5
  """
6
+
6
7
  import logging
7
8
  import subprocess
8
9
  from subprocess import CalledProcessError
@@ -1,4 +1,5 @@
1
1
  """Code for scout load panel CLI functionality"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,4 +1,5 @@
1
1
  """Code for updating reports"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -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 previosly downloaded, read those file and return their lines
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
- ensembl_id = gene_obj["ensembl_id"]
171
- ensembl_genes_dict[ensembl_id] = gene_obj
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
 
@@ -1,4 +1,5 @@
1
1
  """Code to handle updates of the OMIM-AUTO gene panel via scout CLI"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,4 +1,5 @@
1
1
  """Code to handle updates of the PANELAPP-GREEN gene panel via scout CLI"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -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": {"category": "cancer", "variant_type": "clinical"},
5
- "vcf_cancer_sv": {"category": "cancer_sv", "variant_type": "clinical"},
6
- "vcf_cancer_research": {"category": "cancer", "variant_type": "research"},
7
- "vcf_cancer_sv_research": {"category": "cancer_sv", "variant_type": "research"},
8
- "vcf_fusion": {"category": "fusion", "variant_type": "clinical"},
9
- "vcf_fusion_research": {"category": "fusion", "variant_type": "research"},
10
- "vcf_snv": {"category": "snv", "variant_type": "clinical"},
11
- "vcf_snv_mt": {"category": "snv", "variant_type": "clinical"},
12
- "vcf_snv_research": {"category": "snv", "variant_type": "research"},
13
- "vcf_snv_research_mt": {"category": "snv", "variant_type": "research"},
14
- "vcf_sv": {"category": "sv", "variant_type": "clinical"},
15
- "vcf_sv_mt": {"category": "sv", "variant_type": "clinical"},
16
- "vcf_sv_research": {"category": "sv", "variant_type": "research"},
17
- "vcf_sv_research_mt": {"category": "sv", "variant_type": "research"},
18
- "vcf_str": {"category": "str", "variant_type": "clinical"},
19
- "vcf_mei": {"category": "mei", "variant_type": "clinical"},
20
- "vcf_mei_research": {"category": "mei", "variant_type": "research"},
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__)