[Bio] / FigKernelScripts / check_model.pl Repository:
ViewVC logotype

Diff of /FigKernelScripts/check_model.pl

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

revision 1.3, Mon Jul 23 20:31:01 2007 UTC revision 1.6, Tue Feb 5 02:27:15 2008 UTC
# Line 32  Line 32 
32  my $filebase = $fig->model_directory($genome_id)."/Analysis/";  my $filebase = $fig->model_directory($genome_id)."/Analysis/";
33    
34  my %scenarios_used;  my %scenarios_used;
35    my %scenarios_id;
36  my %all_substrates;  my %all_substrates;
37  foreach (@scenarios)  foreach (@scenarios)
38  {  {
39      map {$all_substrates{$_} = 1} @{$_->get_substrates_all()};      map {$all_substrates{$_} = 1} @{$_->get_substrates_all()};
40      $scenarios_used{$_->get_scenario_name()} = 0;      $scenarios_used{$_->get_scenario_name()} = 0;
41        $scenarios_id{$_->get_id()} = 0;
42  }  }
43    
44  my %input_cpds;  my %input_cpds;
# Line 51  Line 53 
53  }  }
54  close(INPUTS);  close(INPUTS);
55    
56    #ATP Snythase HACK, lets add ATP as a input
57    
58    #cofactors just used for testing connectivity, not actually provided to model
59    $input_cpds{"C00002"} = 1;
60    $input_cpds{"C00028"} = 1;
61    $input_cpds{"C00030"} = 1;
62    $input_cpds{"C00035"} = 1;
63    $input_cpds{"C00040"} = 1;
64    $input_cpds{"C00044"} = 1;
65    $input_cpds{"C00126"} = 1;
66    $input_cpds{"C00138"} = 1;
67    $input_cpds{"C00139"} = 1;
68    $input_cpds{"C00239"} = 1;
69    $input_cpds{"C00342"} = 1;
70    $input_cpds{"C00343"} = 1;
71    $input_cpds{"C00361"} = 1;
72    $input_cpds{"C01070"} = 1;
73    
74    
75    #inputs not produced or imported but required for connecting all scenarios
76    =pod
77        $input_cpds{"C00141"} = 1;
78        $input_cpds{"C00099"} = 1;
79        $input_cpds{"C00049"} = 1;
80        $input_cpds{"C00040"} = 1;
81        $input_cpds{"C00054"} = 1;
82        $input_cpds{"C00059"} = 1;
83        $input_cpds{"C00116"} = 1;
84        $input_cpds{"C00163"} = 1;
85        $input_cpds{"C00185"} = 1;
86        $input_cpds{"C00206"} = 1;
87        $input_cpds{"C00208"} = 1;
88        $input_cpds{"C00234"} = 1;
89        $input_cpds{"C00235"} = 1;
90        $input_cpds{"C00239"} = 1;
91        $input_cpds{"C00250"} = 1;
92        $input_cpds{"C00266"} = 1;
93        $input_cpds{"C00281"} = 1;
94        $input_cpds{"C00288"} = 1;
95        $input_cpds{"C00301"} = 1;
96        $input_cpds{"C00314"} = 1;
97        $input_cpds{"C00416"} = 1;
98        $input_cpds{"C00534"} = 1;
99        $input_cpds{"C00670"} = 1;
100        $input_cpds{"C00672"} = 1;
101        $input_cpds{"C00794"} = 1;
102        $input_cpds{"C00898"} = 1;
103        $input_cpds{"C00988"} = 1;
104        $input_cpds{"C01070"} = 1;
105        $input_cpds{"C01096"} = 1;
106        $input_cpds{"C01137"} = 1;
107        $input_cpds{"C01157"} = 1;
108        $input_cpds{"C01233"} = 1;
109        $input_cpds{"C02191"} = 1;
110        $input_cpds{"C02232"} = 1;
111        $input_cpds{"C02315"} = 1;
112        $input_cpds{"C02336"} = 1;
113        $input_cpds{"C02350"} = 1;
114        $input_cpds{"C03150"} = 1;
115        $input_cpds{"C03543"} = 1;
116        $input_cpds{"C04121"} = 1;
117        $input_cpds{"C04146"} = 1;
118        $input_cpds{"C04489"} = 1;
119        $input_cpds{"C04688"} = 1;
120        $input_cpds{"C04824"} = 1;
121        $input_cpds{"C05223"} = 1;
122        $input_cpds{"C05761"} = 1;
123        $input_cpds{"C05898"} = 1;
124        $input_cpds{"C06143"} = 1;
125        $input_cpds{"C06187"} = 1;
126        $input_cpds{"C06188"} = 1;
127        $input_cpds{"C11457"} = 1;
128        $input_cpds{"C14818"} = 1;
129    
130    
131        $input_cpds{"C00002"} = 1;
132        $input_cpds{"C00001"} = 1;
133        $input_cpds{"C00003"} = 1;
134        $input_cpds{"C00007"} = 1;
135        $input_cpds{"C00009"} = 1;
136        $input_cpds{"C00023"} = 1;
137        $input_cpds{"C00024"} = 1;
138        $input_cpds{"C00034"} = 1;
139        $input_cpds{"C00035"} = 1;
140        $input_cpds{"C00044"} = 1;
141        $input_cpds{"C00076"} = 1;
142        $input_cpds{"C00080"} = 1;
143        $input_cpds{"C00082"} = 1;
144        $input_cpds{"C00087"} = 1;
145        $input_cpds{"C00114"} = 1;
146        $input_cpds{"C00115"} = 1;
147        $input_cpds{"C00120"} = 1;
148        $input_cpds{"C00126"} = 1;
149        $input_cpds{"C00138"} = 1;
150        $input_cpds{"C00139"} = 1;
151        $input_cpds{"C00153"} = 1;
152        $input_cpds{"C00229"} = 1;
153        $input_cpds{"C00238"} = 1;
154        $input_cpds{"C00255"} = 1;
155        $input_cpds{"C00283"} = 1;
156        $input_cpds{"C00305"} = 1;
157        $input_cpds{"C00342"} = 1;
158        $input_cpds{"C00343"} = 1;
159        $input_cpds{"C00361"} = 1;
160        $input_cpds{"C00378"} = 1;
161        $input_cpds{"C00504"} = 1;
162        $input_cpds{"C00568"} = 1;
163        $input_cpds{"C00864"} = 1;
164        $input_cpds{"C05776"} = 1;
165    
166        $input_cpds{"C00141"} = 1;
167        $input_cpds{"C00099"} = 1;
168        $input_cpds{"C00049"} = 1;
169        $input_cpds{"C00040"} = 1;
170        $input_cpds{"C00054"} = 1;
171        $input_cpds{"C00059"} = 1;
172        $input_cpds{"C00116"} = 1;
173        $input_cpds{"C00163"} = 1;
174        $input_cpds{"C00185"} = 1;
175        $input_cpds{"C00206"} = 1;
176        $input_cpds{"C00208"} = 1;
177        $input_cpds{"C00234"} = 1;
178        $input_cpds{"C00235"} = 1;
179        $input_cpds{"C00239"} = 1;
180        $input_cpds{"C00250"} = 1;
181        $input_cpds{"C00266"} = 1;
182        $input_cpds{"C00281"} = 1;
183        $input_cpds{"C00288"} = 1;
184        $input_cpds{"C00301"} = 1;
185        $input_cpds{"C00314"} = 1;
186        $input_cpds{"C00416"} = 1;
187        $input_cpds{"C00534"} = 1;
188        $input_cpds{"C00670"} = 1;
189        $input_cpds{"C00672"} = 1;
190        $input_cpds{"C00794"} = 1;
191        $input_cpds{"C00898"} = 1;
192        $input_cpds{"C00988"} = 1;
193        $input_cpds{"C01070"} = 1;
194        $input_cpds{"C01096"} = 1;
195        $input_cpds{"C01137"} = 1;
196        $input_cpds{"C01157"} = 1;
197        $input_cpds{"C01233"} = 1;
198        $input_cpds{"C02191"} = 1;
199        $input_cpds{"C02232"} = 1;
200        $input_cpds{"C02315"} = 1;
201        $input_cpds{"C02336"} = 1;
202        $input_cpds{"C02350"} = 1;
203        $input_cpds{"C03150"} = 1;
204        $input_cpds{"C03543"} = 1;
205        $input_cpds{"C04121"} = 1;
206        $input_cpds{"C04146"} = 1;
207        $input_cpds{"C04489"} = 1;
208        $input_cpds{"C04688"} = 1;
209        $input_cpds{"C04824"} = 1;
210        $input_cpds{"C05223"} = 1;
211        $input_cpds{"C05761"} = 1;
212        $input_cpds{"C05898"} = 1;
213        $input_cpds{"C06143"} = 1;
214        $input_cpds{"C06187"} = 1;
215        $input_cpds{"C06188"} = 1;
216        $input_cpds{"C11457"} = 1;
217        $input_cpds{"C14818"} = 1;
218    
219    =cut
220    
221  my %cofactor_cpds;  my %cofactor_cpds;
222  open(INPUTCO,$filebase."cofactors.txt")  open(INPUTCO,$filebase."secondary_compounds.txt")
223      or die("Failed to open ".$filebase."cofactors.txt. Run find_model_cofactors $genome_id\n");      or die("Failed to open ".$filebase."secondary_compounds.txt. Run find_model_cofactors $genome_id\n");
224  while(<INPUTCO>)  while(<INPUTCO>)
225  {  {
226      chomp;      chomp;
# Line 74  Line 241 
241      $biomass_cpds{$temp[0]} = 1;      $biomass_cpds{$temp[0]} = 1;
242  }  }
243  close(BIOMASS);  close(BIOMASS);
244    
245    my %compound_id_to_name;
246    open(IN,"$FIG_Config::global/Models/compound_id_to_name.txt") or die("Failed to open compound_id_to_name.txt");
247    while($_ = <IN>){
248        chomp($_);
249        my($id,$name) = split("\t",$_);
250        $compound_id_to_name{$id} = $name;
251    }
252    close(IN);
253    
254  print STDERR "\tStage 1 - Complete\n" if($debug);  print STDERR "\tStage 1 - Complete\n" if($debug);
255    
256  print STDERR "\tStage 2 - Run Analysis Tools (fueled by caffine)\n" if($debug);  print STDERR "\tStage 2 - Run Analysis Tools (fueled by caffine)\n" if($debug);
257  #Total list of what compounds we reach.  #Total list of what compounds we reach.
258  my @list_generated = keys %input_cpds;  my @list_generated = keys %input_cpds;
259    push @list_generated , keys %cofactor_cpds;
260  my %possible_problems;  my %possible_problems;
261  my %good_compounds;  my %good_compounds;
262    
# Line 93  Line 270 
270      $current_inputs{$_} = 1;      $current_inputs{$_} = 1;
271  }  }
272  my %current_cofactors;  my %current_cofactors;
 my %previous_inputs;  
