+ my @aliases = grep {$_ ne 'NO ALIASES'} split(/; /, $gene[ALIAS]);
+ add_unique_parts($genes{$gene[NAME]},'alias', @aliases);
+ if ($gene[NAME] ne 'NO NAME') {
+ for my $alias (@aliases) {
+ if (not exists $alias_reverse{$alias}) {
+ $alias_reverse{$alias} = $gene[NAME];
+ }
+ elsif ($alias_reverse{$alias} ne $gene[NAME]) {
+ print STDERR "Alias $alias for $gene[NAME] also points at $alias_reverse{$alias} [".join(',',@aliases).".]\n";
+ $alias_reverse{$alias} = '';
+ }
+ }
+ }
+ }
+}
+
+my %databases;
+my %terms;
+my %auto_weight;
+my %keyword_keyword;
+for my $gene (keys %genes) {
+ my %term_temp;
+ my %db_temp;
+ my %gene_temp;
+ my %gene_temp2;
+ for my $term (keys %{$genes{$gene}{terms}}) {
+ if ($term =~ /\[/) {
+ my ($keyword,$database) = $term =~ /([^[]+)\[([^\]]+)\]/;
+ my $hits = $genes{$gene}{terms}{$term};
+ $keyword =~ s/[-+_]/ /g;
+ $keyword =~ s/\s*$//;
+ $keyword =~ s/[*]//;
+ $gene_temp{$keyword}{$database} = 1;
+ $gene_temp2{$database}{$keyword} = 1;
+ $databases{$database}{$keyword}{count}++;
+ $db_temp{$database}++;
+ $terms{$keyword}{$database}{count}++;
+ }
+ else {
+ my $keyword = $term;
+ my $hits = $genes{$gene}{terms}{$term};
+ $keyword =~ s/[-+_]/ /g;
+ $keyword =~ s/\s*$//;
+ $keyword =~ s/[*]//;
+ $terms{$keyword}{total}{count}++;
+ }
+ }
+ if (keys %gene_temp == 1) {
+ $terms{[keys %gene_temp]->[0]}{total}{unique}++;
+ if (keys %{$gene_temp{[keys %gene_temp]->[0]}} == 1) {
+ $databases{total}{total}{unique}++
+ }