1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
import os
import subprocess
import six
import pybedtools
def bigbed(x, genome, output, blockSize=256, itemsPerSlot=512, bedtype=None, _as=None, unc=False, tab=False):
"""
Converts a BedTool object to a bigBed format and returns the new filename.
`x` is a BedTool object
`genome` is an assembly string
`output` is the name of the bigBed file to create.
Other args are passed to bedToBigBed. In particular, `bedtype` (which
becomes the "-type=" argument) is automatically handled for you if it is
kept as the default None.
Assumes that a recent version of bedToBigBed from UCSC is on the path.
"""
if isinstance(x, six.string_types):
x = pybedtools.BedTool(x)
if not isinstance(x.fn, six.string_types):
x = x.saveas()
chromsizes = pybedtools.chromsizes_to_file(pybedtools.chromsizes(genome))
if bedtype is None:
bedtype = 'bed%s' % x.field_count()
cmds = [
'bedToBigBed',
x.fn,
chromsizes,
output,
'-blockSize=%s' % blockSize,
'-itemsPerSlot=%s' % itemsPerSlot,
'-type=%s' % bedtype
]
if unc:
cmds.append('-unc')
if tab:
cmds.append('-tab')
if _as:
cmds.append('-as=%s' % _as)
p = subprocess.Popen(cmds, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode:
raise ValueError("cmds: %s\nstderr:%s\nstdout:%s"
% (" ".join(cmds), stderr, stdout))
return output
def bigbed_to_bed(fn, chrom=None, start=None, end=None, maxItems=None):
cmds = [
'bigBedToBed',
fn]
if chrom is not None:
cmds.extend(['-chrom', chrom])
if start is not None:
cmds.extend(['-start', start])
if end is not None:
cmds.extend(['-end', end])
if maxItems is not None:
cmds.extend(['-maxItems', maxItems])
outfn = pybedtools.BedTool._tmp()
cmds.append(outfn)
p = subprocess.Popen(cmds, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode:
raise ValueError("cmds: %s\nstderr:%s\nstdout:%s"
% (" ".join(cmds), stderr, stdout))
return pybedtools.BedTool(outfn)
|