0
|
1 =head1 LICENSE
|
|
2
|
|
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
|
|
4 Genome Research Limited. All rights reserved.
|
|
5
|
|
6 This software is distributed under a modified Apache license.
|
|
7 For license details, please see
|
|
8
|
|
9 http://www.ensembl.org/info/about/code_licence.html
|
|
10
|
|
11 =head1 CONTACT
|
|
12
|
|
13 Please email comments or questions to the public Ensembl
|
|
14 developers list at <dev@ensembl.org>.
|
|
15
|
|
16 Questions may also be sent to the Ensembl help desk at
|
|
17 <helpdesk@ensembl.org>.
|
|
18
|
|
19 =cut
|
|
20
|
|
21 =head1 NAME
|
|
22
|
|
23 Bio::EnsEMBL::IdMapping::InternalIdMapper::EnsemblGeneGeneric - default Ensembl
|
|
24 InternalIdMapper implementation for genes
|
|
25
|
|
26 =head1 SYNOPSIS
|
|
27
|
|
28 =head1 DESCRIPTION
|
|
29
|
|
30 =head1 METHODS
|
|
31
|
|
32 =cut
|
|
33
|
|
34 package Bio::EnsEMBL::IdMapping::InternalIdMapper::EnsemblGeneGeneric;
|
|
35
|
|
36 use strict;
|
|
37 use warnings;
|
|
38 no warnings 'uninitialized';
|
|
39
|
|
40 use Bio::EnsEMBL::IdMapping::InternalIdMapper::BaseMapper;
|
|
41 our @ISA = qw(Bio::EnsEMBL::IdMapping::InternalIdMapper::BaseMapper);
|
|
42
|
|
43 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
|
|
44 use Bio::EnsEMBL::Utils::ScriptUtils qw(path_append);
|
|
45
|
|
46
|
|
47 #
|
|
48 # basic mapping
|
|
49 #
|
|
50 sub init_basic {
|
|
51 my $self = shift;
|
|
52 my $num = shift;
|
|
53 my $gsb = shift;
|
|
54 my $mappings = shift;
|
|
55 my $gene_scores = shift;
|
|
56
|
|
57 $self->logger->info("Basic gene mapping...\n", 0, 'stamped');
|
|
58
|
|
59 $mappings = $self->basic_mapping($gene_scores, "gene_mappings$num");
|
|
60 $num++;
|
|
61 my $new_scores = $gsb->create_shrinked_matrix($gene_scores, $mappings,
|
|
62 "gene_matrix$num");
|
|
63
|
|
64 return ($new_scores, $mappings);
|
|
65 }
|
|
66
|
|
67
|
|
68 #
|
|
69 # build the synteny from unambiguous mappings
|
|
70 #
|
|
71 sub synteny {
|
|
72 my $self = shift;
|
|
73 my $num = shift;
|
|
74 my $gsb = shift;
|
|
75 my $mappings = shift;
|
|
76 my $gene_scores = shift;
|
|
77
|
|
78 unless ($gene_scores->loaded) {
|
|
79 $self->logger->info("Synteny Framework building...\n", 0, 'stamped');
|
|
80 my $dump_path = path_append($self->conf->param('basedir'), 'mapping');
|
|
81 my $sf = Bio::EnsEMBL::IdMapping::SyntenyFramework->new(
|
|
82 -DUMP_PATH => $dump_path,
|
|
83 -CACHE_FILE => 'synteny_framework.ser',
|
|
84 -LOGGER => $self->logger,
|
|
85 -CONF => $self->conf,
|
|
86 -CACHE => $self->cache,
|
|
87 );
|
|
88 $sf->build_synteny($mappings);
|
|
89
|
|
90 # use it to rescore the genes
|
|
91 $self->logger->info("\nSynteny assisted mapping...\n", 0, 'stamped');
|
|
92 $gene_scores = $sf->rescore_gene_matrix_lsf($gene_scores);
|
|
93
|
|
94 # checkpoint
|
|
95 $gene_scores->write_to_file;
|
|
96 }
|
|
97
|
|
98 my $new_mappings = $self->basic_mapping($gene_scores, "gene_mappings$num");
|
|
99 $num++;
|
|
100 my $new_scores = $gsb->create_shrinked_matrix($gene_scores, $new_mappings,
|
|
101 "gene_matrix$num");
|
|
102
|
|
103 return ($new_scores, $new_mappings);
|
|
104 }
|
|
105
|
|
106
|
|
107 #
|
|
108 # rescore with simple scoring function and try again
|
|
109 #
|
|
110 sub best_transcript {
|
|
111 my $self = shift;
|
|
112 my $num = shift;
|
|
113 my $gsb = shift;
|
|
114 my $mappings = shift;
|
|
115 my $gene_scores = shift;
|
|
116 my $transcript_scores = shift;
|
|
117
|
|
118 $self->logger->info("Retry with simple best transcript score...\n", 0, 'stamped');
|
|
119
|
|
120 unless ($gene_scores->loaded) {
|
|
121 $gsb->simple_gene_rescore($gene_scores, $transcript_scores);
|
|
122 $gene_scores->write_to_file;
|
|
123 }
|
|
124
|
|
125 my $new_mappings = $self->basic_mapping($gene_scores, "gene_mappings$num");
|
|
126 $num++;
|
|
127 my $new_scores = $gsb->create_shrinked_matrix($gene_scores, $new_mappings,
|
|
128 "gene_matrix$num");
|
|
129
|
|
130 return ($new_scores, $new_mappings);
|
|
131 }
|
|
132
|
|
133
|
|
134 #
|
|
135 # rescore by penalising scores between genes with different biotypes
|
|
136 #
|
|
137 sub biotype {
|
|
138 my $self = shift;
|
|
139 my $num = shift;
|
|
140 my $gsb = shift;
|
|
141 my $mappings = shift;
|
|
142 my $gene_scores = shift;
|
|
143
|
|
144 $self->logger->info("Retry with biotype disambiguation...\n", 0, 'stamped');
|
|
145
|
|
146 unless ($gene_scores->loaded) {
|
|
147 $gsb->biotype_gene_rescore($gene_scores);
|
|
148 $gene_scores->write_to_file;
|
|
149 }
|
|
150
|
|
151 my $new_mappings = $self->basic_mapping($gene_scores, "gene_mappings$num");
|
|
152 $num++;
|
|
153 my $new_scores = $gsb->create_shrinked_matrix($gene_scores, $new_mappings,
|
|
154 "gene_matrix$num");
|
|
155
|
|
156 return ($new_scores, $new_mappings);
|
|
157 }
|
|
158
|
|
159
|
|
160 #
|
|
161 # selectively rescore by penalising scores between genes with different
|
|
162 # internalIDs
|
|
163 #
|
|
164 sub internal_id {
|
|
165 my $self = shift;
|
|
166 my $num = shift;
|
|
167 my $gsb = shift;
|
|
168 my $mappings = shift;
|
|
169 my $gene_scores = shift;
|
|
170
|
|
171 $self->logger->info("Retry with internalID disambiguation...\n", 0, 'stamped');
|
|
172
|
|
173 unless ($gene_scores->loaded) {
|
|
174 $gsb->internal_id_rescore($gene_scores);
|
|
175 $gene_scores->write_to_file;
|
|
176 }
|
|
177
|
|
178 my $new_mappings = $self->basic_mapping($gene_scores, "gene_mappings$num");
|
|
179 $num++;
|
|
180 my $new_scores = $gsb->create_shrinked_matrix($gene_scores, $new_mappings,
|
|
181 "gene_matrix$num");
|
|
182
|
|
183 return ($new_scores, $new_mappings);
|
|
184 }
|
|
185
|
|
186
|
|
187 1;
|
|
188
|