scout-browser 4.96.0__py3-none-any.whl → 4.98.0__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/adapter/mongo/case.py +51 -47
- scout/adapter/mongo/filter.py +28 -11
- scout/adapter/mongo/institute.py +2 -0
- scout/adapter/mongo/omics_variant.py +20 -5
- scout/adapter/mongo/query.py +104 -95
- scout/adapter/mongo/variant.py +0 -5
- scout/adapter/mongo/variant_loader.py +10 -12
- scout/build/individual.py +3 -11
- scout/commands/delete/delete_command.py +87 -49
- scout/commands/load/research.py +4 -4
- scout/commands/load/variants.py +25 -8
- scout/commands/setup/setup_scout.py +1 -1
- scout/commands/update/case.py +12 -0
- scout/commands/update/individual.py +1 -2
- scout/constants/__init__.py +7 -2
- scout/constants/file_types.py +68 -119
- scout/constants/filters.py +2 -1
- scout/constants/gene_tags.py +3 -3
- scout/constants/igv_tracks.py +7 -11
- scout/constants/query_terms.py +2 -2
- scout/demo/643594.config.yaml +6 -0
- scout/demo/643594.peddy.ped +1 -1
- scout/demo/643594.somalier.ancestry.tsv +4 -0
- scout/demo/643594.somalier.pairs.tsv +4 -0
- scout/demo/643594.somalier.samples.tsv +4 -0
- scout/demo/cancer.load_config.yaml +1 -0
- scout/demo/resources/__init__.py +1 -1
- scout/demo/resources/gnomad.v4.1.constraint_metrics_reduced.tsv +3755 -0
- scout/exceptions/database.py +1 -1
- scout/load/all.py +8 -16
- scout/models/case/case.py +1 -0
- scout/models/case/case_loading_models.py +12 -5
- scout/models/managed_variant.py +3 -3
- scout/models/omics_variant.py +3 -3
- scout/parse/case.py +112 -5
- scout/parse/pedqc.py +127 -0
- scout/parse/variant/frequency.py +9 -6
- scout/parse/variant/variant.py +71 -39
- scout/server/app.py +2 -0
- scout/server/blueprints/alignviewers/controllers.py +2 -0
- scout/server/blueprints/alignviewers/templates/alignviewers/igv_viewer.html +3 -0
- scout/server/blueprints/alignviewers/templates/alignviewers/utils.html +1 -1
- scout/server/blueprints/cases/controllers.py +23 -3
- scout/server/blueprints/cases/templates/cases/case.html +3 -0
- scout/server/blueprints/cases/templates/cases/chanjo2_form.html +2 -2
- scout/server/blueprints/cases/templates/cases/gene_panel.html +9 -3
- scout/server/blueprints/cases/templates/cases/individuals_table.html +4 -1
- scout/server/blueprints/cases/templates/cases/utils.html +23 -19
- scout/server/blueprints/cases/views.py +5 -9
- scout/server/blueprints/clinvar/controllers.py +11 -11
- scout/server/blueprints/clinvar/templates/clinvar/multistep_add_variant.html +15 -7
- scout/server/blueprints/institutes/controllers.py +20 -1
- scout/server/blueprints/institutes/forms.py +5 -1
- scout/server/blueprints/institutes/templates/overview/filters.html +14 -1
- scout/server/blueprints/institutes/templates/overview/institute_settings.html +7 -0
- scout/server/blueprints/institutes/templates/overview/utils.html +20 -1
- scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html +9 -2
- scout/server/blueprints/omics_variants/views.py +8 -10
- scout/server/blueprints/variant/controllers.py +30 -1
- scout/server/blueprints/variant/templates/variant/cancer-variant.html +19 -3
- scout/server/blueprints/variant/templates/variant/components.html +26 -9
- scout/server/blueprints/variant/templates/variant/variant.html +4 -2
- scout/server/blueprints/variant/utils.py +2 -0
- scout/server/blueprints/variants/controllers.py +29 -3
- scout/server/blueprints/variants/forms.py +37 -10
- scout/server/blueprints/variants/templates/variants/components.html +12 -10
- scout/server/blueprints/variants/templates/variants/utils.html +59 -36
- scout/server/blueprints/variants/views.py +45 -60
- scout/server/extensions/beacon_extension.py +1 -1
- scout/server/extensions/bionano_extension.py +5 -5
- scout/server/extensions/chanjo2_extension.py +40 -1
- scout/server/extensions/chanjo_extension.py +1 -1
- scout/server/extensions/matchmaker_extension.py +1 -1
- scout/server/static/bs_styles.css +2 -0
- scout/server/templates/layout.html +1 -0
- scout/server/utils.py +5 -0
- scout/utils/ensembl_biomart_clients.py +2 -11
- scout/utils/scout_requests.py +1 -1
- {scout_browser-4.96.0.dist-info → scout_browser-4.98.0.dist-info}/METADATA +1 -1
- {scout_browser-4.96.0.dist-info → scout_browser-4.98.0.dist-info}/RECORD +83 -81
- scout/demo/resources/gnomad.v4.0.constraint_metrics_reduced.tsv +0 -3755
- scout/parse/peddy.py +0 -149
- scout/utils/sort.py +0 -21
- {scout_browser-4.96.0.dist-info → scout_browser-4.98.0.dist-info}/WHEEL +0 -0
- {scout_browser-4.96.0.dist-info → scout_browser-4.98.0.dist-info}/entry_points.txt +0 -0
- {scout_browser-4.96.0.dist-info → scout_browser-4.98.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,4 @@
|
|
1
|
+
{% from "cases/chanjo2_form.html" import chanjo2_report_form %}
|
1
2
|
{% from "variant/buttons.html" import variant_tag_button, variant_tier_button, dismiss_variant_button, mosaic_variant_button %}
|
2
3
|
{% from "variants/utils.html" import compounds_table %}
|
3
4
|
{% from "variant/variant_details.html" import severity_list %}
|
@@ -118,15 +119,7 @@
|
|
118
119
|
{% endif %}
|
119
120
|
</div>
|
120
121
|
{% endfor %}
|
121
|
-
{
|
122
|
-
<div class="d-flex flex-wrap ms-1">
|
123
|
-
{% for gene in variant.genes %}
|
124
|
-
<a class="btn btn-sm btn-secondary text-white" rel="noopener noreferrer" target="_blank" href="{{ url_for('report.gene', gene_id=gene.hgnc_id, sample_id=variant.samples|map(attribute='sample_id')|list) }}">
|
125
|
-
Gene coverage: {{ gene.common.hgnc_symbol if gene.common else gene.hgnc_id }}
|
126
|
-
</a>
|
127
|
-
{% endfor %}
|
128
|
-
</div>
|
129
|
-
{% endif %}
|
122
|
+
{{ gene_coverage(institute, variant, case, config) }}
|
130
123
|
</li>
|
131
124
|
<li class="list-group-item">
|
132
125
|
<div>
|
@@ -136,6 +129,30 @@
|
|
136
129
|
</ul>
|
137
130
|
{% endmacro %}
|
138
131
|
|
132
|
+
{% macro gene_coverage(institute, variant, case, config) %}
|
133
|
+
{% if case.chanjo_coverage and config.chanjo_report %}
|
134
|
+
<div class="d-flex flex-wrap ms-1">
|
135
|
+
{% for gene in variant.genes %}
|
136
|
+
<a class="btn btn-sm btn-secondary text-white" rel="noopener noreferrer" target="_blank" href="{{ url_for('report.gene', gene_id=gene.hgnc_id, sample_id=variant.samples|map(attribute='sample_id')|list) }}" data-bs-toggle="tooltip" title="Chanjo coverage report">
|
137
|
+
Gene coverage: {{ gene.common.hgnc_symbol if gene.common else gene.hgnc_id }}
|
138
|
+
</a>
|
139
|
+
{% endfor %}
|
140
|
+
</div>
|
141
|
+
{% endif %}
|
142
|
+
{% if case.chanjo2_coverage %}
|
143
|
+
<div class="d-flex flex-wrap ms-1" data-bs-toggle="tooltip" title="Chanjo2 coverage reports">
|
144
|
+
{% for gene in variant.genes %}
|
145
|
+
{{ chanjo2_report_form(institute, case, gene.hgnc_symbol, 'overview', gene.hgnc_id, "Gene coverage " + (gene.common.hgnc_symbol if gene.common else gene.hgnc_id), "btn btn-sm btn-secondary text-white") }} <!--chanjo2 genes overview -->
|
146
|
+
{% if gene.common.hgnc_id in gene_has_full_coverage and gene.common.hgnc_id[gene.common.hgnc_id] %}
|
147
|
+
<span class="bg-success fa-solid fa-circle-check" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Chanjo2 coverage is at 100% completeness."></span>
|
148
|
+
{% else %}
|
149
|
+
<span class="bg-warning fa-solid fa-triangle-exclamation" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Note that Chanjo2 coverage is below 100% completeness."></span>
|
150
|
+
{% endif %}
|
151
|
+
{% endfor %}
|
152
|
+
</div>
|
153
|
+
{% endif %}
|
154
|
+
{% endmacro %}
|
155
|
+
|
139
156
|
{% macro acmg_form(institute, case, variant, ACMG_OPTIONS, selected=None) %}
|
140
157
|
<form action="{{ url_for('variant.variant_update', institute_id=institute._id, case_name=case.display_name, variant_id=variant._id) }}" method="POST">
|
141
158
|
<div class="d-flex justify-content-between">
|
@@ -339,6 +339,7 @@
|
|
339
339
|
<thead class="thead table-light border-top">
|
340
340
|
<tr class="active">
|
341
341
|
<th>Gene</th>
|
342
|
+
<th data-bs-toggle="tooltip" title="Gene tolerance to a single copy of a truncating mutation (pLI) | Loss-of-function observed/expected upper bound fraction (LOEUF)">pLI score|LOEUF</th>
|
342
343
|
<th>Region</th>
|
343
344
|
<th>Consequence</th>
|
344
345
|
{% if case.genome_build == "38" %}
|
@@ -349,11 +350,12 @@
|
|
349
350
|
<tbody>
|
350
351
|
{% for gene in variant.genes %}
|
351
352
|
<tr>
|
352
|
-
<
|
353
|
+
<td>
|
353
354
|
<a href="{{ url_for('genes.gene', hgnc_id=gene.hgnc_id) }}">
|
354
355
|
{{ gene.common.hgnc_symbol if gene.common else gene.hgnc_id }}
|
355
356
|
</a>
|
356
|
-
</
|
357
|
+
</td>
|
358
|
+
<td>{{gene.pli_score|round(2) if gene.pli_score else "n.a."}} | {{gene.loeuf|round(2) if gene.loeuf else "n.a."}}</td>
|
357
359
|
<td>{{ gene.region_annotation }}</td>
|
358
360
|
<td>{{ gene.functional_annotation|truncate(20, True) }}</td>
|
359
361
|
{% if case.genome_build == "38" %} <!-- Display eventual functional annotations associated to MANE transcripts -->
|
@@ -282,6 +282,8 @@ def add_gene_info(
|
|
282
282
|
)
|
283
283
|
|
284
284
|
all_models.update(set(variant_gene["manual_inheritance"]))
|
285
|
+
variant_gene["pli_score"] = hgnc_gene.get("pli_score")
|
286
|
+
variant_gene["loeuf"] = hgnc_gene.get("constraint_lof_oe_ci_upper")
|
285
287
|
|
286
288
|
update_inheritance_model(variant_gene, all_models, disease_terms)
|
287
289
|
|
@@ -40,6 +40,7 @@ from scout.server.blueprints.variant.utils import (
|
|
40
40
|
update_variant_case_panels,
|
41
41
|
)
|
42
42
|
from scout.server.blueprints.variants.forms import BetterDecimalField
|
43
|
+
from scout.server.extensions import store
|
43
44
|
from scout.server.links import add_gene_links, cosmic_links, str_source_link
|
44
45
|
from scout.server.utils import (
|
45
46
|
case_has_alignments,
|
@@ -83,6 +84,20 @@ def populate_force_show_unaffected_vars(institute_obj, form):
|
|
83
84
|
form.show_unaffected.data = True
|
84
85
|
|
85
86
|
|
87
|
+
def populate_persistent_filters_choices(
|
88
|
+
institute_id: str, category: str, form: ImmutableMultiDict
|
89
|
+
) -> List[dict]:
|
90
|
+
"""Populate the options present in the form.filters on variants page, directly setting on the form.
|
91
|
+
Also return a convenient list of filters for use in filter update macros.
|
92
|
+
"""
|
93
|
+
available_filters = list(store.filters(institute_id, category))
|
94
|
+
form.filters.choices = [
|
95
|
+
(filter.get("_id"), filter.get("display_name"))
|
96
|
+
for filter in sorted(available_filters, key=lambda f: f.get("display_name", "").lower())
|
97
|
+
]
|
98
|
+
return available_filters
|
99
|
+
|
100
|
+
|
86
101
|
def populate_chrom_choices(form, case_obj):
|
87
102
|
"""Populate the option of the chromosome select according to the case genome build"""
|
88
103
|
# Populate chromosome choices
|
@@ -90,6 +105,12 @@ def populate_chrom_choices(form, case_obj):
|
|
90
105
|
form.chrom.choices = [(chrom, chrom) for chrom in chromosomes]
|
91
106
|
|
92
107
|
|
108
|
+
def populate_institute_soft_filters(form, institute_obj):
|
109
|
+
"""Populate the hidden field 'institute_soft_filters' with a string containing all institute's soft filters."""
|
110
|
+
if institute_obj.get("soft_filters"):
|
111
|
+
form.institute_soft_filters.data = ",".join(institute_obj["soft_filters"])
|
112
|
+
|
113
|
+
|
93
114
|
def variants(
|
94
115
|
store,
|
95
116
|
institute_obj,
|
@@ -711,7 +732,7 @@ def _compound_follow_filter_clnsig(compound, compound_var_obj, query_form):
|
|
711
732
|
|
712
733
|
There are some filter options that are rather unique, like the ClinVar one.
|
713
734
|
|
714
|
-
If
|
735
|
+
If prioritise_clinvar is checked, variants are currently never dismissed on ClinSig alone.
|
715
736
|
|
716
737
|
Args:
|
717
738
|
compound(dict)
|
@@ -722,8 +743,7 @@ def _compound_follow_filter_clnsig(compound, compound_var_obj, query_form):
|
|
722
743
|
query_rank = []
|
723
744
|
query_str_rank = []
|
724
745
|
|
725
|
-
|
726
|
-
if clinsig_always_returned:
|
746
|
+
if query_form.get("prioritise_clinvar"):
|
727
747
|
return False
|
728
748
|
|
729
749
|
clinsig = query_form.get("clinsig")
|
@@ -2088,3 +2108,9 @@ def get_show_dismiss_block():
|
|
2088
2108
|
session["show_dismiss_block"] = show_dismiss_block
|
2089
2109
|
|
2090
2110
|
return show_dismiss_block
|
2111
|
+
|
2112
|
+
|
2113
|
+
def set_hpo_clinical_filter(case_obj: dict, request_form: dict):
|
2114
|
+
"""Set HPO clinical filter on case if requested through the form."""
|
2115
|
+
if request_form.get("hpo_clinical_filter"):
|
2116
|
+
case_obj["hpo_clinical_filter"] = True
|
@@ -113,6 +113,8 @@ class VariantFiltersForm(FlaskForm):
|
|
113
113
|
compound_follow_filter = BooleanField("Compounds follow filter")
|
114
114
|
cadd_inclusive = BooleanField("CADD inclusive")
|
115
115
|
clinsig = NonValidatingSelectMultipleField("ClinVar CLINSIG", choices=CLINSIG_OPTIONS)
|
116
|
+
clinsig_exclude = BooleanField("Exclude")
|
117
|
+
prioritise_clinvar = BooleanField("Prioritise ClinVar")
|
116
118
|
|
117
119
|
gnomad_frequency = BetterDecimalField("gnomadAF", validators=[validators.Optional()])
|
118
120
|
local_obs_old = IntegerField("Local obs. (archive)", validators=[validators.Optional()])
|
@@ -151,11 +153,25 @@ class VariantFiltersForm(FlaskForm):
|
|
151
153
|
cytoband_start = NonValidatingSelectField("Cytoband start", choices=[])
|
152
154
|
cytoband_end = NonValidatingSelectField("Cytoband end", choices=[])
|
153
155
|
|
156
|
+
size_selector = NonValidatingSelectField(
|
157
|
+
"Variant size in bp", choices=[("$gte", ">="), ("$lt", "<")]
|
158
|
+
)
|
159
|
+
size = IntegerField(
|
160
|
+
"",
|
161
|
+
[
|
162
|
+
validators.Optional(),
|
163
|
+
validators.NumberRange(min=0, message="Number of bases must be 1 or greater."),
|
164
|
+
],
|
165
|
+
widget=NumberInput(min=1),
|
166
|
+
)
|
167
|
+
|
154
168
|
hide_dismissed = BooleanField("Hide dismissed", default=False)
|
155
169
|
filter_variants = SubmitField(label="Filter variants")
|
156
170
|
export = SubmitField(label="Filter and export")
|
157
171
|
|
158
|
-
show_unaffected = BooleanField("
|
172
|
+
show_unaffected = BooleanField("Include variants present only in unaffected", default=True)
|
173
|
+
show_soft_filtered = BooleanField(f"Include soft-filtered variants", default=False)
|
174
|
+
institute_soft_filters = HiddenField()
|
159
175
|
|
160
176
|
|
161
177
|
class FiltersForm(VariantFiltersForm):
|
@@ -163,11 +179,11 @@ class FiltersForm(VariantFiltersForm):
|
|
163
179
|
|
164
180
|
symbol_file = FileField("Symbol File")
|
165
181
|
|
166
|
-
|
182
|
+
clinvar_trusted_revstat = BooleanField("CLINSIG Confident")
|
167
183
|
spidex_human = SelectMultipleField("SPIDEX", choices=SPIDEX_CHOICES)
|
168
184
|
|
169
185
|
clinical_filter = SubmitField(label="Clinical filter")
|
170
|
-
clinvar_tag = BooleanField("ClinVar hits")
|
186
|
+
clinvar_tag = BooleanField("ClinVar hits only")
|
171
187
|
|
172
188
|
# polymorphic constant base for clinical filter
|
173
189
|
clinical_filter_base = CLINICAL_FILTER_BASE
|
@@ -180,7 +196,7 @@ class CancerFiltersForm(VariantFiltersForm):
|
|
180
196
|
alt_count = IntegerField("Min alt count", validators=[validators.Optional()])
|
181
197
|
control_frequency = BetterDecimalField("Normal alt AF <", validators=[validators.Optional()])
|
182
198
|
tumor_frequency = BetterDecimalField("Tumor alt AF >", validators=[validators.Optional()])
|
183
|
-
clinvar_tag = BooleanField("ClinVar hits")
|
199
|
+
clinvar_tag = BooleanField("ClinVar hits only")
|
184
200
|
cosmic_tag = BooleanField("Cosmic hits")
|
185
201
|
mvl_tag = BooleanField("Managed Variants hits")
|
186
202
|
local_obs_cancer_somatic_old = IntegerField(
|
@@ -189,7 +205,6 @@ class CancerFiltersForm(VariantFiltersForm):
|
|
189
205
|
local_obs_cancer_germline_old = IntegerField(
|
190
206
|
"Local germline obs. (archive)", validators=[validators.Optional()]
|
191
207
|
)
|
192
|
-
|
193
208
|
# polymorphic constant base for clinical filter
|
194
209
|
clinical_filter_base = CLINICAL_FILTER_BASE_CANCER
|
195
210
|
|
@@ -212,8 +227,6 @@ class StrFiltersForm(VariantFiltersForm):
|
|
212
227
|
class SvFiltersForm(VariantFiltersForm):
|
213
228
|
"""Extends FiltersForm for structural variants"""
|
214
229
|
|
215
|
-
size = StringField("Length")
|
216
|
-
size_shorter = BooleanField("Length shorter than")
|
217
230
|
svtype = SelectMultipleField("SVType", choices=SV_TYPE_CHOICES)
|
218
231
|
decipher = BooleanField("Decipher")
|
219
232
|
clingen_ngi = IntegerField("ClinGen NGI obs")
|
@@ -242,8 +255,6 @@ class CancerSvFiltersForm(SvFiltersForm):
|
|
242
255
|
class FusionFiltersForm(VariantFiltersForm):
|
243
256
|
"""Extends FiltersForm for fusion variants"""
|
244
257
|
|
245
|
-
size = StringField("Length")
|
246
|
-
size_shorter = BooleanField("Length shorter than")
|
247
258
|
decipher = BooleanField("Decipher")
|
248
259
|
clinical_filter = SubmitField(label="Clinical filter")
|
249
260
|
fusion_score = BetterDecimalField("Fusion score >=", validators=[validators.Optional()])
|
@@ -302,7 +313,23 @@ class OutlierFiltersForm(FlaskForm):
|
|
302
313
|
|
303
314
|
clinical_filter_base = CLINICAL_FILTER_BASE_OUTLIER
|
304
315
|
|
305
|
-
show_unaffected = BooleanField("
|
316
|
+
show_unaffected = BooleanField("Include variants present only in unaffected", default=False)
|
317
|
+
|
318
|
+
sort_by = NonValidatingSelectField(
|
319
|
+
choices=[
|
320
|
+
("", "Sort by"),
|
321
|
+
("p_value", "Sort by P-value"),
|
322
|
+
("delta_psi", "Sort by Δψ"),
|
323
|
+
("psi_value", "Sort by ψ value"),
|
324
|
+
("zscore", "Sort by zscore"),
|
325
|
+
("l2fc", "Sort by l2fc"),
|
326
|
+
],
|
327
|
+
validators=[validators.Optional()],
|
328
|
+
)
|
329
|
+
sort_order = NonValidatingSelectField(
|
330
|
+
choices=[("", "Sort order"), ("asc", "asc"), ("desc", "desc")],
|
331
|
+
validators=[validators.Optional()],
|
332
|
+
)
|
306
333
|
|
307
334
|
|
308
335
|
FILTERSFORMCLASS = {
|
@@ -203,16 +203,18 @@
|
|
203
203
|
{% endfor %}
|
204
204
|
|
205
205
|
{% set panel_count = matching_panels|length %}
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
{
|
214
|
-
|
215
|
-
|
206
|
+
{% if panel_count %}
|
207
|
+
<a
|
208
|
+
class="badge bg-secondary text-white"
|
209
|
+
data-bs-toggle="popover"
|
210
|
+
data-bs-html="true"
|
211
|
+
data-bs-trigger="hover click"
|
212
|
+
title="Overlapping gene panels"
|
213
|
+
data-bs-content="{% for panel in matching_panels %}
|
214
|
+
{{ panel.panel_name|safe }}<br>
|
215
|
+
{% endfor %}"
|
216
|
+
>{{ panel_count }}</a>
|
217
|
+
{% endif %}
|
216
218
|
{% endmacro %}
|
217
219
|
|
218
220
|
{% if variant.category in ["cancer", "sv_cancer"] %}
|
@@ -36,12 +36,18 @@
|
|
36
36
|
the_form.submit();
|
37
37
|
}}
|
38
38
|
|
39
|
-
var show_unaffected =document.getElementById('show_unaffected');
|
39
|
+
var show_unaffected = document.getElementById('show_unaffected');
|
40
40
|
if (show_unaffected) {
|
41
41
|
show_unaffected.onchange = function() {
|
42
42
|
the_form.submit();
|
43
43
|
}}
|
44
44
|
|
45
|
+
var show_soft_filtered = document.getElementById('show_soft_filtered');
|
46
|
+
if (show_soft_filtered) {
|
47
|
+
show_soft_filtered.onchange = function() {
|
48
|
+
the_form.submit();
|
49
|
+
}}
|
50
|
+
|
45
51
|
function resetPage(){
|
46
52
|
document.getElementById('page').value = "1";
|
47
53
|
}
|
@@ -102,6 +108,18 @@
|
|
102
108
|
{{ form.hide_dismissed(class="form-check-input") }}
|
103
109
|
{{ form.hide_dismissed.label(class="form-check-label ms-2") }}
|
104
110
|
</div>
|
111
|
+
{% if institute.soft_filters %} <!-- Available only for institutes with soft filters in settings -->
|
112
|
+
<div class="form-check d-flex justify-content-start">
|
113
|
+
{{ form.show_soft_filtered(class="form-check-input") }}
|
114
|
+
{{ form.show_soft_filtered.label(
|
115
|
+
class="form-check-label ms-2",
|
116
|
+
data_bs_toggle="tooltip",
|
117
|
+
title="Filters are defined by an admin in the institute settings. Current filters are: " ~
|
118
|
+
form.institute_soft_filters.data|safe
|
119
|
+
) }}
|
120
|
+
{{ form.institute_soft_filters() }}
|
121
|
+
</div>
|
122
|
+
{% endif %}
|
105
123
|
<div class="form-check d-flex justify-content-start">
|
106
124
|
{% if institute.check_show_all_vars %}
|
107
125
|
<input type="checkbox" class="form-check-input" name="show_unaffected" id="show_unaffected" checked disabled>
|
@@ -275,6 +293,16 @@
|
|
275
293
|
</div>
|
276
294
|
{% endmacro %}
|
277
295
|
|
296
|
+
{% macro variant_size_filter(form) %}
|
297
|
+
<div class="col-2">
|
298
|
+
{{ form.size_selector.label(class="control-label") }}
|
299
|
+
<div class="input-group">
|
300
|
+
{{ form.size_selector(class="form-select") }}
|
301
|
+
{{ form.size(class="form-control") }}
|
302
|
+
</div>
|
303
|
+
</div>
|
304
|
+
{% endmacro %}
|
305
|
+
|
278
306
|
{% macro snv_filters(form, institute, case, filters)%}
|
279
307
|
<input type="hidden" name="variant_type" value="{{ form.variant_type.data }}">
|
280
308
|
{{ variants_common_filters(form, "snv") }}
|
@@ -308,16 +336,28 @@
|
|
308
336
|
{{ form.spidex_human(class="selectpicker", data_style="btn-secondary") }}
|
309
337
|
</div>
|
310
338
|
<div class="col-2">
|
311
|
-
{{ form.clinsig.label(class="control-label") }}
|
339
|
+
<span>{{ form.clinsig.label(class="control-label") }}</span>
|
340
|
+
<span style="float:right;">{{ form.clinsig_exclude.label(class="control-label", data_bs_toggle="tooltip", data_bs_placement="left", title="Exclude variants with clinical significance among the selected categories.") }} {{form.clinsig_exclude}}</span>
|
312
341
|
{{ form.clinsig(class="selectpicker", data_style="btn-secondary") }}
|
313
342
|
</div>
|
314
|
-
<div class="col-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
343
|
+
<div class="col-2">
|
344
|
+
<div class="row">
|
345
|
+
<div class="class="form-check">
|
346
|
+
{{ form.clinvar_trusted_revstat(class="form-check-input") }}
|
347
|
+
{{ form.clinvar_trusted_revstat.label(class="form-check-label", data_bs_toggle="tooltip", data_bs_placement="top", title="Limit search to variants with trusted ClinVar revision status levels: mult, multiple_submitters, single, single_submitter, exp, reviewed_by_expert_panel, guideline, practice_guideline.") }}
|
348
|
+
</div>
|
349
|
+
</div>
|
350
|
+
<div class="row">
|
351
|
+
<div class="class="form-check">
|
352
|
+
{{ form.clinvar_tag(class="form-check-input") }}
|
353
|
+
{{ form.clinvar_tag.label(class="form-check-label", data_bs_toggle="tooltip", data_bs_placement="top", title="Return only variants with annotated ClinVar significance.") }}
|
354
|
+
</div>
|
355
|
+
</div>
|
356
|
+
<div class="row">
|
357
|
+
<div class="class="form-check">
|
358
|
+
{{ form.prioritise_clinvar(class="form-check-input") }}
|
359
|
+
{{ form.prioritise_clinvar.label(class="form-check-label", data_bs_toggle="tooltip", data_bs_placement="top", title="Include variants matching the selected ClinVar conditions, in addition to those found using the other search criteria (broadens the search). Note that variants excluded using ClinVar tags will still be returned when found using the other search criteria.") }}
|
360
|
+
</div>
|
321
361
|
</div>
|
322
362
|
</div>
|
323
363
|
<div class="row mb-2">
|
@@ -336,10 +376,10 @@
|
|
336
376
|
</div>
|
337
377
|
</div>
|
338
378
|
</div>
|
339
|
-
<div class="col-
|
379
|
+
<div class="col-1">
|
340
380
|
{{ wtf.form_field(form.start) }}
|
341
381
|
</div>
|
342
|
-
<div class="col-
|
382
|
+
<div class="col-1">
|
343
383
|
{{ wtf.form_field(form.end) }}
|
344
384
|
</div>
|
345
385
|
<div class="col-2">
|
@@ -348,6 +388,7 @@
|
|
348
388
|
<div class="col-2">
|
349
389
|
{{ wtf.form_field(form.cytoband_end) }}
|
350
390
|
</div>
|
391
|
+
{{ variant_size_filter(form) }}
|
351
392
|
</div>
|
352
393
|
<div class="row">
|
353
394
|
<div class="col-2">
|
@@ -577,16 +618,6 @@
|
|
577
618
|
gene_panels=['hpo']) }}">HPO gene list</a>
|
578
619
|
</div>
|
579
620
|
</div>
|
580
|
-
<div class="col-2">
|
581
|
-
{{ form.size.label(class="control-label") }}
|
582
|
-
{{ form.size(class="form-control", type="number") }}
|
583
|
-
</div>
|
584
|
-
<div class="col-2 d-flex align-items-end">
|
585
|
-
<div class="mb-2 form-check">
|
586
|
-
{{ form.size_shorter.label(class="form-check-label") }}
|
587
|
-
{{ form.size_shorter(class="form-check-input",type="checkbox") }}
|
588
|
-
</div>
|
589
|
-
</div>
|
590
621
|
<div class="col-1 d-flex align-items-end">
|
591
622
|
<div class="mb-2 form-check">
|
592
623
|
{{ form.decipher.label(class="form-check-label") }}
|
@@ -622,10 +653,10 @@
|
|
622
653
|
</div>
|
623
654
|
</div>
|
624
655
|
</div>
|
625
|
-
<div class="col-
|
656
|
+
<div class="col-1">
|
626
657
|
{{ wtf.form_field(form.start) }}
|
627
658
|
</div>
|
628
|
-
<div class="col-
|
659
|
+
<div class="col-1">
|
629
660
|
{{ wtf.form_field(form.end) }}
|
630
661
|
</div>
|
631
662
|
<div class="col-1">
|
@@ -634,6 +665,7 @@
|
|
634
665
|
<div class="col-1">
|
635
666
|
{{ wtf.form_field(form.cytoband_end) }}
|
636
667
|
</div>
|
668
|
+
{{ variant_size_filter(form) }}
|
637
669
|
</div>
|
638
670
|
<div class="row mb-3">
|
639
671
|
<div class="col-2">
|
@@ -694,7 +726,8 @@
|
|
694
726
|
{{ form.genetic_models(class="selectpicker", data_style="btn-secondary") }}
|
695
727
|
</div>
|
696
728
|
<div class="col-2">
|
697
|
-
{{ form.clinsig.label(class="control-label") }}
|
729
|
+
<span>{{ form.clinsig.label(class="control-label") }}</span>
|
730
|
+
<span style="float:right;">{{ form.clinsig_exclude.label(class="control-label", data_bs_toggle="tooltip", data_bs_placement="left", title="Exclude variants with clinical significance among the selected categories.") }} {{form.clinsig_exclude}}</span>
|
698
731
|
{{ form.clinsig(class="selectpicker", data_style="btn-secondary") }}
|
699
732
|
</div>
|
700
733
|
<div class="col-2">
|
@@ -765,9 +798,9 @@
|
|
765
798
|
<div class="col">
|
766
799
|
{{ wtf.form_field(form.cytoband_end) }}
|
767
800
|
</div>
|
801
|
+
{{ variant_size_filter(form) }}
|
768
802
|
</div>
|
769
803
|
<div class="row" style="margin-top:10px;">
|
770
|
-
<div class="col-2"></div>
|
771
804
|
<div class="col-2">
|
772
805
|
<a class="btn btn-secondary btn-sm form-control" data-bs-toggle="collapse" href="#stringcoords" aria-expanded="false" aria-controls="stringcoords">
|
773
806
|
String coordinates
|
@@ -841,16 +874,6 @@
|
|
841
874
|
{{ form.hgnc_symbols.label(class="control-label") }}
|
842
875
|
{{ form.hgnc_symbols(class="form-control") }}
|
843
876
|
</div>
|
844
|
-
<div class="col-2">
|
845
|
-
{{ form.size.label(class="control-label") }}
|
846
|
-
{{ form.size(class="form-control", type="number") }}
|
847
|
-
</div>
|
848
|
-
<div class="col-2 d-flex align-items-end">
|
849
|
-
<div class="form-check mb-2">
|
850
|
-
{{ form.size_shorter.label(class="form-check-label") }}
|
851
|
-
{{ form.size_shorter(class="form-check-input",type="checkbox") }}
|
852
|
-
</div>
|
853
|
-
</div>
|
854
877
|
<div class="col-1">
|
855
878
|
</div>
|
856
879
|
<div class="col-1">
|
@@ -889,9 +912,9 @@
|
|
889
912
|
<div class="col">
|
890
913
|
{{ wtf.form_field(form.cytoband_end) }}
|
891
914
|
</div>
|
915
|
+
{{ variant_size_filter(form) }}
|
892
916
|
</div>
|
893
917
|
<div class="row" style="margin-top:10px;">
|
894
|
-
<div class="col-2"></div>
|
895
918
|
<div class="col-2">
|
896
919
|
<a class="btn btn-secondary btn-sm form-control" data-bs-toggle="collapse" href="#stringcoords" aria-expanded="false" aria-controls="stringcoords">
|
897
920
|
String coordinates
|