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

Diff of /Sprout/SproutLoad.pm

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

revision 1.68, Sun Sep 24 17:14:16 2006 UTC revision 1.73, Fri Oct 20 20:42:56 2006 UTC
# Line 163  Line 163 
163                  Confess("Invalid subsystem parameter in SproutLoad constructor.");                  Confess("Invalid subsystem parameter in SproutLoad constructor.");
164              }              }
165          }          }
166            # Go through the subsys hash again, creating the keyword list for each subsystem.
167            for my $subsystem (keys %subsystems) {
168                my $name = $subsystem;
169                $name =~ s/_/ /g;
170                my $classes = $fig->subsystem_classification($subsystem);
171                my @classList = map { " $_" } @{$classes};
172                $name .= join("", @classList);
173                $subsystems{$subsystem} = $name;
174            }
175      }      }
176      # Get the data directory from the Sprout object.      # Get the data directory from the Sprout object.
177      my ($directory) = $sprout->LoadInfo();      my ($directory) = $sprout->LoadInfo();
# Line 460  Line 469 
469      FeatureUpstream      FeatureUpstream
470      IsLocatedIn      IsLocatedIn
471      HasFeature      HasFeature
472        HasRoleInSubsystem
473    
474  =over 4  =over 4
475    
# Line 474  Line 484 
484  sub LoadFeatureData {  sub LoadFeatureData {
485      # Get this object instance.      # Get this object instance.
486      my ($self) = @_;      my ($self) = @_;
487      # Get the FIG object.      # Get the FIG and Sprout objects.
488      my $fig = $self->{fig};      my $fig = $self->{fig};
489        my $sprout = $self->{sprout};
490      # Get the table of genome IDs.      # Get the table of genome IDs.
491      my $genomeHash = $self->{genomes};      my $genomeHash = $self->{genomes};
492      # Create load objects for each of the tables we're loading.      # Create load objects for each of the tables we're loading.
# Line 485  Line 496 
496      my $loadFeatureLink = $self->_TableLoader('FeatureLink');      my $loadFeatureLink = $self->_TableLoader('FeatureLink');
497      my $loadFeatureTranslation = $self->_TableLoader('FeatureTranslation');      my $loadFeatureTranslation = $self->_TableLoader('FeatureTranslation');
498      my $loadFeatureUpstream = $self->_TableLoader('FeatureUpstream');      my $loadFeatureUpstream = $self->_TableLoader('FeatureUpstream');
499      my $loadHasFeature = $self->_TableLoader('HasFeature');      my $loadHasFeature = $self->_TableLoader('HasFeature', $self->PrimaryOnly);
500        my $loadHasRoleInSubsystem = $self->_TableLoader('HasRoleInSubsystem', $self->PrimaryOnly);
501        # Get the subsystem hash.
502        my $subHash = $self->{subsystems};
503      # Get the maximum sequence size. We need this later for splitting up the      # Get the maximum sequence size. We need this later for splitting up the
504      # locations.      # locations.
505      my $chunkSize = $self->{sprout}->MaxSegment();      my $chunkSize = $self->{sprout}->MaxSegment();
# Line 518  Line 532 
532                      $loadFeature->Add("featureIn");                      $loadFeature->Add("featureIn");
533                      # Get the functional assignment.                      # Get the functional assignment.
534                      my $assignment = $fig->function_of($featureID);                      my $assignment = $fig->function_of($featureID);
535                      # Create the feature record.                      # Begin building the keywords.
536                      $loadFeature->Put($featureID, 1, $type, $assignment);                      my $keywords = "$assignment $genomeID";
537                      # Link it to the parent genome.                      # Link this feature to the parent genome.
538                      $loadHasFeature->Put($genomeID, $featureID, $type);                      $loadHasFeature->Put($genomeID, $featureID, $type);
539                      # Create the aliases.                      # Create the aliases.
540                      for my $alias ($fig->feature_aliases($featureID)) {                      for my $alias ($fig->feature_aliases($featureID)) {
541                          $loadFeatureAlias->Put($featureID, $alias);                          $loadFeatureAlias->Put($featureID, $alias);
542                            $keywords .= " $alias";
543                      }                      }
544                      # Get the links.                      # Get the links.
545                      my @links = $fig->fid_links($featureID);                      my @links = $fig->fid_links($featureID);
# Line 544  Line 559 
559                              $loadFeatureUpstream->Put($featureID, $upstream);                              $loadFeatureUpstream->Put($featureID, $upstream);
560                          }                          }
561                      }                      }
562                        # Now we need to find the subsystems this feature participates in.
563                        # We also add the subsystems to the keyword list. Before we do that,
564                        # we must convert underscores to spaces and tack on the classifications.
565                        my @subsystems = $fig->peg_to_subsystems($featureID);
566                        for my $subsystem (@subsystems) {
567                            # Only proceed if we like this subsystem.
568                            if (exists $subHash->{$subsystem}) {
569                                # Store the has-role link.
570                                $loadHasRoleInSubsystem->Put($featureID, $subsystem, $genomeID, $type);
571                                # Save the subsystem's keyword data.
572                                my $subKeywords = $subHash->{$subsystem};
573                                $keywords .= " $subKeywords";
574                            }
575                        }
576                        # The final task is to add virulence and essentiality attributes.
577                        if ($fig->virulent($featureID)) {
578                            $keywords .= " virulent";
579                        }
580                        if ($fig->essential($featureID)) {
581                            $keywords .= " essential";
582                        }
583                        # Clean the keyword list.
584                        my $cleanWords = $sprout->CleanKeywords($keywords);
585                        # Create the feature record.
586                        $loadFeature->Put($featureID, 1, $type, $assignment, $cleanWords);
587                      # This part is the roughest. We need to relate the features to contig                      # This part is the roughest. We need to relate the features to contig
588                      # locations, and the locations must be split so that none of them exceed                      # locations, and the locations must be split so that none of them exceed
589                      # the maximum segment size. This simplifies the genes_in_region processing                      # the maximum segment size. This simplifies the genes_in_region processing
# Line 579  Line 619 
619      return $retVal;      return $retVal;
620  }  }
621    
 =head3 LoadBBHData  
   
 C<< my $stats = $spl->LoadBBHData(); >>  
   
 Load the bidirectional best hit data from FIG into Sprout.  
   
 Sprout does not store information on similarities. Instead, it has only the  
 bi-directional best hits. Even so, the BBH table is one of the largest in  
 the database.  
   
 The following relations are loaded by this method.  
   
     IsBidirectionalBestHitOf  
   
 =over 4  
   
 =item RETURNS  
   
 Returns a statistics object for the loads.  
   
 =back  
   
 =cut  
 #: Return Type $%;  
 sub LoadBBHData {  
     # Get this object instance.  
     my ($self) = @_;  
     # Get the FIG object.  
     my $fig = $self->{fig};  
     # Get the table of genome IDs.  
     my $genomeHash = $self->{genomes};  
     # Create load objects for each of the tables we're loading.  
     my $loadIsBidirectionalBestHitOf = $self->_TableLoader('IsBidirectionalBestHitOf');  
     if ($self->{options}->{loadOnly}) {  
         Trace("Loading from existing files.") if T(2);  
     } else {  
         Trace("Generating BBH data.") if T(2);  
         # Now we loop through the genomes, generating the data for each one.  
         for my $genomeID (sort keys %{$genomeHash}) {  
             $loadIsBidirectionalBestHitOf->Add("genomeIn");  
             Trace("Processing features for genome $genomeID.") if T(3);  
             # Get the feature list for this genome.  
             my $features = $fig->all_features_detailed($genomeID);  
             # Count the BBHs we find.  
             my $bbhCount = 0;  
             # Loop through the features.  
             for my $featureData (@{$features}) {  
                 # Split the tuple.  
                 my ($featureID, $locations, $aliases, $type) = @{$featureData};  
                 # Get the bi-directional best hits.  
                 my @bbhList = $fig->bbhs($featureID);  
                 for my $bbhEntry (@bbhList) {  
                     # Get the target feature ID and the score.  
                     my ($targetID, $score) = @{$bbhEntry};  
                     # Check the target feature's genome.  
                     my $targetGenomeID = $fig->genome_of($targetID);  
                     # Only proceed if it's one of our genomes.  
                     if ($genomeHash->{$targetGenomeID}) {  
                         $loadIsBidirectionalBestHitOf->Put($featureID, $targetID, $targetGenomeID,  
                                                            $score);  
                         $bbhCount++;  
                     }  
                 }  
             }  
             Trace("$bbhCount BBHs found for $genomeID.") if T(3);  
         }  
     }  
     # Finish the loads.  
     my $retVal = $self->_FinishAll();  
     return $retVal;  
 }  
   
