#!/usr/local/bin/perl

@lattices = (# Random with Manual Grammar
	     "/temuco/usr3/eepeter/heb20050207/oh-nolimits-manual-random.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-manual-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-manual-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-manual-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-manual-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-manual-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-manual-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-manual-random2.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-manual-random2.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-manual-random2.ltc",
#	     );

#@lattices = (# Random with Learned Grammar
	     "/temuco/usr3/eepeter/heb20050207/oh-nolimits-learned-random.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-learned-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-learned-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-learned-random0.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-learned-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-learned-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-learned-random1.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-learned-random2.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-learned-random2.ltc",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-learned-random2.ltc",
#	     );

#@lattices = (# Regular pruning with learned grammar
	     "/temuco/usr3/eepeter/heb20050207/oh-nolimits-learned.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-learned.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-learned.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-learned.ltc.gz",
	     # Regular pruning with manual grammar
	     "/temuco/usr3/eepeter/heb20050207/oh-nolimits-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits3-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-limits2-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050207/oh-lex3-manual.ltc.gz");

@lattices = ("/temuco/usr3/eepeter/heb20050225_prec/oh-nolimits-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225_prec/oh-limits3-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225_prec/oh-limits2-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225_prec/oh-lex3-manual.ltc.gz",

	     "/temuco/usr3/eepeter/heb20050225/oh-nolimits-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits3-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits3-manual-random0.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits3-manual-random1.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits3-manual-random2.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits2-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits2-manual-random0.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits2-manual-random1.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-limits2-manual-random2.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-lex3-manual.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-lex3-manual-random0.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-lex3-manual-random1.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050225/oh-lex3-manual-random2.ltc.gz",
#	     );
    
#@lattices = (
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-noarcscore.ltc",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0.ltc",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1.ltc",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2.ltc");

@lattices = ("/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-try1.ltc",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-try2.ltc",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-try3.ltc"
	     );

@lattices = ("/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-rand0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-rand0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-rand0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-score0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-score0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0-score0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore0.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-rand0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-rand0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-rand0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-score0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-score0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1-score0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore1.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-rand0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-rand0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-rand0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-score0.25.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-score0.5.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2-score0.75.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-arcscore2.ltc.gz",
	     "/temuco/usr3/eepeter/heb20050226/oh-nolimits-manual-noarcscore.ltc"
	     );

@lattices = ("/temuco/usr3/eepeter/heb20050207/oh-nolimits-manual-fulltrace.ltc");



$dofix = 1;

foreach $lattice (@lattices) {

    if (!-e $lattice) {
	if (-e $lattice . ".gz") {
	    $lattice .= ".gz";
	} else {
	    print "Lattice not found $lattice\n";
	    next;
	}
    }
    print "LATTICE $lattice\n";

    ($base) = ($lattice =~ m/([^\/]+)$/);
    #print "BASE $base\n";

    if ($lattice =~ m/\.gz/) {
	open(LTC, "gunzip -c $lattice |") or die $!;
	($fixed) = ($base =~ m/^(.+?)\.gz$/);
    } else {
	open(LTC, "$lattice") or die $!;
	$fixed = $base;
    }
    
    $arccount = 0;

    #print "FIXED $fixed\n";

    $fixedlattice = "/avenue/usr2/shared/Evaluation/MEMT/$fixed";
    
    open(FIX, "> $fixedlattice") or die $!;
    
    while ($line = <LTC>) {
	if ($line =~ m/^\((\d+)\s+(\d+)\s+\"([^\"]*)\"\s+(\S+)\s+\"([^\"]*)\"\s+\"(.*?)\"\)/) {
	    ($start, $end, $tgt, $oldscore, $src, $trace) = 
		($line =~ m/^\((\d+)\s+(\d+)\s+\"([^\"]*)\"\s+(\S+)\s+\"([^\"]*)\"\s+\"\@?(.*?)\"\)/);
	    $arccount++;
	    if ($dofix == 1) {
		if ($trace =~ m/^\(/) {
		    $trace =~ m/^[\(]+([^,]+),\d+/;
		    $trace = "\@" . $1;
		} elsif ($trace =~ m/,/) {
		    $trace =~ s/,\d*//;
		} elsif ($trace =~ m/^[^\@]/) {
		    $trace = "\@$trace";
		}
		if (!defined($seen{"$start $end $tgt"})) {
		    print FIX "($start $end \"$tgt\" 1 \"$src\" \"$trace\")\n";
		    $seen{"$start $end $tgt"} = 1;
		}
	    } else {
		print FIX $line;
	    }
	} else {
	    print FIX $line;
	}
	if ($line =~ m/^\)/) {
	    %seen = ();
	}
    }
    
    
    
    close(LTC);
    close(FIX);
    
    print "$arccount\t\n";

    chdir "/avenue/usr2/shared/Evaluation/MEMT";

    open(SCORE, "/avenue/usr2/shared/Evaluation/MEMT/bin/HebrewDecoder.test.sh $fixed 2> /dev/null |") or die $!;
    while ($line = <SCORE>) {
	if ($line =~ m/^BLEU,/) {
	    $line =~ m/^BLEU,(.+)$/;
	    $bleu = $1;
	    print $line;

	} elsif ($line =~ m/^Modified/) {
	    $line =~ m/^Modified BLEU,(.+)$/;
	    $modified = $1;
	    print $line;

	} elsif ($line =~ m/^Score,/) {
	    $line =~ m/^Score,(.*)$/;
	    $meteor = $1;
	    print $line;
	}
	#print "SCORE: $line";
    }
    print "$meteor\t$bleu\t$modified\n\n";
    close(SCORE);

    #print STDERR "Deleting $fixedlattice\n";
    unlink($fixedlattice);
    unlink($fixedlattice . ".prob");
    unlink($fixedlattice . ".clean.prob");

}
