Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
define_histone_window.py 1.56 KiB
#!/usr/bin/env python

# -*- coding: latin-1 -*-
'''Take an histone bed file and calculate 1kb window centered.'''

EPILOG = '''
For more details:
        %(prog)s --help
'''

import numpy
import pybedtools
import argparse
import os
from subprocess import Popen
from pybedtools.featurefuncs import midpoint
from pybedtools.featurefuncs import extend_fields

def get_args():
    parser = argparse.ArgumentParser(
            description=__doc__, epilog=EPILOG,
            formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    parser.add_argument('-e', '--enhancers',
    	help="The enhancers file to make 1kb window around center",
        required = True)
    args = parser.parse_args()
    return args

def rename_generator(bed_file,prefix):
    for i, feature in enumerate(pybedtools.BedTool(bed_file)):
        feature.name = prefix + '_{0}'.format(i + 1)
        yield feature


def main():
    args = get_args()
    # Read in bedtools:
    enhancers = pybedtools.BedTool(args.enhancers)

    # Sort if not sorted
    enhancers_sorted = enhancers.sort()
    enhancers_extend = enhancers_sorted.each(extend_fields, n=4)
    enhancers_renamed = pybedtools.BedTool(rename_generator(enhancers_extend,"H"))
    enhancers_renamed.saveas("enhancers_renamed.bed")

    enhancers_renamed = pybedtools.BedTool("enhancers_renamed.bed")
    enhancers_mp = enhancers_renamed.each(midpoint)
    chromsizes = pybedtools.helpers.chromsizes("hg19")
    enhancers_1kb = enhancers_mp.slop(l=500, r=500, g=chromsizes)
    enhancers_1kb.saveas("enhancers_1kb.bed")



if __name__ == '__main__':
    main()