These documents are For the HEAD of the CVS repository on July 19, 2007 Api docs for previous releases

Modware::Search

Feature

Summary Package variables Synopsis Description General documentation Methods

Summary
   Modware::Search::Feature - collection of methods that return iterators of Modware::Feature::* objects
Package variables top
No package variables defined.
Included modulestop
Modware::DBH
Modware::Feature
Modware::Iterator
Modware::Root
Synopsistop
   #USE CASE: print primary_id, start and stop of all mRNA features overlapping
# a given range on a chromosome: chromosome named Fake base 39416 to 41654

my @features = Modware::Search::Feature->Search_overlapping_feats_by_range( 'Fake', 39416, 41654, 'mRNA' );

foreach my $feature (@features) {
print $feature->primary_id()."\t".$feature->start()."\t".$feature->end()."\n";
}

#USE CASE: print primary_id, chromosome, start and stop of all 5' partial features
my @features = Modware::Search::Feature->Search_having_qualifier("Partial, 5'' missing");

foreach my $feature (@features) {
print $feature->primary_id()."\t".$feature->chromosome->chromosome_name()."\t".$feature->start()."\t".$feature->end()."\n";
}
Descriptiontop
   Modules in the Modware::Search are all class methods.  These methods
return iterators or arrays of objects (depending on the context)
So Modware:::Search::Feature contains methods that return iterators or arrays of
Modware::Feature objects.
Methodstop
Count_by_external_idDescriptionCode
Count_deleted_by_external_idDescriptionCode
Count_feature_by_descendant_so_termsDescriptionCode
Count_feature_by_typeDescriptionCode
Count_feature_by_type_and_sourceDescriptionCode
Count_having_qualifierDescriptionCode
Search_all_by_primary_idDescriptionCode
Search_by_external_idDescriptionCode
Search_cds_features_by_chromosomeDescriptionCode
Search_contig_features_by_chromosomeDescriptionCode
Search_contig_features_by_reference_feature_nameDescriptionCode
Search_feature_by_descendant_so_termsDescriptionCode
Search_feature_by_typeDescriptionCode
Search_feature_by_type_and_sourceDescriptionCode
Search_gap_features_by_chromosomeDescriptionCode
Search_gap_features_by_reference_feature_nameDescriptionCode
Search_having_qualifierDescriptionCode
Search_mrna_features_by_reference_feature_nameDescriptionCode
Search_overlapping_alignments_by_rangeDescriptionCode
Search_overlapping_feats_by_rangeDescriptionCode
sth_to_iteratorDescriptionCode

Methods description

Count_by_external_idcodetopprevnext
 Title    : Count_by_external_id
:
Function : returns a count of features with a given external_id for a given source
:
Usage : to get a count of features with an accession no like 'ABC123'
; my $count = Modware::Search::Feature->Count_by_external_id(
: -id => 'ABC123%',
: -source => 'Accession Number'
: );
Returns : number
Args : named: -id => the id with possible wildcard being searched
: -source => the source of the id being searche
Count_deleted_by_external_idcodetopprevnext
 Title    : Count_deleted_by_external_id
