diff --git a/HISTORY.rst b/HISTORY.rst index c31d1d9f5..35b245865 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -42,6 +42,8 @@ End-User Summary - Implement new in-house background database for structural variants (#32). - Allow to exclude cases from in-house database through project settings (#579). - Adding distinct de novo genotype setting (#562). +- Adding section presets for SV filtration (#616). +- Adjusting SV filtration presets (#616). Full Change List ================ @@ -79,6 +81,8 @@ Full Change List - Implement new in-house background database for structural variants (#32). - Allow to exclude cases from in-house database through project settings (#579). - Adding distinct de novo genotype setting (#562). +- Adding section presets for SV filtration (#616). +- Adjusting SV filtration presets (#616). ------ v1.2.0 diff --git a/svs/forms.py b/svs/forms.py index 462b47309..58293b066 100644 --- a/svs/forms.py +++ b/svs/forms.py @@ -414,70 +414,70 @@ def update_quality_fields(self): required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-gq-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-gq_min"}), ) self.fields[self.get_quality_field_names()[name]["src_min"]] = forms.IntegerField( label="", required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-src-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-src_min"}), ) self.fields[self.get_quality_field_names()[name]["srv_min"]] = forms.IntegerField( label="", required=False, - initial=None, + initial=1, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-srv-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-srv_min"}), ) self.fields[self.get_quality_field_names()[name]["srv_max"]] = forms.IntegerField( label="", required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-srv-max"}), + widget=forms.NumberInput(attrs={"class": "quality-field-srv_max"}), ) self.fields[self.get_quality_field_names()[name]["pec_min"]] = forms.IntegerField( label="", required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-pec-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-pec_min"}), ) self.fields[self.get_quality_field_names()[name]["pev_min"]] = forms.IntegerField( label="", required=False, - initial=None, + initial=1, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-pev-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-pev_min"}), ) self.fields[self.get_quality_field_names()[name]["pev_max"]] = forms.IntegerField( label="", required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-pev-max"}), + widget=forms.NumberInput(attrs={"class": "quality-field-pev_max"}), ) self.fields[self.get_quality_field_names()[name]["cov_min"]] = forms.IntegerField( label="", required=False, - initial=2, + initial=4, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-cov-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-cov_min"}), ) self.fields[self.get_quality_field_names()[name]["var_min"]] = forms.IntegerField( label="", required=False, - initial=2, + initial=4, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-var-min"}), + widget=forms.NumberInput(attrs={"class": "quality-field-var_min"}), ) self.fields[self.get_quality_field_names()[name]["var_max"]] = forms.IntegerField( label="", required=False, initial=None, min_value=0, - widget=forms.NumberInput(attrs={"class": "quality-field-var-max"}), + widget=forms.NumberInput(attrs={"class": "quality-field-var_max"}), ) self.fields[self.get_quality_field_names()[name]["fail"]] = forms.CharField( label="", diff --git a/svs/templates/svs/_filter_form.html b/svs/templates/svs/_filter_form.html index 3b923efd1..0d5c76222 100644 --- a/svs/templates/svs/_filter_form.html +++ b/svs/templates/svs/_filter_form.html @@ -12,6 +12,47 @@
{% csrf_token %}
+
-{##} + diff --git a/varfish/static/js/filter_form.js b/varfish/static/js/filter_form.js index 7b1e0924d..a7a9cf467 100644 --- a/varfish/static/js/filter_form.js +++ b/varfish/static/js/filter_form.js @@ -2176,3 +2176,309 @@ $(document).keypress( event.preventDefault(); } }); + +const svFreqVals = { + in_house_only: { + dgv_min_overlap: 0.75, + dgv_max_carriers: null, + dgv_gs_min_overlap: 0.75, + dgv_gs_max_carriers: null, + exac_min_overlap: 0.75, + exac_max_carriers: null, + gnomad_min_overlap: 0.75, + gnomad_max_carriers: null, + dbvar_min_overlap: 0.75, + dbvar_max_carriers: null, + g1k_min_overlap: 0.75, + g1k_max_alleles: null, + inhouse_min_overlap: 0.75, + inhouse_max_carriers: 10, + }, + relaxed: { + dgv_min_overlap: 0.75, + dgv_max_carriers: 20, + dgv_gs_min_overlap: 0.75, + dgv_gs_max_carriers: 10, + exac_min_overlap: 0.75, + exac_max_carriers: 20, + gnomad_min_overlap: 0.75, + gnomad_max_carriers: 20, + dbvar_min_overlap: 0.75, + dbvar_max_carriers: 40, + g1k_min_overlap: 0.75, + g1k_max_alleles: 10, + inhouse_min_overlap: 0.75, + inhouse_max_carriers: 10, + }, + strict: { + dgv_min_overlap: 0.75, + dgv_max_carriers: 10, + dgv_gs_min_overlap: 0.75, + dgv_gs_max_carriers: 5, + exac_min_overlap: 0.75, + exac_max_carriers: 10, + gnomad_min_overlap: 0.75, + gnomad_max_carriers: 10, + dbvar_min_overlap: 0.75, + dbvar_max_carriers: 20, + g1k_min_overlap: 0.75, + g1k_max_alleles: 5, + inhouse_min_overlap: 0.75, + inhouse_max_carriers: 5, + }, +} + +const svVarsVals = { + all: { + effect_coding_sequence_variant: true, + effect_coding_transcript_intron_variant: true, + effect_coding_transcript_variant: true, + effect_copy_number_change: true, + effect_direct_tandem_duplication: true, + effect_downstream_gene_variant: true, + effect_exon_loss_variant: true, + effect_feature_truncation: true, + effect_five_prime_UTR_exon_variant: true, + effect_five_prime_UTR_intron_variant: true, + effect_five_prime_UTR_truncation: true, + effect_frameshift_truncation: true, + effect_insertion: true, + effect_intron_variant: true, + effect_inversion: true, + effect_mobile_element_deletion: true, + effect_mobile_element_insertion: true, + effect_non_coding_transcript_exon_variant: true, + effect_non_coding_transcript_intron_variant: true, + effect_non_coding_transcript_variant: true, + effect_sequence_variant: true, + effect_start_lost: true, + effect_stop_lost: true, + effect_structural_variant: true, + effect_three_prime_UTR_exon_variant: true, + effect_three_prime_UTR_intron_variant: true, + effect_three_prime_UTR_truncation: true, + effect_transcript_ablation: true, + effect_transcript_amplification: true, + effect_translocation: true, + effect_upstream_gene_variant: true, + require_transcript_overlap: false, + sv_size_max: null, + sv_size_min: null, + sv_sub_type_bnd: true, + sv_sub_type_cnv: true, + sv_sub_type_del: true, + sv_sub_type_del_me_alu: true, + sv_sub_type_del_me: true, + sv_sub_type_del_me_l1: true, + sv_sub_type_del_me_sva: true, + sv_sub_type_dup: true, + sv_sub_type_dup_tandem: true, + sv_sub_type_ins: true, + sv_sub_type_ins_me_alu: true, + sv_sub_type_ins_me: true, + sv_sub_type_ins_me_l1: true, + sv_sub_type_ins_me_sva: true, + sv_sub_type_inv: true, + sv_type_bnd: true, + sv_type_cnv: true, + sv_type_del: true, + sv_type_dup: true, + sv_type_ins: true, + sv_type_inv: true, + transcripts_coding: true, + transcripts_noncoding: true, + }, + almost_all: { + effect_coding_sequence_variant: true, + effect_coding_transcript_intron_variant: true, + effect_coding_transcript_variant: true, + effect_copy_number_change: true, + effect_direct_tandem_duplication: true, + effect_downstream_gene_variant: true, + effect_exon_loss_variant: true, + effect_feature_truncation: true, + effect_five_prime_UTR_exon_variant: true, + effect_five_prime_UTR_intron_variant: true, + effect_five_prime_UTR_truncation: true, + effect_frameshift_truncation: true, + effect_insertion: true, + effect_intron_variant: true, + effect_inversion: true, + effect_mobile_element_deletion: true, + effect_mobile_element_insertion: true, + effect_non_coding_transcript_exon_variant: true, + effect_non_coding_transcript_intron_variant: true, + effect_non_coding_transcript_variant: true, + effect_sequence_variant: true, + effect_start_lost: true, + effect_stop_lost: true, + effect_structural_variant: true, + effect_three_prime_UTR_exon_variant: true, + effect_three_prime_UTR_intron_variant: true, + effect_three_prime_UTR_truncation: true, + effect_transcript_ablation: true, + effect_transcript_amplification: true, + effect_translocation: true, + effect_upstream_gene_variant: true, + require_transcript_overlap: false, + sv_size_max: null, + sv_size_min: 500, + sv_sub_type_bnd: true, + sv_sub_type_cnv: true, + sv_sub_type_del: true, + sv_sub_type_del_me_alu: true, + sv_sub_type_del_me: true, + sv_sub_type_del_me_l1: true, + sv_sub_type_del_me_sva: true, + sv_sub_type_dup: true, + sv_sub_type_dup_tandem: true, + sv_sub_type_ins: true, + sv_sub_type_ins_me_alu: true, + sv_sub_type_ins_me: true, + sv_sub_type_ins_me_l1: true, + sv_sub_type_ins_me_sva: true, + sv_sub_type_inv: true, + sv_type_bnd: true, + sv_type_cnv: true, + sv_type_del: true, + sv_type_dup: true, + sv_type_ins: true, + sv_type_inv: true, + transcripts_coding: true, + transcripts_noncoding: true, + }, + cnv_only: { + effect_coding_sequence_variant: true, + effect_coding_transcript_intron_variant: true, + effect_coding_transcript_variant: true, + effect_copy_number_change: true, + effect_direct_tandem_duplication: true, + effect_downstream_gene_variant: true, + effect_exon_loss_variant: true, + effect_feature_truncation: true, + effect_five_prime_UTR_exon_variant: true, + effect_five_prime_UTR_intron_variant: true, + effect_five_prime_UTR_truncation: true, + effect_frameshift_truncation: true, + effect_insertion: true, + effect_intron_variant: true, + effect_inversion: true, + effect_mobile_element_deletion: true, + effect_mobile_element_insertion: true, + effect_non_coding_transcript_exon_variant: true, + effect_non_coding_transcript_intron_variant: true, + effect_non_coding_transcript_variant: true, + effect_sequence_variant: true, + effect_start_lost: true, + effect_stop_lost: true, + effect_structural_variant: true, + effect_three_prime_UTR_exon_variant: true, + effect_three_prime_UTR_intron_variant: true, + effect_three_prime_UTR_truncation: true, + effect_transcript_ablation: true, + effect_transcript_amplification: true, + effect_translocation: true, + effect_upstream_gene_variant: true, + require_transcript_overlap: false, + sv_size_max: null, + sv_size_min: 500, + sv_sub_type_bnd: false, + sv_sub_type_cnv: true, + sv_sub_type_del: true, + sv_sub_type_del_me_alu: true, + sv_sub_type_del_me: true, + sv_sub_type_del_me_l1: true, + sv_sub_type_del_me_sva: true, + sv_sub_type_dup: true, + sv_sub_type_dup_tandem: true, + sv_sub_type_ins: false, + sv_sub_type_ins_me_alu: false, + sv_sub_type_ins_me: false, + sv_sub_type_ins_me_l1: false, + sv_sub_type_ins_me_sva: false, + sv_sub_type_inv: false, + sv_type_bnd: false, + sv_type_cnv: true, + sv_type_del: true, + sv_type_dup: true, + sv_type_ins: false, + sv_type_inv: false, + transcripts_coding: true, + transcripts_noncoding: true, + } +} + +const svQualsVals = { + all: { + gq_min: null, + src_min: null, + srv_min: null, + srv_max: null, + pec_min: null, + pev_min: null, + pev_max: null, + cov_min: null, + var_min: null, + var_max: null, + fail: "ignore", + }, + relaxed: { + gq_min: null, + src_min: null, + srv_min: 1, + srv_max: null, + pec_min: null, + pev_min: 1, + pev_max: null, + cov_min: 4, + var_min: 4, + var_max: null, + fail: "drop-variant", + }, + strict: { + gq_min: null, + src_min: null, + srv_min: 1, + srv_max: null, + pec_min: null, + pev_min: 1, + pev_max: null, + cov_min: 10, + var_min: 10, + var_max: null, + fail: "drop-variant", + }, +} + +// Apply quick presets for the SV form +function svQuickPresetClicked(e) { + const preset = $(e.target).data("preset"); + console.log(preset) + if (preset.startsWith("freq-")) { + const key = preset.substring("freq-".length) + const settings = svFreqVals[key] + for (const i in settings) { + $(`#id_${i}`).val(settings[i]) + } + $("#frequency-tab").click() + } else if (preset.startsWith("vars-")) { + const key = preset.substring("vars-".length) + const settings = svVarsVals[key] + for (const i in settings) { + const val = settings[i] + if (typeof(val) === "boolean") { + $(`#id_${i}`).prop("checked", val) + } else { + $(`#id_${i}`).val(val) + } + } + $("#effect-tab").click() + } else if (preset.startsWith("quals-")) { + const key = preset.substring("quals-".length) + const settings = svQualsVals[key] + for (const i in settings) { + $(`.quality-field-${i}`).val(settings[i]) + } + $("#quality-tab").click() + } +}