Extract true/false positive/negatives from a merged SURIVOR VCF.

def _comparison_stats_from_merge(in_file, stats, svcaller, data):
    """Extract true/false positive/negatives from a merged SURIVOR VCF.
    """
    truth_stats = {"tp": [], "fn": [], "fp": []}

    samples = ["truth" if x.endswith("-truth") else "eval" for x in vcfutils.get_samples(in_file)]
    with open(in_file) as in_handle:
        for call in (l.rstrip().split("\t") for l in in_handle if not l.startswith("#")):
            supp_vec_str = [x for x in call[7].split(";") if x.startswith("SUPP_VEC=")][0]
            _, supp_vec = supp_vec_str.split("=")
            calls = dict(zip(samples, [int(x) for x in supp_vec]))
            if calls["truth"] and calls["eval"]:
                metric = "tp"
            elif calls["truth"]:
                metric = "fn"
            else:
                metric = "fp"
            truth_stats[metric].append(_summarize_call(call))
    return _to_csv(truth_stats, stats, dd.get_sample_name(data), svcaller)