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::FeaturePair - Stores sequence Features which are
|
|
24 themselves hits to other sequence features.
|
|
25
|
|
26 =head1 SYNOPSIS
|
|
27
|
|
28 my $feat = Bio::EnsEMBL::FeaturePair->new(
|
|
29 -start => 132_231,
|
|
30 -end => 132_321,
|
|
31 -strand => -1,
|
|
32 -slice => $slice,
|
|
33 -hstart => 10,
|
|
34 -hend => 100,
|
|
35 -hstrand => 1,
|
|
36 -score => 100,
|
|
37 -percent_id => 92.0,
|
|
38 -hseqname => 'ALUSX10.1',
|
|
39 -analysis => $analysis
|
|
40 );
|
|
41
|
|
42 my $hit_start = $feat->hstart();
|
|
43 my $hit_end = $feat->hend();
|
|
44 my $hit_strand = $feat->hstrand();
|
|
45 my $analysis = $feat->analysis();
|
|
46
|
|
47 =head1 DESCRIPTION
|
|
48
|
|
49 A sequence feature object where the feature is itself a feature on
|
|
50 another sequence - e.g. a blast hit where residues 1-40 of a protein
|
|
51 sequence SW:HBA_HUMAN has hit to bases 100 - 220 on a genomic sequence
|
|
52 HS120G22. The genomic sequence coordinates are represented by the
|
|
53 start, end, strand attributes while the protein (hit) coordinates are
|
|
54 represented by the hstart, hend, hstrand attributes.
|
|
55
|
|
56 $clone = $slice_adpator->fetch_by_region( 'clone', 'HS120G22' );
|
|
57
|
|
58 $fp = Bio::EnsEMBL::FeaturePair(
|
|
59 -start => 100,
|
|
60 -end => 220,
|
|
61 -strand => 1,
|
|
62 -slice => $clone,
|
|
63 -hstart => 1,
|
|
64 -hend => 40,
|
|
65 -hstrand => 1,
|
|
66 -percent_id => 92.0,
|
|
67 -score => 100,
|
|
68 -hseqname => 'SW:HBA_HUMAN',
|
|
69 -species => 'Homo sapiens',
|
|
70 -hspecies => 'Homo sapiens'
|
|
71 );
|
|
72
|
|
73 =head1 METHODS
|
|
74
|
|
75 =cut
|
|
76
|
|
77 package Bio::EnsEMBL::FeaturePair;
|
|
78
|
|
79 use vars qw(@ISA);
|
|
80 use strict;
|
|
81
|
|
82 use Bio::EnsEMBL::Feature;
|
|
83 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
|
|
84 use Bio::EnsEMBL::Utils::Exception qw(throw deprecate warning);
|
|
85
|
|
86 @ISA = qw(Bio::EnsEMBL::Feature);
|
|
87
|
|
88
|
|
89
|
|
90 =head2 new
|
|
91
|
|
92 Arg [HSTART] : int - The start of the hit region (optional)
|
|
93 Arg [HEND] : int - The end of the hit region (optional)
|
|
94 Arg [HSTRAND] : (0,1,-1) - The strand of the hit region (optional)
|
|
95 Arg [PERCENT_ID]: float - The precentage identity of the hit (optional)
|
|
96 Arg [SCORE] : float - The score of the hit (optional)
|
|
97 Arg [HSEQNAME] : string - The name of the hit sequence (optional)
|
|
98 Arg [P_VALUE] : float - The pvalue or evalue (optional)
|
|
99 Arg [SPECIES] : string - The species the query sequence is from (optional)
|
|
100 Arg [HSPECIES] : string - The species the hit sequence is from (optional)
|
|
101 Arg [COVERAGE] : string - The % of the query that this feature pair covers
|
|
102 Arg [HCOVERAGE] : string - The % of the target this this feature pair covers
|
|
103 Arg [...] : Named superclass constructor args (Bio::EnsEMBL::Feature)
|
|
104 Example : $feat = Bio::EnsEMBL::FeaturePair->new(-start => 132_231,
|
|
105 -end => 132_321,
|
|
106 -strand => -1,
|
|
107 -slice => $slice,
|
|
108 -hstart => 10,
|
|
109 -hend => 100,
|
|
110 -hstrand => 1,
|
|
111 -score => 100,
|
|
112 -percent_id => 92.0,
|
|
113 -hseqname => 'ALUSX10.1',
|
|
114 -analysis => $analysis);
|
|
115 Description: Creates a new Bio::EnsEMBL::FeaturePair object
|
|
116 Returntype : Bio::EnsEMBL::FeaturePair
|
|
117 Exceptions : throw if start > end
|
|
118 throw if invalid strand is provided
|
|
119 Caller : general
|
|
120 Status : Stable
|
|
121
|
|
122 =cut
|
|
123
|
|
124 sub new {
|
|
125 my $caller = shift;
|
|
126
|
|
127 my $class = ref($caller) || $caller;
|
|
128
|
|
129 my $self = $class->SUPER::new(@_);
|
|
130
|
|
131 my ($hstart,$hend,$hstrand,$percent_id,$score, $species, $hspecies,
|
|
132 $p_value, $hseqname, $f1,$f2, $coverage, $hcoverage, $group_id,$level_id, $external_db_id, $extra_data, $external_db_name, $external_display_db_name) =
|
|
133 rearrange(['HSTART','HEND','HSTRAND','PERCENT_ID','SCORE','SPECIES',
|
|
134 'HSPECIES', 'P_VALUE', 'HSEQNAME', 'FEATURE1','FEATURE2',
|
|
135 'COVERAGE', 'HCOVERAGE', 'GROUP_ID','LEVEL_ID', 'EXTERNAL_DB_ID', 'EXTRA_DATA', 'DBNAME', 'DB_DISPLAY_NAME'], @_);
|
|
136
|
|
137 if(defined($hstart) && defined($hend) && ($hend < $hstart)) {
|
|
138 throw('HSTART must be less than or equal to HEND');
|
|
139 }
|
|
140
|
|
141 if(defined($hstrand) && $hstrand != 1 && $hstrand != -1 && $hstrand != 0) {
|
|
142 throw('HSTRAND must be one of (0,1,-1)');
|
|
143 }
|
|
144
|
|
145 $self->{'hstart'} = $hstart;
|
|
146 $self->{'hend'} = $hend;
|
|
147 $self->{'hstrand'} = $hstrand;
|
|
148 $self->{'score'} = $score;
|
|
149 $self->{'percent_id'} = $percent_id;
|
|
150 $self->{'species'} = $species;
|
|
151 $self->{'hspecies'} = $hspecies;
|
|
152 $self->{'hseqname'} = $hseqname;
|
|
153 $self->{'coverage'} = $coverage;
|
|
154 $self->{'hcoverage'} = $hcoverage;
|
|
155 $self->{'p_value'} = $p_value;
|
|
156 $self->{'group_id'} = $group_id;
|
|
157 $self->{'level_id'} = $level_id;
|
|
158 $self->{'external_db_id'} = $external_db_id;
|
|
159 $self->{'extra_data'} = $extra_data;
|
|
160 $self->{'dbname'} = $external_db_name;
|
|
161 $self->{'db_display_name'} = $external_display_db_name;
|
|
162
|
|
163 #
|
|
164 # Feature1 and Feature2 arg handling for backwards compatibility
|
|
165 #
|
|
166 if($f1) {
|
|
167 deprecate("Using FEATURE1 arg to construct FeaturePairs" .
|
|
168 " is deprecated.\nUse the args START,END,STRAND,SLICE instead");
|
|
169
|
|
170 #eval because we are not exactly sure what f1 arg will look like
|
|
171 eval {
|
|
172 $self->{'start'} = $f1->start();
|
|
173 $self->{'end'} = $f1->end();
|
|
174 $self->{'strand'} = $f1->strand();
|
|
175 $self->{'slice'} = $f1->contig();
|
|
176 $self->{'analysis'} = $f1->analysis() if($f1->analysis());
|
|
177 };
|
|
178 }
|
|
179
|
|
180 if($f2) {
|
|
181 deprecate("Using FEATURE2 arg to construct FeaturePairs is deprecated" .
|
|
182 "\nUse the args HSTART,HEND,HSTRAND,HSEQNAME instead");
|
|
183
|
|
184 #eval because we are not exactly sure what f2 arg will look like
|
|
185 eval {
|
|
186 $self->{'hseqname'} = $f2->seqname();
|
|
187 $self->{'hstart'} = $f2->start();
|
|
188 $self->{'hend'} = $f2->end();
|
|
189 $self->{'hstrand'} = $f2->strand();
|
|
190 $self->{'analysis'} = $f2->analysis() if($f2->analysis());
|
|
191 };
|
|
192 }
|
|
193
|
|
194 return $self;
|
|
195 }
|
|
196
|
|
197
|
|
198
|
|
199 =head2 hseqname
|
|
200
|
|
201 Arg [1] : string $hseqname (optional)
|
|
202 Example : $hseqname = $fp->hseqname();
|
|
203 Description: Getter/Setter for the name of the hit sequence
|
|
204 Returntype : string
|
|
205 Exceptions : none
|
|
206 Caller : general
|
|
207 Status : Stable
|
|
208
|
|
209 =cut
|
|
210
|
|
211 sub hseqname {
|
|
212 my $self = shift;
|
|
213 $self->{'hseqname'} = shift if(@_);
|
|
214 return $self->{hseqname};
|
|
215 }
|
|
216
|
|
217
|
|
218
|
|
219 =head2 hstart
|
|
220
|
|
221 Arg [1] : string $hstart (optional)
|
|
222 Example : $hstart = $fp->hstart();
|
|
223 Description: Getter/Setter for the start coordinate on the hit sequence
|
|
224 Returntype : int
|
|
225 Exceptions : none
|
|
226 Caller : general
|
|
227 Status : Stable
|
|
228
|
|
229 =cut
|
|
230
|
|
231 sub hstart{
|
|
232 my $self = shift;
|
|
233 $self->{'hstart'} = shift if(@_);
|
|
234 return $self->{'hstart'};
|
|
235 }
|
|
236
|
|
237
|
|
238 =head2 hend
|
|
239
|
|
240 Arg [1] : string $hend (optional)
|
|
241 Example : $hend = $fp->hend();
|
|
242 Description: Getter/Setter for the end coordinate on the hit sequence
|
|
243 Returntype : int
|
|
244 Exceptions : none
|
|
245 Caller : general
|
|
246 Status : Stable
|
|
247
|
|
248 =cut
|
|
249
|
|
250 sub hend{
|
|
251 my $self = shift;
|
|
252 $self->{'hend'} = shift if(@_);
|
|
253 return $self->{'hend'};
|
|
254 }
|
|
255
|
|
256
|
|
257
|
|
258 =head2 hstrand
|
|
259
|
|
260 Arg [1] : int $hstrand (optional)
|
|
261 Example : $hstrand = $fp->hstrand
|
|
262 Description: Getter/Setter for the orientation of the hit on the hit sequence
|
|
263 Returntype : 0,1,-1
|
|
264 Exceptions : thrown
|
|
265 Caller : general
|
|
266 Status : Stable
|
|
267
|
|
268 =cut
|
|
269
|
|
270 sub hstrand{
|
|
271 my $self = shift;
|
|
272
|
|
273 if(@_) {
|
|
274 my $hstrand = shift;
|
|
275 if(defined($hstrand) && $hstrand != 1 && $hstrand != 0 && $hstrand != -1) {
|
|
276 throw('hstrand must be one of (-1,0,1)');
|
|
277 }
|
|
278 $self->{'hstrand'} = $hstrand;
|
|
279 }
|
|
280
|
|
281 return $self->{'hstrand'};
|
|
282 }
|
|
283
|
|
284 =head2 hslice
|
|
285
|
|
286 Arg [1] : (optional) Bio::EnsEMBL::Slice $slice
|
|
287 Example : $hseqname = $featurepair->hslice()->seq_region_name();
|
|
288 Description: Getter/Setter for the Slice that is associated with this
|
|
289 hit feature. The slice represents the underlying sequence that this
|
|
290 feature is on. Note that this method call is analagous to the
|
|
291 old SeqFeature methods contig(), entire_seq(), attach_seq(),
|
|
292 etc.
|
|
293 Returntype : Bio::EnsEMBL::Slice
|
|
294 Exceptions : thrown if an invalid argument is passed
|
|
295 Caller : general
|
|
296 Status : Stable
|
|
297
|
|
298 =cut
|
|
299
|
|
300 sub hslice {
|
|
301 my $self = shift;
|
|
302
|
|
303 if(@_) {
|
|
304 my $sl = shift;
|
|
305 if(defined($sl) && (!ref($sl) || !($sl->isa('Bio::EnsEMBL::Slice') ) )) {
|
|
306 throw('slice argument must be a Bio::EnsEMBL::Slice');
|
|
307 }
|
|
308
|
|
309 $self->{'hslice'} = $sl;
|
|
310 }
|
|
311
|
|
312 return $self->{'hslice'};
|
|
313 }
|
|
314
|
|
315 =head2 hseq_region_name
|
|
316
|
|
317 Arg [1] : none
|
|
318 Example : print $feature->hseq_region_name();
|
|
319 Description: Gets the name of the hseq_region which this feature is on.
|
|
320 Returns undef if this Feature is not on a hslice.
|
|
321 Returntype : string or undef
|
|
322 Exceptions : none
|
|
323 Caller : general
|
|
324 Status : Stable
|
|
325
|
|
326 =cut
|
|
327
|
|
328 sub hseq_region_name {
|
|
329 my $self = shift;
|
|
330 my $slice = $self->{'hslice'};
|
|
331
|
|
332 return ($slice) ? $slice->seq_region_name() : undef;
|
|
333 }
|
|
334
|
|
335
|
|
336 =head2 hseq_region_strand
|
|
337
|
|
338 Arg [1] : none
|
|
339 Example : print $feature->hseq_region_strand();
|
|
340 Description: Returns the strand of the hseq_region which this feature is on
|
|
341 (i.e. feature_strand * slice_strand)
|
|
342 Returns undef if this Feature is not on a hslice.
|
|
343 Returntype : 1,0,-1 or undef
|
|
344 Exceptions : none
|
|
345 Caller : general
|
|
346 Status : Stable
|
|
347
|
|
348 =cut
|
|
349
|
|
350
|
|
351 sub hseq_region_strand {
|
|
352 my $self = shift;
|
|
353 my $slice = $self->{'hslice'};
|
|
354
|
|
355 return ($slice) ? $slice->strand() * $self->{'hstrand'} : undef;
|
|
356 }
|
|
357
|
|
358 =head2 hseq_region_start
|
|
359
|
|
360 Arg [1] : none
|
|
361 Example : print $feature->hseq_region_start();
|
|
362 Description: Convenience method which returns the absolute start of this
|
|
363 feature on the hseq_region, as opposed to the relative (hslice)
|
|
364 position.
|
|
365
|
|
366 Returns undef if this feature is not on a hslice.
|
|
367 Returntype : int or undef
|
|
368 Exceptions : none
|
|
369 Caller : general
|
|
370 Status : Stable
|
|
371
|
|
372 =cut
|
|
373
|
|
374 sub hseq_region_start {
|
|
375 my $self = shift;
|
|
376 my $slice = $self->{'hslice'};
|
|
377
|
|
378 return undef if(!$slice);
|
|
379
|
|
380 if($slice->strand == 1) {
|
|
381 return undef if(!defined($self->{'hstart'}));
|
|
382 return $slice->start() + $self->{'hstart'} - 1;
|
|
383 } else {
|
|
384 return undef if(!defined($self->{'hend'}));
|
|
385 return $slice->end() - $self->{'hend'} + 1;
|
|
386 }
|
|
387 }
|
|
388
|
|
389
|
|
390 =head2 hseq_region_end
|
|
391
|
|
392 Arg [1] : none
|
|
393 Example : print $feature->hseq_region_end();
|
|
394 Description: Convenience method which returns the absolute end of this
|
|
395 feature on the hseq_region, as opposed to the relative (hslice)
|
|
396 position.
|
|
397
|
|
398 Returns undef if this feature is not on a hslice.
|
|
399 Returntype : int or undef
|
|
400 Exceptions : none
|
|
401 Caller : general
|
|
402 Status : Stable
|
|
403
|
|
404 =cut
|
|
405
|
|
406 sub hseq_region_end {
|
|
407 my $self = shift;
|
|
408 my $slice = $self->{'hslice'};
|
|
409
|
|
410 return undef if(!$slice);
|
|
411
|
|
412 if($slice->strand == 1) {
|
|
413 return undef if(!defined($self->{'hend'}));
|
|
414 return $slice->start() + $self->{'hend'} - 1;
|
|
415 } else {
|
|
416 return undef if(!defined($self->{'hstart'}));
|
|
417 return $slice->end() - $self->{'hstart'} + 1;
|
|
418 }
|
|
419 }
|
|
420
|
|
421 =head2 score
|
|
422
|
|
423 Arg [1] : float $score (optional)
|
|
424 Example : $score = $fp->score();
|
|
425 Description: Getter/Setter for the score of this feature pair
|
|
426 Returntype : float
|
|
427 Exceptions : none
|
|
428 Caller : general
|
|
429 Status : Stable
|
|
430
|
|
431 =cut
|
|
432
|
|
433 sub score{
|
|
434 my $self = shift;
|
|
435 $self->{'score'} = shift if(@_);
|
|
436 return $self->{'score'};
|
|
437 }
|
|
438
|
|
439
|
|
440
|
|
441 =head2 percent_id
|
|
442
|
|
443 Arg [1] : float $percent_id (optional)
|
|
444 Example : $percent_id = $fp->percent_id();
|
|
445 Description: Getter/Setter for the percentage identity of this feature pair
|
|
446 Returntype : float
|
|
447 Exceptions : none
|
|
448 Caller : general
|
|
449 Status : Stable
|
|
450
|
|
451 =cut
|
|
452
|
|
453 sub percent_id {
|
|
454 my $self = shift;
|
|
455 $self->{'percent_id'} = shift if(@_);
|
|
456 return $self->{'percent_id'};
|
|
457 }
|
|
458
|
|
459
|
|
460
|
|
461 =head2 species
|
|
462
|
|
463 Arg [1] : string $genus_species_name (optional)
|
|
464 e.g. Homo_sapiens or Mus_musculus
|
|
465 Example : $species = $fp->species();
|
|
466 Description: get/set on the species of feature1
|
|
467 Returntype : string
|
|
468 Execeptions: none
|
|
469 Caller : general
|
|
470 Status : Stable
|
|
471
|
|
472 =cut
|
|
473
|
|
474 sub species{
|
|
475 my $self = shift;
|
|
476 $self->{'species'} = shift if(@_);
|
|
477 return $self->{'species'};
|
|
478 }
|
|
479
|
|
480
|
|
481 =head2 hspecies
|
|
482
|
|
483 Arg [1] : string $genus_species_name (optional)
|
|
484 e.g. Homo_sapiens or Mus_musculus
|
|
485 Example : $hspecies = $fp->hspecies
|
|
486 Description: get/set on the species of feature2
|
|
487 Returntype : string
|
|
488 Execeptions: none
|
|
489 Caller : general
|
|
490 Status : Stable
|
|
491
|
|
492 =cut
|
|
493
|
|
494 sub hspecies{
|
|
495 my $self = shift;
|
|
496 $self->{'hspecies'} = shift if(@_);
|
|
497 return $self->{'hspecies'};
|
|
498 }
|
|
499
|
|
500
|
|
501 =head2 coverage
|
|
502
|
|
503 Arg [1] : number (percentage) $coverage (optional)
|
|
504 Example : $cov = $fp->coverage();
|
|
505 Description: Getter/Setter for the % of the query covered by the feature
|
|
506 Returntype : string
|
|
507 Exceptions : none
|
|
508 Caller : general
|
|
509 Status : Stable
|
|
510
|
|
511 =cut
|
|
512
|
|
513 sub coverage {
|
|
514 my $self = shift;
|
|
515 $self->{'coverage'} = shift if(@_);
|
|
516 return $self->{'coverage'};
|
|
517 }
|
|
518
|
|
519
|
|
520 =head2 hcoverage
|
|
521
|
|
522 Arg [1] : number (percentage) $hcoverage (optional)
|
|
523 Example : $hcov = $fp->hcoverage();
|
|
524 Description: Getter/Setter for the % of the target covered by the feature
|
|
525 Returntype : string
|
|
526 Exceptions : none
|
|
527 Caller : general
|
|
528 Status : Stable
|
|
529
|
|
530 =cut
|
|
531
|
|
532 sub hcoverage {
|
|
533 my $self = shift;
|
|
534 $self->{'hcoverage'} = shift if(@_);
|
|
535 return $self->{'hcoverage'};
|
|
536 }
|
|
537
|
|
538 =head2 external_db_id
|
|
539
|
|
540 Arg [1] : int $external_db_id (optional)
|
|
541 Example : $ex_db = $fp->external_db_id();
|
|
542 Description: Getter/Setter for the external_db_id taregt source database feature
|
|
543 Returntype : string
|
|
544 Exceptions : none
|
|
545 Caller : general
|
|
546 Status : At Risk
|
|
547
|
|
548 =cut
|
|
549
|
|
550 sub external_db_id {
|
|
551 my $self = shift;
|
|
552 $self->{'external_db_id'} = shift if(@_);
|
|
553 return $self->{'external_db_id'};
|
|
554 }
|
|
555
|
|
556
|
|
557 =head2 db_name
|
|
558
|
|
559 Arg [1] : string $external_db_name (optional)
|
|
560 Example : $ex_db_name = $fp->dbname();
|
|
561 Description: Getter/Setter for the external_db_name attribute, name of external database
|
|
562 Returntype : string
|
|
563 Exceptions : none
|
|
564 Caller : general
|
|
565 Status : At Risk
|
|
566
|
|
567 =cut
|
|
568
|
|
569 sub db_name {
|
|
570 my $self = shift;
|
|
571 $self->{'dbname'} = shift if(@_);
|
|
572 return $self->{'dbname'};
|
|
573 }
|
|
574
|
|
575 =head2 db_display_name
|
|
576
|
|
577 Arg [1] : string $db_display_name (optional)
|
|
578 Example : $ex_db_display_name = $fp->db_display_name();
|
|
579 Description: Getter/Setter for the db_display_name attribute
|
|
580 The preferred display name for the external database.
|
|
581 Returntype : string
|
|
582 Exceptions : none
|
|
583 Caller : general
|
|
584 Status : At Risk
|
|
585
|
|
586 =cut
|
|
587
|
|
588 sub db_display_name {
|
|
589 my $self = shift;
|
|
590 $self->{'db_display_name'} = shift if(@_);
|
|
591 return $self->{'db_display_name'};
|
|
592 }
|
|
593
|
|
594
|
|
595
|
|
596 =head2 p_value
|
|
597
|
|
598 Arg [1] : float $p_value (optional)
|
|
599 Example : $eval = $fp->p_value
|
|
600 Description: Getter Setter for the evalue / pvalue of this feature
|
|
601 Returntype : float
|
|
602 Exceptions : none
|
|
603 Caller : general
|
|
604 Status : Stable
|
|
605
|
|
606 =cut
|
|
607
|
|
608 sub p_value{
|
|
609 my $self = shift;
|
|
610 $self->{'p_value'} = shift if(@_);
|
|
611 return $self->{'p_value'};
|
|
612 }
|
|
613
|
|
614
|
|
615
|
|
616 =head2 display_id
|
|
617
|
|
618 Arg [1] : none
|
|
619 Example : print $fp->display_id();
|
|
620 Description: This method returns a string that is considered to be
|
|
621 the 'display' identifier. For feature pairs this is the
|
|
622 hseqname if it is available otherwise it is an empty string.
|
|
623 Returntype : string
|
|
624 Exceptions : none
|
|
625 Caller : web drawing code
|
|
626 Status : Stable
|
|
627
|
|
628 =cut
|
|
629
|
|
630 sub display_id {
|
|
631 my $self = shift;
|
|
632 return $self->{'hseqname'} || '';
|
|
633 }
|
|
634
|
|
635
|
|
636 =head2 identical_matches
|
|
637
|
|
638 Arg [1] : int $identical_matches (optional)
|
|
639 Example :
|
|
640 Description: get/set on the number of identical matches
|
|
641 Returntype : int
|
|
642 Execeptions: none
|
|
643 Caller : general
|
|
644 Status : Stable
|
|
645
|
|
646 =cut
|
|
647
|
|
648 sub identical_matches{
|
|
649 my ($self,$arg) = @_;
|
|
650
|
|
651 if (defined($arg)) {
|
|
652 return $self->{'_identical_matches'} = $arg;
|
|
653 }
|
|
654 return $self->{'_identical_matches'};
|
|
655 }
|
|
656
|
|
657 =head2 positive_matches
|
|
658
|
|
659 Arg [1] : int $positive_matches (optional)
|
|
660 Example :
|
|
661 Description: get/set on the number of positive matches
|
|
662 Returntype : int
|
|
663 Execeptions: none
|
|
664 Caller : general
|
|
665 Status : Stable
|
|
666
|
|
667 =cut
|
|
668
|
|
669 sub positive_matches{
|
|
670 my ($self,$arg) = @_;
|
|
671
|
|
672 if (defined($arg)) {
|
|
673 return $self->{'_positive_matches'} = $arg;
|
|
674 }
|
|
675 return $self->{'_positive_matches'};
|
|
676 }
|
|
677
|
|
678 =head2 group_id
|
|
679
|
|
680 Arg [1] : int $group_id
|
|
681 Example : none
|
|
682 Description: get/set for attribute group_id
|
|
683 Returntype : int
|
|
684 Exceptions : none
|
|
685 Caller : general
|
|
686 Status : Stable
|
|
687
|
|
688 =cut
|
|
689
|
|
690 sub group_id {
|
|
691 my ($self, $arg) = @_;
|
|
692
|
|
693 if ( defined $arg ) {
|
|
694 $self->{'group_id'} = $arg ;
|
|
695 }
|
|
696 return $self->{'group_id'};
|
|
697 }
|
|
698
|
|
699 =head2 level_id
|
|
700
|
|
701 Arg [1] : int $level_id
|
|
702 Example : none
|
|
703 Description: get/set for attribute level_id
|
|
704 Returntype : int
|
|
705 Exceptions : none
|
|
706 Caller : general
|
|
707 Status : Stable
|
|
708
|
|
709 =cut
|
|
710
|
|
711 sub level_id {
|
|
712 my ($self, $arg) = @_;
|
|
713
|
|
714 if ( defined $arg ) {
|
|
715 $self->{'level_id'} = $arg ;
|
|
716 }
|
|
717 return $self->{'level_id'};
|
|
718 }
|
|
719
|
|
720
|
|
721
|
|
722
|
|
723
|
|
724
|
|
725 =head1 DEPRECATED METHODS
|
|
726
|
|
727 =cut
|
|
728
|
|
729
|
|
730 =head2 feature1
|
|
731
|
|
732 Description: DEPRECATED use start(), end(), strand(), slice(), etc.
|
|
733 methods instead
|
|
734
|
|
735 =cut
|
|
736
|
|
737 sub feature1 {
|
|
738 my ($self,$arg) = @_;
|
|
739
|
|
740 deprecate('Use start(), end(), strand(), slice(), etc. methods instead.');
|
|
741
|
|
742 if($arg) {
|
|
743 $self->start($arg->start());
|
|
744 $self->end($arg->end());
|
|
745 $self->strand($arg->strand());
|
|
746 $self->score($arg->score());
|
|
747 $self->percent_id($arg->percent_id());
|
|
748 $self->analysis($arg->analysis);
|
|
749 if($arg->contig){
|
|
750 $self->slice($arg->contig);
|
|
751 }
|
|
752 }
|
|
753
|
|
754 return $self;
|
|
755 }
|
|
756
|
|
757 =head2 feature2
|
|
758
|
|
759 Description: DEPRECATED use hstart(), hend(), hstrand() etc.
|
|
760 methods instead
|
|
761
|
|
762 =cut
|
|
763
|
|
764 sub feature2 {
|
|
765 my ($self,$arg) = @_;
|
|
766
|
|
767 deprecate('Use hstart(),hend(),hstrand(),hseqname() methods instead.');
|
|
768
|
|
769 if (defined($arg)) {
|
|
770 $self->hstart($arg->start());
|
|
771 $self->hend($arg->end());
|
|
772 $self->hstrand($arg->strand());
|
|
773 $self->hseqname($arg->seqname());
|
|
774 return $arg;
|
|
775 }
|
|
776
|
|
777 return new Bio::EnsEMBL::Feature(
|
|
778 -START => $self->hstart(),
|
|
779 -END => $self->hend(),
|
|
780 -STRAND => $self->hstrand(),
|
|
781 -SCORE => $self->score(),
|
|
782 -PERCENT_ID => $self->percent_id(),
|
|
783 -ANALYSIS => $self->analysis,
|
|
784 -SEQNAME => $self->hseqname());
|
|
785 }
|
|
786
|
|
787
|
|
788
|
|
789
|
|
790 =head2 invert
|
|
791
|
|
792 Arg [1] : (optional) Bio::EnsEMBL::Slice $newslice
|
|
793 Example : $feature->invert();
|
|
794 Description: This method is used to swap the hit and query sides of this
|
|
795 feature in place. A new slice may optionally provided which
|
|
796 this feature will be placed on. If no slice is provided the
|
|
797 feature slice will be set to undef.
|
|
798 Returntype : none
|
|
799 Exceptions : none
|
|
800 Caller : pipeline (BlastMiniGenewise)
|
|
801
|
|
802 =cut
|
|
803
|
|
804 sub invert {
|
|
805 my ($self,$slice) = @_;
|
|
806
|
|
807 if (! defined $slice && defined $self->hslice) {
|
|
808 $slice = $self->hslice;
|
|
809 }
|
|
810
|
|
811 my $hstart = $self->{'hstart'};
|
|
812 my $hend = $self->{'hend'};
|
|
813 my $hstrand = $self->{'hstrand'};
|
|
814 my $hspecies = $self->{'hspecies'};
|
|
815 my $hseqname = $self->{'hseqname'};
|
|
816
|
|
817 my $start = $self->{'start'};
|
|
818 my $end = $self->{'end'};
|
|
819 my $strand = $self->{'strand'};
|
|
820 my $species = $self->{'species'};
|
|
821 my $seqname = $self->seqname();
|
|
822
|
|
823 $self->{'start'} = $hstart;
|
|
824 $self->{'end'} = $hend;
|
|
825 $self->{'strand'} = $hstrand;
|
|
826 $self->{'species'} = $hspecies;
|
|
827 $self->{'seqname'} = $hseqname if(defined($hseqname));
|
|
828
|
|
829 $self->{'hstart'} = $start;
|
|
830 $self->{'hend'} = $end;
|
|
831 $self->{'hstrand'} = $strand;
|
|
832 $self->{'hseqname'} = $seqname;
|
|
833 $self->{'hspecies'} = $species;
|
|
834
|
|
835 $self->{'hslice'} = $self->slice;
|
|
836 $self->{'slice'} = $slice;
|
|
837 }
|
|
838
|
|
839
|
|
840
|
|
841 =head2 validate
|
|
842
|
|
843 Description: DEPRECATED do not use
|
|
844
|
|
845 =cut
|
|
846
|
|
847 sub validate {
|
|
848 my ($self) = @_;
|
|
849
|
|
850 deprecate('This method does nothing and should not be used.');
|
|
851 }
|
|
852
|
|
853 =head2 validate_prot_feature
|
|
854
|
|
855 Description: DEPRECATED do not use
|
|
856
|
|
857 =cut
|
|
858
|
|
859 sub validate_prot_feature{
|
|
860 my ($self) = @_;
|
|
861
|
|
862 deprecate('This method does nothing and should not be used.');
|
|
863 }
|
|
864
|
|
865
|
|
866 =head2 set_featurepair_fields
|
|
867
|
|
868 Description: DEPRECATED do not use
|
|
869
|
|
870 =cut
|
|
871
|
|
872 sub set_featurepair_fields {
|
|
873 my ($self, $start, $end, $strand, $score, $seqname, $hstart, $hend,
|
|
874 $hstrand, $hseqname, $analysis, $e_value, $perc_id,
|
|
875 $phase, $end_phase) = @_;
|
|
876
|
|
877 deprecate("Use individual Getter/Setters or Constructor arguments " .
|
|
878 " instead.\nThere is no advantage to using this method.");
|
|
879
|
|
880 throw('interface fault') if (@_ < 12 or @_ > 15);
|
|
881
|
|
882 $self->start($start);
|
|
883 $self->end($end);
|
|
884 $self->strand($strand);
|
|
885 $self->score($score);
|
|
886 $self->seqname($seqname);
|
|
887 $self->hstart($hstart);
|
|
888 $self->hend($hend);
|
|
889 $self->hstrand($hstrand);
|
|
890 $self->hseqname($hseqname);
|
|
891 $self->analysis($analysis);
|
|
892 $self->p_value ($e_value) if (defined $e_value);
|
|
893 $self->percent_id ($perc_id) if (defined $perc_id);
|
|
894 $self->phase ($phase) if (defined $phase);
|
|
895 $self->end_phase ($end_phase) if (defined $end_phase);
|
|
896 }
|
|
897
|
|
898
|
|
899 =head2 gffstring
|
|
900
|
|
901 Description: DEPRECATED do not use
|
|
902
|
|
903 =cut
|
|
904
|
|
905 sub gffstring {
|
|
906 my ($self) = @_;
|
|
907
|
|
908 deprecate('Do not use');
|
|
909
|
|
910 my $str .= (defined $self->slice) ? $self->slice->name()."\t": "\t";
|
|
911 $str .= "\t"; #source tag
|
|
912 $str .= "\t"; #primary tag
|
|
913 $str .= (defined $self->start) ? $self->start."\t" : "\t";
|
|
914 $str .= (defined $self->end) ? $self->end."\t" : "\t";
|
|
915 $str .= (defined $self->score) ? $self->score."\t" : "\t";
|
|
916 $str .= (defined $self->strand) ? $self->strand."\t" : ".\t";
|
|
917 $str .= ".\t"; #phase
|
|
918 $str .= ".\t"; #end phase
|
|
919
|
|
920 my $hstrand = "+";
|
|
921
|
|
922 if (($self->hstrand)&&($self->hstrand == -1)) {
|
|
923 $hstrand = "-";
|
|
924 }
|
|
925
|
|
926 #Append a few FeaturePair specific things
|
|
927 $str .= (defined $self->hseqname) ? $self->hseqname."\t" : "\t";
|
|
928 $str .= (defined $self->hstart) ? $self->hstart."\t" : "\t";
|
|
929 $str .= (defined $self->hend) ? $self->hend."\t" : "\t";
|
|
930 $str .= (defined $self->hstrand) ? $hstrand."\t" : "\t";
|
|
931 $str .= (defined $self->hphase) ? $self->hphase."\t" : ".\t";
|
|
932
|
|
933 return $str;
|
|
934 }
|
|
935
|
|
936
|
|
937
|
|
938
|
|
939 =head2 hphase
|
|
940
|
|
941 Description: DEPRECATED do not use
|
|
942
|
|
943 =cut
|
|
944
|
|
945 sub hphase {
|
|
946 my ($self, $value) = @_;
|
|
947
|
|
948 deprecate('This method does nothing useful.');
|
|
949
|
|
950 if (defined($value)) {
|
|
951 $self->{_hphase} = $value;
|
|
952 }
|
|
953
|
|
954 return $self->{_hphase};
|
|
955 }
|
|
956
|
|
957
|
|
958 =head2 hend_phase
|
|
959
|
|
960 Description: DEPRECATED do not use
|
|
961
|
|
962 =cut
|
|
963
|
|
964 sub hend_phase {
|
|
965 my ($self, $value) = @_;
|
|
966
|
|
967 deprecate('This method does nothing useful.');
|
|
968
|
|
969 if (defined($value)) {
|
|
970 $self->{_hend_phase} = $value;
|
|
971 }
|
|
972 return $self->{_hend_phase};
|
|
973 }
|
|
974
|
|
975 sub extra_data {
|
|
976 my $self = shift;
|
|
977 $self->{'extra_data'} = shift if(@_);
|
|
978 return $self->{'extra_data'};
|
|
979 }
|
|
980
|
|
981 sub type {
|
|
982 my $self = shift;
|
|
983 $self->{'extra_data'}->{'type'} = shift if(@_);
|
|
984 if (exists $self->{'extra_data'}) {
|
|
985 return $self->{'extra_data'}->{'type'};
|
|
986 }
|
|
987 return;
|
|
988 }
|
|
989
|
|
990 1;
|