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

Diff of /Sprout/ModelSaplingLoader.pm

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

revision 1.11, Fri Jun 18 20:05:33 2010 UTC revision 1.13, Mon Jan 24 18:13:56 2011 UTC
# Line 16  Line 16 
16  # Genomes at veronika@thefig.info or download a copy from  # Genomes at veronika@thefig.info or download a copy from
17  # http://www.theseed.org/LICENSE.TXT.  # http://www.theseed.org/LICENSE.TXT.
18  #  #
19  use FIGMODEL;  #use FIGMODEL;
20    
21  package ModelSaplingLoader;  package ModelSaplingLoader;
22      use strict;      use strict;
# Line 88  Line 88 
88      # Get the source object.      # Get the source object.
89      my $fig = $self->source();      my $fig = $self->source();
90      # Is this the global section?      # Is this the global section?
91      my $model = new FIGMODEL;      #my $model = new FIGMODEL;
92      if ($self->global()) {      if ($self->global()) {
         #Loading the model entities and relationships  
         $self->LoadModels($model);  
         #Loading structural cues first  
         $self->LoadStructuralCues($model);  
93          #Loading the compound entities and relationships          #Loading the compound entities and relationships
94          $self->LoadCompounds($model);      #    $self->LoadCompounds($model);
95          #Loading the reaction, and EC number entities and relationships          #Loading the reaction, and EC number entities and relationships
96          $self->LoadReactions($model);      #    $self->LoadReactions($model);
         #Loading the role set entity and relationships  
         $self->LoadRoleSets($model);  
97      } else {      } else {
98          # Get the section ID.          # Get the section ID.
99          my $genomeID = $self->section();          my $genomeID = $self->section();
# Line 107  Line 101 
101      }      }
102  }  }
103    
 #This function loads all of the StructuralCue entities  
 sub LoadStructuralCues {  
     my ($self,$model) = @_;  
   
     #Getting the list of structural cue filenames  
     my @CuesList = glob($model->{"Reaction database directory"}->[0]."cues/");  
     my %CuePriorities;  
     #TODO:NEED TO POPULATE THE PRIORITIES HASH  
     foreach my $CueFile (@CuesList) {  
         my $Object = FIGMODELObject->load($CueFile,"\t");  
         if (defined($Object) && defined($Object->{"NAME"}->[0])) {  
             my @LoadingArray = ($Object->{"NAME"}->[0],-1,0,0,"","","","");  
             if (defined($CuePriorities{$Object->{"NAME"}->[0]})) {  
                 $LoadingArray[1] = $CuePriorities{$Object->{"NAME"}->[0]};  
             }  
             if (defined($Object->{"SMALL_MOLECULE"}->[0])) {  
                 $LoadingArray[2] = $Object->{"SMALL_MOLECULE"}->[0];  
             }  
             if (defined($Object->{"CHARGE"}->[0])) {  
                 $LoadingArray[3] = $Object->{"CHARGE"}->[0];  
             }  
             if (defined($Object->{"FORMULA"}->[0])) {  
                 $LoadingArray[4] = $Object->{"FORMULA"}->[0];  
             }  
             if (defined($Object->{"ENERGY"}->[0])) {  
                 $LoadingArray[5] = $Object->{"ENERGY"}->[0];  
             }  
             if (defined($Object->{"ERROR"}->[0])) {  
                 $LoadingArray[6] = $Object->{"ERROR"}->[0];  
             }  
             if (defined($Object->{"STRUCTURAL_CUES"}->[0])) {  
                 $LoadingArray[7] = join(";",@{$Object->{"STRUCTURAL_CUES"}});  
             }  
             $self->PutE(StructuralCue => $LoadingArray[0], priority => $LoadingArray[1], smallMolecule => $LoadingArray[2], charge => $LoadingArray[3], formula => $LoadingArray[4],deltaG => $LoadingArray[5], deltaGerr => $LoadingArray[6], subgroups => $LoadingArray[7]);  
         }  
     }  
 }  
   
