comparison variant_effect_predictor/Bio/EnsEMBL/IdentityXref.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
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::IdentityXref
24
25 =head1 SYNOPSIS
26
27 my $xref = Bio::EnsEMBL::IdentityXref->new(
28 -XREF_IDENTITY => 80.4,
29 -ENSEMBL_IDENTITY => 90.1,
30 -SCORE => 90,
31 -EVALUE => 12,
32 -CIGAR_LINE => '23MD3M2I40M',
33 -XREF_START => 1,
34 -XREF_END => 68,
35 -ENSEMBL_START => 10,
36 -ENSEMBL_END => 77,
37 -ADAPTOR => $adaptor,
38 -PRIMARY_ID => $primary_id,
39 -DBNAME => 'SwissProt'
40 );
41
42 =head1 METHODS
43
44 =cut
45
46 package Bio::EnsEMBL::IdentityXref;
47 use vars qw(@ISA $AUTOLOAD);
48 use strict;
49 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
50 use Bio::EnsEMBL::Utils::Exception qw( deprecate );
51
52 @ISA = qw( Bio::EnsEMBL::DBEntry );
53
54
55 =head2 new
56
57 Arg [...] : XREF_IDENTITY ENSEMBL_IDENTITY SCORE EVALUE CIGAR_LINE
58 : XREF_START XREF_END ENSEMBL_START ENSEMBL_END
59 : ANALYSIS pairs
60 Example : see synopsis
61 Description: Create a new Bio::EnsEMBL::IdentityXref object
62 Returntype : Bio::EnsEMBL::IdentityXref
63 Exceptions : none
64 Caller : general
65 Status : Stable
66
67 =cut
68
69 my $error_shown = 0;
70
71 sub new {
72 my ($class, @args) = @_;
73 my $self = $class->SUPER::new(@args);
74 my ($query_identity, $target_identity, $score, $evalue,
75 $cigar_line, $query_start, $query_end, $translation_start,
76 $translation_end, $analysis, $xref_identity, $ensembl_identity,
77 $xref_start, $xref_end, $ensembl_start, $ensembl_end) = rearrange(
78 [qw(QUERY_IDENTITY TARGET_IDENTITY SCORE EVALUE CIGAR_LINE
79 QUERY_START QUERY_END TRANSLATION_START TRANSLATION_END
80 ANALYSIS XREF_IDENTITY ENSEMBL_IDENTITY XREF_START XREF_END ENSEMBL_START ENSEMBL_END)], @args);
81
82 if((defined($query_identity) or defined($target_identity) or defined($query_start) or defined ($query_end) or
83 defined($translation_start) or defined($translation_end)) and !$error_shown){
84 print STDERR "Arguments have now been changed to stop confusion so please replace the following\n";
85 print STDERR "\tQUERY_IDENTITY\t->\tXREF_IDENTITY\n";
86 print STDERR "\tTARGET_IDENTITY\t->\tENSEMBL_IDENTITY\n";
87 print STDERR "\tQUERY_START\t->\tXREF_START\n";
88 print STDERR "\tQUERY_END\t->\tXREF_END\n";
89 print STDERR "\tTRANSLATION_START\t->\tENSEMBL_START\n";
90 print STDERR "\tTRANSLATION_END\t->\tENSEMBL_END\n";
91 print STDERR "The old arguments will be removed in a futute release so please change your code to the new names\n";
92 $error_shown = 1;
93 }
94 $self->{'xref_identity'} = $query_identity || $xref_identity;
95 $self->{'ensembl_identity'} = $target_identity || $ensembl_identity;
96 $self->{'score'} = $score;
97 $self->{'evalue'} = $evalue;
98 $self->{'cigar_line'} = $cigar_line;
99 $self->{'xref_start'} = $query_start || $xref_start;
100 $self->{'xref_end'} = $query_end || $xref_start;
101 $self->{'ensembl_start'} = $translation_start || $ensembl_start;
102 $self->{'ensembl_end'} = $translation_end || $ensembl_end;
103 $self->{'analysis'} = $analysis;
104
105 return $self;
106 }
107
108 =head2 xref_identity
109
110 Arg [1] : (optional) string $value
111 Example : $xref_identity = $id_xref->xref_identity;
112 Description: Getter/Setter for xref identity
113 Returntype : string
114 Exceptions : none
115 Caller : general
116 Status : Stable
117
118 =cut
119
120 sub xref_identity{
121 my $obj = shift;
122 if( @_ ) {
123 my $value = shift;
124 $obj->{'xref_identity'} = $value;
125 }
126 return $obj->{'xref_identity'};
127
128 }
129
130
131 =head2 ensembl_identity
132
133 Arg [1] : (optional) string $value
134 Example : $ensembl_identity = $id_xref->ensembl_identity;
135 Description: Getter/Setter for ensembl identity
136 Returntype : string
137 Exceptions : none
138 Caller : general
139 Status : Stable
140
141 =cut
142
143 sub ensembl_identity{
144 my $obj = shift;
145 if( @_ ) {
146 my $value = shift;
147 $obj->{'ensembl_identity'} = $value;
148 }
149 return $obj->{'ensembl_identity'};
150
151 }
152
153
154
155 =head2 cigar_line
156
157 Arg [1] : string $cigar_line
158 Example : none
159 Description: get/set for attribute cigar_line
160 Returntype : string
161 Exceptions : none
162 Caller : general
163 Status : Stable
164
165 =cut
166
167 sub cigar_line {
168 my $self = shift;
169 $self->{'cigar_line'} = shift if( @_ );
170 return $self->{'cigar_line'};
171 }
172
173
174 =head2 ensembl_start
175
176 Arg [1] : string $ensembl_start
177 Example : none
178 Description: get/set for attribute ensembl_start
179 Returntype : string
180 Exceptions : none
181 Caller : general
182 Status : Stable
183
184 =cut
185
186 sub ensembl_start {
187 my $self = shift;
188 $self->{'ensembl_start'} = shift if( @_ );
189 return $self->{'ensembl_start'};
190 }
191
192
193 =head2 ensembl_end
194
195 Arg [1] : string $ensembl_end
196 Example : none
197 Description: get/set for attribute ensembl_end
198 Returntype : string
199 Exceptions : none
200 Caller : general
201 Status : Stable
202
203 =cut
204
205 sub ensembl_end {
206 my $self = shift;
207 $self->{'ensembl_end'} = shift if( @_ );
208 return $self->{'ensembl_end'};
209 }
210
211
212 =head2 xref_start
213
214 Arg [1] : string $xref_start
215 Example : none
216 Description: get/set for attribute xref_start
217 Returntype : string
218 Exceptions : none
219 Caller : general
220 Status : Stable
221
222 =cut
223
224 sub xref_start {
225 my $self = shift;
226 $self->{'xref_start'} = shift if( @_ );
227 return $self->{'xref_start'};
228 }
229
230
231 =head2 xref_end
232
233 Arg [1] : string $xref_end
234 Example : none
235 Description: get/set for attribute xref_end
236 Returntype : string
237 Exceptions : none
238 Caller : general
239 Status : Stable
240
241 =cut
242
243 sub xref_end {
244 my $self = shift;
245 $self->{'xref_end'} = shift if( @_ );
246 return $self->{'xref_end'};
247 }
248
249
250 =head2 score
251
252 Arg [1] : string $score
253 Example : none
254 Description: get/set for attribute score
255 Returntype : string
256 Exceptions : none
257 Caller : general
258 Status : Stable
259
260 =cut
261
262 sub score {
263 my $self = shift;
264 $self->{'score'} = shift if( @_ );
265 return $self->{'score'};
266 }
267
268
269 =head2 evalue
270
271 Arg [1] : string $evalue
272 Example : none
273 Description: get/set for attribute evalue
274 Returntype : string
275 Exceptions : none
276 Caller : general
277 Status : Stable
278
279 =cut
280
281 sub evalue {
282 my $self = shift;
283 $self->{'evalue'} = shift if( @_ );
284 return $self->{'evalue'};
285 }
286
287
288
289
290 =head2 get_mapper
291
292 Args : none
293 Example : none
294 Description: produces a mapper object that takes coordinates from one side
295 of the alignment to the other side. "ensembl" and "external"
296 are the two coordinate systems contained.
297 Returntype : Bio::EnsEMBL::Mapper
298 Exceptions : none
299 Caller : general, ProteinDAS subsystem
300 Status : Stable
301
302 =cut
303
304
305 sub get_mapper {
306 my ( $self ) = @_;
307 # parse the cigar_line and create a mapper ...
308 if( exists $self->{'_cached_mapper'} ) {
309 return $self->{'_cached_mapper'};
310 }
311
312 my ( @lens, @chars );
313
314 # if there is no cigar line, nothing is going to be loaded
315 if( $self->cigar_line() ) {
316 my @pre_lens = split( '[DMI]', $self->cigar_line() );
317 @lens = map { if( ! $_ ) { 1 } else { $_ }} @pre_lens;
318 @chars = grep { /[DMI]/ } split( //, $self->cigar_line() );
319 }
320 my $translation_start = $self->ensembl_start();
321 my $translation_end = $self->ensembl_end();
322 my $query_start = $self->xref_start();
323 my $query_end = $self->xref_end();
324
325 # my $hit_id = $self->display_id();
326 my $ensembl_id = "ensembl_id";
327 my $external_id = "external_id";
328 # now build the mapper
329 my $mapper = Bio::EnsEMBL::Mapper->new( "external", "ensembl" );
330
331
332 for( my $i=0; $i<=$#lens; $i++ ) {
333 my $length = $lens[$i];
334 my $char = $chars[$i];
335 if( $char eq "M" ) {
336 $mapper->add_map_coordinates( $external_id, $query_start,
337 $query_start + $length - 1, 1,
338 $ensembl_id, $translation_start,
339 $translation_start + $length - 1);
340 $query_start += $length;
341 $translation_start += $length;
342
343 } elsif( $char eq "D" ) {
344 $translation_start += $length;
345 } elsif( $char eq "I" ) {
346 $query_start += $length;
347 }
348 }
349
350 $self->{'_cached_mapper'} = $mapper;
351
352 return $mapper;
353 }
354
355
356
357 =head2 transform_feature
358
359 Arg [1] : a feature type with start and end $feature
360 This doesnt need to be a Bio::EnsEMBL::Feature as it doesnt
361 need an attached slice. We may have to introduce an appropriate
362 object type.
363 Example : my $ens_prot_feature_list =
364 $ident_xref->transform_feature( $swiss_prot_feature );
365 Description: a list of potential partial features which represent all
366 mappable places
367 of the original feature in ensembl translation coordinates.
368 Returntype : listref of whatever was put in
369 Exceptions : none
370 Caller : general, ProteinDAS subsystem
371 Status : Stable
372
373 =cut
374
375
376 sub transform_feature {
377 my $self= shift;
378 my $feature = shift;
379
380 my $fstart = $feature->start();
381 my $fend = $feature->end();
382
383 my $mapper = $self->get_mapper();
384 my @result;
385
386 my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend,
387 1, "external" );
388
389 for my $coord ( @coords ) {
390 if( $coord->isa( "Bio::EnsEMBL::Mapper::Coordinate" )) {
391 my $new_feature;
392 %{$new_feature} = %$feature;
393 bless $new_feature, ref( $feature );
394 $new_feature->start( $coord->start() );
395 $new_feature->end( $coord->end() );
396
397 push( @result, $new_feature );
398 }
399 }
400
401 return \@result;
402 }
403
404
405
406 =head2 map_feature
407
408 Arg [1] : a start,end capable feature object
409 Example : none
410 Description:
411 Returntype : list of Coordinates/Gaps which represents the mapping
412 Exceptions : none
413 Caller : another way of doing ProteinDAS
414 Status : Stable
415
416 =cut
417
418 sub map_feature {
419 my $self = shift;
420 my $feature = shift;
421
422
423 my $fstart = $feature->start();
424 my $fend = $feature->end();
425
426 my $mapper = $self->get_mapper();
427 my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend, 1,
428 "external" );
429
430 return @coords;
431 }
432
433
434 ###########################
435 # DEPRECATED METHODS FOLLOW
436 ###########################
437
438 =head2 query_identity
439
440 Description: DEPRECATED. Use xref_identity() instead.
441 Status : At Risk
442
443 =cut
444
445 sub query_identity{
446 deprecate("Use xref_identity instead");
447 xref_identity(@_);
448 }
449
450
451 =head2 target_identity
452
453 Description: DEPRECATED. Use ensembl_identity() instead.
454 Status : At Risk
455
456 =cut
457
458 sub target_identity{
459 deprecate("Use ensembl_identity instead");
460 ensembl_identity(@_);
461 }
462
463
464
465 =head2 translation_start
466
467 Description: DEPRECATED. Use ensembl_start() instead.
468 Status : At Risk
469
470 =cut
471
472 sub translation_start {
473 deprecate("Use ensembl_start instead");
474 ensembl_start(@_);
475
476 }
477
478
479 =head2 translation_end
480
481 Description: DEPRECATED. Use ensembl_end() instead.
482 Status : At Risk
483
484 =cut
485
486 sub translation_end {
487 deprecate("Use ensembl_end instead");
488 ensembl_end(@_);
489 }
490
491
492
493 =head2 query_start
494
495 Description: DEPRECATED. Use xref_start() instead.
496 Status : At Risk
497
498 =cut
499
500 sub query_start {
501 deprecate("Use xref_start instead");
502 xref_start(@_);
503
504 }
505
506
507
508 =head2 query_end
509
510 Description: DEPRECATED. Use xref_end() instead.
511 Status : At Risk
512
513 =cut
514
515 sub query_end {
516 deprecate("Use xref_end instead");
517 xref_end(@_);
518
519 }
520
521
522 1;