273  foreach (keys %cofactor_cpds)  foreach (keys %cofactor_cpds)
274  {  {
275      $current_cofactors{$_} = 1;      $current_cofactors{$_} = 1;
# Line 101  Line 277 
277    
278  while(scalar(keys %current_inputs))  while(scalar(keys %current_inputs))
279  {  {
280      my ($temp_in,$temp_co) = generate_new_inputs(\%current_inputs,\%current_cofactors);      my ($temp_in,$temp_co,$break) = generate_new_inputs(\%current_inputs,\%current_cofactors);
     #Check to make sure we have a different compound  
     my $break = 1;  
     foreach my $key (keys %$temp_in)  
     {  
         if(!defined $current_inputs{$key} && !defined $previous_inputs{$key})  
         {  
             $break = 0;  
         }  
     }  
     if($break) { last;} #break the while loop, we are looping  
   
     undef %previous_inputs;  
     map {$previous_inputs{$_} = 1;} sort keys %current_inputs;  
   
     #undef %current_inputs;  
     map {$current_inputs{$_} = 1;} sort keys %$temp_in;  
281    
282      #undef %current_cofactors;      map {$current_inputs{$_} = 1;} keys %$temp_in;
283      map {$current_cofactors{$_} = 1;} sort keys %$temp_co;      map {$current_cofactors{$_} = 1;} keys %$temp_co;
284    
285      push @list_generated, keys %$temp_in;      push @list_generated, keys %$temp_in;
286      push @list_generated, keys %$temp_co;      push @list_generated, keys %$temp_co;
287    
288        print STDERR "Rechecking with inputs\n" if($debug);
289        if($break)
290        {
291            last;
292  }  }
293    }
294    print STDERR "Finished checking scenarios\n" if($debug);
295  foreach my $found (@list_generated)  foreach my $found (@list_generated)
296  {  {
297      if(defined $biomass_cpds{$found})      if(defined $biomass_cpds{$found})
# Line 185  Line 350 
350  {  {
351      if($biomass_cpds{$_} != 2)      if($biomass_cpds{$_} != 2)
352      {      {
353          print RESULTS "Biomass $_ failed to be generated using inputs.txt\n";          print RESULTS "Biomass $_ $compound_id_to_name{$_} failed to be generated using inputs.txt\n";
354      }      }
355      else      else
356      {      {
357          print OUT "$_\n";          print OUT "$_\t$compound_id_to_name{$_}\n";
358      }      }
359  }  }
360  close(RESULTS);  close(RESULTS);
# Line 216  Line 381 
381  close(SCEN_RESULTS);  close(SCEN_RESULTS);
382  close(OUT);  close(OUT);
383    
384  open(RESULTS_INPUT,">".$filebase."info_inputs.txt");  #open(RESULTS_INPUT,">".$filebase."info_inputs.txt");
385  foreach (sort keys %possible_problems)  #foreach (sort keys %possible_problems)
386  {  #{
387      if($possible_problems{$_} == 1 && !defined $good_compounds{$_})  #    if($possible_problems{$_} == 1 && !defined $good_compounds{$_})
388      {  #    {
389          print RESULTS_INPUT "Input $_ may be a false-positive. Perhaps a Scenario should generate this.\n";  #       print RESULTS_INPUT "Input $_ may be a false-positive. Perhaps a Scenario should generate this.\n";
390      }  #    }
391  }  #}
392  close(RESULTS_INPUT);  #close(RESULTS_INPUT);
393    
394  print STDERR "\tStage 2 - Complete! Results in info_inputs.txt, info_biomass.txt and info_scenarios.txt\n" if($debug);  print STDERR "\tStage 2 - Complete! Results in info_inputs.txt, info_biomass.txt and info_scenarios.txt\n" if($debug);
395    
# Line 233  Line 398 
398      my ($inputs,$cofactors) = @_;      my ($inputs,$cofactors) = @_;
399      my %new_inputs;      my %new_inputs;
400      my %new_cofactors;      my %new_cofactors;
401        my $break = 1;
402      foreach my $scenario (@scenarios)      foreach my $scenario (@scenarios)
403      {      {
404            if($scenarios_id{$scenario->get_id()} == 1)
405            {
406                next;
407            }
408          my $count = 0;          my $count = 0;
409          foreach my $substrate (@{$scenario->get_substrates_all()})          foreach my $substrate (@{$scenario->get_substrates_all()})
410          {          {
# Line 255  Line 425 
425          else          else
426          {          {
427              print STDERR "Scenario ".$scenario->get_scenario_name()." ran.\n" if($debug);              print STDERR "Scenario ".$scenario->get_scenario_name()." ran.\n" if($debug);
428                $break = 0;
429              ### here we want to mark what inputs we used              $scenarios_id{$scenario->get_id()} = 1;
             foreach (@{$scenario->get_substrates()})  
             {  
                 $inputs->{$_} = 2;  
             }  
   
430              $scenarios_used{$scenario->get_scenario_name()} = 1;              $scenarios_used{$scenario->get_scenario_name()} = 1;
431              foreach my $product (@{$scenario->get_products()})              foreach my $product (@{$scenario->get_products()})
432              {              {
# Line 273  Line 438 
438              }              }
439          }          }
440      }      }
441      #Add any inputs that aren't used to the return again      return (\%new_inputs,\%new_cofactors,$break);
     foreach (keys %$inputs)  
     {  
         if($inputs->{$_} !=2)  
         {  
             $new_inputs{$_} = 1;  
         }  
     }  
   
     return (\%new_inputs,\%new_cofactors);  
442  }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.6

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3