#
#  peakstoregion.py
#  ENRAGE
#

try:
    import psyco
    psyco.full()
except:
    pass

import sys

print "peakstoregion: version 1.1"

def main(argv=None):
    if not argv:
        argv = sys.argv

    if len(argv) < 3:
        print "usage: python %s peakfile outfile [radius] [chromField] [posField] [labelField] [datafield]" % sys.argv[0]
        sys.exit(1)

    peakfile = argv[1]
    outfile = argv[2]

    try:
        radius = int(argv[3])
    except (IndexError, ValueError):
        radius = 500

    try:
        chromField = int(argv[4])
    except (IndexError, ValueError):
        chromField = 2

    try:
        posField = int(argv[5])
    except (IndexError, ValueError):
        posField = 3

    try:
        labelField = int(argv[6])
    except (IndexError, ValueError):
        labelField = 1

    try:
        dataField = int(argv[7])
    except (IndexError, ValueError):
        dataField = -1

    peakstoregion(peakfile, outfile, radius, chromField, posField, labelField, dataField)


def peakstoregion(peakfilename, outfilename, radius=500, chromField=2, posField=3, labelField=1, dataField=-1):
    peakfile = open(peakfilename)
    outfile = open(outfilename, "w")

    for line in peakfile:
        fields = line.strip().split()
        label = "REGION"
        try:
            label = fields[labelField]
        except IndexError:
            pass

        start = int(fields[posField]) - radius
        stop = int(fields[posField]) + radius
        outfile.write("%s\t%s\t%d\t%d\t%s\n" % (label, fields[chromField], start, stop, fields[dataField]))

    outfile.close()


if __name__ == "__main__":
    main(sys.argv)