#
#  featureIntersects.py
#  ENRAGE
#

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

import sys
import optparse
from cistematic.core import featuresIntersecting
from commoncode import getConfigParser, getConfigOption, getConfigIntOption


print "featureIntersects: version 1.1"


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

    usage = "usage: python %s tabfile [--cistype type] [--radius radius]"

    parser = makeParser(usage)
    (options, args) = parser.parse_args(argv[1:])

    if len(args) < 1:
        print usage
        sys.exit(1)

    tabfile = args[0]

    featureIntersects(tabfile, options.cistype, options.radius)


def makeParser(usage=""):
    parser = optparse.OptionParser(usage=usage)
    parser.add_option("--cistype", dest="cistype")
    parser.add_option("--radius", type="int", dest="radius")

    configParser = getConfigParser()
    section = "featureIntersects"
    cistype = getConfigOption(configParser, section, "cistype", "TFBSCONSSITES")
    radius = getConfigIntOption(configParser, section, "radius", 100)

    parser.set_defaults(cistype=cistype, radius=radius)

    return parser


def featureIntersects(tabFileName, cistype="TFBSCONSSITES", radius=100):
    
    posList = getPositionList(tabFileName)
    feats = featuresIntersecting("hsapiens", posList, radius, cistype)
    featkeys = feats.keys()
    featkeys.sort()
    for (chrom, pos) in featkeys:
        print "chr%s:%d-%d\t%s" % (chrom, pos, pos + 20, str(feats[(chrom, pos)]))


def getPositionList(tabFileName):
    previous = ""
    posList = []
    tabfile = open(tabFileName)
    for line in tabfile:
        fields = line.split("\t")
        current = fields[0]
        if previous == current:
            continue

        previous = current
        chrom = fields[1][3:]
        posList.append((chrom, (int(fields[2]) + int(fields[3]))/2))

    return posList


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