[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.20, Tue Jun 15 04:04:01 2010 UTC revision 1.23, Mon Jul 26 05:53:06 2010 UTC
# Line 13  Line 13 
13          This is the constructor for the FIGMODELmodel object.          This is the constructor for the FIGMODELmodel object.
14  =cut  =cut
15  sub new {  sub new {
16          my ($class,$figmodel,$id) = @_;          my ($class,$figmodel,$id,$metagenome) = @_;
   
17          #Error checking first          #Error checking first
18          if (!defined($figmodel)) {          if (!defined($figmodel)) {
19                  print STDERR "FIGMODELmodel->new(undef,".$id."):figmodel must be defined to create a model object!\n";                  print STDERR "FIGMODELmodel->new(undef,".$id."):figmodel must be defined to create a model object!\n";
# Line 26  Line 25 
25                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,undef):id must be defined to create a model object");                  $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,undef):id must be defined to create a model object");
26                  return undef;                  return undef;
27          }          }
   
28          #Checking that the id exists          #Checking that the id exists
29            if (!defined($metagenome) || $metagenome != 1) {
30          my $modelHandle = $self->figmodel()->database()->get_object_manager("model");          my $modelHandle = $self->figmodel()->database()->get_object_manager("model");
31          if (!defined($modelHandle)) {                  if (defined($modelHandle)) {
                 $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not load MODELS table. Check database!");  
                 return undef;  
         }  
   
32          #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
33          if ($id =~ m/^\d+$/) {          if ($id =~ m/^\d+$/) {
34                  my $objects = $modelHandle->get_objects();                  my $objects = $modelHandle->get_objects();
35                                    if (defined($objects->[$id])) {
36                  $self->{_data} = $objects->[$id];                  $self->{_data} = $objects->[$id];
37                  $self->figmodel()->{_models}->{$id} = $self;                  $self->figmodel()->{_models}->{$id} = $self;
38                                    }
39          } else {          } else {
40                  my $objects = $modelHandle->get_objects({id => $id});                  my $objects = $modelHandle->get_objects({id => $id});
41                  if (!defined($objects->[0]) && $id =~ m/(.+)(V[^V]+)/) {                                  if (defined($objects->[0])) {
42                                            $self->{_data} = $objects->[0];
43                                    } elsif (!defined($objects->[0]) && $id =~ m/(.+)(V[^V]+)/) {
44                          $objects = $modelHandle->get_objects({id => $1});                          $objects = $modelHandle->get_objects({id => $1});
45                          if (!defined($objects->[0])) {                                          if (defined($objects->[0])) {
                                 $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");  
                                 return undef;  
                         }  
46                          $self->{_selectedversion} = $2;                          $self->{_selectedversion} = $2;
47                  } elsif (!defined($objects->[0])) {                                                  $self->{_data} = $objects->[0];
48                          $self->figmodel()->error_message("FIGMODELmodel->new(figmodel,".$id."):could not find model ".$id." in database!");                                          }
49                          return undef;                                  }
50                            }
51                    }
52                    if (defined($self->{_data})) {
53                            $self->{_modeltype} = "genome";
54                    }
55                  }                  }
56            if (!defined($self->{_data})) {
57                    my $modelHandle = $self->figmodel()->database()->get_object_manager("mgmodel");
58                    if (defined($modelHandle)) {
59                            #If the id is a number, we get the model row by index
60                            if ($id =~ m/^\d+$/) {
61                                    my $objects = $modelHandle->get_objects();
62                                    if (defined($objects->[$id])) {
63                                            $self->{_data} = $objects->[$id];
64                                            $self->figmodel()->{_models}->{"MG".$id} = $self;
65                                    }
66                            } else {
67                                    my $objects = $modelHandle->get_objects({id => $id});
68                                    if (defined($objects->[0])) {
69                                            $self->{_data} = $objects->[0];
70                                    } elsif (!defined($objects->[0]) && $id =~ m/(.+)(V[^V]+)/) {
71                                            $objects = $modelHandle->get_objects({id => $1});
72                                            if (defined($objects->[0])) {
73                                                    $self->{_selectedversion} = $2;
74                  $self->{_data} = $objects->[0];                  $self->{_data} = $objects->[0];
75          }          }
76                                    }
77                            }
78                    }
79                    if (defined($self->{_data})) {
80                            $self->{_modeltype} = "metagenome";
81                    }
82            }
83          if (!defined($self->{_data})) {          if (!defined($self->{_data})) {
84                  $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 model ".$id." in database!");
85                  return undef;                  return undef;
86          }          }
87          $self->figmodel()->{_models}->{$self->id()} = $self;          $self->figmodel()->{_models}->{$self->id()} = $self;
   
88          return $self;          return $self;
89  }  }
90    
# Line 166  Line 191 
191  =cut  =cut
192  sub mgdata {  sub mgdata {
193          my ($self) = @_;          my ($self) = @_;
194          if (!defined($self->{_mgdata}) && $self->source() =~ /^MGRAST/) {          if (!defined($self->{_mgdata})) {
195                  require MGRAST;                  my $mgrastdbhandle = $self->figmodel()->database()->get_object_manager("mgjob");
196                  $self->{_mgdata} = $self->figmodel()->mgrast()->Job->get_objects( { 'genome_id' => $self->genome() } )                  my $objects = $mgrastdbhandle->get_objects( { 'genome_id' => $self->genome() } );
197                    $self->{_mgdata} = $objects->[0];
198          }          }
199          return $self->{_mgdata};          return $self->{_mgdata};
200  }  }
# Line 184  Line 210 
210          return $self->{_data}->id();          return $self->{_data}->id();
211  }  }
212    
213    =head3 get_model_type
214    Definition:
215            string = FIGMODELmodel->get_model_type();
216    Description:
217            Returns the type of the model
218    =cut
219    sub get_model_type {
220            my ($self) = @_;
221            return $self->{_modeltype};
222    }
223    
224  =head3 owner  =head3 owner
225  Definition:  Definition:
226          string = FIGMODELmodel->owner();          string = FIGMODELmodel->owner();
# Line 352  Line 389 
389  =cut  =cut
390  sub get_reaction_data {  sub get_reaction_data {
391          my ($self,$reaction) = @_;          my ($self,$reaction) = @_;
   
392          if (!defined($self->reaction_table())) {          if (!defined($self->reaction_table())) {
393                  return undef;                  return undef;
394          }          }
395          if ($reaction =~ m/^\d+$/) {          if ($reaction =~ m/^\d+$/) {
396                  $self->reaction_table()->get_row($reaction);                  return $self->reaction_table()->get_row($reaction);
397          }          }
398          return $self->reaction_table()->get_row_by_key($reaction,"LOAD");          return $self->reaction_table()->get_row_by_key($reaction,"LOAD");
399  }  }
# Line 444  Line 480 
480  =cut  =cut
481  sub create_table_prototype {  sub create_table_prototype {
482          my ($self,$TableName) = @_;          my ($self,$TableName) = @_;
   
483          #Checking if the table definition exists in the FIGMODELconfig file          #Checking if the table definition exists in the FIGMODELconfig file
484          if (!defined($self->figmodel()->config($TableName))) {          my $tbldef = $self->figmodel()->config($TableName);
485            if (!defined($tbldef)) {
486                  $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:Definition not found for ".$TableName);                  $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:Definition not found for ".$TableName);
487                  return undef;                  return undef;
488          }          }
489          #Checking that this is a database table          #Checking that this is a database table
490          if (!defined($self->config($TableName)->{tabletype}) || $self->config($TableName)->{tabletype}->[0] ne "ModelTable") {          if (!defined($tbldef->{tabletype}) || $tbldef->{tabletype}->[0] ne "ModelTable") {
491                  $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:".$TableName." is not a model table!");                  $self->figmodel()->error_message("FIGMODELdatabase:create_table_prototype:".$TableName." is not a model table!");
492                  return undef;                  return undef;
493          }          }
494          if (!defined($self->config($TableName)->{delimiter})) {          #Setting default values for table parameters
495                  $self->config($TableName)->{delimiter}->[0] = ";";          my $prefix;
496            if (defined($tbldef->{prefix})) {
497                    $prefix = join("\n",@{$self->config($TableName)->{prefix}})."\n";
498          }          }
499          if (!defined($self->config($TableName)->{itemdelimiter})) {          my $itemDelim = "|";
500                  $self->config($TableName)->{itemdelimiter}->[0] = "|";          if (defined($tbldef->{itemdelimiter}->[0])) {
501                    $itemDelim = $tbldef->{itemdelimiter}->[0];
502                    if ($itemDelim eq "SC") {
503                            $itemDelim = ";";
504                    }
505            }
506            my $columnDelim = "\t";
507            if (defined($tbldef->{columndelimiter}->[0])) {
508                    $columnDelim = $tbldef->{columndelimiter}->[0];
509                    if ($columnDelim eq "SC") {
510                            $columnDelim = ";";
511                    }
512            }
513            my $suffix = ".tbl";
514            if (defined($tbldef->{filename_suffix}->[0])) {
515                    $suffix = $tbldef->{filename_suffix}->[0];
516            }
517            my $filename = $self->directory().$TableName."-".$self->id().$self->selected_version().$suffix;
518            if (defined($tbldef->{filename_prefix}->[0])) {
519                    if ($tbldef->{filename_prefix}->[0] eq "NONE") {
520                            $filename = $self->directory().$self->id().$self->selected_version().$suffix;
521                    } else {
522                            $filename = $self->directory().$tbldef->{filename_prefix}->[0]."-".$self->id().$self->selected_version().$suffix;
523          }          }
         my $prefix;  
         if (defined($self->config($TableName)->{prefix})) {  
                 $prefix = join("\n",@{$self->config($TableName)->{prefix}});  
524          }          }
525          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);          #Creating the table prototype
526            my $tbl = FIGMODELTable->new($tbldef->{columns},$filename,$tbldef->{hashcolumns},$columnDelim,$itemDelim,$prefix);
527          return $tbl;          return $tbl;
528  }  }
529    
# Line 491  Line 549 
549  =cut  =cut
550  sub reaction_table {  sub reaction_table {
551          my ($self,$clear) = @_;          my ($self,$clear) = @_;
552          my $tbl = $self->load_model_table("ModelReactions",$clear);          if (defined($clear) && $clear == 1) {
553                    delete $self->{_reaction_table};
554            }
555            if (!defined($self->{_reaction_table})) {
556                    $self->{_reaction_table} = $self->load_model_table("ModelReactions",$clear);
557          my $classTbl = $self->reaction_class_table();          my $classTbl = $self->reaction_class_table();
558          if (defined($classTbl)) {          if (defined($classTbl)) {
559                  for (my $i=0; $i < $classTbl->size(); $i++) {                  for (my $i=0; $i < $classTbl->size(); $i++) {
560                          my $row = $classTbl->get_row($i);                          my $row = $classTbl->get_row($i);
561                          if (defined($row->{REACTION})) {                          if (defined($row->{REACTION})) {
562                                  my $rxnRow = $tbl->get_row_by_key($row->{"REACTION"}->[0],"LOAD");                                          my $rxnRow = $self->{_reaction_table}->get_row_by_key($row->{"REACTION"}->[0],"LOAD");
563                                  if (defined($row->{MEDIA})) {                                  if (defined($row->{MEDIA})) {
564                                          for (my $j=0; $j < @{$row->{MEDIA}};$j++) {                                          for (my $j=0; $j < @{$row->{MEDIA}};$j++) {
565                                                  my $class = "Active <=>";                                                  my $class = "Active <=>";
# Line 522  Line 584 
584                          }                          }
585                  }                  }
586          }          }
587            }
588            return $self->{_reaction_table};
589    }
590    
591    =head3 essentials_table
592    Definition:
593            FIGMODELTable = FIGMODELmodel->essentials_table();
594    Description:
595            Returns FIGMODELTable with the essential genes for the model
596    =cut
597    sub essentials_table {
598            my ($self,$clear) = @_;
599            my $tbl = $self->load_model_table("ModelEssentialGenes",$clear);
600          return $tbl;          return $tbl;
601  }  }
602    
# Line 587  Line 662 
662                          }                          }
663                  }                  }
664                  #Loading predictions                  #Loading predictions
665                  my @files = glob($self->directory()."EssentialGenes-".$self->id()."-*");                  my $esstbl = $self->essentials_table();
                 foreach my $file (@files) {  
                         if ($file =~ m/\-([^\-]+)\.tbl/) {  
                                 my $media = $1;  
                                 my $list = $self->figmodel()->database()->load_single_column_file($file,"");  
                                 my $hash;  
                                 foreach my $gene (@{$list}) {  
                                         $hash->{$gene} = 1;  
                                 }  
666                                  for (my $i=0; $i < $self->{_feature_data}->size(); $i++) {                                  for (my $i=0; $i < $self->{_feature_data}->size(); $i++) {
667                                          my $Row = $self->{_feature_data}->get_row($i);                                          my $Row = $self->{_feature_data}->get_row($i);
668                                          if ($Row->{ID}->[0] =~ m/(peg\.\d+)/) {                                          if ($Row->{ID}->[0] =~ m/(peg\.\d+)/) {
669                                                  my $gene = $1;                                                  my $gene = $1;
670                                                  if (defined($hash->{$gene})) {                                  my @rows = $esstbl->get_rows_by_key($gene,"ESSENTIAL GENES");
671                                                          push(@{$Row->{$self->id()."PREDICTIONS"}},$media.":essential");                                  my $mediahash;
672                                    for (my $j=0; $j < $esstbl->size(); $j++) {
673                                            $mediahash->{$esstbl->get_row($j)->{MEDIA}->[0]} = 0;
674                                    }
675                                    for (my $j=0; $j < @rows; $j++) {
676                                            $mediahash->{$rows[$j]->{MEDIA}->[0]} = 1;
677                                    }
678                                    my @mediaList = keys(%{$mediahash});
679                                    for (my $j=0; $j < @mediaList; $j++) {
680                                            if ($mediahash->{$mediaList[$j]} == 1) {
681                                                    push(@{$Row->{$self->id()."PREDICTIONS"}},$mediaList[$j].":essential");
682                                                  } else {                                                  } else {
683                                                          push(@{$Row->{$self->id()."PREDICTIONS"}},$media.":nonessential");                                                  push(@{$Row->{$self->id()."PREDICTIONS"}},$mediaList[$j].":nonessential");
                                                 }  
684                                          }                                          }
685                                  }                                  }
686                          }                          }
# Line 643  Line 719 
719  =cut  =cut
720  sub get_essential_genes {  sub get_essential_genes {
721          my ($self,$media) = @_;          my ($self,$media) = @_;
722            my $tbl = $self->essentials_table();
723          if (!defined($media)) {          my $row = $tbl->get_row_by_key($media,"MEDIA");
724                  $media = "Complete";          if (defined($row)) {
725          }                  return $row->{"ESSENTIAL GENES"};
         if (!defined($self->{_essential_genes}->{$media})) {  
                 $self->{_essential_genes}->{$media} = undef;  
                 if (-e $self->directory()."EssentialGenes-".$self->id().$self->selected_version()."-".$media.".tbl") {  
                         $self->{_essential_genes}->{$media} = $self->figmodel()->database()->load_single_column_file($self->directory()."EssentialGenes-".$self->id().$self->selected_version()."-".$media.".tbl","");  
                 }  
726          }          }
727            return undef;
         return $self->{_essential_genes}->{$media};  
728  }  }
729    
730  =head3 compound_table  =head3 compound_table
# Line 667  Line 737 
737          my ($self) = @_;          my ($self) = @_;
738    
739          if (!defined($self->{_compound_table})) {          if (!defined($self->{_compound_table})) {
740                  $self->{_compound_table} = $self->figmodel()->database()->GetDBModelCompounds($self->id());                  $self->{_compound_table} = $self->create_table_prototype("ModelCompounds");
741                    #Loading the reactions
742                    my $ReactionTable = $self->figmodel()->database()->get_table("REACTIONS");
743                    my $BiomassTable = $self->figmodel()->database()->get_table("BIOMASS");
744                    #Loading the model
745                    my $ModelTable = $self->reaction_table();
746                    #Checking that the tables were loaded
747                    if (!defined($ModelTable) || !defined($ReactionTable)) {
748                            return undef;
749                    }
750                    #Finding the biomass reaction
751                    for (my $i=0; $i < $ModelTable->size(); $i++) {
752                            my $ID = $ModelTable->get_row($i)->{"LOAD"}->[0];
753                            my $Row = $ReactionTable->get_row_by_key($ID,"DATABASE");
754                            my $IsBiomass = 0;
755                            if (!defined($Row)) {
756                                    $Row = $BiomassTable->get_row_by_key($ID,"DATABASE");
757                                    $IsBiomass = 1;
758                            }
759                            if (defined($Row->{"EQUATION"}->[0])) {
760                                    $_ = $Row->{"EQUATION"}->[0];
761                                    my @OriginalArray = /(cpd\d\d\d\d\d[\[\w]*)/g;
762                                    foreach my $Compound (@OriginalArray) {
763                                            my $ID = substr($Compound,0,8);
764                                            my $NewRow = $self->{_compound_table}->get_row_by_key($ID,"DATABASE",1);
765                                            if ($IsBiomass == 1) {
766                                                    $self->{_compound_table}->add_data($NewRow,"BIOMASS",$Row->{"DATABASE"}->[0],1);
767                                            }
768                                            if (length($Compound) > 8) {
769                                                    #print $Compound."\t".$Row->{"EQUATION"}->[0]."\t".$Row->{"DATABASE"}->[0]."\n";
770                                                    my $Compartment = substr($Compound,8,1);
771                                                    $self->{_compound_table}->add_data($NewRow,"COMPARTMENTS",$Compartment,1);
772                                                    $self->{_compound_table}->add_data($NewRow,"TRANSPORTERS",$Row->{"DATABASE"}->[0],1);
773                                            }
774                                    }
775                            }
776                    }
777          }          }
778    
779          return $self->{_compound_table};          return $self->{_compound_table};
# Line 787  Line 893 
893                  }                  }
894                  my $source = $self->source();                  my $source = $self->source();
895                  if ($source =~ /^MGRAST/) {                  if ($source =~ /^MGRAST/) {
896                          $self->{_directory} = $self->figmodel()->config("organism directory")->[0].$userdirectory.$self->genome()."/";                          $self->{_directory} = $self->figmodel()->config("mgrast model directory")->[0].$userdirectory.$self->genome()."/";
897                  } elsif ($source =~ /^RAST/) {                  } elsif ($source =~ /^RAST/) {
898                          $self->{_directory} = $self->figmodel()->config("organism directory")->[0].$userdirectory.$self->genome()."/";                          $self->{_directory} = $self->figmodel()->config("organism directory")->[0].$userdirectory.$self->genome()."/";
899                  } elsif ($source =~ /^SEED/) {                  } elsif ($source =~ /^SEED/) {
# Line 928  Line 1034 
1034  }  }
1035    
1036  sub autocompleteMedia {  sub autocompleteMedia {
1037          my ($self) = @_;          my ($self,$newMedia) = @_;
1038          return $self->{_data}->autoCompleteMedia();          return $self->{_data}->autoCompleteMedia($newMedia);
1039    }
1040    
1041    sub biomassReaction {
1042            my ($self,$newBiomass) = @_;
1043            if (!defined($newBiomass)) {
1044                    return $self->{_data}->biomassReaction();
1045            } else {
1046                    #Figuring out what the old biomass is
1047                    my $oldBiomass = $self->{_data}->biomassReaction();
1048                    if ($newBiomass ne $oldBiomass) {
1049                            #Figuring out if the new biomass exists
1050                            my $handle = $self->database()->get_object_manager("bof");
1051                            my $objects = $handle->get_objects({"DATABASE" => [$newBiomass]});
1052                            if (!defined($objects) || !defined($objects->[0])) {
1053                                    print STDERR "Could not find new biomass reaction ".$newBiomass."\n";
1054                                    return $oldBiomass;
1055                            }
1056                            #Changing the biomass reaction in the model file
1057                            my $rxnTbl = $self->reaction_table();
1058                            for (my $i=0; $i < $rxnTbl->size(); $i++) {
1059                                    my $row = $rxnTbl->get_row($i);
1060                                    if ($row->{LOAD}->[0] =~ m/^bio/) {
1061                                            $row->{LOAD}->[0] = $newBiomass;
1062                                    }
1063                            }
1064                            $rxnTbl->save();
1065                            #Changing the biomass reaction in the database
1066                            return  $self->{_data}->biomassReaction($newBiomass);
1067                    }
1068            }
1069  }  }
1070    
1071  =head3 taxonomy  =head3 taxonomy
# Line 1015  Line 1151 
1151    
1152          #Assuming complete media if none is provided          #Assuming complete media if none is provided
1153          if (!defined($Media)) {          if (!defined($Media)) {
1154                  $Media = "Complete";                  $Media = $self->autocompleteMedia();
1155          }          }
1156    
1157          #Predicting essentiality          #Predicting essentiality
1158          my $result = $self->figmodel()->RunFBASimulation($self->id(),"SINGLEKO",undef,undef,[$self->id()],[$Media]);          my $result = $self->figmodel()->RunFBASimulation($self->id(),"SINGLEKO",undef,undef,[$self->id()],[$Media]);
1159          #Checking that the table is defined and the output file exists          #Checking that the table is defined and the output file exists
1160          if (defined($result) && defined($result->get_row(0)->{"ESSENTIALGENES"})) {          if (defined($result) && defined($result->get_row(0)->{"ESSENTIALGENES"})) {
1161                  $self->figmodel()->database()->print_array_to_file($self->directory()."EssentialGenes-".$self->id()."-".$Media.".tbl",[join("\n",@{$result->get_row(0)->{"ESSENTIALGENES"}})]);                  my $tbl = $self->essentials_table();
1162                    my $row = $tbl->get_row_by_key($Media,"MEDIA",1);
1163                    $row->{"ESSENTIAL GENES"} = $result->get_row(0)->{"ESSENTIALGENES"};
1164                    $tbl->save();
1165          } else {          } else {
1166                  $self->figmodel()->error_message("FIGMODELmodel:run_default_model_predictions:could not identify essential reactions for model ".$self->id().$self->selected_version().".");                  $self->figmodel()->error_message("FIGMODELmodel:run_default_model_predictions:could not identify essential reactions for model ".$self->id().$self->selected_version().".");
1167                  return $self->figmodel()->fail();                  return $self->figmodel()->fail();
# Line 1051  Line 1190 
1190          $self->{_data}->modificationDate(time());          $self->{_data}->modificationDate(time());
1191          my $version = $self->{_data}->autocompleteVersion();          my $version = $self->{_data}->autocompleteVersion();
1192          $self->{_data}->autocompleteVersion($version+1);          $self->{_data}->autocompleteVersion($version+1);
1193            $self->update_model_stats();
1194  }  }
1195    
1196  =head3 update_stats_for_build  =head3 update_stats_for_build
# Line 1132  Line 1272 
1272          #Setting the reaction count          #Setting the reaction count
1273          $self->{_data}->reactions($rxntbl->size());          $self->{_data}->reactions($rxntbl->size());
1274          #Setting the metabolite count          #Setting the metabolite count
1275          $self->{_data}->compounds($rxntbl->size());          $self->{_data}->compounds($cpdtbl->size());
1276          #Setting the gene count          #Setting the gene count
1277          my $geneCount = @genes + @othergenes;          my $geneCount = @genes + @othergenes;
1278          $self->{_data}->associatedGenes($geneCount);          $self->{_data}->associatedGenes($geneCount);
# Line 1200  Line 1340 
1340          }          }
1341    
1342          #Calling the MFAToolkit to run the gap filling optimization          #Calling the MFAToolkit to run the gap filling optimization
1343          my $MinimalMediaTable = $self->figmodel()->database()->GetDBTable("MINIMAL MEDIA TABLE");          my $Media = $self->autocompleteMedia();
1344          my $Media = "Complete";          if ($Media eq "Complete") {
1345          if (defined($MinimalMediaTable->get_row_by_key($self->genome(),"Organism"))) {                  system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),undef,["GapFilling"],{"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef));
1346                  $Media = $MinimalMediaTable->get_row_by_key($self->genome(),"Organism")->{"Minimal media"}->[0];          } else {
1347                  #Loading media, changing bounds, saving media as a test media                  #Loading media, changing bounds, saving media as a test media
1348                  my $MediaTable = FIGMODELTable::load_table($self->config("Media directory")->[0].$Media.".txt",";","",0,["VarName"]);                  my $MediaTable = FIGMODELTable::load_table($self->config("Media directory")->[0].$Media.".txt",";","",0,["VarName"]);
1349                  for (my $i=0; $i < $MediaTable->size(); $i++) {                  for (my $i=0; $i < $MediaTable->size(); $i++) {
# Line 1218  Line 1358 
1358                  #print $self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),$UniqueFilename."TestMedia",["GapFilling"],{"Default max drain flux" => 0,"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef)."\n";                  #print $self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),$UniqueFilename."TestMedia",["GapFilling"],{"Default max drain flux" => 0,"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef)."\n";
1359                  system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),$UniqueFilename."TestMedia",["GapFilling"],{"Default max drain flux" => 0,"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef));                  system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),$UniqueFilename."TestMedia",["GapFilling"],{"Default max drain flux" => 0,"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef));
1360                  unlink($self->config("Media directory")->[0].$UniqueFilename."TestMedia.txt");                  unlink($self->config("Media directory")->[0].$UniqueFilename."TestMedia.txt");
         } else {  
                 #print $self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),undef,["GapFilling"],{"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef)."\n";  
                 system($self->figmodel()->GenerateMFAToolkitCommandLineCall($UniqueFilename,$self->id(),undef,["GapFilling"],{"Reactions to knockout" => $self->config("permanently knocked out reactions")->[0]},"GapFill".$self->id().".log",undef));  
1361          }          }
1362    
1363          #Parse the solutions file for the model and get the reaction list from it          #Parse the solutions file for the model and get the reaction list from it
# Line 1233  Line 1370 
1370                  $self->figmodel()->error_message("FIGMODEL:GapFillModel: Gap filling report not found!");                  $self->figmodel()->error_message("FIGMODEL:GapFillModel: Gap filling report not found!");
1371                  return $self->fail();                  return $self->fail();
1372          }          }
         $SolutionData->save("/home/chenry/Solution.txt");  
