[Bio] / FigKernelPackages / FIGMODELmodel.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/FIGMODELmodel.pm

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

revision 1.13, Mon May 10 21:45:44 2010 UTC revision 1.15, Wed May 19 21:02:11 2010 UTC
# Line 28  Line 28 
28          }          }
29    
30          #Checking that the id exists          #Checking that the id exists
31          my $tbl = $self->figmodel()->database()->GetDBTable("MODELS");          my $modelHandle = $self->figmodel()->database()->get_object_manager("model");
32          if (!defined($tbl)) {          if (!defined($modelHandle)) {
33                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not load MODELS table. Check database!");                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not load MODELS table. Check database!");
34                  return undef;                  return undef;
35          }          }
36    
37          #If the id is a number, we get the model row by index          #If the id is a number, we get the model row by index
         my $index = $id;  
38          if ($id =~ m/^\d+$/) {          if ($id =~ m/^\d+$/) {
39                  $self->{_data} = $tbl->get_row($id);                  my $objects = $modelHandle->get_objects();
40          } else {                  $self->{_data} = $objects->[$id];
41                  $self->{_data} = $tbl->get_row_by_key($id,"id");                  $self->figmodel()->{_models}->{$id} = $self;
42                  if (!defined($self->{_data})) {          } else {
43                          if ($id =~ m/(.+)(V[^V]+)/) {                  my $objects = $modelHandle->get_objects({id => $id});
44                                  $self->{_data} = $tbl->get_row_by_key($1,"id");                  if (!defined($objects->[0]) && $id =~ m/(.+)(V[^V]+)/) {
45                                  if (!defined($self->{_data})) {                          $objects = $modelHandle->get_objects({id => $1});
46                            if (!defined($objects->[0])) {
47                                          $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");                                          $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");
48                                          return undef;                                          return undef;
49                                  }                                  }
50                                  $self->{_selectedversion} = $2;                                  $self->{_selectedversion} = $2;
51                          } else {                  } elsif (!defined($objects->[0])) {
52                                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");                                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");
53                                  return undef;                                  return undef;
54                          }                          }
55                  }                  $self->{_data} = $objects->[0];
                 $index = $tbl->row_index($self->{_data});  
56          }          }
57          if (!defined($self->{_data})) {          if (!defined($self->{_data})) {
58                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find specified id in database!");                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find specified id in database!");
59                  return undef;                  return undef;
60          }          }
         $self->{_index} = $index;  
61          $self->figmodel()->{_models}->{$self->id()} = $self;          $self->figmodel()->{_models}->{$self->id()} = $self;
62          $self->figmodel()->{_models}->{$self->index()} = $self;  
63          return $self;          return $self;
64  }  }
65    
# Line 118  Line 116 
116  =cut  =cut
117  sub fig {  sub fig {
118          my ($self) = @_;          my ($self) = @_;
   
119          if (!defined($self->{_fig}) && $self->source() !~ /^MGRAST/) {          if (!defined($self->{_fig}) && $self->source() !~ /^MGRAST/) {
120                  if ($self->source() =~ /^RAST/) {                  if ($self->source() =~ /^RAST/) {
121                          $self->{"_fig"} = $self->figmodel()->fig();#$self->genome());                          $self->{"_fig"} = $self->figmodel()->fig();#$self->genome());
# Line 126  Line 123 
123                          $self->{"_fig"} = $self->figmodel()->fig();                          $self->{"_fig"} = $self->figmodel()->fig();
124                  }                  }
125          }          }
   
126          return $self->{"_fig"};          return $self->{"_fig"};
127  }  }
128    
# Line 170  Line 166 
166  =cut  =cut
167  sub mgdata {  sub mgdata {
168          my ($self) = @_;          my ($self) = @_;
   
169          if (!defined($self->{_mgdata}) && $self->source() =~ /^MGRAST/) {          if (!defined($self->{_mgdata}) && $self->source() =~ /^MGRAST/) {
170                  require MGRAST;                  require MGRAST;
171                  $self->{_mgdata} = $self->figmodel()->mgrast()->Job->get_objects( { 'genome_id' => $self->genome() } )                  $self->{_mgdata} = $self->figmodel()->mgrast()->Job->get_objects( { 'genome_id' => $self->genome() } )
172          }          }
   
173          return $self->{_mgdata};          return $self->{_mgdata};
174  }  }
175    
# Line 187  Line 181 
181  =cut  =cut
182  sub id {  sub id {
183          my ($self) = @_;          my ($self) = @_;
184          return $self->{_data}->{id}->[0];          return $self->{_data}->id();
185  }  }
186    
187  =head3 owner  =head3 owner
# Line 198  Line 192 
192  =cut  =cut
193  sub owner {  sub owner {
194          my ($self) = @_;          my ($self) = @_;
195          return $self->{_data}->{owner}->[0];          return $self->{_data}->owner();
 }  
   
 =head3 index  
 Definition:  
         string = FIGMODELmodel->index();  
 Description:  
         Returns model index  
 =cut  
 sub index {  
         my ($self) = @_;  
         return $self->{_index};  
196  }  }
197    
198  =head3 name  =head3 name
# Line 228  Line 211 
211                          if (defined($self->mgdata())) {                          if (defined($self->mgdata())) {
212                                  $self->{_name} = $self->mgdata()->genome_name;                                  $self->{_name} = $self->mgdata()->genome_name;
213                          }                          }
                 } elsif (defined($self->stats())) {  
                         $self->{_name} = $self->stats()->{'Organism name'}->[0];  
214                  } elsif ($source !~ /^RAST/) {                  } elsif ($source !~ /^RAST/) {
215                          $self->{_name} = $self->fig()->orgname_of_orgid($self->genome());                          $self->{_name} = $self->fig()->orgname_of_orgid($self->genome());
216                    } else {
217                            $self->{_name} = $self->figmodel()->get_genome_stats($self->genome())->{NAME}->[0];
218                  }                  }
219          }          }
220    
221          return $self->{_name};          return $self->{_name};
222  }  }
223    
 =head3 stats  
 Definition:  
         string = FIGMODELmodel->stats();  
 Description:  
         Returns model stats  
 =cut  
 sub stats {  
         my ($self) = @_;  
   
         if (!defined($self->{_stats})) {  
                 $self->{_stats} = $self->figmodel()->database()->GetDBTable("MODEL STATS")->get_row_by_key($self->id(),"Model ID");  
         }  
         return $self->{_stats};  
 }  
   
