[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.79, Mon Jul 31 20:07:06 2006 UTC revision 1.82, Sat Sep 2 07:00:54 2006 UTC
# Line 2867  Line 2867 
2867      return @retVal;      return @retVal;
2868  }  }
2869    
2870    =head3 GenomeSubsystemData
2871    
2872    C<< my %featureData = $sprout->GenomeSubsystemData($genomeID); >>
2873    
2874    Return a hash mapping genome features to their subsystem roles.
2875    
2876    =over 4
2877    
2878    =item genomeID
2879    
2880    ID of the genome whose subsystem feature map is desired.
2881    
2882    =item RETURN
2883    
2884    Returns a hash mapping each feature of the genome to a list of 2-tuples. Eacb
2885    2-tuple contains a subsystem name followed by a role ID.
2886    
2887    =back
2888    
2889    =cut
2890    
2891    sub GenomeSubsystemData {
2892        # Get the parameters.
2893        my ($self, $genomeID) = @_;
2894        # Declare the return variable.
2895        my %retVal = ();
2896        # Get a list of the genome features that participate in subsystems. For each
2897        # feature we get its spreadsheet cells and the corresponding roles.
2898        my @roleData = $self->GetAll(['HasFeature', 'ContainsFeature', 'IsRoleOf'],
2899                                 "HasFeature(from-link) = ?", [$genomeID],
2900                                 ['HasFeature(to-link)', 'IsRoleOf(to-link)', 'IsRoleOf(from-link)']);
2901        # Now we get a list of the spreadsheet cells and their associated subsystems. Subsystems
2902        # with an unknown variant code (-1) are skipped. Note the genome ID is at both ends of the
2903        # list. We use it at the beginning to get all the spreadsheet cells for the genome and
2904        # again at the end to filter out participation in subsystems with a negative variant code.
2905        my @cellData = $self->GetAll(['IsGenomeOf', 'HasSSCell', 'ParticipatesIn'],
2906                                     "IsGenomeOf(from-link) = ? AND ParticipatesIn(variant-code) >= 0 AND ParticipatesIn(from-link) = ?",
2907                                     [$genomeID, $genomeID], ['HasSSCell(to-link)', 'HasSSCell(from-link)']);
2908        # Now "@roleData" lists the spreadsheet cell and role for each of the genome's features.
2909        # "@cellData" lists the subsystem name for each of the genome's spreadsheet cells. We
2910        # link these two lists together to create the result. First, we want a hash mapping
2911        # spreadsheet cells to subsystem names.
2912        my %subHash = map { $_->[0] => $_->[1] } @cellData;
2913        # We loop through @cellData to build the hash.
2914        for my $roleEntry (@roleData) {
2915            # Get the data for this feature and cell.
2916            my ($fid, $cellID, $role) = @{$roleEntry};
2917            # Check for a subsystem name.
2918            my $subsys = $subHash{$cellID};
2919            if ($subsys) {
2920                # Insure this feature has an entry in the return hash.
2921                if (! exists $retVal{$fid}) { $retVal{$fid} = []; }
2922                # Merge in this new data.
2923                push @{$retVal{$fid}}, [$subsys, $role];
2924            }
2925        }
2926        # Return the result.
2927        return %retVal;
2928    }
2929    
2930  =head3 RelatedFeatures  =head3 RelatedFeatures
2931    
2932  C<< my @relatedList = $sprout->RelatedFeatures($featureID, $function, $userID); >>  C<< my @relatedList = $sprout->RelatedFeatures($featureID, $function, $userID); >>
# Line 3340  Line 3400 
3400      return $retVal;      return $retVal;
3401  }  }
3402    
3403    =head3 Fix
3404    
3405    C<< my %fixedHash = Sprout::Fix(%groupHash); >>
3406    
3407    Prepare a genome group hash (like that returned by L</GetGroups> for processing.
3408    Groups with the same primary name will be combined. The primary name is the
3409    first capitalized word in the group name.
3410    
3411    =over 4
3412    
3413    =item groupHash
3414    
3415    Hash to be fixed up.
3416    
3417    =item RETURN
3418    
3419    Returns a fixed-up version of the hash.
3420    
3421    =back
3422    
3423    =cut
3424    
3425    sub Fix {
3426        # Get the parameters.
3427        my (%groupHash) = @_;
3428        # Create the result hash.
3429        my %retVal = ();
3430        # Copy over the genomes.
3431        for my $groupID (keys %groupHash) {
3432            # Make a safety copy of the group ID.
3433            my $realGroupID = $groupID;
3434            # Yank the primary name.
3435            if ($groupID =~ /([A-Z]\w+)/) {
3436                $realGroupID = $1;
3437            }
3438            # Append this group's genomes into the result hash.
3439            Tracer::AddToListMap(\%retVal, $realGroupID, @{$groupHash{$groupID}});
3440        }
3441        # Return the result hash.
3442        return %retVal;
3443    }
3444    
3445  =head2 Internal Utility Methods  =head2 Internal Utility Methods
3446    
3447  =head3 ParseAssignment  =head3 ParseAssignment
# Line 3396  Line 3498 
3498      }      }
3499      # If we have an assignment, we need to clean the function text. There may be      # If we have an assignment, we need to clean the function text. There may be
3500      # extra junk at the end added as a note from the user.      # extra junk at the end added as a note from the user.
3501      if (@retVal) {      if (defined( $retVal[1] )) {
3502          $retVal[1] =~ s/(\t\S)?\s*$//;          $retVal[1] =~ s/(\t\S)?\s*$//;
3503      }      }
3504      # Return the result list.      # Return the result list.

Legend:
Removed from v.1.79  
changed lines
  Added in v.1.82

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3