Raw content of Bio::LiveSeq::Range
# $Id: Range.pm,v 1.7 2001/06/18 08:27:53 heikki Exp $
#
# bioperl module for Bio::LiveSeq::Range
#
# Cared for by Joseph Insana
#
# Copyright Joseph Insana
#
# You may distribute this module under the same terms as perl itself
#
# POD documentation - main docs before the code
=head1 NAME
Bio::LiveSeq::Range - Range abstract class for LiveSeq
=head1 SYNOPSIS
# documentation needed
=head1 DESCRIPTION
This is used as parent for exon and intron classes.
=head1 AUTHOR - Joseph A.L. Insana
Email: Insana@ebi.ac.uk, jinsana@gmx.net
Address:
EMBL Outstation, European Bioinformatics Institute
Wellcome Trust Genome Campus, Hinxton
Cambs. CB10 1SD, United Kingdom
=head1 APPENDIX
The rest of the documentation details each of the object
methods. Internal methods are usually preceded with a _
=cut
# Let the code begin...
package Bio::LiveSeq::Range;
$VERSION=1.6;
# Version history:
# Mon Mar 20 22:21:44 GMT 2000 v 1.0 begun
# Tue Mar 21 00:50:05 GMT 2000 v 1.1 new() added
# Tue Mar 21 02:44:45 GMT 2000 v 1.2 private start(), more checks in new()
# Thu Mar 23 19:06:03 GMT 2000 v 1.3 follows() replaces is_downstream
# Wed Apr 12 16:35:12 BST 2000 v 1.4 added valid()
# Mon Jun 26 15:25:14 BST 2000 v 1.44 ranges with start=end are now accepted / valid() removed because inherited now from SeqI
# Tue Jun 27 14:06:06 BST 2000 v 1.5 croak changed to carp and return(-1) in new() function
# Wed Mar 28 16:47:36 BST 2001 v 1.6 carp -> warn,throw (coded methods in SeqI)
use strict;
use vars qw($VERSION @ISA);
use Bio::LiveSeq::SeqI 3.2; # uses SeqI, inherits from it
@ISA=qw(Bio::LiveSeq::SeqI);
=head2 new
Title : new
Usage : $range1 = Bio::LiveSeq::Range->new(-seq => $obj_ref,
-start => $beginlabel,
-end => $endlabel, -strand => 1);
Function: generates a new Bio::LiveSeq::Range
Returns : reference to a new object of class Range
Errorcode -1
Args : two labels, an obj_ref and an integer
strand 1=forward strand, strand -1=reverse strand
if strand not specified, it defaults to 1
the -seq argument must point to the underlying DNA LiveSeq object
=cut
sub new {
my ($thing, %args) = @_;
my $class = ref($thing) || $thing;
my ($obj,%range);
my ($seq,$start,$end,$strand)=($args{-seq},$args{-start},$args{-end},$args{-strand});
$obj = \%range;
$obj = bless $obj, $class;
unless ($seq->valid($start)) {
$obj->warn("$class not initialised because start label not valid");
return (-1);
}
unless ($seq->valid($end)) {
$obj->warn("$class not initialised because end label not valid");
return (-1);
}
unless (defined $strand) {
$strand = 1;
}
if (($strand != 1)&&($strand != -1)) {
$obj->warn("$class not initialised because strand identifier not valid. Use 1 (forward strand) or -1 (reverse strand).");
return (-1);
}
if ($start eq $end) {
$obj->warn("$class reports: start and end label are the same....");
} else {
unless ($seq->follows($start,$end,$strand)==1) {
$obj->warn("Fatal: end label $end doesn't follow start label $start for strand $strand!");
return (-1);
}
}
#if ($strand == 1) {
# unless ($seq->is_downstream($start,$end)==1) {
# croak "Fatal: end label not downstream of start label for forward strand!";
# }
#} else {
# unless ($seq->is_upstream($start,$end)==1) {
# croak "Fatal: end label not upstream of start label for reverse strand!";
# }
#}
$obj->{'seq'}=$seq;
$obj->{'start'}=$start;
$obj->{'end'}=$end;
$obj->{'strand'}=$strand;
return $obj;
}
=head2 valid
Title : valid
Usage : $boolean = $obj->valid($label)
Function: tests if a label exists AND is part of the object
Returns : boolean
Args : label
=cut
1;