[Bio] / FigWebServices / ma_to_tf_nr.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/ma_to_tf_nr.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (view) (download)

1 : mkubal 1.1 # -*- perl -*-
2 :    
3 :     =pod
4 :    
5 :     =head1 protein_sets_2.cgi
6 :    
7 :     Find transcription factors for affymetrix spot ids
8 :    
9 :     =cut
10 :    
11 :     use FIG;
12 :     use HTML;
13 :     use CGI;
14 :     my $cgi=new CGI;
15 :     use LWP::Simple qw(!head); # see the caveat in perldoc LWP about importing two head methods.
16 :    
17 :     $fig = new FIG;
18 :     my $html = [];
19 :    
20 :     unshift(@$html, "<TITLE>Find Transcription Factors for Expressed Genes</TITLE>\n");
21 :    
22 :     my $id_to_ratio;
23 :     my $inputs;
24 :     if ($cgi->param('request') )
25 :     {
26 :     my $input =$cgi->param('proteins');
27 :     my @inputs = split("\n",$input);
28 :    
29 :     if ($cgi->upload('fileupload'))
30 :     {
31 :     my $fh=$cgi->upload('fileupload');
32 :     @inputs = <$fh> ;
33 :     }
34 :    
35 :     $given = [@inputs];
36 :     $id_to_ratio = &parse_inputs($given);
37 :    
38 :     }
39 :    
40 :     if ($id_to_ratio && $cgi->param('request') eq "Find Transcription Factors")
41 :     {
42 :     &find_tfs($fig,$cgi,$html,$id_to_ratio);
43 :     }
44 :    
45 :     if($cgi->param('request') eq "Find Exclusive Combinations")
46 :     {
47 :     &analyze_combinations($fig,$cgi,$html);
48 :     }
49 :    
50 :     if ($id_to_ratio && $cgi->param('request') eq "Find Most Frequent Factors")
51 :     {
52 :     &find_most_frequent($fig,$cgi,$html,$tag_to_id);
53 :     }
54 :    
55 :     else
56 :     {
57 :     &show_initial($fig,$cgi,$html);
58 :     &HTML::show_page($cgi,$html,1);
59 :     exit;
60 :     }
61 :    
62 :     sub show_initial {
63 :     my ($fig,$cgi,$html)=@_;
64 :     # generate a blank page
65 :     push @$html,
66 :     $cgi->start_multipart_form(),
67 :     "<p>Enter affymetrix spot id, expression ratio pairs separated by a space or a tab</p>\n",
68 :     "<p>",
69 :     "<b>Paste pairs here:</b><br>\n",
70 :     $cgi->textarea(-name=>"proteins", -rows=>10, -columns=>40), "<br>\n",
71 :     "<br><b>Or choose a file here:</b><br>\n",
72 :     $cgi->filefield(-name=>"fileupload", -size=>50), "<br>\n",
73 :     $cgi->submit(-name=>'request', -value=>'Find Transcription Factors'),
74 :     $cgi->submit(-name=>'request', -value=>'Find Exclusive Combinations'),
75 :     $cgi->reset, $cgi->end_form;
76 :     return $html;
77 :     }
78 :    
79 :     sub find_tfs
80 :     {
81 :     my ($fig,$cgi,$html,$spotid_to_ratio)=@_;
82 :     $new_html = [];
83 :     $dir = "/home/mkubal/public_html";
84 :    
85 :     my @ids = keys(%{$spotid_to_ratio});
86 :    
87 :     open(OUT2,">$dir/tfs_to_ratio.txt");
88 :    
89 :     open(IN,"$dir/spotid_to_refseq.txt");
90 :     %spotid_to_refseq;
91 :     while ($_ = <IN>){
92 :     chomp($_);
93 :     #print STDERR "spot_to_refseq:$_\n";
94 :     @temp = split("\t",$_);
95 :     $spotid_to_refseq{$temp[0]} = $temp[1];
96 :     }
97 :    
98 :     open(IN2,"$dir/refseq_to_transfactor.txt.nonredundant");
99 :     %refseq_to_tf;
100 :     while ($_ = <IN2>){
101 :     chomp($_);
102 :     #print STDERR "refseq_to_transfactor:$_\n";
103 :     @temp = split("\t",$_);
104 :     if($refseq_to_tf{$temp[0]}){
105 :     $ref = $refseq_to_tf{$temp[0]};
106 :     push(@$ref,$temp[1]);
107 :     }
108 :     else{
109 :     $refseq_to_tf{$temp[0]} = [$temp[1]];
110 :     }
111 :     }
112 : mkubal 1.2 close(IN2);
113 : mkubal 1.1
114 :     push(@$new_html,"<HTML><HEAD>
115 :     <TITLE>strep</TITLE>
116 :     <META NAME='generator' CONTENT='YokMap 1.0.1'>
117 :     <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1'>
118 :     </HEAD>
119 :     <BODY BGCOLOR='#ffffff'>");
120 :    
121 :     push(@$new_html,"<TABLE border><TR><TH>Expression Ratio</TH><TH>Transcription Factor(s)</TH><TH>Affymetrix Spot ID</TH><TH>RefSeq ID</TH></TR>");
122 :    
123 :     my $row_string = "";
124 :     foreach my $id (@ids)
125 :     {
126 :     my $ratio = $spotid_to_ratio->{$id};
127 :     my $refseq = $spotid_to_refseq{$id};
128 :     my $tfs_ref = $refseq_to_tf{$refseq};
129 :    
130 :     foreach $tfs (@$tfs_ref){
131 :     $row_string = "<TR><TD>$ratio</TD><TD>$tfs</TD><TD>$id</TD><TD>$refseq</TD></TR>";
132 :     push(@$new_html,$row_string);
133 :     }
134 :    
135 :     if($tfs_ref){
136 :     foreach $tfs (@$tfs_ref){
137 :     print OUT2 "$tfs\t$ratio\n";
138 :     }
139 :     }
140 :    
141 :     }
142 :    
143 :     close(OUT2);
144 :    
145 :     push(@$new_html,"</TABLE>");
146 :     #push(@$new_html,
147 :     # "<br><br>",
148 :     # $cgi->submit(-name=>'request', -value=>'Find Exclusive Combinations'),
149 :     # $cgi->submit(-name=>'request', -value=>'Find Most Frequent Factors'));
150 :    
151 :    
152 :     &HTML::show_page($cgi,$new_html);
153 :     exit;
154 :     }
155 :    
156 :     sub analyze_combinations
157 :     {
158 :     my ($fig,$cgi,$html)=@_;
159 :     $new_html = [];
160 : mkubal 1.2 %significant;
161 : mkubal 1.1 $dir = "/home/mkubal/public_html";
162 :    
163 : mkubal 1.2 open(IN2,"$dir/refseq_to_transfactor.txt.nonredundant");
164 :     %tfs_to_refseq;
165 :     while ($_ = <IN2>){
166 :     chomp($_);
167 :     @temp = split("\t",$_);
168 :     if($tfs_to_refseq{$temp[1]}){
169 :     $ref = $tfs_to_refseq{$temp[1]};
170 :     push(@$ref,$temp[0]);
171 :     }
172 :     else{
173 :     $tfs_to_refseq{$temp[1]} = [$temp[0]];
174 :     }
175 :     }
176 :     close(IN2);
177 :    
178 :    
179 : mkubal 1.1 print STDERR "made it here\n";
180 :     open(IN,"$dir/tfs_to_ratio.txt");
181 :     %tfs_combinations;
182 :     %tfs_counts;
183 :    
184 :     %tfs_expected;
185 :     open(IN3,"$dir/stats.txt.nonredundant");
186 :     open(SUMMARY,">$dir/nonredundant_stats.summary");
187 :     while ($_ = <IN3>){
188 :     @temp = split("\t",$_);
189 :     $expected = $temp[2];
190 :     chomp($expected);
191 :     $tfs_expected{$temp[0]} = $expected;
192 :     }
193 :     close(IN3);
194 :    
195 :     my @lines;
196 :     while ($_ = <IN>){
197 :     push(@lines,$_);
198 :     #print "input line:$_\n";
199 :     chomp($_);
200 :     @temp = split("\t",$_);
201 :     $tfs_combinations{$temp[0]} = 1;
202 :     }
203 :     close(IN);
204 :    
205 :     @negative_exclusives;
206 :     @positive_exclusives;
207 : mkubal 1.2 @therest;
208 : mkubal 1.1
209 :     foreach my $k (keys(%tfs_combinations)){
210 :     print STDERR "k:$k\n";
211 :     $sign = "not_set";
212 :     $exclusive = 1;
213 :     foreach $l (@lines){
214 :     @temp = split("\t",$l);
215 :     $tfs = $temp[0];
216 :     $ratio = $temp[1];
217 :     if($k eq $tfs){
218 :     if($tfs_counts{$k}){$tfs_counts{$k} = $tfs_counts{$k} + 1}
219 :     else{$tfs_counts{$k} = 1}
220 :    
221 :     if($sign eq "not_set"){
222 :     if($ratio < 0){$sign = "negative"}
223 :     else{$sign = "positive"}
224 :     }
225 :     else{
226 :     $previous_sign = $sign;
227 :     if($ratio < 0){$sign = "negative"}
228 :     else{$sign = "positive"}
229 :     if($previous_sign ne $sign){$exclusive =0}
230 :     }
231 :     }
232 :     }
233 :    
234 :     if($exclusive){
235 :     if($sign eq "positive"){
236 :     push(@positive_exclusives,$k)
237 :     }
238 :     else{push(@negative_exclusives,$k)}
239 :     }
240 : mkubal 1.2 else{push(@therest,$k)}
241 : mkubal 1.1 }
242 :     push(@$new_html,"<HTML><HEAD>
243 :     <TITLE>strep</TITLE>
244 :     <META NAME='generator' CONTENT='YokMap 1.0.1'>
245 :     <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1'>
246 :     </HEAD>
247 :     <BODY BGCOLOR='#ffffff'>");
248 :    
249 :     push(@$new_html,"<TABLE border><TR><TH>UP Transcription Factor Combinations</TH><TH>Number of Genes</TH><TH>Observed/Expected</TH></TR>");
250 :    
251 :     foreach my $tfs (@positive_exclusives){
252 :     my $count = $tfs_counts{$tfs};
253 :     my $observed = $count * (1/2439);
254 :     my $expected = $tfs_expected{$tfs};
255 :     my $ratio = $observed/$expected;
256 : mkubal 1.2 if($ratio > 2 ){ $significant{$tfs} = $ratio};
257 : mkubal 1.1 my $row_string = "<TR><TD>$tfs</TD><TD>$count</TD><TD>$ratio</TD></TR>";
258 :     push(@$new_html,$row_string);
259 :     print SUMMARY "UP\t$tfs\t$observed\t$expected\t$ratio\n";
260 : mkubal 1.2
261 : mkubal 1.1 }
262 :    
263 :     push(@$new_html,"</TABLE>");
264 :    
265 :     push(@$new_html,"<br><br>");
266 :    
267 :     push(@$new_html,"<TABLE border><TR><TH>DOWN Transcription Factor Combinations</TH><TH>Number of Genes</TH><TH>Observed/Expected</TH></TR>");
268 :    
269 :     foreach my $tfs (@negative_exclusives)
270 :     {
271 :     my $count = $tfs_counts{$tfs};
272 :     my $observed = $count * (1/2439);
273 :     my $expected = $tfs_expected{$tfs};
274 :     my $ratio = $observed/$expected;
275 : mkubal 1.2 if($ratio > 2 ){ $significant{$tfs} = $ratio};
276 : mkubal 1.1 my $row_string = "<TR><TD>$tfs</TD><TD>$count</TD><TD>$ratio</TD></TR>";
277 :     push(@$new_html,$row_string);
278 :     print SUMMARY "DOWN\t$tfs\t$observed\t$expected\t$ratio\n";
279 : mkubal 1.2 }
280 :    
281 :     push(@$new_html,"</TABLE>");
282 :    
283 :     push(@$new_html,"<br><br>");
284 :    
285 :     push(@$new_html,"<TABLE border><TR><TH>MIXED Transcription Factor Combinations</TH><TH>Number of Genes</TH><TH>Observed/Expected</TH></TR>");
286 :    
287 :     foreach my $tfs (@therest)
288 :     {
289 :     my $count = $tfs_counts{$tfs};
290 :     my $observed = $count * (1/2439);
291 :     my $expected = $tfs_expected{$tfs};
292 :     my $ratio = $observed/$expected;
293 :     if($ratio > 2 ){ $significant{$tfs} = $ratio};
294 :     my $row_string = "<TR><TD>$tfs</TD><TD>$count</TD><TD>$ratio</TD></TR>";
295 :     push(@$new_html,$row_string);
296 :     print SUMMARY "MIXED\t$tfs\t$observed\t$expected\t$ratio\n";
297 :     }
298 : mkubal 1.1
299 : mkubal 1.2 push(@$new_html,"</TABLE>");
300 :    
301 :     push(@$new_html,"<br><br>");
302 :    
303 :     push(@$new_html,"<TABLE border><TR><TH>SIGNIFICANT Transcription Factor Combinations</TH><TH>RefSeq ID</TH><TH>Observed/Expected</TH></TR>");
304 :    
305 :    
306 :     @sorted = sort {$b <=> $a} values(%significant);
307 :     %sorted_hash;
308 :     foreach $s (values(%significant)){
309 :     $sorted_hash{$s} = 1;
310 :     }
311 :    
312 :     @final;
313 :     %already_in;
314 :     foreach $s (@sorted){
315 :     foreach $tfs (keys(%significant)){
316 :     if($already_in{$tfs}){ $do_nothing = 1}
317 :     else{
318 :     $ratio = $significant{$tfs};
319 :     if( $ratio >= $s){
320 :     push(@final,$tfs);
321 :     $already_in{$tfs} = 1;
322 :     }
323 :     }
324 :     }
325 :     }
326 :    
327 :     foreach my $tfs (@final)
328 :     {
329 :     my $ids = $tfs_to_refseq{$tfs};
330 :     @id_strings = ();
331 :     foreach $id (@$ids){
332 :     $id_string ="<a href='http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=NucCore&cmd=search&term=$id'>$id</a>";
333 :     push(@id_strings,$id_string);
334 :     }
335 :    
336 :     $ids_line = join(",",@id_strings);
337 :     my $ratio = $significant{$tfs};
338 :     my $row_string = "<TR><TD>$tfs</TD><TD>$ids_line</TD><TD>$ratio</TD></TR>";
339 :     push(@$new_html,$row_string);
340 :     print SUMMARY "SIGNIFICANT\t$tfs\t$id\t$ratio\n";
341 :     }
342 :    
343 :     push(@$new_html,"</TABLE>");
344 :    
345 :     &HTML::show_page($cgi,$new_html);
346 :     exit;
347 : mkubal 1.1
348 :     }
349 :    
350 :    
351 :     sub parse_inputs
352 :     {
353 :    
354 :     my ($given) =@_;
355 :     my $hash;
356 :     foreach my $g (@$given)
357 :     {
358 :     my $id ="";
359 :     my $ratio = "";
360 :    
361 :     if ($g =~/(.*?)(\t|\s+)(.*)/)
362 :     {
363 :     $id = $1;
364 :     $ratio = $3;
365 :     }
366 :    
367 :     $hash{$id} = $ratio;
368 :     }
369 :    
370 :     return \%hash;
371 :    
372 :     }
373 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3