104  sub LoadCompounds {  sub LoadCompounds {
105      my ($self,$model) = @_;      my ($self,$model) = @_;
106    
# Line 338  Line 294 
294      }      }
295  }  }
296    
 sub LoadRoleSets {  
     my ($self,$model) = @_;  
     my $sapling =$self->db();  
     my $RoleMappings = $model->database()->GetDBTable("CURATED ROLE MAPPINGS");  
     my $NewSet;  
     my $SetHash;  
     my $LastComplex = -1;  
     my $LastReaction = "";  
     my $LastRole = "";  
     for (my $i=0; $i < $RoleMappings->size(); $i++) {  
         my $Row = $RoleMappings->get_row($i);  
         if (defined($Row) && defined($Row->{"REACTION"}->[0]) && defined($Row->{"ROLE"}->[0]) && defined($Row->{"COMPLEX"}->[0]) && defined($Row->{"MASTER"}->[0])) {  
             if ($Row->{"REACTION"}->[0] ne $LastReaction || $LastComplex ne $Row->{"COMPLEX"}->[0]) {  
                 if (defined($NewSet->{"ROLES"}) && defined($NewSet->{"REACTIONS"})) {  
                     my @RoleList = sort(keys(%{$NewSet->{"ROLES"}}));  
                     my @ReactionList = keys(%{$NewSet->{"REACTIONS"}});  
                     foreach my $Reaction (@ReactionList) {  
                         $SetHash->{join("+",@RoleList)}->{"REACTIONS"}->{$Reaction}->{"MASTER"}->[0] = $NewSet->{"REACTIONS"}->{$Reaction}->{"MASTER"}->[0];  
                         if (defined($NewSet->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"})) {  
                             foreach my $Subsystem (@{$NewSet->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"}}) {  
                                 if (defined($SetHash->{join("+",@RoleList)}->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"})) {  
                                     foreach my $OtherSubsystem (@{$SetHash->{join("+",@RoleList)}->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"}}) {  
                                         if ($Subsystem eq $OtherSubsystem) {  
                                             $Subsystem = "";  
                                             last;  
                                         }  
                                     }  
                                 }  
                                 if ($Subsystem ne "") {  
                                     push(@{$SetHash->{join("+",@RoleList)}->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"}},$Subsystem);  
                                 }  
                             }  
                         }  
                     }  
                     foreach my $Role (@RoleList) {  
                         $SetHash->{join("+",@RoleList)}->{"ROLES"}->{$Role} = 1;  
                     }  
                 }  
                 $NewSet = {};  
             }  
             $NewSet->{"ROLES"}->{$Row->{"ROLE"}->[0]} = 1;  
             $NewSet->{"REACTIONS"}->{$Row->{"REACTION"}->[0]}->{"MASTER"}->[0] = $Row->{"MASTER"}->[0];  
             if (defined($Row->{"SUBSYSTEM"}->[0])) {  
                 push(@{$NewSet->{"REACTIONS"}->{$Row->{"REACTION"}->[0]}->{"SUBSYSTEMS"}},$Row->{"SUBSYSTEM"}->[0]);  
             }  
             $LastRole = $Row->{"ROLE"}->[0];  
             $LastReaction = $Row->{"REACTION"}->[0];  
             $LastComplex = $Row->{"COMPLEX"}->[0];  
         }  
     }  
   
     my @RoleSets = keys(%{$SetHash});  
     foreach my $RoleSet (@RoleSets) {  
         my $Digested = $sapling->DigestKey($RoleSet);  
         $self->PutE(RoleSet => $Digested, source => "NONE");  
         my @ReactionList = keys(%{$SetHash->{$RoleSet}->{"REACTIONS"}});  
         foreach my $Reaction (@ReactionList) {  
             $self->PutR(IsTriggeredBy => $Reaction,$Digested, source => "NONE",master => ($SetHash->{$RoleSet}->{"REACTIONS"}->{$Reaction}->{"MASTER"}->[0] ? 1 : 0),subsystem => join(";",@{$SetHash->{$RoleSet}->{"REACTIONS"}->{$Reaction}->{"SUBSYSTEMS"}}));  
         }  
         my @RoleList = keys(%{$SetHash->{$RoleSet}->{"ROLES"}});  
         foreach my $Role (@RoleList) {  
             $self->PutR(IsCombinationOf => $Digested,$Role, local => 0);  
         }  
     }  
 }  
   
 sub LoadModels {  
     my ($self,$model) = @_;  
     my $sapling = $self->db();  
     ## TRS: Get hash of valid genome IDs.  
     my $genomeHash = $sapling->GenomeHash();  
     my $ModelList = $model->database()->GetDBTable("MODELS");  
     my $ModelStats = $model->database()->GetDBTable("MODEL STATS");  
     for (my $i=0; $i < $ModelList->size(); $i++) {  
         my $ListRow = $ModelList->get_row($i);  
         my $Row = $ModelStats->get_row_by_key($ListRow->{id}->[0], "Model ID");  
         if (defined($Row) && defined($Row->{"Model ID"}->[0])) {  
             my @LoadingArray = ($Row->{"Model ID"}->[0],"","",0,0,0,"",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"",0,0,"master",0,-1,"");  
             if (defined($Row->{"Genome ID"}->[0]) && $genomeHash->{$Row->{"Genome ID"}->[0]}) {  
                 if (defined($Row->{"Organism name"}->[0])) {  
                     $LoadingArray[1] = $Row->{"Organism name"}->[0];  
                 }  
                 if (defined($Row->{"Source"}->[0])) {  
                     $LoadingArray[2] = $Row->{"Source"}->[0];  
                 }  
                 if (defined($Row->{"Total genes"}->[0])) {  
                     $LoadingArray[3] = $Row->{"Total genes"}->[0];  
                 }  
                 if (defined($Row->{"Gram positive genes"}->[0])) {  
                     $LoadingArray[4] = $Row->{"Gram positive genes"}->[0];  
                 }  
                 if (defined($Row->{"Gram negative genes"}->[0])) {  
                     $LoadingArray[5] = $Row->{"Gram negative genes"}->[0];  
                 }  
                 if (defined($Row->{"Class"}->[0])) {  
                     $LoadingArray[6] = $Row->{"Class"}->[0];  
                 }  
                 if (defined($Row->{"Genes with functions"}->[0])) {  
                     $LoadingArray[7] = $Row->{"Genes with functions"}->[0];  
                 }  
                 if (defined($Row->{"Genes with reactions"}->[0])) {  
                     $LoadingArray[8] = $Row->{"Genes with reactions"}->[0];  
                 }  
                 if (defined($Row->{"Subsystem genes"}->[0])) {  
                     $LoadingArray[9] = $Row->{"Subsystem genes"}->[0];  
                 }  
                 if (defined($Row->{"Subsystem genes with reactions"}->[0])) {  
                     $LoadingArray[10] = $Row->{"Subsystem genes with reactions"}->[0];  
                 }  
                 if (defined($Row->{"Nonsubsystem genes"}->[0])) {  
                     $LoadingArray[11] = $Row->{"Nonsubsystem genes"}->[0];  
                 }  
                 if (defined($Row->{"Nonsubsystem genes with reactions"}->[0])) {  
                     $LoadingArray[12] = $Row->{"Nonsubsystem genes with reactions"}->[0];  
                 }  
                 if (defined($Row->{"Number of reactions"}->[0])) {  
                     $LoadingArray[13] = $Row->{"Number of reactions"}->[0];  
                 }  
                 if (defined($Row->{"Transport reaction"}->[0])) {  
                     $LoadingArray[14] = $Row->{"Transport reaction"}->[0];  
                 }  
                 if (defined($Row->{"Gap filling reactions"}->[0])) {  
                     $LoadingArray[15] = $Row->{"Gap filling reactions"}->[0];  
                 }  
                 if (defined($Row->{"Gap filling time"}->[0])) {  
                     $LoadingArray[16] = $Row->{"Gap filling time"}->[0];  
                 }  
                 if (defined($Row->{"Gap filling objective"}->[0])) {  
                     $LoadingArray[17] = $Row->{"Gap filling objective"}->[0];  
                 }  
                 if (defined($Row->{"Gap filling minimal objective"}->[0])) {  
                     $LoadingArray[18] = $Row->{"Gap filling minimal objective"}->[0];  
                 }  
                 if (defined($Row->{"Build date"}->[0])) {  
                     $LoadingArray[19] = FixDate($Row->{"Build date"}->[0]);  
                 }  
                 if (defined($Row->{"Gap fill date"}->[0])) {  
                     $LoadingArray[20] = FixDate($Row->{"Gap fill date"}->[0]);  
                 }  
                 if (defined($Row->{"Version"}->[0])) {  
                     $LoadingArray[21] = $Row->{"Version"}->[0];  
                 }  
                 if (defined($Row->{"Gap fill version"}->[0])) {  
                     $LoadingArray[22] = $Row->{"Gap fill version"}->[0];  
                 }  
                 $LoadingArray[26] = $ListRow->{"owner"}->[0];  
                 $LoadingArray[27] = $ListRow->{"date"}->[0];  
                 $LoadingArray[28] = $ListRow->{"status"}->[0];  
                 $LoadingArray[29] = $ListRow->{"message"}->[0];  
                 if ($Row->{"Model ID"}->[0] =~ m/Core\d+\.\d+V\d+\.\d+/) {  
                     $LoadingArray[25] = 1;  
                 } elsif (defined($ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID"))) {  
                     if (defined($ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID")->{"DIRECTORY"}->[0])) {  
                         $LoadingArray[23] = $ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID")->{"DIRECTORY"}->[0];  
                     }  
                     if (defined($ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID")->{"JOB ID"}->[0]) && $ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID")->{"JOB ID"}->[0] ne "NONE") {  
                         $LoadingArray[24] = $ModelList->get_row_by_key($Row->{"Model ID"}->[0],"MODEL ID")->{"JOB ID"}->[0];  
                     }  
                 }  
                 for my $j (3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,21,22,24,25,27,28) {  
                     $LoadingArray[$j] = 0 if ($LoadingArray[$j] =~ /[a-z]/i);  
                 }  
                 $self->PutE(Model => $LoadingArray[0], organismName => $LoadingArray[1], source => $LoadingArray[2], totalGenes => $LoadingArray[3], gramPositiveGenes => $LoadingArray[4],gramNegativeGenes => $LoadingArray[5], class => $LoadingArray[6], genesWithFunction => $LoadingArray[7], genesWithReactions => $LoadingArray[8], subsystemGenes => $LoadingArray[9], subsystemGenesWithReactions => $LoadingArray[10], nonsubsystemGenes => $LoadingArray[11], nonsubsystemGenesWithReactions => $LoadingArray[12], numberOfReactions => $LoadingArray[13], numberOfTransporters => $LoadingArray[14], gapFillingReactions => $LoadingArray[15], gapFillingTime => $LoadingArray[16], gapFillingObjective => $LoadingArray[17], gapFillingMinimalObjective => $LoadingArray[18], buildDate => $LoadingArray[19], gapFillDate => $LoadingArray[20], version => $LoadingArray[21], gapFillVersion => $LoadingArray[22], directory => $LoadingArray[23], jobid => $LoadingArray[24], obsolete => $LoadingArray[25], owner => $LoadingArray[26], modificationTime => $LoadingArray[27], status => $LoadingArray[28], message => $LoadingArray[29]);  
                 # Get the list of users.  
                 my $userList = $ListRow->{"users"};  
                 if (defined $userList) {  
                     for my $user (@$userList) {  
                         $self->PutE(ModelUser => $LoadingArray[0], users => $user);  
                     }  
                 }  
                 #Adding the relationship between model and genome  
                 if (defined($Row->{"Genome ID"}->[0])) {  
                     $self->PutR(IsModeledBy => $Row->{"Genome ID"}->[0],$LoadingArray[0]);  
                 }  
                 #If the model is not obsolete, we add the relationships between model and reaction and featureset  
                 if ($LoadingArray[25] == 0) {  
                     #Loading the model from file  
                     my $ModelTable = $model->database()->GetDBModel($LoadingArray[0]);  
                     if (! defined $ModelTable) {  
                         $self->Add(missingModelTable => 1);  
                     } else {  
                         for (my $j=0; $j < $ModelTable->size(); $j++) {  
                             my $RxnRow = $ModelTable->get_row($j);  
                             if (defined($RxnRow) && defined($RxnRow->{"LOAD"}->[0])) {  
                                 my @SubLoadingArray = ("R","c","NONE",10,"V","NONE","UNKNOWN");  
                                 if (defined($RxnRow->{"DIRECTIONALITY"}->[0])) {  
                                     my $code = $RxnRow->{"DIRECTIONALITY"}->[0];  
                                     if ($code eq '<=>') {  
                                         $SubLoadingArray[0] = 'R';  
                                     } elsif ($code eq '<=') {  
                                         $SubLoadingArray[0] = 'B';  
                                     } elsif ($code eq '=>') {  
                                         $SubLoadingArray[0] = 'F';  
                                     }  
                                 }  
                                 if (defined($RxnRow->{"COMPARTMENT"}->[0])) {  
                                     $SubLoadingArray[1] = $RxnRow->{"COMPARTMENT"}->[0];  
                                 }  
                                 if (defined($RxnRow->{"SUBSYSTEM"})) {  
                                     $SubLoadingArray[2] = join(";",@{$RxnRow->{"SUBSYSTEM"}});  
                                 }  
                                 if (defined($RxnRow->{"CONFIDENCE"}->[0])) {  
                                     $SubLoadingArray[3] = $RxnRow->{"CONFIDENCE"}->[0];  
                                     if ($SubLoadingArray[3] eq 'NONE') {  
                                         $SubLoadingArray[3] = 10;  
                                     }  
                                 }  
                                 if (defined($RxnRow->{"NOTES"})) {  
                                     $SubLoadingArray[5] = join(";",@{$RxnRow->{"NOTES"}});  
                                 }  
                                 if (defined($RxnRow->{"ASSOCIATED PEG"})) {  
                                     #Adding the role set entities  
                                     foreach my $FeatureSet (@{$RxnRow->{"ASSOCIATED PEG"}}) {  
                                         if ($FeatureSet =~ m/peg\.\d+/) {  
                                             my $DigestedKey = $sapling->DigestKey($FeatureSet);  
                                             $self->PutE(FeatureSet => $DigestedKey, source => "NONE");  
                                             #Adding the relationship between the reaction and roleset  
                                             $self->PutR(IsStimulatedBy => $RxnRow->{"LOAD"}->[0],$DigestedKey);  
                                             #Adding the relationship between the model and featureset  
                                             #$self->PutR(Encompasses => $LoadingArray[0],$DigestedKey);  
                                             #Adding the relationship between FeatureSet and feature  
                                             my @PegArray = split(/\+/,$FeatureSet);  
                                             foreach my $Feature (@PegArray) {  
                                                 if ($Feature =~ m/(peg\.\d+)/) {  
                                                     $self->PutR(IsSetOf => $DigestedKey,"fig|".$Row->{"Genome ID"}->[0].".".$1);  
                                                 }  
                                             }  
                                         }  
                                     }  
                                     $SubLoadingArray[6] = join(";",@{$RxnRow->{"ASSOCIATED PEG"}});  
                                 }  
                                 $self->PutR(IsRequiredBy => $RxnRow->{"LOAD"}->[0],$LoadingArray[0], direction => $SubLoadingArray[0], compartment => $SubLoadingArray[1], confidence => $SubLoadingArray[3], class => $SubLoadingArray[4], notes => $SubLoadingArray[5], dependency => $SubLoadingArray[6]);  
                             }  
                         }  
                     }  
                     #Clearing the model data from memmory  
                     undef $ModelTable;  
                     $model->database()->ClearDBModel($LoadingArray[0],"DELETE");  
                 }  
             }  
         }  
     }  
 }  
297    
298  sub FixDate {  sub FixDate {
299      my ($date) = @_;      my ($date) = @_;

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.13

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3