WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / Utils / colorrna.pl
diff --git a/binaries/src/ViennaRNA/Utils/colorrna.pl b/binaries/src/ViennaRNA/Utils/colorrna.pl
new file mode 100644 (file)
index 0000000..748a955
--- /dev/null
@@ -0,0 +1,111 @@
+#!/usr/bin/perl -w
+# -*-CPerl-*-
+# Last changed Time-stamp: <2005-11-07 12:08:38 ivo>
+# $Id: colorrna.pl,v 1.1 2005/11/07 12:42:27 ivo Exp $
+# colorize a secondary structure plot with reliability annotation
+# from positional entropy
+use strict;
+use Getopt::Std;
+$main::VERSION = 1.0;
+$Getopt::Std::STANDARD_HELP_VERSION=1;
+
+our $opt_p;
+getopts('p');
+
+sub HELP_MESSAGE {
+  print STDERR "\nusage: $0 FOO_ss.ps FOO_dp.ps > FOO_css.ps\n";
+  print STDERR "For more details run\n\tperldoc -F $0\n";
+}
+
+HELP_MESSAGE() unless $#ARGV >0;
+my $macro_seen= 0;
+my %mfe = ();        # hash of mfe pairs
+my @ss_ps = ('',''); # head and tail of the ss.ps file
+
+my $n = swallow_ss_ps();    # read ss plot
+my %hsb = read_dp();   # read dot plot and compute entropies
+
+print $ss_ps[0];     # print head
+if (!$macro_seen) {
+  print <<_E_O_F_
+/hsb {
+    dup 0.3 mul 1 exch sub sethsbcolor
+} bind def
+/colorpair { % i j hue sat colorpair
+   % draw basepair i,j in color
+   % 1 index 0.00 ne {
+   gsave
+   newpath
+   hsb
+   fsize setlinewidth
+   1 sub coor exch get aload pop moveto
+   1 sub coor exch get aload pop lineto
+   stroke
+   grestore
+   % } if
+} bind def
+_E_O_F_
+}
+foreach my $k (keys %hsb) {
+  my ($i,$j) = split($;,$k);
+  print "$i $j ", $hsb{$k}->[0], " ", $hsb{$k}->[1]," colorpair\n";
+}
+print $ss_ps[1];  # print main part
+print $ss_ps[2];  # print showpage etc
+
+sub swallow_ss_ps {
+  # read the secondary structure plot
+  my $length=0;
+  my $tail=0;
+  while (<>) {
+    $macro_seen=1 if /colorpair/;
+    $length ++ if /^\/coor/ .. /^\] def/;
+    if (/^\/pairs/ .. /^\] def/) {
+      $mfe{$1,$2}=1 if /(\d+)\s+(\d+)/;
+    }
+    next if /\d gmark$/;
+    $tail++ if /^drawpairs/;
+    s/^drawpairs/% drawpairs/;
+    $tail++ if /^showpage/;
+    $ss_ps[$tail] .= $_;
+    last if eof;
+  }
+  return $length-2;
+}
+
+sub read_dp {
+  # read dot plot and extract hsb values
+  my %hsb;
+  while (<>) {
+    next unless /lbox$/;
+    my @F = split;
+    $hsb{$F[3],$F[4]} = [$F[0], $F[1]];
+  }
+  return %hsb;
+}
+
+=head1 NAME
+
+colorrna - colorize an alirna.ps file
+
+=head1 SYNOPSIS
+
+   colorrna.pl alirna.ps alidot.ps > colorRNA.ps
+
+=head1 DESCRIPTION
+
+colorrna reads an RNA secondary structure plot and a dot plot
+containing pair probabilities and covariance annotation as, produced
+by C<RNAalifold -p>, and writes a new secondary structure plot with
+color annotated seqence annotation to stdout.  The color annotation
+is taken directly from the color dot plot file.
+
+=head1 AUTHOR
+
+Ivo L. Hofacker <ivo@tbi.univie.ac.at>
+Stefan Washietl <wash@tbi.univie.ac.at>
+
+=cut
+
+#  End of file
+