#!/usr/bin/perl # # $Id: sim2lav,v 1.3 1991/05/25 05:46:14 schwartz Exp $ # die "Usage: simtolav x0 x1 y0 y1\n" unless $#ARGV == 3; ($original_x0, $original_x1, $original_y0, $original_y1) = @ARGV; if ($original_x0 < 1 || $original_y0 < 1) { die "Alignments must start at a non-negative offset.\n"; } # # Chomp on header # print "#:lav\n"; print "gen { \"simtolav\" }\n"; $upper = $lower = 'axis-label'; while () { last if /^Time/; last if /^\*/; $upper = $1 if /\s*Upper.*:\s*([\w\.]+)/; $lower = $1 if /\s*Lower.*:\s*([\w\.]+)/; } print "seq { \"$upper\" $original_x0 $original_x1\n"; print " \"$lower\" $original_y0 $original_y1 }\n"; print "des { \"description?\" }\n"; # # Munch on data # $xhi = $xlo = $xsc = ''; $score = 0.0; while () { last if /^Time/; next if /^\s*$/; if (/^\*/) { do report(); $xhi = $xlo = $xsc = ''; $score = 0; } elsif (/^\s*Similarity Score : ([\d.]+)/) { $score = $1; } elsif (/^\s*Begins at \((\d+),\s*(\d+)\) and Ends at \((\d+),\s*(\d+)\)/) { $x0 = $1; $y0 = $2; $x1 = $3; $y1 = $4; } elsif (/^\s*\d+/) { $hi = ; $hi =~ s/\s*\d+\s(.*)\n/\1/; $xhi = $xhi . $hi; $sc = ; $sc =~ s/\s{6}(.*)\n/\1/; $xsc = $xsc . $sc; $lo = ; $lo =~ s/\s*\d+\s(.*)\n/\1/; $xlo = $xlo . $lo; } } do report() if length($xhi) > 0; exit 0; # # print in lav format # sub report { $lop = 0; $scp = 0; $hip = 0; $len = 0; print "align { score $score begin $x0 $x1 end $y0 $y1\n"; for (;;) { $len = 0; $pt = 0; while ((substr($xlo,$lop,1) ne ' ') && (substr($xhi,$hip,1) ne ' ') && ($lop < length($xlo))) { ++$lop; ++$hip; ++$len; if (substr($xsc,$scp,1) eq '|') {++$pt;} ++$scp; } printf "line %d %d %d %d %f\n", $x0 + $original_x0 - 1, $y0 + $original_y0 - 1, $x0+$len-1 + $original_x0 - 1, $y0+$len-1 + $original_y0 - 1, ($pt)*100.0/$len; $x0 += $len; $y0 += $len; last if (length($xlo) <= $lop); while (substr($xhi,$hip,1) eq ' ') { ++$y0; ++$lop; ++$hip; ++$scp; } while (substr($xlo,$lop,1) eq ' ') { ++$x0; ++$lop; ++$hip; ++$scp; } } print "}\n"; }