annotate dir_plugins/G2P.pm @ 0:e545d0a25ffe draft

Uploaded
author dvanzessen
date Mon, 15 Jul 2019 05:17:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1 =head1 LICENSE
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
2
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
3 Copyright [1999-2015] Wellcome Trust Sanger Institute and the EMBL-European Bioinformatics Institute
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
4 Copyright [2016-2018] EMBL-European Bioinformatics Institute
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
5
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
6 Licensed under the Apache License, Version 2.0 (the "License");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
7 you may not use this file except in compliance with the License.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
8 You may obtain a copy of the License at
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
9
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
10 http://www.apache.org/licenses/LICENSE-2.0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
11
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
12 Unless required by applicable law or agreed to in writing, software
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
13 distributed under the License is distributed on an "AS IS" BASIS,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
15 See the License for the specific language governing permissions and
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
16 limitations under the License.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
17
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
18 =head1 CONTACT
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
19
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
20 Ensembl <http://www.ensembl.org/info/about/contact/index.html>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
21
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
22 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
23
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
24 =head1 NAME
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
25
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
26 G2P
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
27
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
28 =head1 SYNOPSIS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
29
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
30 mv G2P.pm ~/.vep/Plugins
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
31 ./vep -i variations.vcf --plugin G2P,file=/path/to/G2P.csv.gz
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
32
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
33 =head1 DESCRIPTION
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
34
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
35 A VEP plugin that uses G2P allelic requirements to assess variants in genes
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
36 for potential phenotype involvement.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
37
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
38 The plugin has multiple configuration options, though minimally requires only
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
39 the CSV file of G2P data.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
40
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
41 Options are passed to the plugin as key=value pairs, (defaults in parentheses):
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
42
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
43 file : path to G2P data file, as found at http://www.ebi.ac.uk/gene2phenotype/downloads
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
44
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
45 af_monoallelic : maximum allele frequency for inclusion for monoallelic genes (0.0001)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
46
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
47 af_biallelic : maximum allele frequency for inclusion for biallelic genes (0.005)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
48 all_confidence_levels : set value to 1 to include all confidence levels: confirmed, probable and possible.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
49 Default levels are confirmed and probable.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
50 af_keys : reference populations used for annotating variant alleles with observed
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
51 allele frequencies. Allele frequencies are stored in VEP cache files.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
52 Default populations are:
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
53 ESP: AA, EA
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
54 1000 Genomes: AFR, AMR, EAS, EUR, SAS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
55 gnomAD exomes: gnomAD, gnomAD_AFR, gnomAD_AMR, gnomAD_ASJ, gnomAD_EAS, gnomAD_FIN, gnomAD_NFE, gnomAD_OTH, gnomAD_SAS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
56 Separate multiple values with '&'
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
57 af_from_vcf : set value to 1 to include allele frequencies from VCF file.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
58 Specifiy the list of reference populations to include with --af_from_vcf_keys
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
59 af_from_vcf_keys : reference populations used for annotating variant alleles with observed
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
60 allele frequencies. Allele frequencies are retrieved from VCF files. If
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
61 af_from_vcf is set to 1 but no populations specified with --af_from_vcf_keys
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
62 all available reference populations are included.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
63 TOPmed: TOPMed
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
64 UK10K: ALSPAC, TWINSUK
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
65 gnomAD exomes: gnomADe:AFR, gnomADe:ALL, gnomADe:AMR, gnomADe:ASJ, gnomADe:EAS, gnomADe:FIN, gnomADe:NFE, gnomADe:OTH, gnomADe:SAS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
66 gnomAD genomes: gnomADg:AFR, gnomADg:ALL, gnomADg:AMR, gnomADg:ASJ, gnomADg:EAS, gnomADg:FIN, gnomADg:NFE, gnomADg:OTH
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
67 Separate multiple values with '&'
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
68 default_af : default frequency of the input variant if no frequency data is
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
69 found (0). This determines whether such variants are included;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
70 the value of 0 forces variants with no frequency data to be
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
71 included as this is considered equivalent to having a frequency
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
72 of 0. Set to 1 (or any value higher than af) to exclude them.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
73 types : SO consequence types to include. Separate multiple values with '&'
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
74 (splice_donor_variant,splice_acceptor_variant,stop_gained,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
75 frameshift_variant,stop_lost,initiator_codon_variant,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
76 inframe_insertion,inframe_deletion,missense_variant,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
77 coding_sequence_variant,start_lost,transcript_ablation,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
78 transcript_amplification,protein_altering_variant)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
79
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
80 log_dir : write stats to log files in log_dir
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
81
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
82 txt_report : write all G2P complete genes and attributes to txt file
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
83
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
84 html_report : write all G2P complete genes and attributes to html file
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
85
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
86 Example:
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
87
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
88 --plugin G2P,file=G2P.csv,af_monoallelic=0.05,af_keys=AA&gnomAD_ASJ,types=stop_gained&frameshift_variant
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
89 --plugin G2P,file=G2P.csv,af_monoallelic=0.05,types=stop_gained&frameshift_variant
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
90 --plugin G2P,file=G2P.csv,af_monoallelic=0.05,af_from_vcf=1
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
91 --plugin G2P,file=G2P.csv
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
92
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
93 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
94
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
95 package G2P;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
96
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
97 use strict;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
98 use warnings;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
99
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
100 use Cwd;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
101 use Scalar::Util qw(looks_like_number);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
102 use FileHandle;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
103 use Text::CSV;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
104 use Bio::EnsEMBL::Utils::Sequence qw(reverse_comp);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
105
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
106 use Bio::EnsEMBL::Variation::Utils::BaseVepPlugin;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
107
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
108 use base qw(Bio::EnsEMBL::Variation::Utils::BaseVepPlugin);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
109
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
110 my %DEFAULTS = (
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
111
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
112 # vars must have a frequency <= to this to pass
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
113 af => 0.001,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
114 af_monoallelic => 0.0001,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
115 af_biallelic => 0.005,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
116
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
117 af_keys => [qw(AA AFR AMR EA EAS EUR SAS gnomAD gnomAD_AFR gnomAD_AMR gnomAD_ASJ gnomAD_EAS gnomAD_FIN gnomAD_NFE gnomAD_OTH gnomAD_SAS)],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
118
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
119 af_from_vcf_keys => [qw(ALSPAC TOPMed TWINSUK gnomADe:AFR gnomADe:ALL gnomADe:AMR gnomADe:ASJ gnomADe:EAS gnomADe:FIN gnomADe:NFE gnomADe:OTH gnomADe:SAS gnomADg:AFR gnomADg:ALL gnomADg:AMR gnomADg:ASJ gnomADg:EAS gnomADg:FIN gnomADg:NFE gnomADg:OTH)],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
120
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
121 # if no MAF data is found, default to 0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
122 # this means absence of MAF data is considered equivalent to MAF=0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
123 # set to 1 to do the "opposite", i.e. exclude variants with no MAF data
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
124 default_af => 0,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
125
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
126 confidence_levels => [qw(confirmed probable)],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
127
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
128 # only include variants with these consequence types
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
129 # currently not ontology-resolved, exact term matches only
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
130 types => {map {$_ => 1} qw(splice_donor_variant splice_acceptor_variant stop_gained frameshift_variant stop_lost initiator_codon_variant inframe_insertion inframe_deletion missense_variant coding_sequence_variant start_lost transcript_ablation transcript_amplification protein_altering_variant)},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
131
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
132 );
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
133
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
134 my $af_key_2_population_name = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
135 minor_allele_freq => 'global allele frequency (AF) from 1000 Genomes Phase 3 data',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
136 AFR => '1000GENOMES:phase_3:AFR',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
137 AMR => '1000GENOMES:phase_3:AMR',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
138 EAS => '1000GENOMES:phase_3:EAS',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
139 EUR => '1000GENOMES:phase_3:EUR',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
140 SAS => '1000GENOMES:phase_3:SAS',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
141 AA => 'Exome Sequencing Project 6500:African_American',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
142 EA => 'Exome Sequencing Project 6500:European_American',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
143 gnomAD => 'Genome Aggregation Database:Total',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
144 gnomAD_AFR => 'Genome Aggregation Database exomes:African/African American',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
145 gnomAD_AMR => 'Genome Aggregation Database exomes:Latino',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
146 gnomAD_ASJ => 'Genome Aggregation Database exomes:Ashkenazi Jewish',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
147 gnomAD_EAS => 'Genome Aggregation Database exomes:East Asian',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
148 gnomAD_FIN => 'Genome Aggregation Database exomes:Finnish',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
149 gnomAD_NFE => 'Genome Aggregation Database exomes:Non-Finnish European',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
150 gnomAD_OTH => 'Genome Aggregation Database exomes:Other (population not assigned)',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
151 gnomAD_SAS => 'Genome Aggregation Database exomes:South Asian',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
152 ALSPAC => 'UK10K:ALSPAC cohort',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
153 TOPMed => 'Trans-Omics for Precision Medicine (TOPMed) Program',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
154 TWINSUK => 'UK10K:TWINSUK cohort',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
155 'gnomADe:AFR' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
156 'gnomADe:ALL' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
157 'gnomADe:AMR' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
158 'gnomADe:ASJ' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
159 'gnomADe:EAS' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
160 'gnomADe:FIN' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
161 'gnomADe:NFE' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
162 'gnomADe:OTH' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
163 'gnomADe:SAS' => 'Genome Aggregation Database exomes v170228',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
164 'gnomADg:AFR' => 'Genome Aggregation Database genomes v170228:African/African American',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
165 'gnomADg:ALL' => 'Genome Aggregation Database genomes v170228:All gnomAD genomes individuals',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
166 'gnomADg:AMR' => 'Genome Aggregation Database genomes v170228:Latino',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
167 'gnomADg:ASJ' => 'Genome Aggregation Database genomes v170228:Ashkenazi Jewish',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
168 'gnomADg:EAS' => 'Genome Aggregation Database genomes v170228:East Asian',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
169 'gnomADg:FIN' => 'Genome Aggregation Database genomes v170228:Finnish',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
170 'gnomADg:NFE' => 'Genome Aggregation Database genomes v170228:Non-Finnish European',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
171 'gnomADg:OTH' => 'Genome Aggregation Database genomes v170228:Other (population not assigned)',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
172 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
173
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
174 my $allelic_requirements = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
175 'biallelic' => { af => 0.005, rules => {HET => 2, HOM => 1} },
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
176 'monoallelic' => { af => 0.0001, rules => {HET => 1, HOM => 1} },
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
177 'hemizygous' => { af => 0.0001, rules => {HET => 1, HOM => 1} },
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
178 'x-linked dominant' => { af => 0.0001, rules => {HET => 1, HOM => 1} },
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
179 'x-linked over-dominance' => { af => 0.0001, rules => {HET => 1, HOM => 1} },
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
180 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
181
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
182 my @allelic_requirement_terms = keys %$allelic_requirements;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
183
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
184 my @population_wide = qw(minor_allele_freq AA AFR ALSPAC AMR EA EAS EUR SAS TOPMed TWINSUK gnomAD gnomAD_AFR gnomAD_AMR gnomAD_ASJ gnomAD_EAS gnomAD_FIN gnomAD_NFE gnomAD_OTH gnomAD_SAS gnomADe:AFR gnomADe:ALL gnomADe:AMR gnomADe:ASJ gnomADe:EAS gnomADe:FIN gnomADe:NFE gnomADe:OTH gnomADe:SAS gnomADg:AFR gnomADg:ALL gnomADg:AMR gnomADg:ASJ gnomADg:EAS gnomADg:FIN gnomADg:NFE gnomADg:OTH);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
185
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
186 sub new {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
187 my $class = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
188
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
189 my $self = $class->SUPER::new(@_);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
190
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
191 my $supported_af_keys = { map {$_ => 1} @population_wide };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
192
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
193 my $params = $self->params_to_hash();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
194 my $file = '';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
195
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
196 # user only supplied file as first param?
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
197 if (!keys %$params) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
198 $file = $self->params->[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
199 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
200 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
201 $file = $params->{file};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
202
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
203 # process types
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
204 if ($params->{types}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
205 $params->{types} = {map {$_ => 1} split(/[\;\&\|]/, $params->{types})};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
206 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
207
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
208 # check af
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
209 foreach my $af (qw/af_monoallelic af_biallelic/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
210 if($params->{$af}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
211 die("ERROR: Invalid value for af: ".$params->{$af} . "\n") unless
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
212 looks_like_number($params->{$af}) && ($params->{$af} >= 0 && $params->{$af} <= 1)
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
213 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
214 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
215
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
216 my $assembly = $self->{config}->{assembly};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
217 my $af_from_vcf_key_2_collection_id = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
218 ALSPAC => {GRCh37 => 'uk10k_GRCh37', GRCh38 => 'uk10k_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
219 TOPMed => {GRCh37 => 'topmed_GRCh37', GRCh38 => 'topmed_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
220 TWINSUK => {GRCh37 => 'uk10k_GRCh37', GRCh38 => 'uk10k_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
221 'gnomADe:AFR' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
222 'gnomADe:ALL' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
223 'gnomADe:AMR' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
224 'gnomADe:ASJ' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
225 'gnomADe:EAS' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
226 'gnomADe:FIN' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
227 'gnomADe:NFE' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
228 'gnomADe:OTH' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
229 'gnomADe:SAS' => {GRCh37 => 'gnomADe_GRCh37', GRCh38 => 'gnomADe_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
230 'gnomADg:AFR' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
231 'gnomADg:ALL' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
232 'gnomADg:AMR' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
233 'gnomADg:ASJ' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
234 'gnomADg:EAS' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
235 'gnomADg:FIN' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
236 'gnomADg:NFE' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
237 'gnomADg:OTH' => {GRCh37 => 'gnomADg_GRCh37', GRCh38 => 'gnomADg_GRCh38'},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
238 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
239
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
240 my @keys = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
241 my $vcf_collection_ids = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
242 if ($params->{af_keys}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
243 push @keys, $params->{af_keys};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
244 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
245 push @keys, @{$DEFAULTS{af_keys}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
246 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
247 if ($params->{af_from_vcf}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
248 if ($params->{af_from_vcf_keys}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
249 push @keys, $params->{af_from_vcf_keys};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
250 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
251 push @keys, @{$DEFAULTS{af_from_vcf_keys}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
252 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
253 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
254
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
255 my @af_keys = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
256 foreach my $af_key_set (@keys) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
257 foreach my $af_key (split(/[\;\&\|]/, $af_key_set)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
258 die("ERROR: af_key: " . $af_key . " not supported. Check plugin documentation for supported af_keys.\n") unless $supported_af_keys->{$af_key};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
259 push @af_keys, $af_key;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
260 if ($af_from_vcf_key_2_collection_id->{$af_key}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
261
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
262 $vcf_collection_ids->{$af_from_vcf_key_2_collection_id->{$af_key}->{$assembly}} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
263 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
264 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
265 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
266 $params->{af_keys} = \@af_keys;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
267 $params->{vcf_collection_ids} = $vcf_collection_ids;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
268 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
269
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
270 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
271 $year += 1900;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
272 $mon++;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
273 my $stamp = join('_', ($year, $mon, $mday, $hour, $min));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
274 my $cwd_dir = getcwd;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
275 my $new_log_dir = "$cwd_dir/g2p_log_dir\_$stamp";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
276 my $log_dir = $params->{log_dir} || $new_log_dir;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
277 if (-d $log_dir) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
278 my @files = <$log_dir/*>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
279 if (scalar @files > 0) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
280 unlink glob "'$log_dir/*.*'";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
281 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
282 @files = <$log_dir/*>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
283 if (scalar @files > 0) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
284 mkdir $new_log_dir, 0755;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
285 $params->{log_dir} = $new_log_dir;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
286 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
287 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
288 mkdir $log_dir, 0755;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
289 $params->{log_dir} = $log_dir;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
290 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
291
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
292 foreach my $report_type (qw/txt_report html_report/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
293 if (!$params->{$report_type}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
294 my $file_type = ($report_type eq 'txt_report') ? 'txt' : 'html';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
295 $params->{$report_type} = $cwd_dir . "/$report_type\_$stamp.$file_type";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
296 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
297 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
298
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
299 if ($params->{all_confidence_levels}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
300 push @{$params->{confidence_levels}}, 'possible', @{$DEFAULTS{confidence_levels}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
301 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
302
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
303 # copy in default params
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
304 $params->{$_} //= $DEFAULTS{$_} for keys %DEFAULTS;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
305 $self->{user_params} = $params;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
306
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
307 if (!defined($self->{config}->{reg})) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
308 my $reg = 'Bio::EnsEMBL::Registry';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
309 $reg->load_registry_from_db(
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
310 -host => $self->config->{host},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
311 -user => $self->config->{user},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
312 -port => $self->config->{port},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
313 -db_version => $self->config->{db_version},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
314 -species => $self->config->{species},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
315 -no_cache => $self->config->{no_slice_cache},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
316 );
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
317 $self->{config}->{reg} = $reg;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
318 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
319
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
320 my $va = $self->{config}->{reg}->get_adaptor($self->{config}->{species}, 'variation', 'variation');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
321 $va->db->use_vcf(1);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
322 $va->db->include_failed_variations(1);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
323 $self->{config}->{va} = $va;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
324 my $pa = $self->{config}->{reg}->get_adaptor($self->{config}->{species}, 'variation', 'population');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
325 $self->{config}->{pa} = $pa;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
326 my $vca = $self->{config}->{reg}->get_adaptor($self->{config}->{species}, 'variation', 'VCFCollection');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
327 $self->{config}->{vca} = $vca;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
328 my $ta = $self->{config}->{reg}->get_adaptor($self->{config}->{species}, 'core', 'transcript');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
329 $self->{config}->{ta} = $ta;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
330
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
331 # read data from file
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
332 $self->{gene_data} = $self->read_gene_data_from_file($file);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
333 $self->synonym_mappings();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
334
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
335 # force some config params
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
336 $self->{config}->{individual} //= ['all'];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
337 $self->{config}->{symbol} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
338
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
339 $self->{config}->{check_existing} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
340 $self->{config}->{failed} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
341 $self->{config}->{af} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
342 $self->{config}->{af_1kg} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
343 $self->{config}->{af_esp} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
344 $self->{config}->{af_gnomad} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
345 # $self->{config}->{sift} = 'b';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
346 # $self->{config}->{polyphen} = 'b';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
347 # $self->{config}->{hgvsc} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
348 # $self->{config}->{hgvsp} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
349
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
350 # tell VEP we have a cache so stuff gets shared/merged between forks
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
351 $self->{has_cache} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
352 $self->{cache}->{g2p_in_vcf} = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
353
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
354 return $self;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
355 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
356
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
357 sub feature_types {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
358 return ['Transcript'];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
359 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
360
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
361 sub get_header_info {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
362 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
363
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
364 return {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
365 G2P_flag => 'Flags zygosity of valid variants for a G2P gene',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
366 G2P_complete => 'Indicates this variant completes the allelic requirements for a G2P gene',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
367 G2P_gene_req => 'MONO or BI depending on the context in which this gene has been explored',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
368 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
369 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
370
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
371 sub run {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
372 my ($self, $tva, $line) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
373
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
374 # only interested if we know the zygosity
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
375 my $zyg = $line->{Extra}->{ZYG} || $line->{ZYG};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
376 return {} unless $zyg;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
377
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
378 # only interested in given gene set
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
379 my $tr = $tva->transcript;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
380
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
381 my $ensembl_gene_id = $tr->{_gene}->stable_id;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
382 my $gene_symbol = $tr->{_gene_symbol} || $tr->{_gene_hgnc};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
383 return {} unless $gene_symbol;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
384 my $gene_data = $self->gene_data($gene_symbol);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
385 if (! defined $gene_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
386 my $ensembl_gene_id = $tr->{_gene}->stable_id;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
387 $gene_data = $self->gene_data($ensembl_gene_id);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
388 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
389
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
390 if (!$self->{cache}->{g2p_in_vcf}->{$gene_symbol}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
391 $self->write_report('G2P_in_vcf', $gene_symbol);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
392 $self->{cache}->{g2p_in_vcf}->{$gene_symbol} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
393 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
394 return {} unless defined $gene_data;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
395
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
396 my @ars = ($gene_data->{'allelic requirement'}) ? @{$gene_data->{'allelic requirement'}} : ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
397 my %seen;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
398 @ars = grep { !$seen{$_}++ } @ars;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
399
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
400 return {} unless (@ars && ( grep { exists($allelic_requirements->{$_}) } @ars));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
401 # limit by type
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
402 my @consequence_types = map { $_->SO_term } @{$tva->get_all_OverlapConsequences};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
403
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
404 return {} unless grep {$self->{user_params}->{types}->{$_->SO_term}} @{$tva->get_all_OverlapConsequences};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
405
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
406 # limit by MAF
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
407 my $threshold = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
408 my ($freqs, $existing_variant, $ar_passed) = @{$self->get_freq($tva, \@ars)};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
409
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
410 return {} if (!keys %$ar_passed);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
411
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
412 my $vf = $tva->base_variation_feature;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
413 my $allele = $tva->variation_feature_seq;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
414 my $start = $vf->{start};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
415 my $end = $vf->{end};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
416
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
417 my $individual = $vf->{individual};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
418 my $vf_name = $vf->variation_name;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
419 if ($vf_name || $vf_name eq '.') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
420 $vf_name = ($vf->{original_chr} || $vf->{chr}) . '_' . $vf->{start} . '_' . ($vf->{allele_string} || $vf->{class_SO_term});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
421 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
422 my $allele_string = $vf->{allele_string};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
423 my @alleles = split('/', $allele_string);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
424 my $ref = $alleles[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
425 my $seq_region_name = $vf->{chr};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
426
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
427 my $params = $self->{user_params};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
428 my $refseq = $tr->{_refseq} || 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
429 my $tr_stable_id = $tr->stable_id;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
430 my $hgvs_t = $tva->hgvs_transcript || 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
431 my $hgvs_p = $tva->hgvs_protein || 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
432
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
433 my ($clin_sig, $novel, $failed, $frequencies, $existing_name) = ('NA', 'yes', 'NA', 'NA', 'NA');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
434 if ($existing_variant) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
435 $clin_sig = $existing_variant->{clin_sig} || 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
436 $failed = ($existing_variant->{failed}) ? 'yes' : 'no';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
437 $existing_name = $existing_variant->{variation_name} || 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
438 $novel = 'no';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
439 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
440
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
441 my $pph_score = (defined $tva->polyphen_score) ? $tva->polyphen_score : 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
442 my $pph_pred = (defined $tva->polyphen_prediction) ? $tva->polyphen_prediction : 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
443 my $sift_score = (defined $tva->sift_score) ? $tva->sift_score : 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
444 my $sift_pred = (defined $tva->sift_prediction) ? $tva->sift_prediction : 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
445
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
446 if (scalar keys %$freqs > 0) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
447 $frequencies = join(',', map {"$_=$freqs->{$_}"} keys %$freqs);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
448 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
449
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
450 my $ar = join(',', sort keys %$ar_passed);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
451 my $ar_in_g2pdb = join(',', sort @ars);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
452 my $g2p_data = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
453 'zyg' => $zyg,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
454 'allele_requirement' => $ar,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
455 'ar_in_g2pdb' => $ar_in_g2pdb,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
456 'frequencies' => $frequencies,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
457 'consequence_types' => join(',', @consequence_types),
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
458 'refseq' => $refseq,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
459 'failed' => $failed,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
460 'clin_sig' => $clin_sig,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
461 'novel' => $novel,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
462 'existing_name' => $existing_name,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
463 'hgvs_t' => $hgvs_t,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
464 'hgvs_p' => $hgvs_p,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
465 'vf_location' => "$seq_region_name:$start-$end $ref/$allele",
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
466 'sift_score' => "$sift_score",
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
467 'sift_prediction' => $sift_pred,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
468 'polyphen_score' => "$pph_score",
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
469 'polyphen_prediction' => $pph_pred,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
470 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
471
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
472 my %return = (
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
473 G2P_flag => $zyg
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
474 );
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
475
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
476
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
477 $self->write_report('G2P_flag', $gene_symbol, $tr_stable_id, $individual, $vf_name, $g2p_data);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
478
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
479 $self->write_report('G2P_complete', $gene_symbol, $tr_stable_id, $individual, $vf_name, $ar, $zyg);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
480
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
481 my $cache = $self->{cache}->{$individual}->{$tr->stable_id} ||= {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
482
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
483 delete $cache->{$vf_name} if exists($cache->{$vf_name});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
484
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
485 # biallelic genes require >=1 hom or >=2 hets
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
486
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
487 my $gene_reqs = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
488
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
489 foreach my $ar (keys %$ar_passed) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
490 if($ar eq 'biallelic') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
491 # homozygous, report complete
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
492 if(uc($zyg) eq 'HOM') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
493 $return{G2P_complete} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
494 $gene_reqs->{BI} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
495 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
496 # heterozygous
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
497 # we need to cache that we've observed one
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
498 elsif(uc($zyg) eq 'HET') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
499 if(scalar keys %$cache) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
500 $return{G2P_complete} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
501 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
502 $cache->{$vf_name} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
503 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
504 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
505 # monoallelic genes require only one allele
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
506 elsif($ar eq 'monoallelic' || $ar eq 'x-linked dominant' || $ar eq 'hemizygous' || $ar eq 'x-linked over-dominance') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
507 $return{G2P_complete} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
508 $gene_reqs->{MONO} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
509 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
510 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
511 return {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
512 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
513 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
514 if ($return{G2P_complete}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
515 $return{G2P_gene_req} = join(',', sort keys %$gene_reqs);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
516 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
517
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
518 return \%return;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
519 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
520
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
521 # read G2P CSV dump
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
522 # as from http://www.ebi.ac.uk/gene2phenotype/downloads
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
523 sub read_gene_data_from_file {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
524 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
525 my $file = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
526 my $delimiter = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
527 my (@headers, %gene_data);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
528
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
529 my $assembly = $self->{config}->{assembly};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
530 die("ERROR: No file specified or could not read from file ".($file || '')."\n") unless $file && -e $file;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
531
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
532 my @confidence_levels = @{$self->{user_params}->{confidence_levels}}, "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
533
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
534 # determine file type
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
535 my $file_type;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
536 my $fh = FileHandle->new($file, 'r');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
537 while (<$fh>) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
538 chomp;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
539 if (/Model_Of_Inheritance/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
540 $file_type = 'panelapp';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
541 } elsif (/"allelic requirement"/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
542 $file_type = 'g2p';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
543 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
544 $file_type = 'unknown';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
545 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
546 last;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
547 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
548 $fh->close();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
549 if ($file_type eq 'unknown') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
550 if ($file =~ /gz$/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
551 die("ERROR: G2P plugin can only read uncompressed data");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
552 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
553 die("ERROR: Could not recognize input file format. Format must be one of panelapp, g2p or custom. Check website for details: https://www.ebi.ac.uk/gene2phenotype/g2p_vep_plugin");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
554 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
555 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
556
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
557 if ($file_type eq 'panelapp') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
558 my @headers = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
559 my $csv = Text::CSV->new ({ sep_char => "\t" });
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
560 open my $fh, "<:encoding(utf8)", "$file" or die "$file: $!";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
561 while ( my $row = $csv->getline( $fh ) ) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
562 unless (@headers) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
563 @headers = @$row;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
564 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
565 my %tmp = map {$headers[$_] => $row->[$_]} (0..$#headers);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
566 my $gene_symbol = $tmp{"Gene Entity Symbol"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
567 my $ensembl_gene_id = "";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
568 if ($assembly eq 'GRCh37') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
569 $ensembl_gene_id = $tmp{"EnsemblId(GRch37)"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
570 } else { # GRCh38
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
571 $ensembl_gene_id = $tmp{"EnsemblId(GRch38)"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
572 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
573 if ($ensembl_gene_id) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
574 my @ars = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
575 my $allelic_requirement_panel_app = $tmp{"Model_Of_Inheritance"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
576 if ($allelic_requirement_panel_app =~ m/MONOALLELIC|BOTH/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
577 push @ars, 'monoallelic';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
578 } elsif ($allelic_requirement_panel_app =~ m/BIALLELIC|BOTH/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
579 push @ars, 'biallelic';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
580 } elsif ($allelic_requirement_panel_app eq 'X-LINKED: hemizygous mutation in males, biallelic mutations in females') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
581 push @ars, 'hemizygous';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
582 } elsif ($allelic_requirement_panel_all eq 'X-LINKED: hemizygous mutation in males, monoallelic mutations in females may cause disease (may be less severe, later onset than males)') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
583 push @ars, 'x-linked dominant';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
584 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
585 $self->write_report('log', "no allelelic_requirement for $ensembl_gene_id");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
586 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
587 foreach my $ar (@ars) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
588 push @{$gene_data{$ensembl_gene_id}->{"allelic requirement"}}, $ar;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
589 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
590 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
591 $self->write_report('log', "no ensembl gene id for $gene_symbol");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
592 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
593 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
594 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
595 $csv->eof or $csv->error_diag();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
596 close $fh;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
597 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
598
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
599 if ($file_type eq 'g2p') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
600 # this regexp allows for nested ",", e.g.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
601 # item,description
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
602 # cheese,"salty,delicious"
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
603 my $re = qr/(?: "\( ( [^()""]* ) \)" | \( ( [^()]* ) \) | " ( [^"]* ) " | ( [^,]* ) ) , \s* /x;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
604
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
605 my $fh = FileHandle->new($file, 'r');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
606
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
607 while(<$fh>) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
608 chomp;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
609 $_ =~ s/\R//g;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
610 my @split = grep defined, "$_," =~ /$re/g;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
611 unless(@headers) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
612 if ($file_type eq 'g2p') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
613 @headers = map {s/\"//g; $_} @split;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
614 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
615 @headers = @split;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
616 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
617 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
618 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
619 my %tmp = map {$headers[$_] => $split[$_]} (0..$#split);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
620 die("ERROR: Gene symbol column not found\n$_\n") unless $tmp{"gene symbol"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
621 my $confidence_value = $tmp{"DDD category"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
622 next if (!grep{$_ eq $confidence_value} @confidence_levels);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
623 my $gene_symbol = $tmp{"gene symbol"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
624 $gene_data{$gene_symbol}->{"prev symbols"} = $tmp{"prev symbols"};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
625 push @{$gene_data{$gene_symbol}->{"allelic requirement"}}, $tmp{"allelic requirement"} if ($tmp{"allelic requirement"});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
626 $self->write_report('G2P_list', $tmp{"gene symbol"}, $tmp{"DDD category"});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
627 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
628 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
629 $fh->close;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
630 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
631 return \%gene_data;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
632 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
633
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
634 # return either whole gene data hash or one gene's data
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
635 # this should allow updates to this plugin to e.g. query a REST server, for example
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
636 sub gene_data {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
637 my ($self, $gene_symbol) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
638 my $gene_data = $self->{gene_data}->{$gene_symbol};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
639 if (!$gene_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
640 my $prev_gene_symbol = $self->{prev_symbol_mappings}->{$gene_symbol};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
641 return $prev_gene_symbol ? $self->{gene_data}->{$prev_gene_symbol} : undef;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
642 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
643 return $gene_data;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
644 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
645
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
646 sub synonym_mappings {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
647 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
648 my $gene_data = $self->{gene_data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
649 my $synonym_mappings = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
650 foreach my $gene_symbol (keys %$gene_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
651 my $prev_symbols = $gene_data->{$gene_symbol}->{'prev symbols'};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
652 if ($prev_symbols) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
653 foreach my $prev_symbol (split(';', $prev_symbols)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
654 $synonym_mappings->{$prev_symbol} = $gene_symbol;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
655 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
656 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
657 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
658 $self->{prev_symbol_mappings} = $synonym_mappings;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
659 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
660
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
661 sub get_freq {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
662 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
663 my $tva = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
664 my $ars = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
665 my $allele = $tva->variation_feature_seq;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
666 my $vf = $tva->base_variation_feature;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
667 reverse_comp(\$allele) if $vf->{strand} < 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
668 my $vf_name = $vf->variation_name;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
669 if ($vf_name || $vf_name eq '.') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
670 $vf_name = ($vf->{original_chr} || $vf->{chr}) . '_' . $vf->{start} . '_' . ($vf->{allele_string} || $vf->{class_SO_term});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
671 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
672 my $cache = $self->{cache}->{$vf_name}->{_g2p_freqs} ||= {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
673
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
674 if (exists $cache->{$allele}->{failed}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
675 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, {}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
676 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
677
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
678 if (exists $cache->{$allele}->{freq}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
679 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, $cache->{$allele}->{passed_ar}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
680 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
681
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
682 if (!$vf->{existing}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
683 my $failed_ars = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
684 my $freqs = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
685 my $passed = $self->frequencies_from_VCF($freqs, $vf, $allele, $ars, $failed_ars);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
686 if (!$passed) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
687 $cache->{$allele}->{failed} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
688 return [{}, {}, {}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
689 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
690 $cache->{$allele}->{freq} = $freqs;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
691 $cache->{$allele}->{ex_variant} = undef;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
692 # if we get to here return all allelic requirements that passed threshold filtering
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
693 my $passed_ar = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
694 foreach my $ar (@$ars) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
695 if (!$failed_ars->{$ar}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
696 $passed_ar->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
697 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
698 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
699 $cache->{$allele}->{passed_ar} = $passed_ar;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
700 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, $cache->{$allele}->{passed_ar}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
701 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
702 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
703
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
704 my @existing_variants = @{$vf->{existing}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
705 # favour dbSNP variants
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
706 my @dbSNP_variants = grep {$_->{variation_name} =~ /^rs/} @existing_variants;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
707 if (@dbSNP_variants) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
708 @existing_variants = @dbSNP_variants;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
709 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
710 foreach my $ex (@existing_variants) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
711 my $existing_allele_string = $ex->{allele_string};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
712 my $variation_name = $ex->{variation_name};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
713 my $freqs = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
714 my $failed_ars = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
715 foreach my $af_key (@{$self->{user_params}->{af_keys}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
716 my $freq = $self->{user_params}->{default_af};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
717 if ($af_key eq 'minor_allele_freq') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
718 if (defined $ex->{minor_allele_freq}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
719 if (($ex->{minor_allele} || '') eq $allele ) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
720 $freq = $ex->{minor_allele_freq};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
721 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
722 $freq = $self->correct_frequency($tva, $existing_allele_string, $ex->{minor_allele}, $ex->{minor_allele_freq}, $allele, $variation_name, $af_key, $vf_name) || $freq;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
723 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
724 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
725 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
726 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
727 my @pairs = split(',', $ex->{$af_key} || '');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
728 my $found = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
729 if (scalar @pairs == 0) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
730 $found = 1; # no allele frequency for this population/af_key available
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
731 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
732 foreach my $pair (@pairs) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
733 my ($a, $f) = split(':', $pair);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
734 if(($a || '') eq $allele && defined($f)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
735 $freq = $f;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
736 $found = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
737 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
738 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
739 if (!$found) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
740 $freq = $self->correct_frequency($tva, $existing_allele_string, undef, undef, $allele, $variation_name, $af_key, $vf_name) || $freq;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
741 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
742 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
743 if (!$self->continue_af_annotation($ars, $failed_ars, $freq)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
744 # cache failed results
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
745 $cache->{$allele}->{failed} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
746 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, {}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
747 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
748 $freqs->{$af_key} = $freq if ($freq);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
749 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
750 if ($self->{user_params}->{af_from_vcf}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
751 my $passed = $self->frequencies_from_VCF($freqs, $vf, $allele, $ars, $failed_ars);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
752 if (!$passed) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
753 $cache->{$allele}->{failed} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
754 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, {}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
755 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
756 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
757 $cache->{$allele}->{freq} = $freqs;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
758 $cache->{$allele}->{ex_variant} = $ex;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
759
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
760 # if we get to here return all allelic requirements that passed threshold filtering
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
761 my $passed_ar = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
762 foreach my $ar (@$ars) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
763 if (!$failed_ars->{$ar}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
764 $passed_ar->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
765 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
766 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
767 $cache->{$allele}->{passed_ar} = $passed_ar;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
768
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
769 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
770
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
771 return [$cache->{$allele}->{freq}, $cache->{$allele}->{ex_variant}, $cache->{$allele}->{passed_ar}];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
772 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
773
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
774 sub correct_frequency {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
775 my ($self, $tva, $allele_string, $minor_allele, $af, $allele, $variation_name, $af_key, $vf_name) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
776
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
777 my @existing_alleles = split('/', $allele_string);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
778 if (!grep( /^$allele$/, @existing_alleles)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
779 return 0.0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
780 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
781
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
782 if ($af_key eq 'minor_allele_freq' && (scalar @existing_alleles == 2)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
783 my $existing_ref_allele = $existing_alleles[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
784 my $existing_alt_allele = $existing_alleles[1];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
785 if ( ($minor_allele eq $existing_ref_allele && ($allele eq $existing_alt_allele)) ||
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
786 ($minor_allele eq $existing_alt_allele && ($allele eq $existing_ref_allele)) ) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
787 return (1.0 - $af);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
788 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
789 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
790 my $va = $self->{config}->{va};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
791 my $pa = $self->{config}->{pa};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
792 my $variation = $va->fetch_by_name($variation_name);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
793 my $af_key = $self->{user_params}->{af_keys};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
794 my $population_name = $af_key_2_population_name->{$af_key};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
795 if ($population_name) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
796 my $population = $self->{config}->{$population_name};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
797 if (!$population) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
798 $population = $pa->fetch_by_name($population_name);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
799 $self->{config}->{$population_name} = $population;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
800 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
801 foreach (@{$variation->get_all_Alleles($population)}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
802 if ($_->allele eq $allele) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
803 return $_->frequency;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
804 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
805 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
806 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
807 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
808 return 0.0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
809 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
810
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
811 sub frequencies_from_VCF {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
812 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
813 my $freqs = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
814 my $vf = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
815 my $vf_allele = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
816 my $ars = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
817 my $failed_ars = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
818 my $vca = $self->{config}->{vca};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
819 my $collections = $vca->fetch_all;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
820 foreach my $vc (@$collections) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
821 next if (! $self->{user_params}->{vcf_collection_ids}->{$vc->id});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
822 my $alleles = $vc->get_all_Alleles_by_VariationFeature($vf);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
823 foreach my $allele (@$alleles) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
824 if ($allele->allele eq $vf_allele) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
825 my $af_key = $allele->population->name;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
826 my $freq = $allele->frequency;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
827 return 0 if (!$self->continue_af_annotation($ars, $failed_ars, $freq));
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
828 $freqs->{$af_key} = $freq;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
829 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
830 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
831 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
832 return 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
833 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
834
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
835 sub continue_af_annotation {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
836 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
837 my $ars = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
838 my $failed_ars = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
839 my $freq = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
840 foreach my $ar (@$ars) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
841 if (!$failed_ars->{$ar}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
842 if (defined $allelic_requirements->{$ar}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
843 my $threshold = $allelic_requirements->{$ar}->{af};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
844 if ($freq > $threshold) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
845 $failed_ars->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
846 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
847 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
848 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
849 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
850 return (scalar @$ars != scalar keys %$failed_ars);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
851 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
852
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
853
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
854
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
855 sub write_report {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
856 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
857 my $flag = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
858 my $log_dir = $self->{user_params}->{log_dir};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
859 my $log_file = "$log_dir/$$.txt";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
860 open(my $fh, '>>', $log_file) or die "Could not open file '$flag $log_file' $!";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
861 if ($flag eq 'G2P_list') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
862 my ($gene_symbol, $DDD_category) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
863 $DDD_category ||= 'Not assigned';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
864 print $fh "$flag\t$gene_symbol\t$DDD_category\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
865 } elsif ($flag eq 'G2P_in_vcf') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
866 my $gene_symbol = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
867 print $fh "$flag\t$gene_symbol\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
868 } elsif ($flag eq 'G2P_complete') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
869 print $fh join("\t", $flag, @_), "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
870 } elsif ($flag eq 'log') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
871 print $fh join("\t", $flag, @_), "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
872 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
873 my ($gene_symbol, $tr_stable_id, $individual, $vf_name, $data) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
874 $data = join(';', map {"$_=$data->{$_}"} sort keys %$data);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
875 print $fh join("\t", $flag, $gene_symbol, $tr_stable_id, $individual, $vf_name, $data), "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
876 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
877 close $fh;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
878 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
879
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
880 sub finish {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
881 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
882 $self->generate_report;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
883 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
884
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
885 sub generate_report {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
886 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
887 my $result_summary = $self->parse_log_files;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
888 my $chart_txt_data = $self->chart_and_txt_data($result_summary);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
889 my $chart_data = $chart_txt_data->{chart_data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
890 my $txt_data = $chart_txt_data->{txt_data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
891 my $canonical_transcripts = $chart_txt_data->{canonical_transcripts};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
892 $self->write_txt_output($txt_data);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
893 $self->write_charts($result_summary, $chart_data, $canonical_transcripts);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
894 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
895
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
896 sub write_txt_output {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
897 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
898 my $txt_output_data = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
899 my $txt_output_file = $self->{user_params}->{txt_report};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
900 my $fh_txt = FileHandle->new($txt_output_file, 'w');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
901 foreach my $individual (sort keys %$txt_output_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
902 foreach my $gene_symbol (keys %{$txt_output_data->{$individual}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
903 foreach my $ar (keys %{$txt_output_data->{$individual}->{$gene_symbol}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
904 foreach my $tr_stable_id (keys %{$txt_output_data->{$individual}->{$gene_symbol}->{$ar}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
905 my $is_canonical = $txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{is_canonical};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
906 my $canonical_tag = ($is_canonical) ? 'is_canonical' : 'not_canonical';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
907 my $req = $txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{REQ};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
908 my $variants = join(';', @{$txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{variants}});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
909 print $fh_txt join("\t", $individual, $gene_symbol, $tr_stable_id, $canonical_tag, "OBS=$ar", "REQ=$req", $variants), "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
910 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
911 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
912 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
913 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
914 $fh_txt->close();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
915 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
916
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
917 sub write_charts {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
918 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
919 my $result_summary = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
920 my $chart_data = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
921 my $canonical_transcripts = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
922
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
923 my $count_g2p_genes = keys %{$result_summary->{g2p_list}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
924 my $count_in_vcf_file = keys %{$result_summary->{in_vcf_file}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
925 my $count_complete_genes = scalar keys %{$result_summary->{complete_genes}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
926
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
927 my @charts = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
928 my @frequencies_header = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
929
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
930 foreach my $short_name (sort @{$self->{user_params}->{af_keys}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
931 my $text = $af_key_2_population_name->{$short_name};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
932 push @frequencies_header, "<a style=\"cursor: pointer\" data-placement=\"top\" data-toggle=\"tooltip\" data-container=\"body\" title=\"$text\">$short_name</a>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
933 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
934
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
935 my $count = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
936 my @new_header = (
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
937 'Variant location and alleles (REF/ALT)',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
938 'Variant name',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
939 'Existing name',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
940 'Zygosity',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
941 'All allelic requirements from G2P DB',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
942 'Consequence types',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
943 'ClinVar annotation',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
944 'SIFT',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
945 'PolyPhen',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
946 'Novel variant',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
947 'Has been failed by Ensembl',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
948 @frequencies_header,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
949 'HGVS transcript',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
950 'HGVS protein',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
951 'RefSeq IDs',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
952 );
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
953
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
954 my $html_output_file = $self->{user_params}->{html_report};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
955 my $fh_out = FileHandle->new($html_output_file, 'w');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
956 print $fh_out stats_html_head(\@charts);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
957 print $fh_out "<div class='main_content container'>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
958
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
959
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
960 print $fh_out "<h1>G2P report</h1>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
961 print $fh_out "<p>Input and output files:</p>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
962
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
963 print $fh_out "<dl class='dl-horizontal'>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
964 print $fh_out "<dt>G2P list</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
965 print $fh_out "<dd>" . $self->{user_params}->{file} . "</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
966 print $fh_out "<dt>Log directory</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
967 print $fh_out "<dd>" . $self->{user_params}->{log_dir} . "</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
968 print $fh_out "<dt>HTML report</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
969 print $fh_out "<dd>" . $self->{user_params}->{html_report} . "</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
970 print $fh_out "<dt>TXT report</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
971 print $fh_out "<dd>" . $self->{user_params}->{txt_report} . "</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
972 print $fh_out "</dl>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
973
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
974 print $fh_out "<p>Counts:</p>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
975 print $fh_out "<dl class='dl-horizontal text-overflow'>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
976 print $fh_out "<dt>$count_g2p_genes</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
977 print $fh_out "<dd>G2P genes</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
978 print $fh_out "<dt>$count_in_vcf_file</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
979 print $fh_out "<dd>G2P genes in input VCF file</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
980 print $fh_out "<dt>$count_complete_genes</dt>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
981 print $fh_out "<dd>G2P complete genes in input VCF file</dd>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
982 print $fh_out "</dl>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
983
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
984
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
985 print $fh_out "<h1>Summary of G2P complete genes per individual</h1>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
986 print $fh_out "<p>G2P complete gene: A sufficient number of variant hits for the observed allelic requirement in at least one of the gene's transcripts. Variants are filtered by frequency.</p>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
987 print $fh_out "<p>Frequency thresholds and number of required variant hits for each allelic requirement:</p>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
988
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
989 print $fh_out "<table class='table table-bordered'>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
990 print $fh_out "<thead>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
991 print $fh_out "<tr><th>Allelic requirement</th><th>Frequency threshold for filtering</th><th>Variant counts by zygosity</th></tr>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
992 print $fh_out "</thead>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
993 print $fh_out "<tbody>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
994 foreach my $ar (sort keys %$allelic_requirements) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
995 my $af = $allelic_requirements->{$ar}->{af};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
996 my $rules = $allelic_requirements->{$ar}->{rules};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
997 my $rule = join(' OR ', map {"$_ >= $rules->{$_}"} keys %$rules);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
998 print $fh_out "<tr><td>$ar</td><td>$af</td><td>$rule</td></tr>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
999 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1000 print $fh_out "</tbody>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1001 print $fh_out "</table>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1002
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1003 my $switch =<<SHTML;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1004 <form>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1005 <div class="checkbox">
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1006 <label>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1007 <input class="target" type="checkbox"> Show only canonical transcript
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1008 </label>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1009 </div>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1010 </form>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1011 SHTML
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1012
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1013 print $fh_out $switch;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1014
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1015 foreach my $individual (sort keys %$chart_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1016 foreach my $gene_symbol (keys %{$chart_data->{$individual}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1017 foreach my $ar (keys %{$chart_data->{$individual}->{$gene_symbol}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1018 print $fh_out "<ul>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1019 foreach my $transcript_stable_id (keys %{$chart_data->{$individual}->{$gene_symbol}->{$ar}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1020 my $class = ($canonical_transcripts->{$transcript_stable_id}) ? 'is_canonical' : 'not_canonical';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1021 print $fh_out "<li><a class=\"$class\" href=\"#$individual\_$gene_symbol\_$ar\_$transcript_stable_id\">" . "$individual &gt; $gene_symbol &gt; $ar &gt; $transcript_stable_id" . "</a> </li>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1022 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1023 print $fh_out "</ul>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1024 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1025 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1026 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1027
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1028 foreach my $individual (sort keys %$chart_data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1029 foreach my $gene_symbol (keys %{$chart_data->{$individual}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1030 foreach my $ar (keys %{$chart_data->{$individual}->{$gene_symbol}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1031 foreach my $transcript_stable_id (keys %{$chart_data->{$individual}->{$gene_symbol}->{$ar}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1032 my $class = ($canonical_transcripts->{$transcript_stable_id}) ? 'is_canonical' : 'not_canonical';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1033 print $fh_out "<div class=\"$class\">";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1034 my $name = "$individual\_$gene_symbol\_$ar\_$transcript_stable_id";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1035 my $title = "$individual &gt; $gene_symbol &gt; $ar &gt; $transcript_stable_id";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1036 print $fh_out "<h3><a name=\"$name\"></a>$title <a title=\"Back to Top\" data-toggle=\"tooltip\" href='#top'><span class=\"glyphicon glyphicon-arrow-up\" aria-hidden=\"true\"></span></a></h3>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1037 print $fh_out "<div class=\"table-responsive\" style=\"width:100%\">\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1038 print $fh_out "<TABLE class=\"table table-bordered table-condensed\" style=\"margin-left: 2em\">";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1039 print $fh_out "<thead>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1040 print $fh_out "<tr>" . join('', map {"<th>$_</th>"} @new_header) . "</tr>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1041 print $fh_out "</thead>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1042 print $fh_out "<tbody>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1043 foreach my $vf_data (@{$chart_data->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1044 my $data_row = $vf_data->[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1045 my @tds = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1046 foreach my $cell (@$data_row) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1047 my $value = $cell->[0];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1048 my $class = $cell->[1];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1049 if ($class) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1050 push @tds, "<td class=\"$class\">$value</td>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1051 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1052 push @tds, "<td>$value</td>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1053 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1054 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1055 print $fh_out "<tr>", join('', @tds), "</tr>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1056 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1057 print $fh_out "</tbody>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1058 print $fh_out "</TABLE>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1059 print $fh_out "</div>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1060 print $fh_out "</div>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1061 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1062 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1063 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1064 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1065 print $fh_out stats_html_tail();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1066 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1067
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1068 sub chart_and_txt_data {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1069 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1070 my $result_summary = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1071 my $individuals = $result_summary->{individuals};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1072 my $complete_genes = $result_summary->{complete_genes};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1073 my $acting_ars = $result_summary->{acting_ars};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1074 my $new_order = $result_summary->{new_order};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1075
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1076 # my @frequencies_header = sort keys $af_key_2_population_name;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1077 my @frequencies_header = sort @{$self->{user_params}->{af_keys}};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1078
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1079 my $assembly = $self->{config}->{assembly};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1080 my $transcripts = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1081 my $canonical_transcripts = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1082 my $transcript_adaptor = $self->{config}->{ta};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1083 my $chart_data = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1084 my $txt_output_data = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1085
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1086 my $prediction2bgcolor = {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1087 'probably damaging' => 'danger',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1088 'deleterious' => 'danger',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1089 'possibly damaging' => 'warning',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1090 'unknown' => 'warning',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1091 'benign' => 'success',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1092 'tolerated' => 'success',
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1093 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1094
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1095 foreach my $individual (sort keys %$new_order) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1096 foreach my $gene_symbol (keys %{$new_order->{$individual}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1097 foreach my $ar (keys %{$new_order->{$individual}->{$gene_symbol}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1098 foreach my $transcript_stable_id (keys %{$new_order->{$individual}->{$gene_symbol}->{$ar}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1099 foreach my $vf_name (keys %{$new_order->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1100 my $data = $individuals->{$individual}->{$gene_symbol}->{$vf_name}->{$transcript_stable_id};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1101
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1102 my $hash = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1103 foreach my $pair (split/;/, $data) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1104 my ($key, $value) = split('=', $pair, 2);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1105 $value ||= '';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1106 $hash->{$key} = $value;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1107 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1108 my $vf_location = $hash->{vf_location};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1109 my $existing_name = $hash->{existing_name};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1110 if ($existing_name ne 'NA') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1111 $existing_name = "<a href=\"http://$assembly.ensembl.org/Homo_sapiens/Variation/Explore?v=$existing_name\">$existing_name</a>";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1112 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1113 my $refseq = $hash->{refseq};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1114 my $failed = $hash->{failed};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1115 my $clin_sign = $hash->{clin_sig};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1116 my $novel = $hash->{novel};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1117 my $hgvs_t = $hash->{hgvs_t};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1118 my $hgvs_p = $hash->{hgvs_p};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1119 my $allelic_requirement = $hash->{allele_requirement};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1120 my $observed_allelic_requirement = $hash->{ar_in_g2pdb};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1121 my $consequence_types = $hash->{consequence_types};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1122 my $zygosity = $hash->{zyg};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1123 my $sift_score = $hash->{sift_score} || '0.0';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1124 my $sift_prediction = $hash->{sift_prediction};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1125 my $sift = 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1126 my $sift_class = '';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1127 if ($sift_prediction ne 'NA') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1128 $sift = "$sift_prediction(" . "$sift_score)";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1129 $sift_class = $prediction2bgcolor->{$sift_prediction};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1130 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1131 my $polyphen_score = $hash->{polyphen_score} || '0.0';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1132 my $polyphen_prediction = $hash->{polyphen_prediction};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1133 my $polyphen = 'NA';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1134 my $polyphen_class = '';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1135 if ($polyphen_prediction ne 'NA') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1136 $polyphen = "$polyphen_prediction($polyphen_score)";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1137 $polyphen_class = $prediction2bgcolor->{$polyphen_prediction};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1138 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1139
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1140 my %frequencies_hash = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1141 if ($hash->{frequencies} ne 'NA') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1142 %frequencies_hash = split /[,=]/, $hash->{frequencies};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1143 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1144 my @frequencies = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1145 my @txt_output_frequencies = ();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1146 foreach my $population (@frequencies_header) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1147 my $frequency = $frequencies_hash{$population} || '';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1148 push @frequencies, ["$frequency"];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1149 if ($frequency) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1150 push @txt_output_frequencies, "$population=$frequency";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1151 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1152 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1153 my $is_canonical = 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1154 if ($hash->{is_canonical}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1155 $is_canonical = ($hash->{is_canonical} eq 'yes') ? 1 : 0;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1156 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1157 if ($transcripts->{$transcript_stable_id}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1158 $is_canonical = 1 if ($canonical_transcripts->{$transcript_stable_id});
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1159 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1160 my $transcript = $transcript_adaptor->fetch_by_stable_id($transcript_stable_id);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1161 if ($transcript) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1162 $is_canonical = $transcript->is_canonical();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1163 $transcripts->{$transcript_stable_id} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1164 $canonical_transcripts->{$transcript_stable_id} = 1 if ($is_canonical);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1165 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1166 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1167 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1168 my ($location, $alleles) = split(' ', $vf_location);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1169 $location =~ s/\-/:/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1170 $alleles =~ s/\//:/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1171
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1172 push @{$chart_data->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}}, [[
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1173 [$vf_location],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1174 [$vf_name],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1175 [$existing_name],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1176 [$zygosity],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1177 [$observed_allelic_requirement],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1178 [$consequence_types],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1179 [$clin_sign],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1180 [$sift, $sift_class],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1181 [$polyphen, $polyphen_class],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1182 [$novel],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1183 [$failed],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1184 @frequencies,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1185 [$hgvs_t],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1186 [$hgvs_p],
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1187 [$refseq]
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1188 ], $is_canonical];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1189
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1190 my $txt_output_variant = "$location:$alleles:$zygosity:$consequence_types:SIFT=$sift:PolyPhen=$polyphen";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1191 if (@txt_output_frequencies) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1192 $txt_output_variant .= ':' . join(',', @txt_output_frequencies);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1193 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1194 $txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}->{is_canonical} = $is_canonical;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1195 $txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}->{REQ} = $observed_allelic_requirement;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1196 push @{$txt_output_data->{$individual}->{$gene_symbol}->{$ar}->{$transcript_stable_id}->{variants}}, $txt_output_variant;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1197 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1198 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1199 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1200 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1201 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1202 return {txt_data => $txt_output_data, chart_data => $chart_data, canonical_transcripts => $canonical_transcripts};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1203 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1204
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1205 sub parse_log_files {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1206 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1207
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1208 my $log_dir = $self->{user_params}->{log_dir};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1209 my @files = <$log_dir/*>;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1210
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1211 my $genes = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1212 my $individuals = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1213 my $complete_genes = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1214 my $g2p_list = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1215 my $in_vcf_file = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1216 my $cache = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1217 my $acting_ars = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1218
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1219 my $new_order = {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1220
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1221 foreach my $file (@files) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1222 my $fh = FileHandle->new($file, 'r');
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1223 while (<$fh>) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1224 chomp;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1225 if (/^G2P_list/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1226 my ($flag, $gene_symbol, $DDD_category) = split/\t/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1227 $g2p_list->{$gene_symbol} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1228 } elsif (/^G2P_in_vcf/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1229 my ($flag, $gene_symbol) = split/\t/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1230 $in_vcf_file->{$gene_symbol} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1231 } elsif (/^G2P_complete/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1232 my ($flag, $gene_symbol, $tr_stable_id, $individual, $vf_name, $ars, $zyg) = split/\t/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1233 foreach my $ar (split(',', $ars)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1234 if ($ar eq 'biallelic') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1235 # homozygous, report complete
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1236 if (uc($zyg) eq 'HOM') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1237 $complete_genes->{$gene_symbol}->{$individual}->{$tr_stable_id} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1238 $acting_ars->{$gene_symbol}->{$individual}->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1239 $new_order->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{$vf_name} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1240 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1241 # heterozygous
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1242 # we need to cache that we've observed one
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1243 elsif (uc($zyg) eq 'HET') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1244 if (scalar keys %{$cache->{$individual}->{$tr_stable_id}} >= 1) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1245 $complete_genes->{$gene_symbol}->{$individual}->{$tr_stable_id} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1246 $acting_ars->{$gene_symbol}->{$individual}->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1247 $new_order->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{$vf_name} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1248 # add first observed het variant to the list
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1249 foreach my $vf (keys %{$cache->{$individual}->{$tr_stable_id}}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1250 $new_order->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{$vf} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1251 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1252 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1253 $cache->{$individual}->{$tr_stable_id}->{$vf_name}++;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1254 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1255 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1256 # monoallelic genes require only one allele
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1257 elsif ($ar eq 'monoallelic' || $ar eq 'x-linked dominant' || $ar eq 'hemizygous' || $ar eq 'x-linked over-dominance') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1258 $complete_genes->{$gene_symbol}->{$individual}->{$tr_stable_id} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1259 $acting_ars->{$gene_symbol}->{$individual}->{$ar} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1260 $new_order->{$individual}->{$gene_symbol}->{$ar}->{$tr_stable_id}->{$vf_name} = 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1261 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1262 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1263 } elsif (/^G2P_flag/) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1264 my ($flag, $gene_symbol, $tr_stable_id, $individual, $vf_name, $g2p_data) = split/\t/;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1265 $genes->{$gene_symbol}->{"$individual\t$vf_name"}->{$tr_stable_id} = $g2p_data;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1266 $individuals->{$individual}->{$gene_symbol}->{$vf_name}->{$tr_stable_id} = $g2p_data;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1267 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1268
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1269 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1270 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1271 $fh->close();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1272 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1273 return {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1274 genes => $genes,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1275 individuals => $individuals,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1276 complete_genes => $complete_genes,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1277 g2p_list => $g2p_list,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1278 in_vcf_file => $in_vcf_file,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1279 acting_ars => $acting_ars,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1280 new_order => $new_order,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1281 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1282 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1283
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1284
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1285 sub stats_html_head {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1286 my $charts = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1287
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1288 my $html =<<SHTML;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1289 <html>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1290 <head>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1291 <title>VEP summary</title>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1292 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1293 <style>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1294 a.inactive {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1295 color: grey;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1296 pointer-events:none;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1297 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1298 </style>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1299 </head>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1300 <body>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1301 SHTML
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1302 return $html;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1303 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1304
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1305 sub stats_html_tail {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1306 my $script =<<SHTML;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1307 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1308 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1309 <script type="text/javascript" src="http://www.google.com/jsapi"></script>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1310 <script>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1311 \$( "input[type=checkbox]" ).on( "click", function(){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1312 if (\$('.target').is(':checked')) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1313 \$( "div.not_canonical" ).hide();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1314 \$("a.not_canonical").addClass("inactive");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1315 } else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1316 \$( "div.not_canonical" ).show();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1317 \$("a.not_canonical").removeClass("inactive");
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1318 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1319 } );
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1320 \$(document).ready(function(){
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1321 \$('[data-toggle="tooltip"]').tooltip();
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1322 });
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1323 </script>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1324 SHTML
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1325 return "\n</div>\n$script\n</body>\n</html>\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1326 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1327
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1328 sub sort_keys {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1329 my $data = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1330 my $sort = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1331 print $data, "\n";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1332 my @keys;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1333
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1334 # sort data
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1335 if(defined($sort)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1336 if($sort eq 'chr') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1337 @keys = sort {($a !~ /^\d+$/ || $b !~ /^\d+/) ? $a cmp $b : $a <=> $b} keys %{$data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1338 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1339 elsif($sort eq 'value') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1340 @keys = sort {$data->{$a} <=> $data->{$b}} keys %{$data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1341 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1342 elsif(ref($sort) eq 'HASH') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1343 @keys = sort {$sort->{$a} <=> $sort->{$b}} keys %{$data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1344 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1345 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1346 else {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1347 @keys = keys %{$data};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1348 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1349
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1350 return \@keys;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1351 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1352
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1353 1;