224  =head3 get_reaction_class  =head3 get_reaction_class
225  Definition:  Definition:
226          string = FIGMODELmodel->get_reaction_class(string::reaction ID);          string = FIGMODELmodel->get_reaction_class(string::reaction ID);
# Line 441  Line 409 
409          return $self->{"_".$name};          return $self->{"_".$name};
410  }  }
411    
412    =head3 create_table_prototype
413    
414    Definition:
415            FIGMODELTable::table = FIGMODELmodel->create_table_prototype(string::table);
416    Description:
417            Returns a empty FIGMODELTable with all the metadata associated with the input table name
418    
419    =cut
420    sub create_table_prototype {
421            my ($self,$TableName) = @_;
422    
423            #Checking if the table definition exists in the FIGMODELconfig file
424            if (!defined($self->figmodel()->config($TableName))) {
425                    $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:Definition not found for ".$TableName);
426                    return undef;
427            }
428            #Checking that this is a database table
429            if (!defined($self->config($TableName)->{tabletype}) || $self->config($TableName)->{tabletype}->[0] ne "ModelTable") {
430                    $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:".$TableName." is not a model table!");
431                    return undef;
432            }
433            if (!defined($self->config($TableName)->{delimiter})) {
434                    $self->config($TableName)->{delimiter}->[0] = ";";
435            }
436            if (!defined($self->config($TableName)->{itemdelimiter})) {
437                    $self->config($TableName)->{itemdelimiter}->[0] = "|";
438            }
439            my $prefix;
440            if (defined($self->config($TableName)->{prefix})) {
441                    $prefix = join("\n",@{$self->config($TableName)->{prefix}});
442            }
443            my $tbl = FIGMODELTable->new($self->config($TableName)->{columns},$self->directory().$self->config($TableName)->{filename_prefix}->[0]."-".$self->id().$self->selected_version().".txt",$self->config($TableName)->{hashcolumns},$self->config($TableName)->{delimiter}->[0],$self->config($TableName)->{itemdelimiter}->[0],$prefix);
444            return $tbl;
445    }
446    
447  =head3 get_reaction_number  =head3 get_reaction_number
448  Definition:  Definition:
449          int = FIGMODELmodel->get_reaction_number();          int = FIGMODELmodel->get_reaction_number();
# Line 449  Line 452 
452  =cut  =cut
453  sub get_reaction_number {  sub get_reaction_number {
454          my ($self) = @_;          my ($self) = @_;
   
455          if (!defined($self->reaction_table())) {          if (!defined($self->reaction_table())) {
456                  return 0;                  return 0;
457          }          }
   
458          return $self->reaction_table()->size();          return $self->reaction_table()->size();
459  }  }
460    
# Line 698  Line 699 
699  =cut  =cut
700  sub genome {  sub genome {
701          my ($self) = @_;          my ($self) = @_;
702          return $self->{_data}->{genome}->[0];          return $self->{_data}->genome();
703  }  }
704    
705  =head3 source  =head3 source
# Line 709  Line 710 
710  =cut  =cut
711  sub source {  sub source {
712          my ($self) = @_;          my ($self) = @_;
713          return $self->{_data}->{source}->[0];          return $self->{_data}->source();
714  }  }
715    
716  =head3 rights  =head3 rights
# Line 720  Line 721 
721  =cut  =cut
722  sub rights {  sub rights {
723          my ($self,$username) = @_;          my ($self,$username) = @_;
   
724          if ($self->public()) {          if ($self->public()) {
725                  return 1;                  return 1;
726          }          }
# Line 728  Line 728 
728                  return 0;                  return 0;
729          }          }
730          if (!defined($self->{_userrights}->{$username})) {          if (!defined($self->{_userrights}->{$username})) {
731                  if (defined($self->{_data}->{master})) {                  $self->{_userrights}->{$self->{_data}->owner()} = 1;
732                          for (my $i=0; $i < @{$self->{_data}->{master}};$i++) {                  my @users = split(/\|/,$self->{_data}->users());
733                                  $self->{_userrights}->{$self->{_data}->{master}->[$i]} = 1;                  for (my $i=0; $i < @users;$i++) {
734                          }                          $self->{_userrights}->{$users[$i]} = 1;
                 }  
                 if (defined($self->{_data}->{users})) {  
                         for (my $i=0; $i < @{$self->{_data}->{users}};$i++) {  
                                 $self->{_userrights}->{$self->{_data}->{users}->[$i]} = 1;  
                         }  
735                  }                  }
736          }          }
737          return $self->{_userrights}->{$username};          return $self->{_userrights}->{$username};
# Line 750  Line 745 
745  =cut  =cut
746  sub public {  sub public {
747          my ($self) = @_;          my ($self) = @_;
748            if ($self->{_data}->users() eq "all") {
749          if (!defined($self->{_public})) {                  return 1;
                 $self->{_public} = 0;  
                 if (defined($self->{_data}->{users}->[0]) && $self->{_data}->{users}->[0] eq "all") {  
                         $self->{_public} = 1;  
                 }  
750          }          }
751          return $self->{_public};          return 0;
752  }  }
753    
754  =head3 directory  =head3 directory
# Line 805  Line 796 
796          return $self->directory().$self->id().$self->selected_version().".txt";          return $self->directory().$self->id().$self->selected_version().".txt";
797  }  }
798    
 =head3 set_metagenome_stats  
 Definition:  
         string = FIGMODELmodel->set_metagenome_stats();  
 Description:  
         Sets the values of many model stats for a metagenome  
 =cut  
 sub set_metagenome_stats {  
         my ($self) = @_;  
   
         $self->{_total_compounds} = 0;  
         if (defined($self->compound_table())) {  
                 $self->{_total_compounds} = $self->compound_table()->size();  
         }  
         $self->{_gene_reactions} = 0;  
         $self->{_gapfilling_reactions} = 0;  
         $self->{_model_genes} = 0;  
         $self->{_total_reactions} = 0;  
         if (defined($self->reaction_table())) {  
                 $self->{_total_reactions} = $self->reaction_table()->size();  
                 my $tbl = $self->reaction_table();  
                 my $spontaneous = 0;  
                 for (my $i=0; $i < $tbl->size(); $i++) {  
                         my $row = $tbl->get_row($i);  
                         if (!defined($row->{"ASSOCIATED PEG"}->[0]) || $row->{"ASSOCIATED PEG"}->[0] !~ m/peg/) {  
                                 if ($row->{"ASSOCIATED PEG"}->[0] =~ m/SPONTANEOUS/) {  
                                         $spontaneous++;  
                                 } else {  
                                         $self->{_gapfilling_reactions}++;  
                                 }  
                         } else {  
                                 for (my $j=0; $j < @{$row->{"CONFIDENCE"}}; $j++) {  
                                         my @ecores = split(/;/,$row->{"CONFIDENCE"}->[$j]);  
                                         $self->{_model_genes} += @ecores;  
                                 }  
                         }  
                 }  
                 $self->{_gene_reactions} = $tbl->size() - $spontaneous - $self->{_gapfilling_reactions};  
         }  
 }  
   