:
Function : returns a count of DELETED features with a given external_id for a given source
:
Usage : to get a count of features with an accession no like 'ABC123'
; my $count = Modware::Search::Feature->Count_deleted_by_external_id(
: -id => 'ABC123%',
: -source => 'Accession Number'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -id => the id with possible wildcard being searched
: -source => the source of the id being searche
Count_feature_by_descendant_so_termscodetopprevnext
 Title    : Count_feature_by_descendant_so_terms
:
Function : returns a count of all features associated with a Sequence ontology term
: or any of its descendants
:
Usage : my @features = Modware::Search::Feature->Count_feature_by_descendant_so_terms(
: -term_name => 'transcript'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -term_name => a sequence ontology term
Count_feature_by_typecodetopprevnext
 Title    : Count_feature_by_type
:
Function : returns a count of all features associated with a Sequence ontology term
:
Usage : my @features = Modware::Search::Feature->Count_feature_by_type(
: -term_name => 'tRNA'
: );
Returns : number
Args : named: -term_name => a sequence ontology term
Count_feature_by_type_and_sourcecodetopprevnext
 Title    : Count_feature_by_type_and_source
:
Function : returns a count of all features associated with a Sequence ontology term
: AND source
:
Usage : my $feature_count = Modware::Search::Feature->Count_feature_by_type_and_source(
: -type => 'tRNA',
: -source => 'TRNASCAN-SE'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -type => a sequence ontology term
: -source => a known source
Count_having_qualifiercodetopprevnext
 Title    : Count_having_qualifier
:
Function : returns a count of all features having a given qualifier
:
Usage : to a count features with a qualifier like 'Incomplete support'
; my $count = Modware::Search::Feature->Count_having_qualifier( 'Incomplete support' );
:
Returns : a number
Args : text string of a qualifier: i.e. 'Incomplete support', 'Pseudogene', "Partial, 5' missing", "Partial, 3' missing"
Search_all_by_primary_idcodetopprevnext
 Title    : Search_all_by_primary_id
:
Function : returns all features with a primary id mathing input pattern
:
Returns : Iterator or array of Modware::Features (depending on context)
Args : ID to search ( usually DDBXXXXXX )
Search_by_external_idcodetopprevnext
 Title    : Search_by_external_id
:
Function : returns all features with a given external_id for a given source
:
Usage : to get all features with an accession no like 'ABC123'
; my @features = Modware::Search::Feature->Search_by_external_id(
: -id => 'ABC123%',
: -source => 'Accession Number'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -id => the id with possible wildcard being searched
: -source => the source of the id being searche
Search_cds_features_by_chromosomecodetopprevnext
 Title    : Search_cds_features_by_chromosome
NOTE : **************** DEPRECATED ***************************************
: * replace with Search_mrna_features_by_reference_feature_name *
: *******************************************************************
Function : returns all CDS feautures on a chromosome
:
Usage : my @features = Modware::Search::Feature->Search_cds_features_by_chromosome(
: -chromosome_name => '1'
: );
Returns : array of features
Args : named: -chromosome_name => the chromosome to get the features for
Search_contig_features_by_chromosomecodetopprevnext
 Title    : Search_contig_features_by_chromosome
NOTE : **************** DEPRECATED ***************************************
: * replace with Search_contig_features_by_reference_feature_name *
: *******************************************************************
Function : returns all contig feautures on a chromosome
:
Usage : my @contigs = Modware::Search::Feature->Search_contig_features_by_chromosome(
: -chromosome_name => '1'
: );
Returns : array of features
Args : named: -chromosome_name => the chromosome to get the contigs for
Search_contig_features_by_reference_feature_namecodetopprevnext
 Title    : Search_contig_features_by_reference_feature_name
:
Function : returns all contig feautures on a chromosome
:
Usage : # to get the contig features located on chromosome named chr1
: my @contigs = Modware::Search::Feature->Search_contig_features_by_reference_feature_name(
: -name => 'chr1'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -name => the name of the feature to get contigs for
Search_feature_by_descendant_so_termscodetopprevnext
 Title    : Search_feature_by_descendant_so_terms
:
Function : returns all features associated with a Sequence ontology term
: or any of its descendants
:
Usage : my @features = Modware::Search::Feature->Search_feature_by_descendant_so_terms(
: -term_name => 'transcript'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -term_name => a sequence ontology term
Search_feature_by_typecodetopprevnext
 Title    : Search_feature_by_type
:
Function : returns all features associated with a Sequence ontology term
:
Usage : my @features = Modware::Search::Feature->Search_feature_by_type(
: -term_name => 'tRNA'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -term_name => a sequence ontology term
Search_feature_by_type_and_sourcecodetopprevnext
 Title    : Search_feature_by_type_and_source
:
Function : returns all features associated with a Sequence ontology term
: AND source
:
Usage : my @features = Modware::Search::Feature->Search_feature_by_type_and_source(
: -type => 'tRNA',
: -source => 'TRNASCAN-SE'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -type => a sequence ontology term
: -source => a known source
Search_gap_features_by_chromosomecodetopprevnext
 Title    : Search_gap_features_by_chromosome
NOTE : **************** DEPRECATED ***************************************
: * replace with Search_gap_features_by_reference_feature_name *
: *******************************************************************
Function : returns all gap feautures on a chromosome
:
Usage : my @features = Modware::Search::Feature->Search_gap_features_by_chromosome(
: -chromosome_name => '1'
: );
Returns : array of features
Args : named: -chromosome_name => the chromosome to get the features for
Search_gap_features_by_reference_feature_namecodetopprevnext
 Title    : Search_gap_features_by_reference_feature_name
:
Function : returns all gap feautures on a chromosome
:
Usage : # to get the gap features located on chromosome named chr1
: my @gaps = Modware::Search::Feature->Search_gap_features_by_reference_feature_name(
: -name => 'chr1'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -name => the name of the feature to get gaps for
Search_having_qualifiercodetopprevnext
 Title    : Search_having_qualifier
:
Function : returns all features which have a given qualifier
:
Usage : to get all features with a qualifier like
; my @features = Modware::Search::Feature->Search_having_qualifier( 'Incomplete support' );
:
Returns : Iterator or array of Modware::Features (depending on context)
Args : text string of a qualifier: i.e. 'Incomplete support', 'Pseudogene', "Partial, 5' missing", "Partial, 3' missing"
Search_mrna_features_by_reference_feature_namecodetopprevnext
 Title    : Search_mrna_features_by_reference_feature_name
:
Function : returns all mrna feautures on a chromosome
:
Usage : # to get the mrna features located on chromosome named chr1
: my @mrnas = Modware::Search::Feature->Search_mrna_features_by_reference_feature_name(
: -name => 'chr1'
: );
Returns : Iterator or array of Modware::Features (depending on context)
Args : named: -name => the name of the feature to get mrnas for
Search_overlapping_alignments_by_rangecodetopprevnext
 Title    : Search_overlapping_alignments_by_range
Usage : Modware::Search::Feature->Search_overlapping_alignments_by_range( $reference_feature_name, $range_start, $range_end,'mRNA' );
Function : returns all features which are aligned overlapping a given region
Returns : Iterator or array of Modware::Features (depending on context)
Args : reference_feature_name, rang start, range end
Search_overlapping_feats_by_rangecodetopprevnext
 Title    : Search_overlapping_feats_by_range
Usage : Modware::Search::Gene->Search_overlapping_feats_by_range( $reference_feature_name, $range_start, $range_end,'mRNA' );
Function : returns all genes that overlap a regioin on a chromosome
Returns : Iterator or array of Modware::Features (depending on context)
Args : reference_feature_name, rang start, range end, type
sth_to_iteratorcodetopprevnext
 Title    : sth_to_iterator
:
Function : Given a statement handle pointing to feature_ids,
: create an iterator of Modware::Features containing
: the features identified by the feature_ids
:
Returns : an iterator of Features
Args : an active statement handle pointing to feature_ids

Methods code

Count_by_external_iddescriptiontopprevnext
sub Count_by_external_id {
   my ($self, @args) = @_;

   my ( $source, $id ) = Modware::Root->_rearrange([qw(SOURCE ID)], @args);

   die "Searching Ids requires 2 named arguments:\n".
       " -id ( the external id ) and -source\n" if ( !$source || !$id );

   $id=~s/\*/%/g;
my $dbh = new Modware::DBH; my $results; my $sth = $dbh->prepare(" SELECT COUNT(F.FEATURE_ID) FROM V_NOTDELETED_FEATURE F INNER JOIN FEATURE_DBXREF FX ON FX.FEATURE_ID = F.FEATURE_ID INNER JOIN DBXREF X ON X.DBXREF_ID = FX.DBXREF_ID INNER JOIN DB ON DB.DB_ID = X.DB_ID WHERE DB.NAME = 'DB:' || ? AND UPPER(X.ACCESSION) LIKE UPPER(?) "); $sth->execute( $source, $id ); $results = $sth->fetchrow(); $sth->finish; return $results;
}
Count_deleted_by_external_iddescriptiontopprevnext
sub Count_deleted_by_external_id {
   my ($self, @args) = @_;

   my ( $source, $id ) = Modware::Root->_rearrange([qw(SOURCE ID)], @args);

   die "Searching Ids requires 2 named arguments:\n".
       " -id ( the external id ) and -source\n" if ( !$source || !$id );

   my $dbh    = new Modware::DBH;
   my $results;

   my $sth = $dbh->prepare("
      SELECT COUNT(F.FEATURE_ID)
        FROM V_DELETED_FEATURE F
  INNER JOIN FEATURE_DBXREF FX
          ON FX.FEATURE_ID = F.FEATURE_ID
  INNER JOIN DBXREF X
          ON X.DBXREF_ID = FX.DBXREF_ID
  INNER JOIN DB 
          ON DB.DB_ID = X.DB_ID
       WHERE DB.NAME = CONCAT( 'DB:', ? )
         AND UPPER(X.ACCESSION) = UPPER(?)
   ");

   $sth->execute( $id, $source );

   $results = $sth->fetchrow();

   $sth->finish;

   return $results;
}
Count_feature_by_descendant_so_termsdescriptiontopprevnext
sub Count_feature_by_descendant_so_terms {
   my ($self, @args) = @_;

   my ( $so_term_name ) =  Modware::Root->_rearrange([qw(TERM_NAME)], @args);

   die "Search_feature_by_descendant_so_terms requires named argument:\n".
       " -term_name ( i.e. 'ncRNA' )\n" if ( !$so_term_name );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
         SELECT FEATURE_ID
           FROM V_NOTDELETED_FEATURE F
     INNER JOIN (
            SELECT CHILD_ID 
              FROM V_CVTERM_PARENT_CHILD
             WHERE CV_NAME = 'sequence'
        START WITH CHILD_NAME = ?
        CONNECT BY PRIOR CHILD_ID = PARENT_ID 
                 ) V
            ON V.CHILD_ID = F.TYPE_ID
   ");

   $sth->execute( $so_term_name );

   $results = $sth->fetchrow();

   $sth->finish;

   return $results;
}
Count_feature_by_typedescriptiontopprevnext
sub Count_feature_by_type {
   my ($self, @args) = @_;

   my ( $so_term_name ) =  Modware::Root->_rearrange([qw(TERM_NAME)], @args);

   die "Search_feature_by_type requires named argument:\n".
       " -term_name ( i.e. 'tRNA' )\n" if ( !$so_term_name );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
       SELECT COUNT(FEATURE_ID)
         FROM V_NOTDELETED_FEATURE F
   INNER JOIN CVTERM CT
           ON F.TYPE_ID = CT.CVTERM_ID
   INNER JOIN CV
           ON CV.CV_ID = CT.CV_ID
          AND CV.NAME = 'sequence'
     WHERE CT.NAME =?
   ");

   $sth->execute( $so_term_name );

   $results = $sth->fetchrow();

   $sth->finish;

   return $results;
}
Count_feature_by_type_and_sourcedescriptiontopprevnext
sub Count_feature_by_type_and_source {
   my ($self, @args) = @_;

   my ( $type, $source  ) =  Modware::Root->_rearrange([qw(TYPE SOURCE)], @args);

   die "Count_feature_by_type_and_source requires two named arguments:\n".
       " -type and -source\n" if ( !$type );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
       SELECT F.FEATURE_ID
         FROM V_NOTDELETED_FEATURE F
   INNER JOIN CVTERM CT
           ON F.TYPE_ID = CT.CVTERM_ID
   INNER JOIN CV
           ON CV.CV_ID = CT.CV_ID
          AND CV.NAME = 'sequence'
   INNER JOIN FEATURE_DBXREF FD
           ON FD.FEATURE_ID = F.FEATURE_ID
   INNER JOIN DBXREF DBX
           ON DBX.DBXREF_ID = FD.DBXREF_ID
   INNER JOIN DB
           ON DB.DB_ID = DBX.DB_ID
          AND DB.NAME = 'GFF_source'
     WHERE CT.NAME =?
          AND DBX.ACCESSION = ?
   ");

   $sth->execute( $type, $source );

   $results = $sth->fetchrow();

   $sth->finish;

   return $results;
}
Count_having_qualifierdescriptiontopprevnext
sub Count_having_qualifier {
   my ($self, @args) = @_;

   my ( $value ) =  @args;

   die "need at least one argument to Search_having_qualifier" if !$value;

   my $dbh    = new Modware::DBH;
   my $results;

   my $sth = $dbh->prepare("
     SELECT COUNT(F.FEATURE_ID)
       FROM V_NOTDELETED_FEATURE F
 INNER JOIN FEATUREPROP P
         ON F.FEATURE_ID = P.FEATURE_ID
 INNER JOIN CVTERM C
         ON P.TYPE_ID = C.CVTERM_ID
      WHERE C.NAME = 'qualifier'
        AND P.VALUE LIKE (?)
   ");

   $sth->execute( $value );

   $results = $sth->fetchrow();

   $sth->finish;

   return $results;
}
Search_all_by_primary_iddescriptiontopprevnext
sub Search_all_by_primary_id {
   my ($self, $id) = @_;
   $id=~s/\*/%/g;
my $dbh = new Modware::DBH; my @results; my $sth = $dbh->prepare(" SELECT F.FEATURE_ID FROM FEATURE F INNER JOIN DBXREF X ON X.DBXREF_ID = F.DBXREF_ID WHERE UPPER(X.ACCESSION) LIKE UPPER(?) "); $sth->execute( $id ); # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_by_external_iddescriptiontopprevnext
sub Search_by_external_id {
   my ($self, @args) = @_;

   my ( $source, $id ) =  Modware::Root->_rearrange([qw(SOURCE ID)], @args);

   die "Searching Ids requires 2 named arguments:\n".
       " -id ( the external id ) and -source\n" if ( !$source || !$id );
   $id=~s/\*/%/g;
my $dbh = new Modware::DBH; my @results; my $sth = $dbh->prepare(" SELECT F.FEATURE_ID FROM V_NOTDELETED_FEATURE F INNER JOIN FEATURE_DBXREF FX ON FX.FEATURE_ID = F.FEATURE_ID INNER JOIN DBXREF X ON X.DBXREF_ID = FX.DBXREF_ID INNER JOIN DB ON DB.DB_ID = X.DB_ID WHERE DB.NAME = 'DB:' || ? AND UPPER(X.ACCESSION) LIKE UPPER(?) "); $sth->execute( $source, $id ); # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_cds_features_by_chromosomedescriptiontopprevnext
sub Search_cds_features_by_chromosome {
   my ($self, @args) = @_;

   warn "**** Using deprecated method : Modware::Search::Feature->Search_cds_features_by_chromosome(...);\n";
   warn "  replace with Search_mrna_features_by_reference_feature_name\n ";

   my ( $chromosome_name ) =  Modware::Root->_rearrange([qw(CHROMOSOME_NAME)], @args);

   die "Searching Ids requires named argument:\n".
       " -chromosome_name ( the name of the chromosome ( 1,2,M,BF, etc. )\n" if ( !$chromosome_name );

   my $dbh    = new Modware::DBH;

   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_MRNA_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM V_CHROMOSOME_FEATURES C WHERE C.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $chromosome_name );

   while (  my $feature_id  = $sth->fetchrow() ) {
      my $feat = new Modware::Feature( -feature_id => $feature_id );
      push @results, $feat;
   }
   $sth->finish;

   return @results;
}
Search_contig_features_by_chromosomedescriptiontopprevnext
sub Search_contig_features_by_chromosome {
   my ($self, @args) = @_;

   warn "**** Using deprecated method : Modware::Search::Feature->Search_contig_features_by_chromosome(...);\n";
   warn "  replace with Search_contig_features_by_reference_feature_name\n ";

   my ( $chromosome_name ) =  Modware::Root->_rearrange([qw(CHROMOSOME_NAME)], @args);

   die "Searching Ids requires named argument:\n".
       " -chromosome_name ( the name of the chromosome ( 1,2,M,BF, etc. )\n" if ( !$chromosome_name );

   my $dbh    = new Modware::DBH;

   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_CONTIG_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM V_CHROMOSOME_FEATURES C WHERE C.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $chromosome_name );

   while (  my $feature_id  = $sth->fetchrow() ) {
      my $feat = new Modware::Feature( -feature_id => $feature_id );
      push @results, $feat;
   }
   $sth->finish;

   return @results;
}
Search_contig_features_by_reference_feature_namedescriptiontopprevnext
sub Search_contig_features_by_reference_feature_name {
   my ($self, @args) = @_;

   my ( $name ) =  @args;

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_CONTIG_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM FEATURE F WHERE F.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $name );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_feature_by_descendant_so_termsdescriptiontopprevnext
sub Search_feature_by_descendant_so_terms {
   my ($self, @args) = @_;

   my ( $so_term_name ) =  Modware::Root->_rearrange([qw(TERM_NAME)], @args);

   die "Search_feature_by_descendant_so_terms requires named argument:\n".
       " -term_name ( i.e. 'ncRNA' )\n" if ( !$so_term_name );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
         SELECT FEATURE_ID
           FROM V_NOTDELETED_FEATURE F
     INNER JOIN (
            SELECT CHILD_ID 
              FROM V_CVTERM_PARENT_CHILD
             WHERE CV_NAME = 'sequence'
        START WITH CHILD_NAME = ?
        CONNECT BY PRIOR CHILD_ID = PARENT_ID 
                 ) V
            ON V.CHILD_ID = F.TYPE_ID
   ");

   $sth->execute( $so_term_name );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_feature_by_typedescriptiontopprevnext
sub Search_feature_by_type {
   my ($self, @args) = @_;

   my ( $so_term_name ) =  Modware::Root->_rearrange([qw(TERM_NAME)], @args);

   die "Search_feature_by_type requires named argument:\n".
       " -term_name ( i.e. 'tRNA' )\n" if ( !$so_term_name );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
       SELECT FEATURE_ID
         FROM V_NOTDELETED_FEATURE F
   INNER JOIN CVTERM CT
           ON F.TYPE_ID = CT.CVTERM_ID
   INNER JOIN CV
           ON CV.CV_ID = CT.CV_ID
          AND CV.NAME = 'sequence'
     WHERE CT.NAME =?
   ");

   $sth->execute( $so_term_name );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_feature_by_type_and_sourcedescriptiontopprevnext
sub Search_feature_by_type_and_source {
   my ($self, @args) = @_;

   my ( $type, $source  ) =  Modware::Root->_rearrange([qw(TYPE SOURCE)], @args);

   die "Search_feature_by_type_and_source requires two named arguments:\n".
       " -type and -source\n" if ( !$type );

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
       SELECT F.FEATURE_ID
         FROM V_NOTDELETED_FEATURE F
   INNER JOIN CVTERM CT
           ON F.TYPE_ID = CT.CVTERM_ID
   INNER JOIN CV
           ON CV.CV_ID = CT.CV_ID
          AND CV.NAME = 'sequence'
   INNER JOIN FEATURE_DBXREF FD
           ON FD.FEATURE_ID = F.FEATURE_ID
   INNER JOIN DBXREF DBX
           ON DBX.DBXREF_ID = FD.DBXREF_ID
   INNER JOIN DB
           ON DB.DB_ID = DBX.DB_ID
          AND DB.NAME = 'GFF_source'
     WHERE CT.NAME =?
          AND DBX.ACCESSION = ?
   ");

   $sth->execute( $type, $source );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_gap_features_by_chromosomedescriptiontopprevnext
sub Search_gap_features_by_chromosome {
   my ($self, @args) = @_;

   warn "**** Using deprecated method : Modware::Search::Feature->Search_gap_features_by_chromosome(...);\n";
   warn "  replace with Search_gap_features_by_reference_feature_name\n ";

   my ( $chromosome_name ) =  Modware::Root->_rearrange([qw(CHROMOSOME_NAME)], @args);

   die "Searching Ids requires named argument:\n".
       " -chromosome_name ( the name of the chromosome ( 1,2,M,BF, etc. )\n" if ( !$chromosome_name );

   my $dbh    = new Modware::DBH;

   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_GAP_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM V_CHROMOSOME_FEATURES C WHERE C.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $chromosome_name );

   while (  my $feature_id  = $sth->fetchrow() ) {
      my $feat = new Modware::Feature( -feature_id => $feature_id );
      push @results, $feat;
   }
   $sth->finish;

   return @results;
}
Search_gap_features_by_reference_feature_namedescriptiontopprevnext
sub Search_gap_features_by_reference_feature_name {
   my ($self, @args) = @_;

   my ( $name ) =  @args;

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_GAP_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM FEATURE F WHERE F.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $name );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_having_qualifierdescriptiontopprevnext
sub Search_having_qualifier {
   my ($self, @args) = @_;

   my ( $value ) =  @args;

   die "need at least one argument to Search_having_qualifier" if !$value;

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
     SELECT /*+ INDEX(P FEATUREPROP_IDX2 ) */ F.FEATURE_ID
       FROM V_NOTDELETED_FEATURE F
 INNER JOIN FEATUREPROP P
         ON F.FEATURE_ID = P.FEATURE_ID
 INNER JOIN CVTERM C
         ON P.TYPE_ID = C.CVTERM_ID
      WHERE C.NAME = 'qualifier'
        AND P.VALUE LIKE (?)
   ");

   $sth->execute( $value );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_mrna_features_by_reference_feature_namedescriptiontopprevnext
sub Search_mrna_features_by_reference_feature_name {
   my ($self, @args) = @_;

   my ( $name ) =  @args;

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
	  SELECT F.FEATURE_ID
         FROM V_MRNA_FEATURES F 
   INNER JOIN FEATURELOC FL
           ON FL.FEATURE_ID = F.FEATURE_ID
        WHERE SRCFEATURE_ID = ( SELECT FEATURE_ID FROM FEATURE F WHERE F.NAME = ?)
	ORDER BY FL.FMIN
   ");

   $sth->execute( $name );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_overlapping_alignments_by_rangedescriptiontopprevnext
sub Search_overlapping_alignments_by_range {
   my ($self, $reference_feature_name, $range_start, $range_end) = @_;

   $range_start -= 1;

   my $dbh    = new Modware::DBH;
   my @results;

   my $sth = $dbh->prepare("
         SELECT /*+ INDEX(FL FEATURELOC_IDX3 ) */ FR.OBJECT_ID
           FROM FEATURE_RELATIONSHIP FR 
     INNER JOIN  FEATURE HIT
             ON HIT.FEATURE_ID = FR.SUBJECT_ID
     INNER JOIN CVTERM T
             ON T.CVTERM_ID = FR.TYPE_ID
     INNER JOIN CVTERM HIT_TYPE
             ON HIT_TYPE.CVTERM_ID = HIT.TYPE_ID
     INNER JOIN FEATURELOC FL
             ON HIT.FEATURE_ID = FL.FEATURE_ID
     INNER JOIN FEATURE REFFEAT
             ON REFFEAT.FEATURE_ID = FL.SRCFEATURE_ID					   
          WHERE T.NAME = 'part_of'
            AND HIT_TYPE.NAME = 'EST_match'
            AND FL.FMIN <= ?
            AND FL.FMAX >= ?- 1
            AND REFFEAT.NAME = ?
       GROUP BY FR.OBJECT_ID
   ");

    

   $sth->execute( $range_end, $range_start, $reference_feature_name  );

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
Search_overlapping_feats_by_rangedescriptiontopprevnext
sub Search_overlapping_feats_by_range {
   my ($self, $reference_feature_name, $range_start, $range_end, $type) = @_;

   my $dbh    = new Modware::DBH;
   my @results;

   $range_start -= 1;

   my $sth = $dbh->prepare("
	   SELECT /*+ INDEX(FL FEATURELOC_IDX3 ) */ F.FEATURE_ID
          FROM V_NOTDELETED_FEATURE F
    INNER JOIN FEATURELOC FL
            ON FL.FEATURE_ID = F.FEATURE_ID
    INNER JOIN FEATURE C
            ON C.FEATURE_ID = FL.SRCFEATURE_ID
    INNER JOIN CVTERM CV
	           ON F.TYPE_ID = CV.CVTERM_ID
         WHERE C.NAME LIKE ?
           AND FL.FMIN <= ? - 1
           AND FL.FMAX >= ?
           AND CV.NAME LIKE ?
      ORDER BY FL.FMIN
   ");

   $sth->execute( $reference_feature_name, $range_end, $range_start, $type);

    # Create iterator object from results
my $itr = $self->sth_to_iterator($sth); $sth->finish(); return wantarray ? $itr->to_array() : $itr;
}
sth_to_iteratordescriptiontopprevnext
sub sth_to_iterator {
    my ( $self, $sth ) = @_;

    my @data;
    while ( my $row = $sth->fetchrow() ) {
        my $args   = { -feature_id => $row };
        push( @data, $args );
    }

    my $itr = new Modware::Iterator(
        -CLASS => "Modware::Feature",
        -DATA  =>\@ data
    );

    return $itr;
}

General documentation

AUTHOR - Eric Just top
   Eric Just e-just@northwestern.edu
APPENDIX top
   The rest of the documentation details each of the object
methods. Internal methods are usually preceded with a _