scout-browser 4.90__py3-none-any.whl → 4.91__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 +27 -38
- scout/commands/export/variant.py +14 -4
- scout/commands/load/panel.py +2 -1
- scout/commands/update/panelapp.py +11 -3
- scout/commands/view/case.py +2 -2
- scout/constants/__init__.py +1 -2
- scout/constants/acmg.py +15 -15
- scout/constants/case_tags.py +0 -46
- scout/constants/clnsig.py +2 -1
- scout/constants/gene_tags.py +0 -6
- scout/constants/panels.py +16 -0
- scout/constants/variants_export.py +2 -0
- scout/demo/__init__.py +4 -1
- scout/demo/panelapp_panel.json +463 -0
- scout/demo/panelapp_panels_reduced.json +37 -0
- scout/load/panel.py +3 -142
- scout/load/panelapp.py +138 -0
- scout/models/case/case_loading_models.py +5 -4
- scout/parse/matchmaker.py +18 -6
- scout/parse/panel.py +3 -117
- scout/parse/panelapp.py +112 -0
- scout/parse/variant/clnsig.py +26 -21
- scout/parse/variant/genotype.py +6 -5
- scout/server/blueprints/alignviewers/controllers.py +7 -5
- scout/server/blueprints/alignviewers/templates/alignviewers/utils.html +1 -1
- scout/server/blueprints/cases/templates/cases/case_sma.html +49 -42
- scout/server/blueprints/cases/templates/cases/collapsible_actionbar.html +27 -12
- scout/server/blueprints/cases/views.py +18 -7
- scout/server/blueprints/clinvar/templates/clinvar/clinvar_submissions.html +7 -7
- scout/server/blueprints/clinvar/templates/clinvar/multistep_add_variant.html +2 -2
- scout/server/blueprints/dashboard/controllers.py +128 -165
- scout/server/blueprints/dashboard/forms.py +3 -13
- scout/server/blueprints/dashboard/templates/dashboard/dashboard_general.html +17 -22
- scout/server/blueprints/institutes/forms.py +1 -2
- scout/server/blueprints/institutes/templates/overview/cases.html +2 -133
- scout/server/blueprints/institutes/templates/overview/utils.html +135 -0
- scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html +5 -0
- scout/server/blueprints/panels/templates/panels/panel.html +5 -1
- scout/server/blueprints/panels/templates/panels/panel_pdf_simple.html +5 -1
- scout/server/blueprints/variant/controllers.py +6 -1
- scout/server/blueprints/variant/templates/variant/buttons.html +11 -10
- scout/server/blueprints/variant/templates/variant/components.html +63 -44
- scout/server/blueprints/variant/templates/variant/str-variant-reviewer.html +1 -1
- scout/server/blueprints/variant/templates/variant/utils.html +38 -10
- scout/server/blueprints/variant/templates/variant/variant.html +1 -1
- scout/server/blueprints/variants/controllers.py +9 -4
- scout/server/blueprints/variants/templates/variants/cancer-sv-variants.html +9 -5
- scout/server/blueprints/variants/templates/variants/cancer-variants.html +6 -17
- scout/server/blueprints/variants/templates/variants/str-variants.html +2 -2
- scout/server/blueprints/variants/templates/variants/sv-variants.html +8 -1
- scout/server/blueprints/variants/templates/variants/utils.html +14 -0
- scout/server/extensions/__init__.py +2 -0
- scout/server/extensions/panelapp_extension.py +75 -0
- scout/server/links.py +19 -1
- scout/server/utils.py +25 -33
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/METADATA +1 -1
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/RECORD +62 -58
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/WHEEL +1 -1
- scout/demo/panelapp_test_panel.json +0 -79
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/LICENSE +0 -0
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/entry_points.txt +0 -0
- {scout_browser-4.90.dist-info → scout_browser-4.91.dist-info}/top_level.txt +0 -0
scout/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "4.
|
1
|
+
__version__ = "4.91"
|
scout/adapter/mongo/case.py
CHANGED
@@ -4,7 +4,7 @@ import logging
|
|
4
4
|
import operator
|
5
5
|
import re
|
6
6
|
from copy import deepcopy
|
7
|
-
from typing import Any, Dict, List, Optional
|
7
|
+
from typing import Any, Dict, List, Optional
|
8
8
|
|
9
9
|
import pymongo
|
10
10
|
from bson import ObjectId
|
@@ -219,7 +219,7 @@ class CaseHandler(object):
|
|
219
219
|
query.setdefault("$or", []).extend(or_options)
|
220
220
|
|
221
221
|
def populate_case_query(
|
222
|
-
self, query: dict, name_query:
|
222
|
+
self, query: dict, name_query: ImmutableMultiDict, owner=None, collaborator=None
|
223
223
|
):
|
224
224
|
"""Parses and adds query parameters provided by users in cases search filter."""
|
225
225
|
|
@@ -306,36 +306,29 @@ class CaseHandler(object):
|
|
306
306
|
users = self.user_collection.find(user_query)
|
307
307
|
query["assignees"] = {"$in": [user["_id"] for user in users]}
|
308
308
|
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
"similar_pheno", # In order to be able to sort results by phenotype similarity, keep this at the bottom
|
333
|
-
]:
|
334
|
-
query_value = name_query.get(query_field)
|
335
|
-
if query_value not in ["", None]:
|
336
|
-
set_case_item_query(
|
337
|
-
query=query, query_field=query_field, query_value=query_value.strip()
|
338
|
-
)
|
309
|
+
# POST request form from more advanced case search from cases page
|
310
|
+
for query_field in [
|
311
|
+
"case",
|
312
|
+
"exact_pheno",
|
313
|
+
"exact_dia",
|
314
|
+
"synopsis",
|
315
|
+
"panel",
|
316
|
+
"status",
|
317
|
+
"tags",
|
318
|
+
"track",
|
319
|
+
"pheno_group",
|
320
|
+
"cohort",
|
321
|
+
"pinned",
|
322
|
+
"causative",
|
323
|
+
"user",
|
324
|
+
"similar_case", # In order to be able to sort results by phenotype similarity, keep this at the bottom
|
325
|
+
"similar_pheno", # In order to be able to sort results by phenotype similarity, keep this at the bottom
|
326
|
+
]:
|
327
|
+
query_value = name_query.get(query_field)
|
328
|
+
if query_value not in ["", None]:
|
329
|
+
set_case_item_query(
|
330
|
+
query=query, query_field=query_field, query_value=query_value.strip()
|
331
|
+
)
|
339
332
|
|
340
333
|
def _update_case_id_query(self, query, id_list):
|
341
334
|
"""Update a case query ["_id"]["$in"] values using an additional list of case _ids
|
@@ -371,7 +364,7 @@ class CaseHandler(object):
|
|
371
364
|
group: Optional[ObjectId] = None,
|
372
365
|
pinned: bool = False,
|
373
366
|
cohort: bool = False,
|
374
|
-
name_query: Optional[
|
367
|
+
name_query: Optional[ImmutableMultiDict] = None,
|
375
368
|
yield_query: bool = False,
|
376
369
|
within_days: Optional[int] = None,
|
377
370
|
assignee: Optional[str] = None,
|
@@ -564,13 +557,9 @@ class CaseHandler(object):
|
|
564
557
|
|
565
558
|
return self.case_collection.find(query, projection).sort("updated_at", -1)
|
566
559
|
|
567
|
-
def is_pheno_similarity_query(self, name_query:
|
560
|
+
def is_pheno_similarity_query(self, name_query: ImmutableMultiDict) -> bool:
|
568
561
|
"""Return True if the user query contains 'similar_case' or 'similar_pheno' fields."""
|
569
562
|
similar_pheno_keys = ["similar_case", "similar_pheno"]
|
570
|
-
|
571
|
-
if isinstance(name_query, str):
|
572
|
-
return any(key in name_query for key in similar_pheno_keys)
|
573
|
-
|
574
563
|
return any(name_query.get(key) not in [None, ""] for key in similar_pheno_keys)
|
575
564
|
|
576
565
|
def rna_cases(self, owner):
|
scout/commands/export/variant.py
CHANGED
@@ -191,7 +191,7 @@ def get_vcf_entry(variant_obj, case_id=None):
|
|
191
191
|
Returns:
|
192
192
|
variant_string(str): string representing variant in vcf format
|
193
193
|
"""
|
194
|
-
if variant_obj["category"]
|
194
|
+
if variant_obj["category"] in ["snv", "cancer"]:
|
195
195
|
var_type = "TYPE"
|
196
196
|
else:
|
197
197
|
var_type = "SVTYPE"
|
@@ -203,14 +203,24 @@ def get_vcf_entry(variant_obj, case_id=None):
|
|
203
203
|
]
|
204
204
|
)
|
205
205
|
|
206
|
+
reference = variant_obj["reference"]
|
207
|
+
if reference in [".", ""]:
|
208
|
+
reference = "N"
|
209
|
+
|
210
|
+
alternative = variant_obj["alternative"]
|
211
|
+
if alternative in ["", ".", "-", variant_obj["sub_category"]]:
|
212
|
+
alternative = "N"
|
213
|
+
if variant_obj["category"] == "sv":
|
214
|
+
alternative = f"<{variant_obj['sub_category'].upper()}>"
|
215
|
+
|
206
216
|
variant_string = "{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}".format(
|
207
217
|
variant_obj["chromosome"],
|
208
218
|
variant_obj["position"],
|
209
219
|
variant_obj.get("dbsnp_id", "."),
|
210
|
-
|
211
|
-
|
220
|
+
reference,
|
221
|
+
alternative,
|
212
222
|
variant_obj.get("quality", "."),
|
213
|
-
";".join(variant_obj.get("filters", [])),
|
223
|
+
";".join(variant_obj.get("filters", [])) or ".",
|
214
224
|
info_field,
|
215
225
|
)
|
216
226
|
|
scout/commands/load/panel.py
CHANGED
@@ -5,7 +5,8 @@ import logging
|
|
5
5
|
import click
|
6
6
|
from flask.cli import current_app, with_appcontext
|
7
7
|
|
8
|
-
from scout.load.panel import load_omim_panel, load_panel
|
8
|
+
from scout.load.panel import load_omim_panel, load_panel
|
9
|
+
from scout.load.panelapp import load_panelapp_panel
|
9
10
|
from scout.server.extensions import store
|
10
11
|
|
11
12
|
LOG = logging.getLogger(__name__)
|
@@ -5,7 +5,7 @@ import logging
|
|
5
5
|
import click
|
6
6
|
from flask.cli import current_app, with_appcontext
|
7
7
|
|
8
|
-
from scout.load.
|
8
|
+
from scout.load.panelapp import load_panelapp_green_panel
|
9
9
|
from scout.server.extensions import store
|
10
10
|
|
11
11
|
LOG = logging.getLogger(__name__)
|
@@ -19,6 +19,12 @@ LOG = logging.getLogger(__name__)
|
|
19
19
|
default="cust002",
|
20
20
|
show_default=True,
|
21
21
|
)
|
22
|
+
@click.option(
|
23
|
+
"-s",
|
24
|
+
"--signed-off",
|
25
|
+
is_flag=True,
|
26
|
+
help="Collect genes from signed-off panels only",
|
27
|
+
)
|
22
28
|
@click.option(
|
23
29
|
"-f",
|
24
30
|
"--force",
|
@@ -26,7 +32,7 @@ LOG = logging.getLogger(__name__)
|
|
26
32
|
help="Force update even if updated panel contains less genes",
|
27
33
|
)
|
28
34
|
@with_appcontext
|
29
|
-
def panelapp_green(institute, force):
|
35
|
+
def panelapp_green(institute, force, signed_off):
|
30
36
|
"""
|
31
37
|
Update the automatically generated PanelApp Green Genes panel in the database.
|
32
38
|
"""
|
@@ -40,7 +46,9 @@ def panelapp_green(institute, force):
|
|
40
46
|
raise click.Abort()
|
41
47
|
|
42
48
|
try:
|
43
|
-
load_panelapp_green_panel(
|
49
|
+
load_panelapp_green_panel(
|
50
|
+
adapter=store, institute=institute, force=force, signed_off=signed_off
|
51
|
+
)
|
44
52
|
except Exception as err:
|
45
53
|
LOG.error(err)
|
46
54
|
raise click.Abort()
|
scout/commands/view/case.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import logging
|
2
|
-
from pprint import pprint as pp
|
3
2
|
|
4
3
|
import click
|
5
4
|
from flask.cli import with_appcontext
|
5
|
+
from werkzeug.datastructures import ImmutableMultiDict
|
6
6
|
|
7
7
|
from scout.server.extensions import store
|
8
8
|
|
@@ -52,7 +52,7 @@ def cases(institute, display_name, case_id, nr_variants, variants_treshold, simi
|
|
52
52
|
|
53
53
|
else:
|
54
54
|
if display_name:
|
55
|
-
name_query =
|
55
|
+
name_query = ImmutableMultiDict({"case": display_name})
|
56
56
|
models = adapter.cases(collaborator=institute, name_query=name_query)
|
57
57
|
models = [case_obj for case_obj in models]
|
58
58
|
|
scout/constants/__init__.py
CHANGED
@@ -12,7 +12,6 @@ from .case_tags import (
|
|
12
12
|
ANALYSIS_TYPES,
|
13
13
|
CANCER_PHENOTYPE_MAP,
|
14
14
|
CASE_REPORT_VARIANT_TYPES,
|
15
|
-
CASE_SEARCH_TERMS,
|
16
15
|
CASE_STATUSES,
|
17
16
|
CASE_TAGS,
|
18
17
|
CUSTOM_CASE_REPORTS,
|
@@ -62,11 +61,11 @@ from .gene_tags import (
|
|
62
61
|
MODELS_MAP,
|
63
62
|
PANEL_GENE_INFO_MODELS,
|
64
63
|
PANEL_GENE_INFO_TRANSCRIPTS,
|
65
|
-
PANELAPP_CONFIDENCE_EXCLUDE,
|
66
64
|
UPDATE_GENES_RESOURCES,
|
67
65
|
)
|
68
66
|
from .igv_tracks import CASE_SPECIFIC_TRACKS, HUMAN_REFERENCE, IGV_TRACKS, USER_DEFAULT_TRACKS
|
69
67
|
from .indexes import ID_PROJECTION, INDEXES
|
68
|
+
from .panels import PANELAPP_CONFIDENCE_EXCLUDE
|
70
69
|
from .phenotype import (
|
71
70
|
COHORT_TAGS,
|
72
71
|
HPO_URL,
|
scout/constants/acmg.py
CHANGED
@@ -47,7 +47,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
47
47
|
{
|
48
48
|
"short": "Null variant",
|
49
49
|
"description": "Null variant (nonsense, frameshift, canonical +/- 2 bp splice sites, initiation codon, single or multiexon deletion) in a gene where LOF is a known mechanism of disease.",
|
50
|
-
"documentation": 'Strength can be modified based on <a href="https://pubmed.ncbi.nlm.nih.gov/30192042/" target="_blank">Tayoun et al</a> and <a href="http://autopvs1.genetics.bgi.com/" target="_blank">AutoPVS1</a>, or for RNA <a href="https://www.clinicalgenome.org/docs/application-of-the-acmg-amp-framework-to-capture-evidence-relevant-to-predicted-and-observed-impact-on-splicing-recommendations/" target="_blank">Walker et al</a>.',
|
50
|
+
"documentation": 'Strength can be modified based on <a href="https://pubmed.ncbi.nlm.nih.gov/30192042/" rel="noopener noreferrer" target="_blank">Tayoun et al</a> and <a href="http://autopvs1.genetics.bgi.com/" rel="noopener noreferrer" target="_blank">AutoPVS1</a>, or for RNA <a href="https://www.clinicalgenome.org/docs/application-of-the-acmg-amp-framework-to-capture-evidence-relevant-to-predicted-and-observed-impact-on-splicing-recommendations/" target="_blank">Walker et al</a>.',
|
51
51
|
},
|
52
52
|
)
|
53
53
|
]
|
@@ -69,7 +69,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
69
69
|
{
|
70
70
|
"short": "<i>De novo</i> (confirmed)",
|
71
71
|
"description": "De novo (both maternity and paternity confirmed) in a patient with the disease and no family history",
|
72
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3461/svi_proposal_for_de_novo_criteria_v1_1.pdf" target="_blank">SVI <i>de novo</i></a>.',
|
72
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3461/svi_proposal_for_de_novo_criteria_v1_1.pdf" rel="noopener noreferrer" target="_blank">SVI <i>de novo</i></a>.',
|
73
73
|
},
|
74
74
|
),
|
75
75
|
(
|
@@ -77,7 +77,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
77
77
|
{
|
78
78
|
"short": "Functional damage",
|
79
79
|
"description": "Well-established in vitro or in vivo functional studies supportive of a damaging effect on the gene or gene product, and the evidence is strong",
|
80
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/recommendations-for-application-of-the-functional-evidence-ps3-bs3-criterion-using-the-acmg-amp-sequence-variant-interpretation/" target="_blank">Brnich 2019</a>.',
|
80
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/recommendations-for-application-of-the-functional-evidence-ps3-bs3-criterion-using-the-acmg-amp-sequence-variant-interpretation/" rel="noopener noreferrer" target="_blank">Brnich 2019</a>.',
|
81
81
|
},
|
82
82
|
),
|
83
83
|
(
|
@@ -85,7 +85,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
85
85
|
{
|
86
86
|
"short": "In >=4 unrelated patients, not controls",
|
87
87
|
"description": "The prevalence of the variant in affected individuals is significantly increased compared with the prevalence in controls; 4 or more unrelated patients",
|
88
|
-
"documentation": '<a href="https://www.acgs.uk.com/media/11631/uk-practice-guidelines-for-variant-classification-v4-01-2020.pdf" target="_blank">ACGS (Ellard et al 2020)</a> suggest <a href="https://www.medcalc.org/calc/odds_ratio.php" target="_blank">Odds ratio calculator</a>, '
|
88
|
+
"documentation": '<a href="https://www.acgs.uk.com/media/11631/uk-practice-guidelines-for-variant-classification-v4-01-2020.pdf" rel="noopener noreferrer" target="_blank">ACGS (Ellard et al 2020)</a> suggest <a href="https://www.medcalc.org/calc/odds_ratio.php" target="_blank">Odds ratio calculator</a>, '
|
89
89
|
"and application with strength modification for fewer unrelated affected individuals or gnomAD controls.",
|
90
90
|
},
|
91
91
|
),
|
@@ -108,7 +108,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
108
108
|
{
|
109
109
|
"short": "Not in matched controls",
|
110
110
|
"description": "Absent from controls (or at extremely low frequency if recessive), in ethnically matched population",
|
111
|
-
"documentation": 'Apply only if variant is expected to be detected in large population datasets - see e.g. <a href="https://pubmed.ncbi.nlm.nih.gov/31479589/" target="_blank">Harrison et al 2019</a>.',
|
111
|
+
"documentation": 'Apply only if variant is expected to be detected in large population datasets - see e.g. <a href="https://pubmed.ncbi.nlm.nih.gov/31479589/" rel="noopener noreferrer" target="_blank">Harrison et al 2019</a>.',
|
112
112
|
},
|
113
113
|
),
|
114
114
|
(
|
@@ -116,7 +116,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
116
116
|
{
|
117
117
|
"short": "In trans pathogenic & AR",
|
118
118
|
"description": "For recessive disorders, detected in trans with a pathogenic variant",
|
119
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3717/svi_proposal_for_pm3_criterion_-_version_1.pdf" target="_blank">SVI in <i>trans</i></a>.',
|
119
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3717/svi_proposal_for_pm3_criterion_-_version_1.pdf" rel="noopener noreferrer" target="_blank">SVI in <i>trans</i></a>.',
|
120
120
|
},
|
121
121
|
),
|
122
122
|
(
|
@@ -138,7 +138,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
138
138
|
{
|
139
139
|
"short": "<i>De novo</i> (unconfirmed)",
|
140
140
|
"description": "Assumed de novo, but without confirmation of paternity and maternity",
|
141
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3461/svi_proposal_for_de_novo_criteria_v1_1.pdf" target="_blank">SVI <i>de novo</i></a>.',
|
141
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/site/assets/files/3461/svi_proposal_for_de_novo_criteria_v1_1.pdf" rel="noopener noreferrer" target="_blank">SVI <i>de novo</i></a>.',
|
142
142
|
},
|
143
143
|
),
|
144
144
|
]
|
@@ -153,7 +153,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
153
153
|
{
|
154
154
|
"short": "Cosegregation",
|
155
155
|
"description": "Cosegregation with disease in multiple affected family members in a gene definitively known to cause the disease, and the evidence is weak",
|
156
|
-
"documentation": 'Strength can be modified
|
156
|
+
"documentation": 'Strength can be modified <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC4908147/" target="_blank" rel="noopener noreferrer">Jarvik 2016</a>, <a href="https://clinicalgenome.org/docs/clingen-guidance-for-use-of-the-pp1-bs4-co-segregation-and-pp4-phenotype-specificity-criteria-for-sequence-variant/" rel="noopener noreferrer" target="_blank">Biesecker et al 2023</a>',
|
157
157
|
},
|
158
158
|
),
|
159
159
|
(
|
@@ -168,7 +168,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
168
168
|
{
|
169
169
|
"short": "Predicted pathogenic",
|
170
170
|
"description": "Multiple lines of computational evidence support a deleterious effect on the gene or gene product (conservation, evolutionary, splicing impact, etc)",
|
171
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/calibration-of-computational-tools-for-missense-variant-pathogenicity-classification-and-clingen-recommendations-for-pp3-bp4-cri/" target="_blank">Pejaver et al</a>',
|
171
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/calibration-of-computational-tools-for-missense-variant-pathogenicity-classification-and-clingen-recommendations-for-pp3-bp4-cri/" rel="noopener noreferrer" target="_blank">Pejaver et al</a>',
|
172
172
|
},
|
173
173
|
),
|
174
174
|
(
|
@@ -176,7 +176,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
176
176
|
{
|
177
177
|
"short": "Phenotype: single gene",
|
178
178
|
"description": "Patient's phenotype or family history is highly specific for a disease with a single genetic etiology",
|
179
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/clingen-guidance-for-use-of-the-pp1-bs4-co-segregation-and-pp4-phenotype-specificity-criteria-for-sequence-variant/" target="_blank">Biesecker et al 2023</a>',
|
179
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/clingen-guidance-for-use-of-the-pp1-bs4-co-segregation-and-pp4-phenotype-specificity-criteria-for-sequence-variant/" target="_blank" rel="noopener noreferrer">Biesecker et al 2023</a>',
|
180
180
|
},
|
181
181
|
),
|
182
182
|
(
|
@@ -184,7 +184,7 @@ ACMG_CRITERIA["pathogenicity"] = OrderedDict(
|
|
184
184
|
{
|
185
185
|
"short": "Reported pathogenic, evidence unavailable",
|
186
186
|
"description": "Reputable source recently reports variant as pathogenic, but the evidence is not available to the laboratory to perform an independent evaluation",
|
187
|
-
"documentation": 'Deprecated by ClinGen SVI <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6709533/" target="_blank">Biesecker et al 2018</a>.',
|
187
|
+
"documentation": 'Deprecated by ClinGen SVI <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6709533/" target="_blank" rel="noopener noreferrer">Biesecker et al 2018</a>.',
|
188
188
|
},
|
189
189
|
),
|
190
190
|
]
|
@@ -204,7 +204,7 @@ ACMG_CRITERIA["benign impact"] = OrderedDict(
|
|
204
204
|
{
|
205
205
|
"short": "Frequency >=0.05",
|
206
206
|
"description": "Allele frequency is >=0.05 in a general continental population dataset",
|
207
|
-
"documentation": 'For clarification and exceptions see <a href="https://clinicalgenome.org/docs/updated-recommendation-for-the-benign-stand-alone-acmg-amp-criterion/" target="_blank">Ghosh et al</a>',
|
207
|
+
"documentation": 'For clarification and exceptions see <a href="https://clinicalgenome.org/docs/updated-recommendation-for-the-benign-stand-alone-acmg-amp-criterion/" target="_blank" rel="noopener noreferrer">Ghosh et al</a>',
|
208
208
|
},
|
209
209
|
)
|
210
210
|
]
|
@@ -233,7 +233,7 @@ ACMG_CRITERIA["benign impact"] = OrderedDict(
|
|
233
233
|
{
|
234
234
|
"short": "No functional damage",
|
235
235
|
"description": "Well-established in vitro or in vivo functional studies show no damaging effect on protein function or splicing, and the evidence is strong",
|
236
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/recommendations-for-application-of-the-functional-evidence-ps3-bs3-criterion-using-the-acmg-amp-sequence-variant-interpretation/" target="_blank">Brnich 2019</a>.',
|
236
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/recommendations-for-application-of-the-functional-evidence-ps3-bs3-criterion-using-the-acmg-amp-sequence-variant-interpretation/" rel="noopener noreferrer" target="_blank">Brnich 2019</a>.',
|
237
237
|
},
|
238
238
|
),
|
239
239
|
(
|
@@ -241,7 +241,7 @@ ACMG_CRITERIA["benign impact"] = OrderedDict(
|
|
241
241
|
{
|
242
242
|
"short": "Non-segregation",
|
243
243
|
"description": "Lack of segregation in affected members of a family, and the evidence is strong",
|
244
|
-
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/clingen-guidance-for-use-of-the-pp1-bs4-co-segregation-and-pp4-phenotype-specificity-criteria-for-sequence-variant/" target="_blank">Biesecker et al 2023</a>',
|
244
|
+
"documentation": 'Strength can be modified based on <a href="https://clinicalgenome.org/docs/clingen-guidance-for-use-of-the-pp1-bs4-co-segregation-and-pp4-phenotype-specificity-criteria-for-sequence-variant/" target="_blank" rel="noopener noreferrer">Biesecker et al 2023</a>',
|
245
245
|
},
|
246
246
|
),
|
247
247
|
]
|
@@ -291,7 +291,7 @@ ACMG_CRITERIA["benign impact"] = OrderedDict(
|
|
291
291
|
{
|
292
292
|
"short": "Reported benign, evidence unavailable",
|
293
293
|
"description": "Reputable source recently reports variant as benign, but the evidence is not available to the laboratory to perform an independent evaluation",
|
294
|
-
"documentation": 'Deprecated by ClinGen SVI <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6709533/" target="_blank">Biesecker et al</a>.',
|
294
|
+
"documentation": 'Deprecated by ClinGen SVI <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6709533/" rel="noopener noreferrer" target="_blank">Biesecker et al</a>.',
|
295
295
|
},
|
296
296
|
),
|
297
297
|
(
|
scout/constants/case_tags.py
CHANGED
@@ -245,49 +245,3 @@ SOURCES = [
|
|
245
245
|
]
|
246
246
|
|
247
247
|
SAMPLE_SOURCE = dict((i, el) for i, el in enumerate(SOURCES))
|
248
|
-
|
249
|
-
CASE_SEARCH_TERMS = {
|
250
|
-
"case": {"label": "Case or Individual Name", "prefix": "case:", "placeholder": "example:18201"},
|
251
|
-
"exact_pheno": {
|
252
|
-
"label": "HPO Terms",
|
253
|
-
"prefix": "exact_pheno:",
|
254
|
-
"placeholder": "example:HP:0001166,HP:0001250,...",
|
255
|
-
},
|
256
|
-
"exact_dia": {
|
257
|
-
"label": "OMIM Terms",
|
258
|
-
"prefix": "exact_dia:",
|
259
|
-
"placeholder": "example:OMIM:616538,OMIM:607681,...",
|
260
|
-
},
|
261
|
-
"synopsis": {
|
262
|
-
"label": "Search Synopsis",
|
263
|
-
"prefix": "synopsis:",
|
264
|
-
"placeholder": "example:epilepsy",
|
265
|
-
},
|
266
|
-
"panel": {"label": "Gene Panel", "prefix": "panel:", "placeholder": "example:NMD"},
|
267
|
-
"status": {"label": "Case Status", "prefix": "status:", "placeholder": "example:active"},
|
268
|
-
"tags": {"label": "Tags", "prefix": "tags:", "placeholder": "example:medical"},
|
269
|
-
"track": {"label": "Analysis Track", "prefix": "track:", "placeholder": "rare or cancer"},
|
270
|
-
"pheno_group": {
|
271
|
-
"label": "Phenotype Group",
|
272
|
-
"prefix": "pheno_group:",
|
273
|
-
"placeholder": "example:HP:0001166",
|
274
|
-
},
|
275
|
-
"cohort": {"label": "Patient Cohort", "prefix": "cohort:", "placeholder": "example:pedhep"},
|
276
|
-
"similar_case": {
|
277
|
-
"label": "Similar Case",
|
278
|
-
"prefix": "similar_case:",
|
279
|
-
"placeholder": "example:18201",
|
280
|
-
},
|
281
|
-
"similar_pheno": {
|
282
|
-
"label": "Similar Phenotype",
|
283
|
-
"prefix": "similar_pheno:",
|
284
|
-
"placeholder": "example:HP:0001166,HP:0001250,..",
|
285
|
-
},
|
286
|
-
"pinned": {"label": "Pinned Gene", "prefix": "pinned:", "placeholder": "example:POT1"},
|
287
|
-
"causative": {"label": "Causative Gene", "prefix": "causative:", "placeholder": "example:POT1"},
|
288
|
-
"user": {
|
289
|
-
"label": "Assigned User",
|
290
|
-
"prefix": "user:",
|
291
|
-
"placeholder": "example:John Doe",
|
292
|
-
},
|
293
|
-
}
|
scout/constants/clnsig.py
CHANGED
@@ -7,7 +7,7 @@ CLINSIG_MAP = {
|
|
7
7
|
5: "Pathogenic",
|
8
8
|
6: "drug response",
|
9
9
|
7: "histocompatibility",
|
10
|
-
8: "Conflicting
|
10
|
+
8: "Conflicting classifications of pathogenicity",
|
11
11
|
9: "affects",
|
12
12
|
10: "association",
|
13
13
|
11: "protective",
|
@@ -30,6 +30,7 @@ REV_CLINSIG_MAP = {
|
|
30
30
|
"likely_benign": 3,
|
31
31
|
"conflicting_interpretations_of_pathogenicity": 8,
|
32
32
|
"conflicting_interpretations": 8,
|
33
|
+
"conflicting_classifications_of_pathogenicity": 8,
|
33
34
|
"uncertain_significance": 0,
|
34
35
|
"likely_pathogenic": 4,
|
35
36
|
"pathogenic": 5,
|
scout/constants/gene_tags.py
CHANGED
@@ -84,12 +84,6 @@ UPDATE_GENES_RESOURCES = {
|
|
84
84
|
],
|
85
85
|
}
|
86
86
|
|
87
|
-
PANELAPP_CONFIDENCE_EXCLUDE = {
|
88
|
-
"green": ["ModerateEvidence", "LowEvidence"],
|
89
|
-
"amber": ["LowEvidence"],
|
90
|
-
"red": [],
|
91
|
-
}
|
92
|
-
|
93
87
|
GNOMAD_CONSTRAINT_FILENAME = "gnomad.v4.0.constraint_metrics.tsv"
|
94
88
|
|
95
89
|
GENE_CONSTRAINT_LABELS = {
|
scout/constants/panels.py
CHANGED
@@ -9,3 +9,19 @@ EXPORT_PANEL_FIELDS = [
|
|
9
9
|
("custom_inheritance_models", "custom_inheritance_models"),
|
10
10
|
("comment", "comment"),
|
11
11
|
]
|
12
|
+
|
13
|
+
PANELAPP_CONFIDENCE_EXCLUDE = {
|
14
|
+
"green": ["0", "1", "2"],
|
15
|
+
"amber": ["0", "1"],
|
16
|
+
"red": ["0"],
|
17
|
+
}
|
18
|
+
|
19
|
+
PRESELECTED_PANELAPP_PANEL_TYPE_SLUGS = [
|
20
|
+
"cancer-germline-100k",
|
21
|
+
"clingen-curated-genes",
|
22
|
+
"gms-cancer-germline-virtual",
|
23
|
+
"gms-rare-disease",
|
24
|
+
"gms-rare-disease-virtual",
|
25
|
+
"gms-signed-off",
|
26
|
+
"rare-disease-100k",
|
27
|
+
]
|
scout/demo/__init__.py
CHANGED
@@ -5,7 +5,10 @@ BASE_PATH = "scout.demo"
|
|
5
5
|
###### Paths ######
|
6
6
|
# Panel paths
|
7
7
|
panel_path = str(files(BASE_PATH).joinpath("panel_1.txt"))
|
8
|
-
|
8
|
+
|
9
|
+
# PanelApp json files
|
10
|
+
panelapp_panels_reduced_path = str(files(BASE_PATH).joinpath("panelapp_panels_reduced.json"))
|
11
|
+
panelapp_panel_path = str(files(BASE_PATH).joinpath("panelapp_panel.json"))
|
9
12
|
|
10
13
|
# Case paths
|
11
14
|
ped_path = str(files(BASE_PATH).joinpath("643594.ped"))
|