799  =head3 version  =head3 version
800  Definition:  Definition:
801          string = FIGMODELmodel->version();          string = FIGMODELmodel->version();
# Line 856  Line 807 
807    
808          if (!defined($self->{_version})) {          if (!defined($self->{_version})) {
809                  if (!defined($self->{_selectedversion})) {                  if (!defined($self->{_selectedversion})) {
810                          if (defined($self->stats())) {                          $self->{_version} = "V".$self->{_data}->version().".".$self->{_data}->autocompleteVersion();
                                 $self->{_version} = "V".$self->stats()->{"Version"}->[0].".".$self->stats()->{"Gap fill version"}->[0];  
                         }  
811                  } else {                  } else {
812                          $self->{_version} = $self->{_selectedversion};                          $self->{_version} = $self->{_selectedversion};
813                  }                  }
# Line 889  Line 838 
838  =cut  =cut
839  sub modification_time {  sub modification_time {
840          my ($self) = @_;          my ($self) = @_;
841          if (!defined($self->{_modification_time})) {          return $self->{_data}->modificationDate();
                 my $stats = $self->stats();  
                 if (defined($stats)) {  
                         $self->{_modification_time} = 0;  
                         if (defined($stats->{"Build date"}->[0]) && $self->{_modification_time} < $stats->{"Build date"}->[0]) {  
                                 $self->{_modification_time} = $stats->{"Build date"}->[0];  
                         } elsif (defined($stats->{"Gap fill date"}->[0]) && $self->{_modification_time} < $stats->{"Gap fill date"}->[0]) {  
                                 $self->{_modification_time} = $stats->{"Gap fill date"}->[0];  
                         }  
                 } else {  
                         $self->{_modification_time} = $self->{_data}->{date}->[0];  
                 }  
         }  
         return $self->{_modification_time};  
842  }  }
843    
844  =head3 gene_reactions  =head3 gene_reactions
# Line 913  Line 849 
849  =cut  =cut
850  sub gene_reactions {  sub gene_reactions {
851          my ($self) = @_;          my ($self) = @_;
852            return ($self->{_data}->reactions() - $self->{_data}->autoCompleteReactions() - $self->{_data}->spontaneousReactions() - $self->{_data}->gapFillReactions());
         if (!defined($self->{_gene_reactions})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->set_metagenome_stats();  
                 } elsif (defined($self->stats())) {  
                         $self->{_gene_reactions} = $self->total_reactions() - $self->gapfilling_reactions() - $self->stats()->{'Spontaneous'}->[0] - $self->stats()->{'Growmatch reactions'}->[0] - $self->stats()->{'Biolog gap filling reactions'}->[0];  
                 }  
         }  
         return $self->{_gene_reactions};  
853  }  }
854    
855  =head3 total_compounds  =head3 total_compounds
# Line 932  Line 860 
860  =cut  =cut
861  sub total_compounds {  sub total_compounds {
862          my ($self) = @_;          my ($self) = @_;
863            return $self->{_data}->compounds();
         if (!defined($self->{_total_compounds})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->set_metagenome_stats();  
                 } elsif (defined($self->stats())) {  
                         $self->{_total_compounds} = $self->stats()->{'Metabolites'}->[0];  
                 }  
         }  
         return $self->{_total_compounds};  
864  }  }
865    
866  =head3 gapfilling_reactions  =head3 gapfilling_reactions
# Line 951  Line 871 
871  =cut  =cut
872  sub gapfilling_reactions {  sub gapfilling_reactions {
873          my ($self) = @_;          my ($self) = @_;
874            return ($self->{_data}->autoCompleteReactions()+$self->{_data}->gapFillReactions());
         if (!defined($self->{_gapfilling_reactions})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->set_metagenome_stats();  
                 } elsif (defined($self->stats())) {  
                         $self->{_gapfilling_reactions} = $self->stats()->{'Gap filling reactions'}->[0];  
                 }  
         }  
         return $self->{_gapfilling_reactions};  
875  }  }
876    
877  =head3 total_reactions  =head3 total_reactions
# Line 970  Line 882 
882  =cut  =cut
883  sub total_reactions {  sub total_reactions {
884          my ($self) = @_;          my ($self) = @_;
885            return $self->{_data}->reactions();
         if (!defined($self->{_total_reactions})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->set_metagenome_stats();  
                 } elsif (defined($self->stats())) {  
                         $self->{_total_reactions} = $self->stats()->{'Number of reactions'}->[0];  
                 }  
         }  
         return $self->{_total_reactions};  
886  }  }
887    
888  =head3 model_genes  =head3 model_genes
# Line 989  Line 893 
893  =cut  =cut
894  sub model_genes {  sub model_genes {
895          my ($self) = @_;          my ($self) = @_;
896            return $self->{_data}->associatedGenes();
         if (!defined($self->{_model_genes})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->set_metagenome_stats();  
                 } elsif (defined($self->stats())) {  
                         $self->{_model_genes} = $self->stats()->{'Genes with reactions'}->[0];  
                 }  
         }  
         return $self->{_model_genes};  
897  }  }
898    
899  =head3 class  =head3 class
# Line 1008  Line 904 
904  =cut  =cut
905  sub class {  sub class {
906          my ($self) = @_;          my ($self) = @_;
907            return $self->{_data}->cellwalltype();
         if (!defined($self->{_class})) {  
                 if ($self->source() =~ /^MGRAST/) {  
                         $self->{_class} = "Other";  
                 } elsif (defined($self->stats())) {  
                         $self->{_class} = $self->stats()->{Class}->[0];  
                 }  
         }  
         return $self->{_class};  
908  }  }
909    
910  =head3 taxonomy  =head3 taxonomy
# Line 1084  Line 972 
972                          if (defined($self->mgdata())) {                          if (defined($self->mgdata())) {
973                                  $self->{_genome_genes} = $self->mgdata()->genome_contig_count;                                  $self->{_genome_genes} = $self->mgdata()->genome_contig_count;
974                          }                          }
975                  } elsif (defined($self->stats())) {                  } else {
976                          $self->{_genome_genes} = $self->stats()->{'Total genes'}->[0];                          $self->{_genome_genes} = $self->figmodel()->get_genome_stats($self->genome())->{"TOTAL GENES"}->[0];
977                  }                  }
978          }          }
979    
# Line 1126  Line 1014 
1014          return $self->figmodel()->success();          return $self->figmodel()->success();
1015  }  }
1016    
 =head3 save_obsolete_stats  
 Definition:  
         FIGMODELmodel->save_obsolete_stats();  
 Description:  
 =cut  
 sub save_obsolete_stats {  
         my ($self) = @_;  
   
         #checking if stats exists  
         my $stats = $self->stats();  
         if (defined($stats)) {  
                 $stats->{"Model ID"}->[0] = $self->id()."V".$stats->{"Version"}->[0].".".$stats->{"Gap fill version"}->[0];  
                 $self->figmodel()->database()->update_row("OBSOLETE MODEL STATS",$stats,"Model ID");  
                 $stats->{"Model ID"}->[0] = $self->id();  
         }  
 }  
   
