def _run_rtg_eval(vrn_file, rm_file, rm_interval_file, base_dir, data, validate_method):
    """Run evaluation of a caller against the truth set using rtg vcfeval.
    """
    out_dir = os.path.join(base_dir, "rtg")
    if not utils.file_exists(os.path.join(out_dir, "done")):
        if os.path.exists(out_dir):
            shutil.rmtree(out_dir)
        vrn_file, rm_file, interval_bed = _prepare_inputs(vrn_file, rm_file, rm_interval_file, base_dir, data)

        rtg_ref = tz.get_in(["reference", "rtg"], data)
        if isinstance(rtg_ref, dict) and "base" in rtg_ref:
            rtg_ref = os.path.dirname(rtg_ref["base"])
        assert rtg_ref and os.path.exists(rtg_ref), ("Did not find rtg indexed reference file for validation:\n%s\n"
                                                     "Run bcbio_nextgen.py upgrade --data --aligners rtg" % rtg_ref)
        # handle CWL where we have a reference to a single file in the RTG directory
        if os.path.isfile(rtg_ref):
            rtg_ref = os.path.dirname(rtg_ref)

        # get core and memory usage from standard configuration
        threads = min(dd.get_num_cores(data), 6)
        resources = config_utils.get_resources("rtg", data["config"])
        memory = config_utils.adjust_opts(resources.get("jvm_opts", ["-Xms500m", "-Xmx1500m"]),
                                          {"algorithm": {"memory_adjust": {"magnitude": threads,
                                                                           "direction": "increase"}}})
        jvm_stack = [x for x in memory if x.startswith("-Xms")]
        jvm_mem = [x for x in memory if x.startswith("-Xmx")]
        jvm_stack = jvm_stack[0] if len(jvm_stack) > 0 else "-Xms500m"
        jvm_mem = jvm_mem[0].replace("-Xmx", "") if len(jvm_mem) > 0 else "3g"
        cmd = ["rtg", "vcfeval", "--threads", str(threads),
               "-b", rm_file, "--bed-regions", interval_bed,
               "-c", vrn_file, "-t", rtg_ref, "-o", out_dir]
        if validate_method == "rtg-squash-ploidy":
            cmd += ["--squash-ploidy"]
        rm_samples = vcfutils.get_samples(rm_file)
        if len(rm_samples) > 1 and dd.get_sample_name(data) in rm_samples:
            cmd += ["--sample=%s" % dd.get_sample_name(data)]
        cmd += ["--vcf-score-field='%s'" % (_pick_best_quality_score(vrn_file))]
        mem_export = "%s export RTG_JAVA_OPTS='%s' && export RTG_MEM=%s" % (utils.local_path_export(),
                                                                            jvm_stack, jvm_mem)
        cmd = mem_export + " && " + " ".join(cmd)
        do.run(cmd, "Validate calls using rtg vcfeval", data)
    out = {"fp": os.path.join(out_dir, "fp.vcf.gz"),
           "fn": os.path.join(out_dir, "fn.vcf.gz")}
    tp_calls = os.path.join(out_dir, "tp.vcf.gz")
    tp_baseline = os.path.join(out_dir, "tp-baseline.vcf.gz")
    if os.path.exists(tp_baseline):
        out["tp"] = tp_baseline
        out["tp-calls"] = tp_calls
    else:
        out["tp"] = tp_calls
    return out
def _run_rtg_eval ( vrn_file , rm_file , rm_interval_file , base_dir , data , validate_method ) : out_dir = os . path . join ( base_dir , "rtg" ) if not utils . file_exists ( os . path . join ( out_dir , "done" ) ) : if os . path . exists ( out_dir ) : shutil . rmtree ( out_dir ) vrn_file , rm_file , interval_bed = _prepare_inputs ( vrn_file , rm_file , rm_interval_file , base_dir , data ) rtg_ref = tz . get_in ( [ "reference" , "rtg" ] , data ) if isinstance ( rtg_ref , dict ) and "base" in rtg_ref : rtg_ref = os . path . dirname ( rtg_ref [ "base" ] ) assert rtg_ref and os . path . exists ( rtg_ref ) , ( "Did not find rtg indexed reference file for validation:\n%s\n" "Run bcbio_nextgen.py upgrade --data --aligners rtg" % rtg_ref ) if os . path . isfile ( rtg_ref ) : rtg_ref = os . path . dirname ( rtg_ref ) threads = min ( dd . get_num_cores ( data ) , 6 ) resources = config_utils . get_resources ( "rtg" , data [ "config" ] ) memory = config_utils . adjust_opts ( resources . get ( "jvm_opts" , [ "-Xms500m" , "-Xmx1500m" ] ) , { "algorithm" : { "memory_adjust" : { "magnitude" : threads , "direction" : "increase" } } } ) jvm_stack = [ x for x in memory if x . startswith ( "-Xms" ) ] jvm_mem = [ x for x in memory if x . startswith ( "-Xmx" ) ] jvm_stack = jvm_stack [ 0 ] if len ( jvm_stack ) > 0 else "-Xms500m" jvm_mem = jvm_mem [ 0 ] . replace ( "-Xmx" , "" ) if len ( jvm_mem ) > 0 else "3g" cmd = [ "rtg" , "vcfeval" , "--threads" , str ( threads ) , "-b" , rm_file , "--bed-regions" , interval_bed , "-c" , vrn_file , "-t" , rtg_ref , "-o" , out_dir ] if validate_method == "rtg-squash-ploidy" : cmd += [ "--squash-ploidy" ] rm_samples = vcfutils . get_samples ( rm_file ) if len ( rm_samples ) > 1 and dd . get_sample_name ( data ) in rm_samples : cmd += [ "--sample=%s" % dd . get_sample_name ( data ) ] cmd += [ "--vcf-score-field='%s'" % ( _pick_best_quality_score ( vrn_file ) ) ] mem_export = "%s export RTG_JAVA_OPTS='%s' && export RTG_MEM=%s" % ( utils . local_path_export ( ) , jvm_stack , jvm_mem ) cmd = mem_export + " && " + " " . join ( cmd ) do . run ( cmd , "Validate calls using rtg vcfeval" , data ) out = { "fp" : os . path . join ( out_dir , "fp.vcf.gz" ) , "fn" : os . path . join ( out_dir , "fn.vcf.gz" ) } tp_calls = os . path . join ( out_dir , "tp.vcf.gz" ) tp_baseline = os . path . join ( out_dir , "tp-baseline.vcf.gz" ) if os . path . exists ( tp_baseline ) : out [ "tp" ] = tp_baseline out [ "tp-calls" ] = tp_calls else : out [ "tp" ] = tp_calls return out
Run evaluation of a caller against the truth set using rtg vcfeval.