annotate filter_by_gene_ontology_pipe @ 0:6411ca16916e default tip

initial commit
author Yusuf Ali <ali@yusuf.email>
date Wed, 25 Mar 2015 13:23:29 -0600
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
1 #!/usr/bin/env perl
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
2
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
3 use strict;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
4 use warnings;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
5
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
6 my $quiet = 0;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
7 if(@ARGV and $ARGV[0] =~ /^-q/){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
8 $quiet = 1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
9 shift @ARGV;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
10 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
11
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
12 @ARGV == 4 or die "Usage: $0 [-q(uiet)] <GO data dir> <hgvs_annotated.txt> <output.txt> <query>\n",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
13 "Where query has the format \"this or that\", \"this and that\", etc.\n",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
14 "GOA and OBO files must be found in the GO data dir\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
15
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
16 my $go_dir = shift @ARGV;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
17 my $obo_file = "$go_dir/gene_ontology.1_2.obo";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
18 my $hgvs_file = shift @ARGV;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
19 my $out_file = shift @ARGV;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
20 my $query = shift @ARGV;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
21
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
22 # Terms with meronyms and hyponyms in their free text descriptions, causing overgeneralization problems
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
23 my %problematic_terms = ("GO:0033647" => "host intracellular organelle",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
24 "GO:0006996" => "organelle organization",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
25 "GO:0043226" => "organelle",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
26 "GO:0043227" => "membrane-bounded organelle",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
27 "GO:0043229" => "intracellular organelle",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
28 "GO:0043231" => "intracellular membrane-bounded organelle",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
29 "GO:0044384" => "host cell outer membrane",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
30 "GO:0044422" => "organelle part",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
31 "GO:0044446" => "intracellular organelle part",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
32 "GO:0045202" => "synapse",
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
33 "GO:0033648" => "host intracellular membrane-bounded organelle");
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
34
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
35 #$query = quotemeta($query); # in case there are meta characters in the query, treat them as literals
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
36
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
37 # convert the query to a regex
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
38 my $orig_query = $query;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
39 my $and_query = 0;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
40 $query =~ s/\(\s*.+?\s*\)/my $s=$&;$s=~s(\s+or\s+)(|)g; $s/eg;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
41 if($query =~ s/(\S+)\s+and\s+(\S+)/(?:$1.*?$2|$2.*?$1)/gi){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
42 $and_query = 1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
43 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
44 $query =~ s/\s+or\s+/|/gi;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
45 $query =~ s/\b([a-z])([a-z]+\b)/"[".uc($1)."$1]$2"/eg; # allow title case match in regex for letter only lower case words, otherwise make case sensitive as assuming gene name
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
46 #print STDERR "Query regex for GO is $query\n" unless $quiet;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
47
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
48 open(OBO, $obo_file)
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
49 or die "Cannot open $obo_file for reading: $!\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
50 my %matched_go_ids;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
51 my %go_id2subtypes;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
52 my %go_id2name;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
53 my $record_count;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
54 $/ = "\n[Term]\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
55 <OBO>; # chuck header
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
56 while(<OBO>){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
57 next unless /^id:\s*(GO:\d+)/s;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
58 my $id = $1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
59 next unless /\nname:\s*(.+?)\s*\n/s;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
60 my $name = $1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
61 $go_id2name{$id} = $name;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
62 $record_count++;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
63 while(/\nis_a:\s*(GO:\d+)/g){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
64 my $parent_id = $1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
65 $go_id2subtypes{$parent_id} = [] unless exists $go_id2subtypes{$parent_id};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
66 push @{$go_id2subtypes{$parent_id}}, $id;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
67 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
68 if(exists $problematic_terms{$id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
69 if($name =~ /\b($query)/o){ # strict matching of name only if an entry with problematic free text
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
70 my $match = $1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
71 $match =~ tr/\t\n/ /;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
72 $match =~ s/ {2,}/ /g;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
73 if(not exists $matched_go_ids{$id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
74 $matched_go_ids{$id} = $match;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
75 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
76 elsif($matched_go_ids{$id} !~ /$match/){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
77 $matched_go_ids{$id} .= "; $match";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
78 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
79 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
80 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
81 elsif(/\b($query)/o){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
82 my $match = $1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
83 $match =~ tr/\t\n/ /;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
84 $match =~ s/ {2,}/ /g;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
85 if(not exists $matched_go_ids{$id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
86 $matched_go_ids{$id} = $match;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
87 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
88 elsif($matched_go_ids{$id} !~ /$match/){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
89 $matched_go_ids{$id} .= "; $match";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
90 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
91 #print STDERR "Found match $match for $_\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
92 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
93 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
94 close(OBO);
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
95 #print STDERR "Found ", scalar(keys %matched_go_ids), "/$record_count go ontology terms matching the query\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
96
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
97 open(OUT, ">$out_file")
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
98 or die "Cannot open $out_file for writing: $!\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
99
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
100 # Implements term subsumption
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
101 my @matched_go_ids = keys %matched_go_ids;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
102 for(my $i = 0; $i <= $#matched_go_ids; $i++){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
103 my $go_id = $matched_go_ids[$i];
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
104 next unless exists $go_id2subtypes{$go_id};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
105 for my $sub_type_id (@{$go_id2subtypes{$go_id}}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
106 if(not exists $matched_go_ids{$sub_type_id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
107 $matched_go_ids{$sub_type_id} = $matched_go_ids{$go_id};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
108 push @matched_go_ids, $sub_type_id;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
109 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
110 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
111 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
112
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
113 $/="\n"; # record separator
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
114 my %gene2go_ids;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
115 opendir(GOADIR, $go_dir)
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
116 or die "Cannot read directory $go_dir: $!\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
117 while($_ = readdir(GOADIR)){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
118 next if /^\./; # hidden
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
119 next unless /\.goa$/; # not a goa formatted file
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
120 my $goa_file = $_;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
121 open(GOA, "$go_dir/$goa_file")
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
122 or die "Cannot open $go_dir/$goa_file for reading: $!\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
123 #print STDERR "Processing file $goa_file\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
124 # example line:
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
125 # UniProtKB A0ASJ9 GO:0001664 GO_REF:0000033 ISS PANTHER:PTN000026392 F G protein alpha subunit AgGq6 A0ASJ9_ANOGA protein taxon:7165 20110125 RefGenome
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
126 while(<GOA>){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
127 next if /^!/; # comment
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
128 chomp;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
129 my @F = split /\t/, $_;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
130 next unless $F[2] and $#F > 3; # does it have the gene name and go id fields?
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
131 my $genename = uc($F[2]); # standardize gene names to upper case
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
132 $genename =~ s/-//g;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
133 my $go_id = $F[4];
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
134 $gene2go_ids{$genename} = [] unless exists $gene2go_ids{$genename};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
135 push @{$gene2go_ids{$genename}}, $go_id;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
136 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
137 close(GOA);
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
138 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
139 close(GOADIR);
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
140 #print STDERR "Found ", scalar(keys %gene2go_ids), " total genes\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
141
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
142 # remove genes if they don't have a matching go term
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
143 for my $genename (keys %gene2go_ids){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
144 my $keep = 0;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
145 for my $go_id (@{$gene2go_ids{$genename}}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
146 if(exists $matched_go_ids{$go_id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
147 $keep = 1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
148 last;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
149 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
150 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
151 delete $gene2go_ids{$genename} unless $keep;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
152 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
153 #print STDERR "Found ", scalar(keys %gene2go_ids), " genes with gene ontology terms matching the query\n" unless $quiet;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
154
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
155 $/ = "\n"; # one line at, a time from the HGVS file please!
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
156 open(HGVS, $hgvs_file)
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
157 or die "Cannot open $hgvs_file for reading: $!\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
158 my $header = <HGVS>;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
159 chomp $header;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
160 my @header_columns = split /\t/, $header;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
161 my $gene_name_column;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
162 for(my $i = 0; $i <= $#header_columns; $i++){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
163 if($header_columns[$i] eq "Gene Name"){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
164 $gene_name_column = $i;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
165 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
166 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
167 if(not defined $gene_name_column){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
168 die "Could not find 'Gene Name' column in the input header, aborting\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
169 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
170
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
171 print OUT "$header\tQuickGO Gene Ontology Terms (matching $orig_query)\tQuickGO Gene Ontology Terms (other)\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
172 # Check if any of the variants in the annotated HGVS table are in knockout genes matching the target go term list
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
173 while(<HGVS>){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
174 chomp;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
175 my @F = split /\t/, $_, -1;
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
176 my (@target_gos, @other_gos);
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
177 for my $gene_name (split /\s*;\s*/, $F[$gene_name_column]){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
178 next unless exists $gene2go_ids{$gene_name};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
179 for my $id (@{$gene2go_ids{$gene_name}}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
180 if(exists $matched_go_ids{$id}){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
181 push @target_gos, $go_id2name{$id}."($matched_go_ids{$id})";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
182 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
183 else{
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
184 push @other_gos, $go_id2name{$id};
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
185 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
186 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
187 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
188 if(@target_gos){
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
189 my (%t,%o);
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
190 # print unique terms
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
191 print OUT join("\t", @F, join("; ", sort grep {not $t{$_}++} @target_gos), join("; ", sort grep {not $o{$_}++} @other_gos)), "\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
192 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
193 else{
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
194 print OUT join("\t", @F, "", ""), "\n";
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
195 }
6411ca16916e initial commit
Yusuf Ali <ali@yusuf.email>
parents:
diff changeset
196 }