1017  =head3 update_stats_for_gap_filling  =head3 update_stats_for_gap_filling
1018  Definition:  Definition:
1019          {string => [string]} = FIGMODELmodel->update_stats_for_gap_filling(int::gapfill time);          {string => [string]} = FIGMODELmodel->update_stats_for_gap_filling(int::gapfill time);
# Line 1150  Line 1021 
1021  =cut  =cut
1022  sub update_stats_for_gap_filling {  sub update_stats_for_gap_filling {
1023          my ($self,$gapfilltime) = @_;          my ($self,$gapfilltime) = @_;
1024            $self->{_data}->autoCompleteTime($gapfilltime);
1025          #preserving the stats for the now obselete model          $self->{_data}->autocompleteDate(time());
1026          $self->save_obsolete_stats();          $self->{_data}->modificationDate(time());
1027          my $stats = $self->update_model_stats(0);          my $version = $self->{_data}->autocompleteVersion();
1028          $stats->{"Gap filling time"}->[0] = $gapfilltime;          $self->{_data}->autocompleteVersion($version+1);
         $stats->{"Gap fill date"}->[0] = time();  
         if (!defined($stats->{"Gap fill version"}->[0])) {  
                 $stats->{"Gap fill version"}->[0] = 0;  
         }  
         $stats->{"Gap fill version"}->[0]++;  
   
         #Updating the stats stored in the table  
         $self->figmodel()->database()->update_row("MODEL STATS",$stats,"Model ID");  
         return $stats;  
1029  }  }
1030    
1031  =head3 update_stats_for_build  =head3 update_stats_for_build
# Line 1173  Line 1035 
1035  =cut  =cut
1036  sub update_stats_for_build {  sub update_stats_for_build {
1037          my ($self) = @_;          my ($self) = @_;
1038            $self->{_data}->builtDate(time());
1039          #preserving the stats for the now obselete model          $self->{_data}->modificationDate(time());
1040          $self->save_obsolete_stats();          my $version = $self->{_data}->version();
1041          my $stats = $self->update_model_stats(0);          $self->{_data}->version($version+1);
         $stats->{"Build date"}->[0] = time();  
         if (!defined($stats->{"Version"}->[0])) {  
                 $stats->{"Version"}->[0] = 0;  
         }  
         $stats->{"Version"}->[0]++;  
   
         #Updating the stats stored in the table  
         $self->figmodel()->database()->update_row("MODEL STATS",$stats,"Model ID");  
         return $stats;  
1042  }  }
1043    
1044  =head3 update_model_stats  =head3 update_model_stats
# Line 1204  Line 1057 
1057          }          }
1058          my $cpdtbl = $self->compound_table();          my $cpdtbl = $self->compound_table();
1059    
1060          #Creating empty status row          #Calculating all necessary stats
         my $CurrentStats = {"Genes with reactions" => [0],  
                                                  "Metabolites" => [$cpdtbl->size()],  
                                                  "Growmatch reactions" => [0],  
                                                  "Spontaneous" => [0],  
                                                  "Biolog gap filling reactions" => [0],  
                                                  "Number of reactions" => [$rxntbl->size()],  
                                                  "Transport reaction"=>[0],  
                                                  "Gap filling reactions" => [0],  
                                                  "Model ID" => [$self->id()],  
                                                  "Subsystem genes with reactions" => [0],  
                                                  "Nonsubsystem genes with reactions" => [0],  
                                                  Version => [0],  
                                                  "Gap fill version" => [0],  
                                                  Source => [$self->source()],  
                                                  "Genes with one reaction" => [0],  
                                                  "Genome ID" => [$self->genome()]};  
   
         my $genomestats = $self->figmodel()->get_genome_stats($self->genome());  
         if (defined($genomestats)) {  
                 $CurrentStats->{SOURCE}->[0] = $genomestats->{SOURCE}->[0];  
                 $CurrentStats->{"Organism name"}->[0] = $genomestats->{NAME}->[0];  
                 $CurrentStats->{"Total genes"}->[0] = $genomestats->{"TOTAL GENES"}->[0];  
                 $CurrentStats->{"Gram positive genes"}->[0] = $genomestats->{"GRAM POSITIVE GENES"}->[0];  
                 $CurrentStats->{"Gram negative genes"}->[0] = $genomestats->{"GRAM NEGATIVE GENES"}->[0];  
                 $CurrentStats->{"Class"}->[0] = $genomestats->{CLASS}->[0];  
                 $CurrentStats->{"Genes with functions"}->[0] = $genomestats->{"GENES WITH FUNCTIONS"}->[0];  
                 $CurrentStats->{"Subsystem genes"}->[0] = $genomestats->{"SUBSYSTEM GENES"}->[0];  
                 $CurrentStats->{"Nonsubsystem genes"}->[0] = $genomestats->{"NON SUBSYSTEM GENES"}->[0];  
                 if (defined($genomestats->{TAXONOMY})) {  
                         $CurrentStats->{"Taxonomy 0"}->[0] = $genomestats->{TAXONOMY}->[0];  
                         $CurrentStats->{"Taxonomy 1"}->[0] = $genomestats->{TAXONOMY}->[1];  
                         $CurrentStats->{"Taxonomy 2"}->[0] = $genomestats->{TAXONOMY}->[2];  
                         $CurrentStats->{"Taxonomy 3"}->[0] = $genomestats->{TAXONOMY}->[3];  
                         $CurrentStats->{"Taxonomy 4"}->[0] = $genomestats->{TAXONOMY}->[4];  
                         $CurrentStats->{"Taxonomy 5"}->[0] = $genomestats->{TAXONOMY}->[5];  
                 }  
         }  
   
         #Transfering build, version, and gap fill data from existing stats  
         if (defined($self->stats())) {  
                 $CurrentStats->{Version}->[0] = $self->stats()->{Version}->[0];  
                 $CurrentStats->{"Gap fill version"}->[0] = $self->stats()->{"Gap fill version"}->[0];  
                 $CurrentStats->{"Gap filling time"}->[0] = $self->stats()->{"Gap filling time"}->[0];  
                 $CurrentStats->{"Gap fill date"}->[0] = $self->stats()->{"Gap fill date"}->[0];  
                 $CurrentStats->{"Build date"}->[0] = $self->stats()->{"Build date"}->[0];  
         }  
   