1373    
1374          #Looking for the last printed recursive MILP solution          #Looking for the last printed recursive MILP solution
1375          for (my $i=($SolutionData->size()-1); $i >=0; $i--) {          for (my $i=($SolutionData->size()-1); $i >=0; $i--) {
# Line 1275  Line 1411 
1411          #Determining why each gap filling reaction was added          #Determining why each gap filling reaction was added
1412          $self->figmodel()->IdentifyDependancyOfGapFillingReactions($self->id(),$Media);          $self->figmodel()->IdentifyDependancyOfGapFillingReactions($self->id(),$Media);
1413          if (!defined($donotclear) || $donotclear != 1) {          if (!defined($donotclear) || $donotclear != 1) {
                 $self->figmodel()->AddBiologTransporters($self->id());  
1414                  if ($self->id() !~ m/MGRast/) {                  if ($self->id() !~ m/MGRast/) {
1415                          $self->update_stats_for_gap_filling($ElapsedTime);                          $self->update_stats_for_gap_filling($ElapsedTime);
1416                  }                  }
# Line 2035  Line 2170 
2170    
2171  sub CreateMetaGenomeReactionList {  sub CreateMetaGenomeReactionList {
2172          my ($self) = @_;          my ($self) = @_;
   
2173          #Checking if the metagenome file exists          #Checking if the metagenome file exists
2174          if (!-e $self->config("raw MGRAST directory")->[0].$self->genome().".summary") {          if (!-e $self->config("raw MGRAST directory")->[0].$self->genome().".summary") {
2175                  $self->error_message("FIGMODEL:CreateMetaGenomeReactionList: could not find raw data file for metagenome ".$self->genome());                  $self->error_message("FIGMODEL:CreateMetaGenomeReactionList: could not find raw data file for metagenome ".$self->genome());
2176                    return $self->fail();
2177          }          }
2178          #Loading metagenome data          #Loading metagenome data
2179          my $MGRASTData = $self->figmodel()->database()->load_multiple_column_file($self->config("raw MGRAST directory")->[0].$self->genome().".summary","\t");          my $MGRASTData = $self->figmodel()->database()->load_multiple_column_file($self->config("raw MGRAST directory")->[0].$self->genome().".summary","\t");
2180          if (!defined($MGRASTData)) {          if (!defined($MGRASTData)) {
2181                  $self->error_message("FIGMODEL:CreateMetaGenomeReactionList: could not find raw data file for metagenome ".$self->genome());                  $self->error_message("FIGMODEL:CreateMetaGenomeReactionList: could not find raw data file for metagenome ".$self->genome());
2182                    return $self->fail();
2183          }          }
   
2184          #Setting up needed variables          #Setting up needed variables
2185          my $OriginalModelTable = undef;          my $OriginalModelTable = undef;
   
2186          #Checking status          #Checking status
2187          if ($self->status() < 0) {          if ($self->status() < 0) {
2188                  $self->set_status(0,"Preliminary reconstruction");                  $self->set_status(0,"Preliminary reconstruction");
# Line 2060  Line 2194 
2194                  $self->ArchiveModel();                  $self->ArchiveModel();
2195                  $self->set_status(0,"Rebuilding preliminary reconstruction");                  $self->set_status(0,"Rebuilding preliminary reconstruction");
2196          }          }
2197            #Creating a hash of escores and pegs associated with each role
2198            my $rolePegHash;
2199            my $roleEscores;
2200            for (my $i=0; $i < @{$MGRASTData};$i++) {
2201                    #MD5,PEG,number of sims,role,sim e-scores,max escore,min escore,ave escore,stdev escore,ave exponent,stddev exponent
2202                    $rolePegHash->{$MGRASTData->[$i]->[3]}->{substr($MGRASTData->[$i]->[1],4)} = 1;
2203                    push(@{$roleEscores->{$MGRASTData->[$i]->[3]}},split(/;/,$MGRASTData->[$i]->[4]));
2204            }
2205          #Getting the reaction table          #Getting the reaction table
2206          my $ReactionTable = $self->figmodel()->database()->GetDBTable("REACTIONS");          my $ReactionTable = $self->figmodel()->database()->get_table("REACTIONS");
2207          #Creating model table          #Creating model table
2208          my $ModelTable = FIGMODELTable->new(["LOAD","DIRECTIONALITY","COMPARTMENT","ASSOCIATED PEG","SUBSYSTEM","CONFIDENCE","REFERENCE","NOTES"],$self->directory().$self->id().".txt",["LOAD"],";","|","REACTIONS\n");          my $ModelTable = $self->create_table_prototype("ModelReactions");
2209          for (my $i=0; $i < @{$MGRASTData};$i++) {          print $ModelTable->filename();
2210                  #MD5,PEG,number of sims,role,sim e-scores          my @roles = keys(%{$rolePegHash});
2211                  my $Role = $MGRASTData->[$i]->[3];          for (my $i=0; $i < @roles; $i++) {
2212                  my $MD5 = $MGRASTData->[$i]->[0];                  my $min = -1;
2213                  my $peg = $MGRASTData->[$i]->[1];                  my $max = -1;
2214                  my $sims = $MGRASTData->[$i]->[4];                  my $count = @{$roleEscores->{$roles[$i]}};
2215                  $sims =~ s/;/,/g;                  my $ave = 0;
2216                    my $stdev = 0;
2217                    my $aveexp = 0;
2218                    my $stdevexp = 0;
2219                    for (my $j=0; $j < @{$roleEscores->{$roles[$i]}}; $j++) {
2220                            if ($roleEscores->{$roles[$i]} < $min || $min == -1) {
2221                                    $min = $roleEscores->{$roles[$i]};
2222                            }
2223                            if ($roleEscores->{$roles[$i]} > $max || $max == -1) {
2224                                    $max = $roleEscores->{$roles[$i]};
2225                            }
2226                            $ave += $roleEscores->{$roles[$i]}->[$j];
2227                            if ($roleEscores->{$roles[$i]}->[$j] =~ m/e(-\d+$)/) {
2228                                    $aveexp += $1;
2229                            }
2230                    }
2231                    $ave = $ave/$count;
2232                    $aveexp = $aveexp/$count;
2233                    for (my $j=0; $j < @{$roleEscores->{$roles[$i]}}; $j++) {
2234                            $stdev += ($roleEscores->{$roles[$i]}->[$j]-$ave)*($roleEscores->{$roles[$i]}->[$j]-$ave);
2235                            if ($roleEscores->{$roles[$i]}->[$j] =~ m/e(-\d+$)/) {
2236                                    $stdevexp += ($1-$aveexp)*($1-$aveexp);
2237                            }
2238                    }
2239                    $stdev = sqrt($stdev/$count);
2240                    $stdevexp = sqrt($stdevexp/$count);
2241                  #Checking for subsystems                  #Checking for subsystems
2242                  my $GeneSubsystems = $self->figmodel()->subsystems_of_role($Role);                  my $GeneSubsystems = $self->figmodel()->subsystems_of_role($roles[$i]);
2243                  #Checking if there are reactions associated with this role                  #Checking if there are reactions associated with this role
2244                  my $ReactionHashArrayRef = $self->figmodel()->reactions_of_role($Role);                  my $ReactionHashArrayRef = $self->figmodel()->reactions_of_role($roles[$i]);
2245                  if ($ReactionHashArrayRef != 0) {                  if ($ReactionHashArrayRef != 0) {
2246                          foreach my $Mapping (@{$ReactionHashArrayRef}) {                          foreach my $Mapping (@{$ReactionHashArrayRef}) {
2247                                  if (defined($Mapping->{"REACTION"}) && defined($Mapping->{"MASTER"}) && defined($Mapping->{"SUBSYSTEM"}) && defined($Mapping->{"SOURCE"})) {                                  if (defined($Mapping->{"REACTION"}) && defined($Mapping->{"MASTER"}) && defined($Mapping->{"SUBSYSTEM"}) && defined($Mapping->{"SOURCE"})) {
# Line 2088  Line 2253 
2253                                                                  $ReactionRow = {"LOAD" => [$Mapping->{"REACTION"}->[0]],"DIRECTIONALITY" => [$self->figmodel()->reversibility_of_reaction($Mapping->{"REACTION"}->[0])],"COMPARTMENT" => ["c"]};                                                                  $ReactionRow = {"LOAD" => [$Mapping->{"REACTION"}->[0]],"DIRECTIONALITY" => [$self->figmodel()->reversibility_of_reaction($Mapping->{"REACTION"}->[0])],"COMPARTMENT" => ["c"]};
2254                                                                  $ModelTable->add_row($ReactionRow);                                                                  $ModelTable->add_row($ReactionRow);
2255                                                          }                                                          }
2256                                                          push(@{$ReactionRow->{"ASSOCIATED PEG"}},substr($peg,4));                                                          my %pegHash = %{$rolePegHash->{$roles[$i]}};
2257                                                          push(@{$ReactionRow->{"REFERENCE"}},$MD5.":".$Role);                                                          if (defined($ReactionRow->{"ASSOCIATED PEG"})) {
2258                                                          push(@{$ReactionRow->{"CONFIDENCE"}},$sims);                                                                  for (my $j=0; $j < @{$ReactionRow->{"ASSOCIATED PEG"}}; $j++) {
2259                                                                            $pegHash{$ReactionRow->{"ASSOCIATED PEG"}->[$j]} = 1;
2260                                                                    }
2261                                                            }
2262                                                            delete $ReactionRow->{"ASSOCIATED PEG"};
2263                                                            push(@{$ReactionRow->{"ASSOCIATED PEG"}},keys(%pegHash));
2264                                                            push(@{$ReactionRow->{"REFERENCE"}},$count.":".$ave.":".$stdev.":".$aveexp.":".$stdevexp.":".$min.":".$max);
2265                                                          if (defined($GeneSubsystems)) {                                                          if (defined($GeneSubsystems)) {
2266                                                                  push(@{$ReactionRow->{"SUBSYSTEM"}},@{$GeneSubsystems});                                                                  push(@{$ReactionRow->{"SUBSYSTEM"}},@{$GeneSubsystems});
2267                                                          }                                                          }
# Line 4574  Line 4745 
4745          }          }
4746          if (defined($output)) {          if (defined($output)) {
4747                  if (defined($save) && $save == 1) {                  if (defined($save) && $save == 1) {
4748                          my $tbl = $self->load_model_table("EssentialGenes");                          my $tbl = $self->essentials_table();
4749                          my $row = $tbl->get_table_by_key("MEDIA",$media)->get_row_by_key("MAXGROWTH",$maxGrowth);                          my $row = $tbl->get_row_by_key($media,"MEDIA",1);
4750                          if (defined($row)) {                          $row->{"ESSENTIAL GENES"} = $output;
                                 $row->{GENES} = $output;  
                         } else {  
                                 $tbl->add_row({GENES => $output,MEDIA => [$media],MAXGROWTH => [$maxGrowth]});  
                         }  
4751                          $tbl->save();                          $tbl->save();
4752                  }                  }
4753          }          }

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.23

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3