+ print "got multi dict ", len(multiDict), time.ctime()
+
+ for readID in jointList:
+ multiReadSubsetDict[readID] = multiDict[readID]
+
+ for readID in bothMultiList:
+ multiReadSubsetDict[readID] = multiDict[readID]
+
+ return multiReadSubsetDict
+
+
+def reweighUsingRadius(RDS, radius, multiIDs, readsToSkip=[], verbose=False):
+ skippedReads = 0
+ readlen = RDS.getReadSize()
+ halfreadlen = readlen / 2
+ print "doing uniq read radius with radius = %d" % radius
+ multiDict = RDS.getReadsDict(noSense=True, withWeight=True, withChrom=True, withID=True, doUniqs=False, doMulti=True, readIDDict=True)
+ print "got multiDict"
+ RDS.setSynchronousPragma("OFF")
+ reweighedCount = 0
+ for readID in multiIDs:
+ originalMultiReadID = readID
+ if originalMultiReadID in readsToSkip:
+ skippedReads += 1
+ continue
+
+ if "::" in readID:
+ (readID, multiplicity) = readID.split("::")
+
+ scores = []
+ coords = []
+ for read in multiDict[readID]:
+ start = read["start"]
+ chromosome = "chr%s" % read["chrom"]
+ regionStart = start + halfreadlen - radius
+ regionStop = start + halfreadlen + radius
+ uniqs = RDS.getCounts(chromosome, regionStart, regionStop, uniqs=True, multi=False, splices=False, reportCombined=True)
+ scores.append(uniqs + 1)
+ coords.append((chromosome, start, originalMultiReadID))
+
+ total = float(sum(scores))
+ reweighList = []
+ for index in range(len(scores)):
+ reweighList.append((round(scores[index]/total,2), coords[index][0], coords[index][1], coords[index][2]))
+
+ RDS.reweighMultireads(reweighList)
+ reweighedCount += 1
+ if reweighedCount % 10000 == 0:
+ print reweighedCount
+
+ RDS.setSynchronousPragma("ON")
+ if verbose:
+ print "skipped ", skippedReads
+
+ print "reweighted ", reweighedCount
+