Example #1
0
def getPositions(files):
    """Takes a list of input files and returns
    a list of BSPosition's
    
    """
    # func to filter header out
    head_filt = lambda line: False if line.startswith("ref") else True

    record_it = lambda fh: lineRecordIterator(fh, BSBaseSample, BSBaseSampleTypes, head_filt, "\t")

    opener = lambda fn: gzip.open if fn.endswith(".gz") else open

    # read all data into a matrix
    observations = map(lambda fn: list(fileIterator(fn, record_it, opener(fn))), files)

    return map(BSPosition._make, izip(imap(attrgetter("off"), observations[0]), izip(*observations)))
Example #2
0
    sys.exit(getHelpStr(description, cl_arglist) + "\n")

log = logger(sys.stderr if arg_map["log"] else None)

regionfile = remaining_args[0]
methylfiles = remaining_args[1:]

log("Reading Positions from Files")
positions = getPositions(methylfiles)

pp = PdfPages(arg_map["pout"] + ".pdf")

regmk = lambda arr : Region._make(map(lambda t,v : t(v), RegionTypes, arr[:3]))
regit = lambda fh: iterApply(regmk, lineItemIterator(fh))

for region in fileIterator(regionfile, regit):
    if not region.chr == positions[0].samples[0].ref:
        raise Exception, "Regions are for a different Chromosome"
    
    log("Working on %s:%d-%d" % region)
    def searchexp(item):
        if item > region.end:
            return -1
        elif item < region.start:
            return 1
        return 0

    exp = lambda pos : pos >= region.start and pos <= region.end
    fexp = lambda f : lambda p : f(p.pos)
    
    rstart,rend = expandRegion(positions,fexp(exp),