def mapperWrapper(locs_subset, values_subset, randomIndxMatrix, chrm, x): # print number of iterations if x%20==0: print 'iteration %d'%x numPeaks = len(values_subset) randomIndx = randomIndxMatrix[x] signalDensityRandom, windowedLocs = smooth_windowed_genome.findSmoothLocValues(locs_subset, values_subset[randomIndx], genomeSize[chrm], windowSize, stepSize, baseValue=[0], getDensity=False) return signalDensityRandom
def findIntervalEnrichment(values_subset, locs_subset, chrm, windowSize=None, numIterations=None, blacklist=None): """ given values and locations on, for example, a single chromosome, find the smoothed values in windows over that chromosome. Requires locations, values at those locations, and the chromosome. """ # unles window Size is given, it should be 1Mb if windowSize is None: windowSize = 1E6 stepSize = windowSize/10 # peak signal signalDensity, windowedLocs = smooth_windowed_genome.findSmoothLocValues(locs_subset, values_subset, genomeSize[chrm], windowSize, stepSize, getDensity=False, blacklist=blacklist) # get significance by shuffling peak scores location wise, keeping samples the same if numIterations is None: numIterations = 1000 numPeaks = len(values_subset) numWindows = len(windowedLocs) randomIndxMatrix = np.array([np.random.permutation(np.arange(numPeaks)) for x in range(numIterations)]) pool = Pool(processes=options.p) sigArray = pool.map(functools.partial(mapperWrapper, locs_subset, values_subset, randomIndxMatrix, chrm) , range(0, numIterations)) pool.close() signalDensityRandom = np.array(sigArray) randomIndx = np.random.permutation(np.arange(numPeaks)) foldChange = signalDensity/np.mean(signalDensity, 0) foldChangeRandom = np.mean(signalDensityRandom, 0)/np.mean(np.mean(signalDensityRandom, 0),0) return windowedLocs, signalDensity, signalDensityRandom