1. #!/usr/bin/perl -w
2. use strict;
3. use FBAMODELserver;
4.
5. # Reads the SEED genome-scale metabolic model of E. coli
6. # Runs flux variability analysis, flux balance analysis, and single gene knockout simulations in E. coli
7. # Prints all results to file
8.
9. #1.) Creating perl object which interfaces with the SEED server API
10. my $fbaObject = FBAMODELserver->new();
11.
12. #2.) Obtain a list of the reaction IDs in the E. coli model
13. my $reactionList = $fbaObject->get_reaction_id_list({id => "Seed83333.1"});
14.
15. #3.) Obtain a list of the compound IDs in the E. coli model
16. my $compoundList = $fbaObject->get_compound_id_list({id => "Seed83333.1"});
17.
18. #4.) Obtaining detailed data on E. coli reactions
19. my $reactionData = $fbaObject->get_reaction_data({"id" => $reactionList->{"Seed83333.1"},"model" => ["Seed83333.1"]});
20.
21. #5.) Obtaining detailed data on E. coli compounds
22. my $compoundData = $fbaObject->get_compound_data({"id" => $compoundList->{"Seed83333.1"},"model" => ["Seed83333.1"]});
23.
24. #6.) Running flux variability analysis on E. coli model while simulating growth in LB media
25. my $fvaOutput = $fbaObject->classify_model_entities({"parameters" => [{id=>"Seed83333.1",media=>"ArgonneLBMedia"}]});
26. #Placing fva output into a hash to simplify access
27. my $fvaHash;
28. for (my $i=0; $i < @{$fvaOutput->[0]->{entities}};$i++) {
29. $fvaHash->{substr($fvaOutput->[0]->{entities}->[$i],0,8)} = $fvaOutput->[0]->{classes}->[$i];
30. }
31.
32. #7.) Simulating growth of E. coli model in LB media
33. my $fbaOutput = $fbaObject->simulate_model_growth({"parameters" => [{id=>"Seed83333.1",media=>"Carbon-D-Glucose"}]});
34. #Placing fba output into a hash to simplify access
35. my $fbaHash;
36. for (my $i=0; $i < @{$fbaOutput->[0]->{entities}};$i++) {
37. $fbaHash->{$fbaOutput->[0]->{entities}->[$i]} = $fbaOutput->[0]->{fluxes}->[$i];
38. }
39.
40. #8.) Simulating single gene knockout in E. coli model during growth in LB media
41. my $KOOutput = $fbaObject->simulate_all_single_gene_knockout({"parameters" => [{id=>"Seed83333.1",media=>"ArgonneLBMedia"}]});
42.
43. #9.) Printing all compound data to output file CompoundTbl.txt
44. my $columns = ["DATABASE","NAME","FORMULA","CHARGE","FVA class","FBA uptake flux"];
45. open (OUTPUT, ">CompoundTbl.txt");
46. print OUTPUT join("\t",@{$columns})."\n";
47. for (my $i=0; $i < @{$compoundList->{"Seed83333.1"}}; $i++) {
48. for (my $j=0; $j < @{$columns}; $j++) {
49. if ($j > 0) {
50. print OUTPUT "\t";
51. }
52. if ($columns->[$j] eq "FVA class") {
53. if (defined($fvaHash->{$compoundList->{"Seed83333.1"}->[$i]})) {
54. print OUTPUT $fvaHash->{$compoundList->{"Seed83333.1"}->[$i]};
55. }
56. } elsif ($columns->[$j] eq "FBA uptake flux") {
57. if (defined($fbaHash->{$compoundList->{"Seed83333.1"}->[$i]})) {
58. print OUTPUT $fbaHash->{$compoundList->{"Seed83333.1"}->[$i]};
59. }
60. } else {
61. if (defined($compoundData->{$compoundList->{"Seed83333.1"}->[$i]}->{$columns->[$j]})) {
62. print OUTPUT join(", ",@{$compoundData->{$compoundList->{"Seed83333.1"}->[$i]}->{$columns->[$j]}});
63. }
64. }
65. }
66. print OUTPUT "\n";
67. }
68. close (OUTPUT);
69.
70. #10.) Printing all reaction data to output file ReactionTbl.txt
71. $columns = ["DATABASE","NAME","EQUATION","Seed83333.1 COMPARTMENT","Seed83333.1 ASSOCIATED PEG","Seed83333.1 DIRECTIONALITY","FVA class","FBA flux"];
72. open (OUTPUT, ">ReactionTbl.txt");
73. print OUTPUT join("\t",@{$columns})."\n";
74. for (my $i=0; $i < @{$reactionList->{"Seed83333.1"}}; $i++) {
75. for (my $j=0; $j < @{$columns}; $j++) {
76. if ($j > 0) {
77. print OUTPUT "\t";
78. }
79. if ($columns->[$j] =~ m/^Seed83333\.1\s(.+)/) {
80. my $columnName = $1;
81. if (defined($reactionData->{$reactionList->{"Seed83333.1"}->[$i]}->{"Seed83333.1"}->{$columnName})) {
82. print OUTPUT join(" or ",@{$reactionData->{$reactionList->{"Seed83333.1"}->[$i]}->{"Seed83333.1"}->{$columnName}});
83. }
84. } elsif ($columns->[$j] eq "FVA class") {
85. if (defined($fvaHash->{$reactionList->{"Seed83333.1"}->[$i]})) {
86. print OUTPUT $fvaHash->{$reactionList->{"Seed83333.1"}->[$i]};
87. }
88. } elsif ($columns->[$j] eq "FBA flux") {
89. if (defined($fbaHash->{$reactionList->{"Seed83333.1"}->[$i]})) {
90. print OUTPUT $fbaHash->{$reactionList->{"Seed83333.1"}->[$i]};
91. }
92. } else {
93. print OUTPUT $reactionData->{$reactionList->{"Seed83333.1"}->[$i]}->{$columns->[$j]}->[0];
94. }
95. }
96. print OUTPUT "\n";
97. }
98. close (OUTPUT);
99.
100. #11.) Printing essential gene predictions to output file GeneTbl.txt
101. open (OUTPUT, ">GeneTbl.txt");
102. print OUTPUT "Predicted essential E. coli genes\n";
103. for (my $i=0; $i < @{$KOOutput->[0]->{"essential genes"}}; $i++) {
104. print OUTPUT $KOOutput->[0]->{"essential genes"}->[$i]."\n";
105. }
106. close (OUTPUT);