annotate annotate_low_coverage @ 0:7cdd13ff182a default tip

initial commit
author Yusuf Ali <ali@yusuf.email>
date Wed, 25 Mar 2015 15:49:28 -0600
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
1 #!/usr/bin/env perl
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
2
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
3 use strict;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
4 use warnings;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
5 use File::Basename;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
6 #@ARGV >= 4 and @ARGV <= 6 or die "Usage: $0 <capture kit.bed> <poor regions input.bed> <annotated output.hgvs.txt> [target gene list.txt] [gene name pattern for detail reporting]\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
7
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
8 my $dirname = dirname(__FILE__);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
9 my $tool_dir = shift @ARGV;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
10
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
11 #read config file
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
12 if(not -e "$tool_dir/report_poor_converage" ){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
13 system("cp $dirname/tool-data/report_poor_coverage $tool_dir/report_poor_coverage");
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
14 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
15 my %configuration_file;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
16 open FILE, '<', "$tool_dir/report_poor_coverage";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
17 while(<FILE>){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
18 (my $key, my $value) = split(/\s+/,$_);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
19 $configuration_file{$key} = $value;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
20 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
21 close FILE;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
22 my $ref_fasta = $configuration_file{"ref_fasta"};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
23 my $ref_flat = $configuration_file{"ref_flat"};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
24 my $ref_gencode = $configuration_file{"ref_gencode"};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
25 my $clinVar = $configuration_file{"clinVar"};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
26 my $dgv2 = $configuration_file{"dgv2"};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
27
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
28 my $capture_kit_bed = $configuration_file{"capturekits_directory"} . (shift @ARGV) . ".bed" ;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
29 my $low_input_bed = shift @ARGV;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
30 my $low_output_hgvs = shift @ARGV;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
31 my $target_list = @ARGV ? shift @ARGV : undef;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
32 my $gene_name_regex = @ARGV ? shift @ARGV : undef;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
33 my $tmp_hgvs = "$$.tmp.hgvs.txt";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
34
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
35 my $tmp_bed;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
36 if(defined $target_list and $target_list ne "/dev/null"){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
37 $tmp_bed = "$$.targeted.tmp.bed";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
38 #print STDERR "filter_by_list false $low_input_bed $target_list $tmp_bed 1 3\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
39 system "$dirname/add_names_to_bed $low_input_bed $ref_flat - /dev/null | $dirname/filter_by_list false - $target_list $tmp_bed 1 3"; # 3 indicates 4th column of the bed file, which should have the gene name
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
40 $low_input_bed = $tmp_bed;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
41 open(TARGETS, "$dirname/add_names_to_bed $capture_kit_bed $ref_flat - /dev/null | $dirname/filter_by_list false - $target_list - 1 3 |")
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
42 or die "Cannot run filter_by_list, aborting: $!\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
43 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
44 else{
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
45 open(TARGETS, "$dirname/add_names_to_bed $capture_kit_bed $ref_flat - /dev/null |")
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
46 or die "Cannot run add_names_to_bed on $capture_kit_bed: $!\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
47 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
48
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
49 #print STDERR "/export/achri_galaxy/galaxy-dist/tools/achri/vcf2hgvs_table -q -p 0.05 -c $low_input_bed -g /export/achri_galaxy/dbs/DGV2/hg19.2012-03-29.txt.gz -o - -r /export/achri_galaxy/dbs/hg19.fa -e /export/achri_galaxy/dbs/hg19_refGene_gencode_ultrasensitive.gtf -i /dev/null -b /export/achri_galaxy/dbs/hg19_refFlat_2014-07-10.bed | /export/achri_galaxy/galaxy-dist/tools/achri/filter_by_index_gamma /export/achri_galaxy/dbs/ClinVar/ClinVarFullRelease_2014-03.xml. ClinVar - $tmp_hgvs \"\"";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
50 system "$dirname/vcf2hgvs_table -q -p 0.05 -c $low_input_bed -g $dgv2 -o - -r $ref_fasta -e $ref_gencode -i /dev/null -b $ref_flat | $dirname/filter_by_index_gamma $clinVar. ClinVar - $tmp_hgvs \"\"";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
51 my $tmp_output = "$$.tmp.annotated.hgvs.txt";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
52 #system "/export/achri_galaxy/galaxy-dist/tools/achri/hgvs_table_annotate /export/achri_galaxy/dbs/sift/hg19 /export/achri_galaxy/dbs/polyphen2/hg19.txt.gz /export/achri_galaxy/dbs/gerp/hg19 /export/achri_galaxy/dbs/TissueDistributionDBs/human.v2009-07-30.tab /export/achri_galaxy/dbs/pathways/KEGG.human.2012-09-25.txt /export/achri_galaxy/dbs/interpro_supermatch_hg19.bed $tmp_hgvs $tmp_output /export/achri_galaxy/dbs/hg19.fa";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
53 open(OUT, ">$low_output_hgvs")
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
54 or die "Cannot open $low_output_hgvs for writing: $!\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
55 open(COLLAPSE, "$dirname/hgvs_collapse_transcripts $tmp_hgvs - 1 |")
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
56 or die "cannot run hgvs_collapse_transcripts: $!\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
57 my $header = <COLLAPSE>;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
58 chomp $header;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
59 my @headers = split /\t/, $header;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
60 my ($chr_column, $from_column, $to_column, $ftype_column, $clinvar_column, $loc_column, $maf_column, $gene_column, $gene_desc_column, $cdna_hgvs_column, $transcript_column, $zygosity_column, $phase_column);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
61 my %req_columns = (
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
62 "Chr" => \$chr_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
63 "DNA From" => \$from_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
64 "DNA To" => \$to_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
65 "Feature type" => \$ftype_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
66 # "Variant context" => \$loc_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
67 "Pop. freq." => \$maf_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
68 "Gene Name" => \$gene_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
69 # "Gene Function" => \$gene_desc_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
70 "ClinVar Text Matches" => \$clinvar_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
71 "Transcript HGVS" => \$cdna_hgvs_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
72 "Selected transcript" => \$transcript_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
73 "Zygosity" => \$zygosity_column,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
74 "Phase" => \$phase_column);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
75 &load_header_columns(\%req_columns, \@headers);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
76 my %col2name = reverse %req_columns;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
77
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
78 my %target_sizes;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
79 <TARGETS>; # header
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
80 while(<TARGETS>){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
81 chomp;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
82 my @F = split /\t/, $_;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
83 next unless $#F >= 3; # nameless records
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
84 for my $gene_name (split /;\s*/, $F[3]){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
85 #print STDERR "Processing $_\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
86 $target_sizes{$gene_name} += $F[2]-$F[1]+1; # assumes non-overlapping targets in BED file
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
87 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
88 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
89 close(TARGETS);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
90 my $target_total = 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
91 for my $gene_name (keys %target_sizes){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
92 #print STDERR "Adding size of $gene_name ($target_sizes{$gene_name})\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
93 $target_total += $target_sizes{$gene_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
94 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
95
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
96 my %missing_homo;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
97 my %missing_coding_homo;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
98 my %missing_het;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
99 my %missing_coding_het;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
100 my @detail_lines;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
101 while(<COLLAPSE>){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
102 chomp;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
103 my @F = split /\t/, $_, -1;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
104
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
105 for my $gene_name (split /;\s*/, uc($F[$gene_column])){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
106 next if not exists $target_sizes{$gene_name}; # not a gene of interest
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
107 #print STDERR "Processing $_\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
108 next if defined $gene_name_regex and $F[$transcript_column] !~ /$gene_name_regex/o;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
109 #print STDERR "Passes filters\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
110 if(not exists $missing_homo{$gene_name}){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
111 $missing_homo{$gene_name} = {};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
112 $missing_coding_homo{$gene_name} = {};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
113 $missing_het{$gene_name} = {};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
114 $missing_coding_het{$gene_name} = {};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
115 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
116
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
117 if($F[$zygosity_column] =~ /homo/){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
118 for my $pos ($F[$from_column]..$F[$to_column]){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
119 $missing_homo{$gene_name}->{$pos}++;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
120 $missing_coding_homo{$gene_name}->{$pos}++ if $F[$ftype_column] =~ /protein_coding/;# and $F[$loc_column] =~ /exon/;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
121 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
122 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
123 else{
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
124 for my $pos ($F[$from_column]..$F[$to_column]){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
125 $missing_het{$gene_name}->{$pos}++;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
126 $missing_coding_het{$gene_name}->{$pos}++ if $F[$ftype_column] =~ /protein_coding/;# and $F[$loc_column] =~ /exon/;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
127 #print STDERR "Missing $gene_name het $pos ($F[$from_column]..$F[$to_column]) $F[$ftype_column] $F[$loc_column]\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
128 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
129 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
130 next unless $F[$ftype_column] =~ /protein_coding/;# and $F[$loc_column] =~ /exon/;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
131 #push @detail_lines, [$F[$chr_column], $F[$from_column], $F[$to_column], $F[$maf_column], $gene_name, $F[$cdna_hgvs_column], $F[$transcript_column], ($F[$zygosity_column] =~ /homo/ ? "<4x" : "<20x"), $F[$gene_desc_column], $F[$domain_column], $F[$gene_column]];
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
132 $F[$clinvar_column] = "" if not defined $F[$clinvar_column];
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
133 $F[$clinvar_column] =~ s/&gt;/>/;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
134 push @detail_lines, [$F[$chr_column], $F[$from_column], $F[$to_column], $F[$maf_column], $gene_name, $F[$cdna_hgvs_column], $F[$transcript_column], ($F[$zygosity_column] =~ /homo/ ? "<4x" : "<20x"), $F[$gene_column], $F[$clinvar_column]];
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
135 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
136 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
137 my $missing_homo = 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
138 my $missing_coding_homo = 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
139 my $missing_het = 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
140 my $missing_coding_het = 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
141 for my $gene_name (keys %target_sizes){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
142 $missing_homo{$gene_name} = defined $missing_homo{$gene_name} ? keys %{$missing_homo{$gene_name}} : 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
143 $missing_homo += $missing_homo{$gene_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
144 $missing_coding_homo{$gene_name} = defined $missing_coding_homo{$gene_name} ? keys %{$missing_coding_homo{$gene_name}} : 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
145 $missing_coding_homo += $missing_coding_homo{$gene_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
146 $missing_het{$gene_name} = defined $missing_het{$gene_name} ? keys %{$missing_het{$gene_name}} : 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
147 $missing_het += $missing_het{$gene_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
148 $missing_coding_het{$gene_name} = defined $missing_coding_het{$gene_name} ? keys %{$missing_coding_het{$gene_name}} : 0;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
149 $missing_coding_het += $missing_coding_het{$gene_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
150 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
151 if(defined $gene_name_regex){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
152 print OUT "Note: only considering coding sequence target bases in gene models with IDs matching \"$gene_name_regex\"\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
153 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
154 print OUT "\ttotal size\tcoding <4x coverage\t%\tcoding<20x coverage\t%\ttotal <4x coverage\t%\ttotal <20x coverage\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
155 printf OUT "Total target gene bases designed for capture\t%d\t%d\t%.1f\t%d\t%.1f\t%d\t%.1f\t%d\t%.1f\n", $target_total, $missing_coding_homo, $missing_coding_homo/$target_total*100, $missing_coding_het, $missing_coding_het/$target_total*100,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
156 $missing_homo, $missing_homo/$target_total*100, $missing_het, $missing_het/$target_total*100;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
157 print OUT "Per gene missing coding sequence coverage breakdown:\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
158 for my $gene_name (sort keys %missing_homo){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
159 printf OUT "%s\t%d\t%d\t%.1f\t%d\t%.1f\t%d\t%.1f\t%d\t%.1f\n", $gene_name, $target_sizes{$gene_name}, $missing_coding_homo{$gene_name},
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
160 $missing_coding_homo{$gene_name}/$target_sizes{$gene_name}*100, $missing_coding_het{$gene_name}, $missing_coding_het{$gene_name}/$target_sizes{$gene_name}*100,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
161 $missing_homo{$gene_name}, $missing_homo{$gene_name}/$target_sizes{$gene_name}*100,
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
162 $missing_het{$gene_name}, $missing_het{$gene_name}/$target_sizes{$gene_name}*100;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
163 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
164 # Print revised header that's only a few of the fields
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
165 @detail_lines = sort {$a->[4] cmp $b->[4] or $a->[1] <=> $b->[1]} @detail_lines;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
166 print OUT "\n\nCoding region low coverage details (alphabetical by gene name):\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
167 print OUT join("\t", $col2name{\$chr_column}, $col2name{\$from_column}, $col2name{\$to_column}, $col2name{\$maf_column}, $col2name{\$gene_column}, $col2name{\$cdna_hgvs_column},
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
168 $col2name{\$transcript_column}, "Low coverage type", "Genes in this region (gene overlaps possible)", $col2name{\$clinvar_column}), "\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
169 print OUT join("\n", map {join("\t", @{$_})} @detail_lines), "\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
170
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
171 unlink($tmp_hgvs);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
172 unlink($tmp_output);
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
173 unlink($tmp_bed) if defined $tmp_bed;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
174
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
175 sub load_header_columns{
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
176 my ($reqs_hash_ref, $headers_array_ref) = @_;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
177 my %unfulfilled;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
178 for my $field_name (keys %$reqs_hash_ref){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
179 $unfulfilled{$field_name} = 1;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
180 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
181 for(my $i = 0; $i <= $#{$headers_array_ref}; $i++){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
182 for my $req_header_name (keys %$reqs_hash_ref){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
183 if($req_header_name eq $headers_array_ref->[$i]){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
184 ${$reqs_hash_ref->{$req_header_name}} = $i;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
185 delete $unfulfilled{$req_header_name};
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
186 last;
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
187 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
188 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
189 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
190 if(keys %unfulfilled){
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
191 die "Aborting. Could not find headers in the input file for the following required fields: ", join(", ", sort keys %unfulfilled), "\n";
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
192 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
193 }
7cdd13ff182a initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
194