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)))
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),