622  =head3 LoadSubsystemData  =head3 LoadSubsystemData
623    
624  C<< my $stats = $spl->LoadSubsystemData(); >>  C<< my $stats = $spl->LoadSubsystemData(); >>
# Line 755  Line 723 
723                  my $curator = $sub->get_curator();                  my $curator = $sub->get_curator();
724                  my $notes = $sub->get_notes();                  my $notes = $sub->get_notes();
725                  $loadSubsystem->Put($subsysID, $curator, $notes);                  $loadSubsystem->Put($subsysID, $curator, $notes);
726                    # Now for the classification string. This comes back as a list
727                    # reference and we convert it to a space-delimited string.
728                  my $classList = $fig->subsystem_classification($subsysID);                  my $classList = $fig->subsystem_classification($subsysID);
729                  my @classes = @$classList;                  my $classString = join(" ", grep { $_ } @$classList);
730                  if (@classes) {                  $loadSubsystemClass->Put($subsysID, $classString);
                     for my $class (@classes) {  
                         $loadSubsystemClass->Put($subsysID, $class);  
                     }  
                 }  
731                  # Connect it to its roles. Each role is a column in the subsystem spreadsheet.                  # Connect it to its roles. Each role is a column in the subsystem spreadsheet.
732                  for (my $col = 0; defined($roleID = $sub->get_role($col)); $col++) {                  for (my $col = 0; defined($roleID = $sub->get_role($col)); $col++) {
733                      # Connect to this role.                      # Connect to this role.
# Line 978  Line 944 
944                  # Get all attributes for this feature. We do this one feature at a time                  # Get all attributes for this feature. We do this one feature at a time
945                  # to insure we do not get any genome attributes.                  # to insure we do not get any genome attributes.
946                  my @attributeList = $fig->get_attributes($fid, '', '', '');                  my @attributeList = $fig->get_attributes($fid, '', '', '');
947                    # Add essentiality and virulence attributes.
948                    if ($fig->essential($fid)) {
949                        push @attributeList, [$fid, 'essential', 1, ''];
950                    }
951                    if ($fig->virulent($fid)) {
952                        push @attributeList, [$fid, 'virulent', 1, ''];
953                    }
954                  if (scalar @attributeList) {                  if (scalar @attributeList) {
955                      $featureCount++;                      $featureCount++;
956                  }                  }
# Line 1572  Line 1545 
1545      return $retVal;      return $retVal;
1546  }  }
1547    
1548    
1549    
1550  =head2 Internal Utility Methods  =head2 Internal Utility Methods
1551    
1552  =head3 TableLoader  =head3 TableLoader

Legend:
Removed from v.1.68  
changed lines
  Added in v.1.73

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3