wrap.add('wgs_insert_sd', [config['wgs_insert_sd']], create_dir=False)
wrap.add('wgs_base', [config['wgs_base']],  create_dir=False)

# Variation
genomes = appconfig.find_files(config['community']['folder'], config['community']['seq'])
commPaths = [os.path.dirname(pn) for pn in genomes]
wrap.add('community', commPaths)

tableFolder = os.path.join(config['reference']['folder'], config['reference']['table_folder'])
tablePaths = appconfig.get_files(tableFolder, 'table')
wrap.add('comm_table', tablePaths, label_func=os.path.basename)

wrap.add('wgs_xfold', config['wgs_xfold'])

@wrap.add_target('run_quast')
@name_targets
def generate_wgs(outdir, c):

    asm_path = os.path.join(config['wgs_folder'], '/'.join(outdir.split('/')[1:]), config['wgs_asmdir'])
    ctg_file = '{0}/{1}.contigs.fasta'.format(asm_path, config['wgs_base'])
    sources = ['{1[community][folder]}/{0[community]}/{0[refseq]}'.format(c, config), ctg_file]
    target = os.path.join(outdir, 'quast/summary/report.html')

    action = exec_env.resolve_action({
        'sge': 'bin/sgerun_QUAST.sh $SOURCES.abspath $TARGET.abspath'.format(c, od=outdir)
    })

    return 'report', env.Command(target, sources, action)

wrap.add_controls(Environment())
def do_score(outdir, c):
    cl_out = c['do_convert']['output']

    ref_path = os.path.join(config['map_folder'], c['hic_path'])
    ttable = appconfig.search_up(ref_path, config['truth_table'])
    if ttable is None:
        raise RuntimeError(
            'Could not find an accompanying truth table for associated run {0}'
            .format(c['hic_path']))

    # this target consumes truth table and clustering output
    source = [ttable, cl_out]
    # this target creates 3 output files
    target = [
        '{0}.{1}'.format(cl_out, suffix) for suffix in ['f1', 'vm', 'bc']
    ]

    action = exec_env.resolve_action({
        'pbs':
        'bin/pbsrun_SCORE.sh $SOURCES.abspath',
        'sge':
        'bin/sgerun_SCORE.sh $SOURCES.abspath',
        'local':
        'bin/all_scores.sh $SOURCES.abspath'
    })

    return env.Command(target, source, action)


wrap.add_controls(Environment())