1061          my %GeneHash;          my %GeneHash;
1062          my %NonpegHash;          my %NonpegHash;
1063          my %CompoundHash;          my %CompoundHash;
1064            my $spontaneousReactions = 0;
1065            my $gapFillReactions = 0;
1066            my $biologReactions = 0;
1067            my $transporters = 0;
1068            my $autoCompleteReactions = 0;
1069            my $associatedSubsystemGenes = 0;
1070          for (my $i=0; $i < $rxntbl->size(); $i++) {          for (my $i=0; $i < $rxntbl->size(); $i++) {
1071                  my $Row = $rxntbl->get_row($i);                  my $Row = $rxntbl->get_row($i);
1072                  if (defined($Row) && defined($Row->{"ASSOCIATED PEG"})) {                  if (defined($Row) && defined($Row->{"ASSOCIATED PEG"})) {
# Line 1262  Line 1074 
1074                          if (defined($ReactionRow->{"EQUATION"}->[0])) {                          if (defined($ReactionRow->{"EQUATION"}->[0])) {
1075                                  #Checking for extracellular metabolites which indicate that this is a transporter                                  #Checking for extracellular metabolites which indicate that this is a transporter
1076                                  if ($ReactionRow->{"EQUATION"}->[0] =~ m/\[e\]/) {                                  if ($ReactionRow->{"EQUATION"}->[0] =~ m/\[e\]/) {
1077                                          $CurrentStats->{"Transport reaction"}->[0]++;                                          $transporters++;
1078                                  }                                  }
1079                          }                          }
1080                          #Identifying spontaneous/biolog/gapfilling/gene associated reactions                          #Identifying spontaneous/biolog/gapfilling/gene associated reactions
1081                          if ($Row->{"ASSOCIATED PEG"}->[0] =~ m/BIOLOG/i) {                          if ($Row->{"ASSOCIATED PEG"}->[0] =~ m/BIOLOG/i) {
1082                                  $CurrentStats->{"Biolog gap filling reactions"}->[0]++;                                  $biologReactions++;
1083                            } elsif ($Row->{"ASSOCIATED PEG"}->[0] =~ m/GROW/i) {
1084                                    $gapFillReactions++;
1085                          } elsif ($Row->{"ASSOCIATED PEG"}->[0] =~ m/SPONTANEOUS/i) {                          } elsif ($Row->{"ASSOCIATED PEG"}->[0] =~ m/SPONTANEOUS/i) {
1086                                  $CurrentStats->{"Spontaneous"}->[0]++;                                  $spontaneousReactions++;
1087                          } elsif ($Row->{"ASSOCIATED PEG"}->[0] =~ m/GAP/ || $Row->{"ASSOCIATED PEG"}->[0] =~ m/UNIVERSAL/i || $Row->{"ASSOCIATED PEG"}->[0] =~ m/UNKNOWN/i) {                          } elsif ($Row->{"ASSOCIATED PEG"}->[0] =~ m/GAP/ || $Row->{"ASSOCIATED PEG"}->[0] =~ m/UNIVERSAL/i || $Row->{"ASSOCIATED PEG"}->[0] =~ m/UNKNOWN/i) {
1088                                  $CurrentStats->{"Gap filling reactions"}->[0]++;                                  $autoCompleteReactions++;
1089                          } else {                          } else {
1090                                  foreach my $GeneSet (@{$Row->{"ASSOCIATED PEG"}}) {                                  foreach my $GeneSet (@{$Row->{"ASSOCIATED PEG"}}) {
1091                                          $_ = $GeneSet;                                          $_ = $GeneSet;
# Line 1289  Line 1103 
1103          }          }
1104          my @genes = keys(%GeneHash);          my @genes = keys(%GeneHash);
1105          my @othergenes = keys(%NonpegHash);          my @othergenes = keys(%NonpegHash);
         $CurrentStats->{"Genes with reactions"}->[0] = @genes + @othergenes;  
1106    
1107          #Updating the stats stored in the table          #Setting the reaction count
1108          $self->figmodel()->database()->update_row("MODEL STATS",$CurrentStats,"Model ID");          $self->{_data}->reactions($rxntbl->size());
1109          $self->{_stats} = $CurrentStats;          #Setting the metabolite count
1110          return $CurrentStats;          $self->{_data}->compounds($rxntbl->size());
1111            #Setting the gene count
1112            my $geneCount = @genes + @othergenes;
1113            $self->{_data}->associatedGenes($geneCount);
1114            #Setting remaining stats
1115            $self->{_data}->spontaneousReactions($spontaneousReactions);
1116            $self->{_data}->gapFillReactions($gapFillReactions);
1117            $self->{_data}->biologReactions($biologReactions);
1118            $self->{_data}->transporters($transporters);
1119            $self->{_data}->autoCompleteReactions($autoCompleteReactions);
1120            $self->{_data}->associatedSubsystemGenes($associatedSubsystemGenes);
1121            #Setting the model class
1122            my $class = "";
1123            for (my $i=0; $i < @{$self->figmodel()->config("class list")}; $i++) {
1124                    if (defined($self->figmodel()->config($self->figmodel()->config("class list")->[$i]))) {
1125                            if (defined($self->figmodel()->config($self->figmodel()->config("class list")->[$i])->{$self->id()})) {
1126                                    $class = $self->figmodel()->config("class list")->[$i];
1127                                    last;
1128                            }
1129                            if ($class eq "" && defined($self->figmodel()->config($self->figmodel()->config("class list")->[$i])->{$self->genome()})) {
1130                                    $class = $self->figmodel()->config("class list")->[$i];
1131                            }
1132                    }
1133            }
1134            if ($class eq "") {
1135                    $class = $self->figmodel()->get_genome_stats($self->genome())->{CLASS}->[0];
1136            }
1137            if ($class eq "") {
1138                    $class = "unknown";
1139            }
1140            $self->{_data}->cellwalltype($class);
1141  }  }
1142    
1143  =head3 GapFillModel  =head3 GapFillModel
# Line 2176  Line 2019 
2019  sub ArchiveModel {  sub ArchiveModel {
2020          my ($self) = @_;          my ($self) = @_;
2021    
         #Making sure the model exists  
         if (!defined($self->stats())) {  
                 $self->figmodel()->error_message("FIGMODEL:ArchiveModel: Could not find specified ".$self->id()." in database!");  
                 return $self->fail();  
         }  
   
2022          #Checking that the model file exists          #Checking that the model file exists
2023          if (!(-e $self->filename())) {          if (!(-e $self->filename())) {
2024                  $self->figmodel()->error_message("FIGMODEL:ArchiveModel: Model file ".$self->filename()." not found!");                  $self->figmodel()->error_message("FIGMODEL:ArchiveModel: Model file ".$self->filename()." not found!");
# Line 4169  Line 4006 
4006          close(SBMLOUTPUT);          close(SBMLOUTPUT);
4007  }  }
4008    
4009    =head3 PrintModelSimpleReactionTable
4010    Definition:
4011            success()/fail() FIGMODELmodel->PrintModelSimpleReactionTable();
4012    Description:
4013            Prints the table of model data
4014    =cut
4015    sub PrintModelSimpleReactionTable {
4016            my ($self) = @_;
4017    
4018            my $rxntbl = $self->reaction_table();
4019            my $tbl = $self->create_table_prototype("ModelSimpleReactionTable");
4020            for (my $i=0; $i < $rxntbl->size(); $i++) {
4021                    my $row = $rxntbl->get_row($i);
4022                    $row->{DATABASE} = $row->{LOAD};
4023                    $tbl->add_row($row);
4024            }
4025            $tbl->save();
4026            system("cp ".$tbl->filename()." ".$self->figmodel()->config("Model table download directory")->[0].$self->figmodel()->config("ModelSimpleReactionTable")->{filename_prefix}->[0]."-".$self->id().".txt");
4027    }
4028    
4029  =head3 PrintModelLPFile  =head3 PrintModelLPFile
4030  Definition:  Definition:
4031          success()/fail() FIGMODELmodel->PrintModelLPFile();          success()/fail() FIGMODELmodel->PrintModelLPFile();
# Line 4365  Line 4222 
4222          my ($self,$feature) = @_;          my ($self,$feature) = @_;
4223    
4224          #First checking if the feature is in the model          #First checking if the feature is in the model
4225            my $featureGenome = $feature->{GENOME}->[0];
4226            if ($feature->{GENOME}->[0] =~ m/\>(\d+\.\d+)\</) {
4227                    $featureGenome = $1;
4228            }
4229            if ($featureGenome ne $self->genome()) {
4230                    return "Not in model";
4231            }
4232          my $data = $self->get_feature_data($feature->{ID}->[0]);          my $data = $self->get_feature_data($feature->{ID}->[0]);
4233          if (!defined($data)) {          if (!defined($data)) {
4234                  return "Not in model";                  return "Not in model";

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3