[Bio] / Sprout / Sprout.pm Repository:
ViewVC logotype

Diff of /Sprout/Sprout.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.71, Sun Jun 25 00:07:22 2006 UTC revision 1.77, Sun Jul 23 16:44:10 2006 UTC
# Line 15  Line 15 
15      use FidCheck;      use FidCheck;
16      use Stats;      use Stats;
17      use POSIX qw(strftime);      use POSIX qw(strftime);
18        use BasicLocation;
19    
20  =head1 Sprout Database Manipulation Object  =head1 Sprout Database Manipulation Object
21    
# Line 1656  Line 1656 
1656  sub CoupledFeatures {  sub CoupledFeatures {
1657      # Get the parameters.      # Get the parameters.
1658      my ($self, $featureID) = @_;      my ($self, $featureID) = @_;
1659        Trace("Looking for features coupled to $featureID.") if T(coupling => 3);
1660      # Create a query to retrieve the functionally-coupled features.      # Create a query to retrieve the functionally-coupled features.
1661      my $query = $self->Get(['ParticipatesInCoupling', 'Coupling'],      my $query = $self->Get(['ParticipatesInCoupling', 'Coupling'],
1662                             "ParticipatesInCoupling(from-link) = ?", [$featureID]);                             "ParticipatesInCoupling(from-link) = ?", [$featureID]);
# Line 1668  Line 1669 
1669          # Get the ID and score of the coupling.          # Get the ID and score of the coupling.
1670          my ($couplingID, $score) = $clustering->Values(['Coupling(id)',          my ($couplingID, $score) = $clustering->Values(['Coupling(id)',
1671                                                          'Coupling(score)']);                                                          'Coupling(score)']);
1672            Trace("$featureID coupled with score $score to ID $couplingID.") if T(coupling => 4);
1673          # Get the other feature that participates in the coupling.          # Get the other feature that participates in the coupling.
1674          my ($otherFeatureID) = $self->GetFlat(['ParticipatesInCoupling'],          my ($otherFeatureID) = $self->GetFlat(['ParticipatesInCoupling'],
1675                                             "ParticipatesInCoupling(to-link) = ? AND ParticipatesInCoupling(from-link) <> ?",                                             "ParticipatesInCoupling(to-link) = ? AND ParticipatesInCoupling(from-link) <> ?",
1676                                             [$couplingID, $featureID], 'ParticipatesInCoupling(from-link)');                                             [$couplingID, $featureID], 'ParticipatesInCoupling(from-link)');
1677            Trace("$couplingID target feature is $otherFeatureID.") if T(coupling => 4);
1678          # Attach the other feature's score to its ID.          # Attach the other feature's score to its ID.
1679          $retVal{$otherFeatureID} = $score;          $retVal{$otherFeatureID} = $score;
1680          $found = 1;          $found = 1;
# Line 1804  Line 1807 
1807      my ($self, $peg1, $peg2) = @_;      my ($self, $peg1, $peg2) = @_;
1808      # Declare the return values. We'll start with the coupling ID and undefine the      # Declare the return values. We'll start with the coupling ID and undefine the
1809      # flag and score until we have more information.      # flag and score until we have more information.
1810      my ($retVal, $inverted, $score) = (CouplingID($peg1, $peg2), undef, undef);      my ($retVal, $inverted, $score) = ($self->CouplingID($peg1, $peg2), undef, undef);
1811      # Find the coupling data.      # Find the coupling data.
1812      my @pegs = $self->GetAll(['Coupling', 'ParticipatesInCoupling'],      my @pegs = $self->GetAll(['Coupling', 'ParticipatesInCoupling'],
1813                                   "Coupling(id) = ? ORDER BY ParticipatesInCoupling(pos)",                                   "Coupling(id) = ? ORDER BY ParticipatesInCoupling(pos)",
# Line 1825  Line 1828 
1828      return ($retVal, $inverted, $score);      return ($retVal, $inverted, $score);
1829  }  }
1830    
1831    =head3 GetSynonymGroup
1832    
1833    C<< my $id = $sprout->GetSynonymGroup($fid); >>
1834    
1835    Return the synonym group name for the specified feature.
1836    
1837    =over 4
1838    
1839    =item fid
1840    
1841    ID of the feature whose synonym group is desired.
1842    
1843    =item RETURN
1844    
1845    The name of the synonym group to which the feature belongs. If the feature does
1846    not belong to a synonym group, the feature ID itself is returned.
1847    
1848    =back
1849    
1850    =cut
1851    
1852    sub GetSynonymGroup {
1853        # Get the parameters.
1854        my ($self, $fid) = @_;
1855        # Declare the return variable.
1856        my $retVal;
1857        # Find the synonym group.
1858        my @groups = $self->GetFlat(['IsSynonymGroupFor'], "IsSynonymGroupFor(to-link) = ?",
1859                                       [$fid], 'IsSynonymGroupFor(from-link)');
1860        # Check to see if we found anything.
1861        if (@groups) {
1862            $retVal = $groups[0];
1863        } else {
1864            $retVal = $fid;
1865        }
1866        # Return the result.
1867        return $retVal;
1868    }
1869    
1870    =head3 GetBoundaries
1871    
1872    C<< my ($contig, $beg, $end) = $sprout->GetBoundaries(@locList); >>
1873    
1874    Determine the begin and end boundaries for the locations in a list. All of the
1875    locations must belong to the same contig and have mostly the same direction in
1876    order for this method to produce a meaningful result. The resulting
1877    begin/end pair will contain all of the bases in any of the locations.
1878    
1879    =over 4
1880    
1881    =item locList
1882    
1883    List of locations to process.
1884    
1885    =item RETURN
1886    
1887    Returns a 3-tuple consisting of the contig ID, the beginning boundary,
1888    and the ending boundary. The beginning boundary will be left of the
1889    end for mostly-forward locations and right of the end for mostly-backward
1890    locations.
1891    
1892    =back
1893    
1894    =cut
1895    
1896    sub GetBoundaries {
1897        # Get the parameters.
1898        my ($self, @locList) = @_;
1899        # Set up the counters used to determine the most popular direction.
1900        my %counts = ( '+' => 0, '-' => 0 );
1901        # Get the last location and parse it.
1902        my $locObject = BasicLocation->new(pop @locList);
1903        # Prime the loop with its data.
1904        my ($contig, $beg, $end) = ($locObject->Contig, $locObject->Left, $locObject->Right);
1905        # Count its direction.
1906        $counts{$locObject->Dir}++;
1907        # Loop through the remaining locations. Note that in most situations, this loop
1908        # will not iterate at all, because most of the time we will be dealing with a
1909        # singleton list.
1910        for my $loc (@locList) {
1911            # Create a location object.
1912            my $locObject = BasicLocation->new($loc);
1913            # Count the direction.
1914            $counts{$locObject->Dir}++;
1915            # Get the left end and the right end.
1916            my $left = $locObject->Left;
1917            my $right = $locObject->Right;
1918            # Merge them into the return variables.
1919            if ($left < $beg) {
1920                $beg = $left;
1921            }
1922            if ($right > $end) {
1923                $end = $right;
1924            }
1925        }
1926        # If the most common direction is reverse, flip the begin and end markers.
1927        if ($counts{'-'} > $counts{'+'}) {
1928            ($beg, $end) = ($end, $beg);
1929        }
1930        # Return the result.
1931        return ($contig, $beg, $end);
1932    }
1933    
1934  =head3 CouplingID  =head3 CouplingID
1935    
1936  C<< my $couplingID = Sprout::CouplingID($peg1, $peg2); >>  C<< my $couplingID = $sprout->CouplingID($peg1, $peg2); >>
1937    
1938  Return the coupling ID for a pair of feature IDs.  Return the coupling ID for a pair of feature IDs.
1939    
# Line 1860  Line 1966 
1966  =cut  =cut
1967  #: Return Type $;  #: Return Type $;
1968  sub CouplingID {  sub CouplingID {
1969      return join " ", sort @_;      my ($self, @pegs) = @_;
1970        return $self->DigestKey(join " ", sort @pegs);
1971  }  }
1972    
1973  =head3 ReadFasta  =head3 ReadFasta

Legend:
Removed from v.1.71  
changed lines
  Added in v.1.77

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3