From 4a33ebbe382ce5e02729b2d1a662301836764925 Mon Sep 17 00:00:00 2001
From: Graham McVicker <mcvicker@sanger.ac.uk>
Date: Wed, 13 Nov 2002 12:25:21 +0000
Subject: [PATCH] Updated Slice PODs Updated slice.t test script

---
 modules/Bio/EnsEMBL/Slice.pm | 245 +++++++++++++++++++++++++----------
 modules/t/slice.t            | 157 +++++++++++++++++++---
 2 files changed, 318 insertions(+), 84 deletions(-)

diff --git a/modules/Bio/EnsEMBL/Slice.pm b/modules/Bio/EnsEMBL/Slice.pm
index 0ea4b779d0..9071f6b170 100644
--- a/modules/Bio/EnsEMBL/Slice.pm
+++ b/modules/Bio/EnsEMBL/Slice.pm
@@ -353,9 +353,10 @@ sub subseq {
   Arg [1]    : (optional) string $logic_name
                The name of the analysis used to generate the prediction
                transcripts obtained.
-  Example    : @transcripts = $slice->get_all_PredictionTranscripts();
+  Example    : @transcripts = @{$slice->get_all_PredictionTranscripts};
   Description: Retrieves the list of prediction transcripts which overlap
-               this slice.
+               this slice with logic_name $logic_name.  If logic_name is 
+               not defined then all prediction transcripts are retrieved.
   Returntype : listref of Bio::EnsEMBL::PredictionTranscript
   Exceptions : none
   Caller     : none
@@ -379,11 +380,15 @@ sub get_all_PredictionTranscripts {
                to obtain.
   Arg [2]    : (optional) float $score
                The mimimum score of the features to retrieve
-  Example    : @dna_align_feats = $slice->get_all_DnaAlignFeatures()
-  Description: Retrieves the DnaDnaAlignFeatures which overlap this slice
+  Example    : @dna_dna_align_feats = @{$slice->get_all_DnaAlignFeatures};
+  Description: Retrieves the DnaDnaAlignFeatures which overlap this slice with
+               logic name $logic_name and with score above $score.  If 
+               $logic_name is not defined features of all logic names are 
+               retrieved.  If $score is not defined features of all scores are
+               retrieved.
   Returntype : listref of Bio::EnsEMBL::DnaDnaAlignFeatures
   Exceptions : none
-  Caller     :general
+  Caller     : general
 
 =cut
 
@@ -404,9 +409,13 @@ sub get_all_DnaAlignFeatures {
                to obtain.
   Arg [2]    : (optional) float $score
                The mimimum score of the features to retrieve
-  Example    : @pep_align_feats = $slice->get_all_ProteinAlignFeatures()
-  Description: Retrieves the PepDnaAlignFeatures which overlap this slice.
-  Returntype : listref of Bio::EnsEMBL::PepDnaAlignFeatures
+  Example    : @dna_pep_align_feats = @{$slice->get_all_ProteinAlignFeatures};
+  Description: Retrieves the DnaPepAlignFeatures which overlap this slice with
+               logic name $logic_name and with score above $score.  If 
+               $logic_name is not defined features of all logic names are 
+               retrieved.  If $score is not defined features of all scores are
+               retrieved.
+  Returntype : listref of Bio::EnsEMBL::DnaPepAlignFeatures
   Exceptions : none
   Caller     : general
 
@@ -428,11 +437,14 @@ sub get_all_ProteinAlignFeatures {
                the name of the analysis performed on the features to retrieve
   Arg [2]    : (optional) float $score
                the lower bound of the score of the features to be retrieved
-  Example    : @feats = $slice->get_all_SimilarityFeatures()
+  Example    : @feats = @{$slice->get_all_SimilarityFeatures};
   Description: Retrieves all dna_align_features and protein_align_features
                with analysis named $logic_name and with score above $score.
                It is probably faster to use get_all_ProteinAlignFeatures or
                get_all_DnaAlignFeatures if a sepcific feature type is desired.
+               If $logic_name is not defined features of all logic names are 
+               retrieved.  If $score is not defined features of all scores are
+               retrieved.
   Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
   Exceptions : none
   Caller     : general
@@ -451,6 +463,7 @@ sub get_all_SimilarityFeatures {
 }
 
 
+
 =head2 get_all_SimpleFeatures
 
   Arg [1]    : (optional) string $logic_name
@@ -458,9 +471,13 @@ sub get_all_SimilarityFeatures {
                to obtain.
   Arg [2]    : (optional) float $score
                The mimimum score of the features to retrieve
-  Example    : @simple_feats = $slice->get_all_SimpleFeatures()
-  Description: Retrieves the SimpleFeatures which overlap this slice.
-  Returntype : listref of Bio::EnsEMBL::DnaDnaAlignFeature
+  Example    : @simple_feats = @{$slice->get_all_SimpleFeatures};
+  Description: Retrieves the SimpleFeatures which overlap this slice with
+               logic name $logic_name and with score above $score.  If 
+               $logic_name is not defined features of all logic names are 
+               retrieved.  If $score is not defined features of all scores are
+               retrieved.
+  Returntype : listref of Bio::EnsEMBL::SimpleFeatures
   Exceptions : none
   Caller     : general
 
@@ -481,8 +498,11 @@ sub get_all_SimpleFeatures {
   Arg [1]    : (optional) string $logic_name
                The name of the analysis performed on the repeat features
                to obtain.
-  Example    : @repeat_feats = $slice->get_all_RepeatFeatures()
-  Description: Retrieves the RepeatFeatures which overlap this slice.
+  Example    : @repeat_feats = @{$slice->get_all_RepeatFeatures}
+  Description: Retrieves the RepeatFeatures which overlap  with
+               logic name $logic_name and with score above $score.  If 
+               $logic_name is not defined features of all logic names are 
+               retrieved.
   Returntype : listref of Bio::EnsEMBL::RepeatFeatures
   Exceptions : none
   Caller     : general
@@ -497,13 +517,18 @@ sub get_all_RepeatFeatures {
    return $rpfa->fetch_all_by_Slice($self, $logic_name);
 }
 
+
+
 =head2 get_all_SNPs
 
   Args      : none
-  Function  : returns all SNPs on this slice
+  Function  : returns all SNPs on this slice. This function will only work
+              correctly if the SNP database or the lite database has been
+              attached to the core database.  This can been done through
+              a call to DBAdaptor::add_db_adaptor.
   Returntype: listref of Bio::EnsEMBL::External::Variation
   Exceptions: none
-  Caller    : GlyphSet_feature inherited objects
+  Caller    : contigview, snpview
 
 =cut
 
@@ -522,13 +547,17 @@ sub get_all_SNPs {
 
 =head2 get_all_Genes
 
- Title   : get_all_Genes
- Usage   :
- Function:
- Example :
- Returns : 
- Args    :
-
+  Arg [1]    : (optional) boolean $empty_flag 
+  Example    : @genes = $slice->get_all_Genes;
+  Description: Retrieves all genes that overlap this slice.  The empty flag is 
+               used by the web code and is used to retrieve light weight genes
+               that only have a start, end and strand (only works if lite db
+               is available).  If the lite database has been attached to the
+               core database this method will use the lite database (and 
+               genes will not be as full featured).
+  Returntype : listref of Bio::EnsEMBL::Genes
+  Exceptions : none
+  Caller     : none
 
 =cut
 
@@ -544,12 +573,20 @@ sub get_all_Genes{
 
 =head2 get_all_Genes_by_source
 
-  Arg [1]    : 
-  Example    : 
-  Description: 
-  Returntype : 
-  Exceptions : 
-  Caller     : 
+  Arg [1]    : string $source 
+  Arg [2]    : (optional) boolean $empty_flag
+  Example    : @genes = @{$slice->get_all_Genes_by_souce('core')};
+  Description: Retrieves genes that overlap this slice from database $source.  
+               This is primarily used by web code to retrieve subsets of genes
+               from the lite database (which contains an sets of genes from 
+               several databases).   The empty flag indicates light weight 
+               genes that only have a start, end and strand should be used
+               (only works if lite db is available). If the lite database has 
+               been attached to the core database this method will use the 
+               lite database (and genes will not be as full featured).
+  Returntype : listref of Bio::EnsEMBL::Genes
+  Exceptions : none
+  Caller     : contigview
 
 =cut
 
@@ -564,12 +601,20 @@ sub get_all_Genes_by_source{
 
 =head2 get_all_Genes_by_type
 
-  Arg [1]    : 
-  Example    : 
-  Description: 
-  Returntype : 
-  Exceptions : 
-  Caller     : 
+  Arg [1]    : string $type 
+  Arg [2]    : (optional) boolean $empty_flag
+  Example    : @genes = @{$slice->get_all_Genes_by_type('ensembl')};
+  Description: Retrieves genes that overlap this slice of type $type.  
+               This is primarily used by the genebuilding code when several 
+               types of genes are used.
+               The empty flag indicates light weight genes that only have a 
+               start, end and strand should be used (only works if lite db is 
+               available). If the lite database has 
+               been attached to the core database this method will use the 
+               lite database (and genes will not be as full featured).
+  Returntype : listref of Bio::EnsEMBL::Genes
+  Exceptions : none
+  Caller     : genebuilder
 
 =cut
 
@@ -583,14 +628,17 @@ sub get_all_Genes_by_type{
 
 
 
+
 =head2 chr_name
 
- Title   : chr_name
- Usage   : $obj->chr_name($newval)
- Function: 
- Example : 
- Returns : value of chr_name
- Args    : newvalue (optional)
+  Arg [1]    : (optional) string $value 
+  Example    : $chr_name = $slice->chr_name;
+  Description: Getter/Setter for the name of the chromosome that this slice
+               is on.  This is generally set by the SliceAdaptor and should 
+               probably not be set outside of that context.
+  Returntype : string
+  Exceptions : none
+  Caller     : SliceAdaptor
 
 =cut
 
@@ -603,15 +651,19 @@ sub chr_name{
 
 }
 
-=head2 chr_start
 
- Title   : chr_start
- Usage   : $obj->chr_start($newval)
- Function: 
- Example : 
- Returns : value of chr_start
- Args    : newvalue (optional)
 
+=head2 chr_start
+
+  Arg [1]    : int $value
+  Example    : $chr_start = $slice->chr_start;
+  Description: Getter/Setter for the start base of this slice on the 
+               chromosome.  This is generally set by the SliceAdaptor and
+               probably shouldnt be set outside of that context.
+               chr_start is always less than or equal to chr_end
+  Returntype : int
+  Exceptions : none
+  Caller     : SliceAdaptor, general
 
 =cut
 
@@ -627,12 +679,15 @@ sub chr_start{
 
 =head2 chr_end
 
- Title   : chr_end
- Usage   : $obj->chr_end($newval)
- Function: 
- Example : 
- Returns : value of chr_end
- Args    : newvalue (optional)
+  Arg [1]    : int $value
+  Example    : $chr_end = $slice->chr_end;
+  Description: Getter/Setter for the end base of this slice on the 
+               chromosome.  This is generally set by the SliceAdaptor and
+               probably shouldnt be set outside of that context.
+               chr_end is always greater than or equal to chr_start
+  Returntype : int
+  Exceptions : none
+  Caller     : SliceAdaptor, general
 
 =cut
 
@@ -648,12 +703,14 @@ sub chr_end{
 
 =head2 strand
 
- Title   : strand
- Usage   : $obj->strand($newval)
- Function: 
- Example : 
- Returns : value of strand
- Args    : newvalue (optional)
+  Arg [1]    : int $value
+  Example    : $strand = $slice->strand;
+  Description: Getter/Setter for the strand of the chromosome this slice is on.
+               This should not be set manually.  A much better way to obtain
+               a slice on the opposite strand is to call the invert method.
+  Returntype : int (either 1 or -1)
+  Exceptions : none
+  Caller     : invert, SliceAdaptor, general
 
 =cut
 
@@ -671,13 +728,14 @@ sub strand{
 
 =head2 assembly_type
 
- Title   : assembly_type
- Usage   : $obj->assembly_type($newval)
- Function: 
- Example : 
- Returns : value of assembly_type
- Args    : newvalue (optional)
-
+  Arg [1]    : string $value
+  Example    : $assembly_mapper_adaptor->fetch_by_type($slice->assembly_type);
+  Description: Gets/Sets the assembly type that this slice is constructed 
+               from.  This is generally set by the slice adaptor and probably
+               shouldnt be set outside of this context. 
+  Returntype : string
+  Exceptions : none
+  Caller     : general
 
 =cut
 
@@ -691,6 +749,18 @@ sub assembly_type{
 }
 
 
+
+=head2 get_all_KaryotypeBands
+
+  Arg [1]    : none
+  Example    : @kary_bands = @{$slice->get_all_KaryotypeBands};
+  Description: Retrieves the karyotype bands which this slice overlaps.
+  Returntype : listref oif Bio::EnsEMBL::KaryotypeBands
+  Exceptions : none
+  Caller     : general, contigview
+
+=cut
+
 sub get_all_KaryotypeBands {
   my ($self) = @_;
   
@@ -699,16 +769,28 @@ sub get_all_KaryotypeBands {
 }
 
 
+
+=head2 get_Chromosome
+
+  Arg [1]    : none
+  Example    : $chromosome = $slice->get_Chromosome;
+  Description: Retrieves the chromosome object which this slice is on
+  Returntype : Bio::EnsEMBL::Chromosome
+  Exceptions : none
+  Caller     : general
+
+=cut
+
 sub get_Chromosome {
   my $self = shift @_;
 
   my $ca =  $self->adaptor->db->get_ChromosomeAdaptor();
 
-  # this slice will contain N's at the beginning if the chr_start in the table is > 1
   return $ca->fetch_by_chr_name($self->chr_name());
 }
 
 
+
 =head2 get_repeatmasked_seq
 
   Arg [1]    : listref of strings $logic_names (optional)
@@ -754,6 +836,8 @@ sub get_repeatmasked_seq {
     return $masked_seq;
 }
 
+
+
 =head2 _mask_features
 
   Arg [1]    : string $dna_string
@@ -762,7 +846,7 @@ sub get_repeatmasked_seq {
                give the list of coordinates to replace with N or with 
                lower case
   Arg [3]    : int $soft_masking_enable (optional)
-  Example    : 
+  Example    : none
   Description: replaces string positions described in the RepeatFeatures
                with Ns (default setting), or with the lower case equivalent 
                (soft masking)
@@ -822,6 +906,18 @@ sub _mask_features {
 } 
 
 
+
+=head2 get_all_MapFrags
+
+  Arg [1]    : string $mapset
+  Example    : none
+  Description: Retreives all mapfrags of mapset $mapset that overlap this slice
+  Returntype : listref of Bio::EnsEMBL::MapFrags
+  Exceptions : none
+  Caller     : general
+
+=cut
+
 sub get_all_MapFrags {
     my $self = shift;
     my $mapset = shift;
@@ -1061,6 +1157,17 @@ sub get_all_Haplotypes {
 
 
 
+=head2 get_all_DASFeatures
+
+  Arg [1]    : none
+  Example    : $features = $slice->get_all_DASFeatures;
+  Description: Retreives a hash reference to the DAS features which overlap 
+               this slice
+  Returntype : hashref of Bio::SeqFeatures
+  Exceptions : ?
+  Caller     : webcode
+
+=cut
 
 sub get_all_DASFeatures{
    my ($self,@args) = @_;
diff --git a/modules/t/slice.t b/modules/t/slice.t
index a191ac3ac0..90632cd41e 100644
--- a/modules/t/slice.t
+++ b/modules/t/slice.t
@@ -5,7 +5,7 @@ use lib 't';
 
 BEGIN { $| = 1;  
 	use Test;
-	plan tests => 27;
+	plan tests => 44;
 }
 
 
@@ -21,7 +21,7 @@ ok(1);
 
 
 my $CHR           = '20';
-my $START         = 31_000_000;
+my $START         = 30_270_000;
 my $END           = 31_200_000;
 my $STRAND        = 1;
 my $ASSEMBLY_TYPE = 'NCBI_30';
@@ -116,32 +116,159 @@ ok($slice->strand == $STRAND);
 #
 # 23-24 Test Slice::seq
 #
-my $seq = $slice->seq;
-my $invert_seq = $slice->invert->seq;
-
-print STDERR "SEQ=[$seq]\n";
+my $seq = uc $slice->seq;
+my $invert_seq = uc $slice->invert->seq;
 
 ok(length($seq) == $slice->length); #sequence is correct length
-print STDERR "[".length($seq)."] != [".$slice->length."]\n"; 
-$seq = uc reverse $seq;  #reverse complement seq
-$seq =~ s/ACTG/TGAC/g; 
+
+$seq = reverse $seq;  #reverse complement seq
+$seq =~ tr/ACTG/TGAC/; 
+
 ok($seq eq $invert_seq); #revcom same as seq on inverted slice
 
 #
 # 25-26 Test Slice::subseq
 #
 my $SPAN = 10;
-my $sub_seq = $slice->subseq(-$SPAN,$SPAN);
-my $invert_sub_seq = $slice->invert->subseq($slice->length + $SPAN, 
-					    $slice->length - $SPAN);
+my $sub_seq = uc $slice->subseq(-$SPAN,$SPAN);
+my $invert_sub_seq = uc $slice->invert->subseq( $slice->length - $SPAN + 1, 
+						$slice->length + $SPAN + 1);
+
 ok(length $sub_seq == (2*$SPAN) + 1 ); 
-$seq = uc reverse $seq;
-$seq =~ s/ACTG/TGAC/g;
-ok($seq eq $invert_seq);
+$sub_seq = reverse $sub_seq;
+$sub_seq =~ tr/ACTG/TGAC/;
+
+ok($sub_seq eq $invert_sub_seq);
+
+#
+# 27 Test Slice::get_all_PredictionTranscripts
+#
+my $pts = $slice->get_all_PredictionTranscripts;
+ok(scalar @$pts);
+
+
+#
+# 28 Test Slice::get_all_DnaAlignFeatures
+#
+my $count = 0;
+my $dafs = $slice->get_all_DnaAlignFeatures;
+ok(scalar @$dafs);
+$count += scalar @$dafs;
+
+#
+# 29 Test Slice::get_all_ProteinAlignFeatures
+#
+my $pafs = $slice->get_all_ProteinAlignFeatures;
+ok(scalar @$pafs);
+$count += scalar @$pafs;
+
+#
+# 30 Test Slice::get_all_SimilarityFeatures
+#
+ok($count == scalar @{$slice->get_all_SimilarityFeatures});
+
+#
+# 31 Test Slice::get_all_SimpleFeatures
+#
+ok(scalar @{$slice->get_all_SimpleFeatures});
+
+#
+# 32 Test Slice::get_all_RepeatFeatures
+#
+ok(scalar @{$slice->get_all_RepeatFeatures});
+
+#
+# 33 Test Slice::get_all_Genes
+#
+ok(scalar @{$slice->get_all_Genes});
+
+#
+# 34 Test Slice::get_all_Genes_by_type
+#
+ok(scalar @{$slice->get_all_Genes_by_type('ensembl')});
+
+#
+# 35 Test Slice::chr_name
+#
+my $old_val = $slice->chr_name;
+my $new_val = 'Y';
+$slice->chr_name($new_val);
+ok($slice->chr_name eq $new_val);
+$slice->chr_name($old_val);
+
+#
+# 36 Test Slice::chr_start
+#
+$old_val = $slice->chr_start;
+$new_val = 123;
+$slice->chr_start($new_val);
+ok($slice->chr_start == $new_val);
+$slice->chr_start($old_val);
+
+#
+# 37 Test Slice::chr_end
+#
+$old_val = $slice->chr_end;
+$new_val = 1234567;
+$slice->chr_end($new_val);
+ok($slice->chr_end == $new_val);
+$slice->chr_end($old_val);
+
+#
+# 38 Test Slice::strand
+#
+$old_val = $slice->strand;
+$new_val = $old_val * -1;
+$slice->strand($new_val);
+ok($slice->strand == $new_val);
+$slice->strand($old_val);
+
+#
+# 39 Test Slice::assembly_type
+#
+$old_val = $slice->assembly_type;
+$new_val = 'TEST';
+$slice->assembly_type($new_val);
+ok($slice->assembly_type eq $new_val);
+$slice->assembly_type($old_val);
 
 
+#
+# 40 Test Slice::get_all_KaryotypeBands
+#
+ok(scalar @{$slice->get_all_KaryotypeBands});
 
 
+#
+# 41-42 Test Slice::get_Chromosome
+#
+my $chromo;
+ok($chromo = $slice->get_Chromosome);
+ok($chromo->chr_name eq $slice->chr_name);
+
+#
+# 43-44 Test Slice::get_RepeatMaskedSeq
+#
+$seq = $slice->seq;
+ok(length($slice->get_repeatmasked_seq->seq) == length($seq));
+
+my $softmasked_seq = $slice->get_repeatmasked_seq(['RepeatMask'], 1)->seq;
+
+ok($softmasked_seq ne $seq);
+ok(uc($softmasked_seq) eq $seq);
+
+$softmasked_seq = $seq = undef;  
+
+#
+# 45 Test Slice::get_all_MapFrags
+#
+ok(scalar @{$slice->get_all_MapFrags});
+
+#
+# 46 Test Slice::get_tiling_path
+#
+ok(scalar @{$slice->get_tiling_path});
+
 
 
 
-- 
GitLab