def _remove_regions(in_file, remove_beds, ext, data):
    """Subtract a list of BED files from an input BED.

    General approach handling none, one and more remove_beds.
    """
    from bcbio.variation import bedutils
    out_file = "%s-%s.bed" % (utils.splitext_plus(in_file)[0], ext)
    if not utils.file_uptodate(out_file, in_file):
        with file_transaction(data, out_file) as tx_out_file:
            with bedtools_tmpdir(data):
                if len(remove_beds) == 0:
                    to_remove = None
                elif len(remove_beds) == 1:
                    to_remove = remove_beds[0]
                else:
                    to_remove = "%s-all.bed" % utils.splitext_plus(tx_out_file)[0]
                    with open(to_remove, "w") as out_handle:
                        for b in remove_beds:
                            with utils.open_gzipsafe(b) as in_handle:
                                for line in in_handle:
                                    parts = line.split("\t")
                                    out_handle.write("\t".join(parts[:4]).rstrip() + "\n")
                    if utils.file_exists(to_remove):
                        to_remove = bedutils.sort_merge(to_remove, data)
                if to_remove and utils.file_exists(to_remove):
                    cmd = "bedtools subtract -nonamecheck -a {in_file} -b {to_remove} > {tx_out_file}"
                    do.run(cmd.format(**locals()), "Remove problematic regions: %s" % ext)
                else:
                    utils.symlink_plus(in_file, out_file)
    return out_file
def _remove_regions ( in_file , remove_beds , ext , data ) : from bcbio . variation import bedutils out_file = "%s-%s.bed" % ( utils . splitext_plus ( in_file ) [ 0 ] , ext ) if not utils . file_uptodate ( out_file , in_file ) : with file_transaction ( data , out_file ) as tx_out_file : with bedtools_tmpdir ( data ) : if len ( remove_beds ) == 0 : to_remove = None elif len ( remove_beds ) == 1 : to_remove = remove_beds [ 0 ] else : to_remove = "%s-all.bed" % utils . splitext_plus ( tx_out_file ) [ 0 ] with open ( to_remove , "w" ) as out_handle : for b in remove_beds : with utils . open_gzipsafe ( b ) as in_handle : for line in in_handle : parts = line . split ( "\t" ) out_handle . write ( "\t" . join ( parts [ : 4 ] ) . rstrip ( ) + "\n" ) if utils . file_exists ( to_remove ) : to_remove = bedutils . sort_merge ( to_remove , data ) if to_remove and utils . file_exists ( to_remove ) : cmd = "bedtools subtract -nonamecheck -a {in_file} -b {to_remove} > {tx_out_file}" do . run ( cmd . format ( ** locals ( ) ) , "Remove problematic regions: %s" % ext ) else : utils . symlink_plus ( in_file , out_file ) return out_file
Subtract a list of BED files from an input BED.

    General approach handling none, one and more remove_beds.