erange version 4.0a dev release
[erange.git] / farPairs.py
index 73dd3ca851e2ca64cc71e3148a8eced359e44def..00cc91844b23084d712573261e996524739c9870 100644 (file)
@@ -11,11 +11,13 @@ try:
 except:
     pass
 
-import sys, time
+import sys
+import time
 import optparse
-from commoncode import readDataset
+import ReadDataset
+from commoncode import getConfigParser, getConfigOption, getConfigBoolOption, getConfigIntOption
 
-print "%prog: version 1.3"
+print "farPairs: version 1.4"
 
 
 def main(argv=None):
@@ -24,16 +26,7 @@ def main(argv=None):
 
     usage = "usage: python %prog rdsfile outfile bedfile [--verbose] [--cache numPages] [--minDist bp] [--maxDist bp] [--minCount count] [--label string]"
 
-    parser = optparse.OptionParser(usage=usage)
-    parser.add_option("--sameChromOnly", action="store_true", dest="sameChromOnly")
-    parser.add_option("--cache", type="int", dest="cachePages")
-    parser.add_option("--verbose", action="store_true", dest="doVerbose")
-    parser.add_option("--minDist", type="int", dest="minDist")
-    parser.add_option("--maxDist", type="int", dest="maxDist")
-    parser.add_option("--minCount", type="int", dest="minCount")
-    parser.add_option("--label", dest="label")
-    parser.set_defaults(sameChromOnly=False, doVerbose=False, cachePages=None,
-                        minDist=1000, maxDist=500000, minCount=2, label=None)
+    parser = getParser(usage)
     (options, args) = parser.parse_args(argv[1:])
 
     if len(args) < 3:
@@ -50,6 +43,32 @@ def main(argv=None):
              options.label)
 
 
+def getParser(usage):
+    parser = optparse.OptionParser(usage=usage)
+    parser.add_option("--sameChromOnly", action="store_true", dest="sameChromOnly")
+    parser.add_option("--cache", type="int", dest="cachePages")
+    parser.add_option("--verbose", action="store_true", dest="doVerbose")
+    parser.add_option("--minDist", type="int", dest="minDist")
+    parser.add_option("--maxDist", type="int", dest="maxDist")
+    parser.add_option("--minCount", type="int", dest="minCount")
+    parser.add_option("--label", dest="label")
+
+    configParser = getConfigParser
+    section = "farPairs"
+    sameChromOnly = getConfigBoolOption(configParser, section, "sameChromOnly", False)
+    doVerbose = getConfigBoolOption(configParser, section, "doVerbose", False)
+    cachePages = getConfigOption(configParser, section, "cachePages", None)
+    minDist = getConfigIntOption(configParser, section, "minDist", 1000)
+    maxDist = getConfigIntOption(configParser, section, "maxDist", 500000)
+    minCount = getConfigIntOption(configParser, section, "minCount", 2)
+    label = getConfigOption(configParser, section, "label", None)
+
+    parser.set_defaults(sameChromOnly=sameChromOnly, doVerbose=doVerbose, cachePages=cachePages,
+                        minDist=minDist, maxDist=maxDist, minCount=minCount, label=label)
+
+    return parser
+
+
 def farPairs(rdsfile, outfilename, outbedname, sameChromOnly=False, doVerbose=False,
              cachePages=None, minDist=1000, maxDist=500000, minCount=2, label=None):
 
@@ -62,7 +81,7 @@ def farPairs(rdsfile, outfilename, outbedname, sameChromOnly=False, doVerbose=Fa
     if label is None:
         label = rdsfile
 
-    RDS = readDataset(rdsfile, verbose=True, cache=doCache)
+    RDS = ReadDataset.ReadDataset(rdsfile, verbose=True, cache=doCache)
     rdsChromList = RDS.getChromosomes()
 
     if doVerbose:
@@ -80,7 +99,7 @@ def farPairs(rdsfile, outfilename, outbedname, sameChromOnly=False, doVerbose=Fa
             continue
 
         print chromosome
-        uniqDict = RDS.getReadsDict(fullChrom=True, chrom=chromosome, noSense=True, withFlag=True, withPairID=True, doUniqs=True, readIDDict=True)
+        uniqDict = RDS.getReadsDict(fullChrom=True, chrom=chromosome, noSense=True, withFlag=True, doUniqs=True, readIDDict=True)
         if doVerbose:
             print len(uniqDict), time.ctime()
 
@@ -88,8 +107,10 @@ def farPairs(rdsfile, outfilename, outbedname, sameChromOnly=False, doVerbose=Fa
             readList = uniqDict[readID]
             if len(readList) == 2:
                 total += 1
-                (start1, flag1, pair1) = readList[0]
-                (start2, flag2, pair2) = readList[1]
+                start1 = readList[0]["start"]
+                flag1 = readList[0]["flag"]
+                start2 = readList[1]["start"]
+                flag2 = readList[1]["flag"]
 
                 if flag1 != flag2:
                     dist = abs(start1 - start2)