#!/usr/bin/env perl

use strict;
use warnings;
use autodie;
use File::Basename;

my $dir = shift;

unless ($dir) {
	print "Usage: $0 <DIR>\n";
	print "DIR: directory for analysis\n";
	exit 0;
}

my @analysis_files = glob "$dir/*.tsv";
#print "@analysis_files\n";

my %res_all = (
	TP => 0,
	FP => 0,
	FN => 0
);

print "IND\tTP\tFP\tFN\tPPV/Precision\tTPR/Recall\tF1-score\n";

for my $analysis_file (sort comp @analysis_files) {
	my %res = (
		TP => 0,
		FP => 0,
		FN => 0
	);

	open my $fh, "<", $analysis_file;

	while (<$fh>) {
		chomp;
		my @f = split;
		if ($f[0] eq $f[5]) {
			$res{TP} ++;
			if ($f[4] =~ /HO/ && $f[9] =~ /HO/) {
				$res{TP} ++;
			} elsif ($f[4] =~ /HO/ && $f[9] =~ /HE/) {
				$res{FN} ++;
			} elsif ($f[4] =~ /HE/ && $f[9] =~ /H0/) {
				$res{FP} ++;
			}
		} elsif ($f[0] eq '-') {
			$res{FP} ++;
			if ($f[9] =~ /HO/) {
				$res{FP} ++;
			}
		} elsif ($f[5] eq '-') {
			$res{FN} ++;
			if ($f[4] =~ /HO/) {
				$res{FN} ++;
			}
		}
	}

	for (keys %res) {
		$res_all{$_} += $res{$_};
	}

	my $precision = $res{TP} / ($res{TP} + $res{FP});
	my $recall = $res{TP} / ($res{TP} + $res{FN});
	my $f1 = 2 * ($precision * $recall) / ($precision + $recall);

	printf "$analysis_file\t$res{TP}\t$res{FP}\t$res{FN}\t%.6f\t%.6f\t%.6f\n"
		=> $precision
		=> $recall
		=> $f1;

	close $fh;
}

my $precision = $res_all{TP} / ($res_all{TP} + $res_all{FP});
my $recall = $res_all{TP} / ($res_all{TP} + $res_all{FN});
my $f1 = 2 * ($precision * $recall) / ($precision + $recall);

printf "ALL\t$res_all{TP}\t$res_all{FP}\t$res_all{FN}\t%.6f\t%.6f\t%.6f\n"
	=> $precision
	=> $recall
	=> $f1;

sub comp {
	my $x = basename $a, '.tsv';
	my $y = basename $b, '.tsv';
	$x =~ s/ind//;
	$y =~ s/ind//;
	return $x <=> $y;
}
