Mercurial > repos > mahtabm > ensemb_rep_gvl
diff variant_effect_predictor/Bio/LiveSeq/Range.pm @ 0:2bc9b66ada89 draft default tip
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 06:29:17 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/LiveSeq/Range.pm Thu Apr 11 06:29:17 2013 -0400 @@ -0,0 +1,138 @@ +# $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 <insana@ebi.ac.uk> <jinsana@gmx.net> +# +# 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;