[Bio] / FluxMapMaker / Rbreaker3 Repository:
ViewVC logotype

Annotation of /FluxMapMaker/Rbreaker3

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download)

1 : efrank 1.1 #!/usr/bin/perl
2 :     #
3 : efrank 1.2 # May 19, 2003 mh add stoichiometry
4 : sheradon 1.3 # July 21 2003 ls proper arrowheads on bidirectional edges
5 : efrank 1.2
6 : efrank 1.1 $unique = 100;
7 :    
8 :     print "digraph PW {\n";
9 : efrank 1.2 print "size=\"27,15\"\n";
10 : efrank 1.4 #print "rankdir=\"LR\"\n";
11 : efrank 1.1 print "node [shape=box, height=0.1]\n";
12 : sheradon 1.3 #print "graph [ratio=0.75]\n";
13 :     print "graph [fontsize=10]\n";
14 : efrank 1.1
15 :     while (<STDIN>) {
16 : sheradon 1.3 chop($_);
17 :     @parts = split(' ', $_);
18 :     $key = $parts[0];
19 :     if ($key EQ "X") {
20 :     @multi_node = split(':',$parts[1]);
21 :     foreach $X (@multi_node) {
22 :     $X =~ s/^\s*//; # remove leading and trailing whitespace
23 :     $X =~ s/\s*$//;
24 :     $species = $X; # pick off species and label it
25 :     $species =~ s/\(.*//;
26 :     $species_nodeness{$species} = "MULTI_NODE";
27 :     if ($X =~ /.*\((.*)\).*/) {
28 :     $species_color{$species} = $1;
29 :     }
30 :     }
31 :     } elsif ($key EQ "R") {
32 :     $enzyme = $parts[1];
33 :     $enzyme=~ s/^\s*"*\s*//;
34 :     $enzyme=~ s/\s*"*\s*$//;
35 :     $gene = $parts[2];
36 :     $reaction = $parts[3];
37 :     $EC_number = $parts[4];
38 :     $EC_number=~ s/^\s*"*\s*//;
39 :     $EC_number=~ s/\s*"*\s*$//;
40 :    
41 :     if ($reaction =~ /(.*) *<-> *(.*)/) {
42 :     $direction = 'BOTH';
43 :     $inputs = $1;
44 :     $outputs = $2;
45 :     } elsif ($reaction =~ /(.*) *-> *(.*)/) {
46 :     $direction = 'FORWARD';
47 :     $inputs = $1;
48 :     $outputs = $2;
49 :     } elsif ($reaction =~ /(.*) *<- *(.*)/) {
50 :     $direction = 'BACKWARD';
51 :     $inputs = $1;
52 :     $outputs = $2;
53 :     } else {
54 :     $direction = 'NEITHER';
55 :     $inputs = 'FROM';
56 :     $outputs = 'TO';
57 :     }
58 :    
59 :     # printf "$direction:\n $inputs\n $outputs\n";
60 : efrank 1.1
61 : sheradon 1.3 @inputs = split('\+', $inputs);
62 :     @outputs = split('\+', $outputs);
63 : efrank 1.1
64 : sheradon 1.3 $in_node = "node$unique";
65 :     print "$in_node [label=\"\", style=invis];\n";
66 :     $unique = $unique + 1;
67 :     $out_node = "node$unique";
68 :     print "$out_node [label=\"\", style=invis];\n";
69 :     $unique = $unique + 1;
70 : efrank 1.1
71 : sheradon 1.3 foreach $term (@inputs) {
72 :     $term =~ s/^\s*//; # strip leading and trailing blanks
73 :     $term =~ s/\s*$//;
74 :     @bits = split(' ',$term);
75 :     if ($#bits == 0) {
76 :     $stoich = 1;
77 :     $inney = $bits[0];
78 :     } else {
79 :     $stoich = $bits[0];
80 :     $inney = $bits[1];
81 :     }
82 :     $multi_node = 0;
83 :     if (exists $species_nodeness{$inney}) {
84 :     if ($species_nodeness{$inney} EQ "MULTI_NODE") {
85 :     $multi_node = 1;
86 :     }
87 :     }
88 :     $create_new_node = 0;
89 :     if (exists $species_hash{$inney}) {
90 :     if ($multi_node) {
91 :     $create_new_node = 1;
92 :     }
93 :     } else {
94 :     $create_new_node = 1;
95 :     }
96 :     if ($create_new_node) {
97 :     $this_node = "node$unique";
98 :     $species_hash{$inney} = "$this_node";
99 :     $unique = $unique+1;
100 :     if ($multi_node) {
101 :     if (exists $species_color{$inney}) {
102 :     print "$this_node [label = \"$inney\", color=$species_color{$inney}, style=filled];\n";
103 :     } else {
104 :     print "$this_node [label = \"$inney\"];\n";
105 :     }
106 :     } else {
107 :     print "$this_node [label = \"$inney\", color = \"light blue\", style=filled];\n";
108 :     }
109 :     } else {
110 :     $this_node = $species_hash{$inney};
111 :     }
112 :     # Added by Larry: if bidirectional, make first part of edge (inputs --
113 :     # in_node) have an arrowhead at the beginning
114 :     if($direction EQ "BOTH") {
115 :     print "$this_node -> $in_node [dir=\"back\"];\n";
116 :     } else {
117 :     print "$this_node -> $in_node;\n";
118 :     }
119 : efrank 1.1 }
120 : sheradon 1.3
121 :     print "$in_node -> $out_node [label=\"$EC_number\", URL=\"E\"];\n";
122 : efrank 1.1
123 : sheradon 1.3 foreach $term (@outputs) {
124 :     $term =~ s/^\s*//; # strip leading and trailing blanks
125 :     $term =~ s/\s*$//;
126 :     @bits = split(' ',$term);
127 :     if ($#bits == 0) {
128 :     $stoich = 1;
129 :     $outey = $bits[0];
130 :     } else {
131 :     $stoich = $bits[0];
132 :     $outey = $bits[1];
133 :     }
134 :     $multi_node = 0;
135 :     if (exists $species_nodeness{$outey}) {
136 :     if ($species_nodeness{$outey} EQ "MULTI_NODE") {
137 :     $multi_node = 1;
138 :     }
139 :     }
140 :     $create_new_node = 0;
141 :     if (exists $species_hash{$outey}) {
142 :     if ($multi_node) {
143 :     $create_new_node = 1;
144 :     }
145 :     } else {
146 :     $create_new_node = 1;
147 :     }
148 :     if ($create_new_node) {
149 :     $this_node = "node$unique";
150 :     $species_hash{$outey} = "$this_node";
151 :     $unique = $unique+1;
152 :     if ($multi_node) {
153 :     if (exists $species_color{$outey}) {
154 :     print "$this_node [label = \"$outey\", color=$species_color{$outey}, style=filled];\n";
155 :     } else {
156 :     print "$this_node [label = \"$outey\"];\n";
157 :     }
158 :     } else {
159 :     print "$this_node [label = \"$outey\", color = \"light blue\", style=filled];\n";
160 :     }
161 :     } else {
162 :     $this_node = $species_hash{$outey};
163 :     }
164 :     print "$out_node -> $this_node;\n";
165 : efrank 1.1 }
166 :     }
167 :     }
168 :    
169 :     print "}\n";
170 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3