src/hg/ratStuff/mafSplitPos/mafSplitPos.c 1.7

1.7 2009/08/02 20:54:39 markd
allow disabling gap or repeat spliting, fixed bug creating duplicate output, make -minRepeat actually work
Index: src/hg/ratStuff/mafSplitPos/mafSplitPos.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/ratStuff/mafSplitPos/mafSplitPos.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -b -B -U 4 -r1.6 -r1.7
--- src/hg/ratStuff/mafSplitPos/mafSplitPos.c	11 Jun 2009 16:01:38 -0000	1.6
+++ src/hg/ratStuff/mafSplitPos/mafSplitPos.c	2 Aug 2009 20:54:39 -0000	1.7
@@ -22,10 +22,10 @@
   "usage:\n"
   "   mafSplitPos database size(Mbp) out.bed\n"
   "options:\n"
   "   -chrom=chrN   Restrict to one chromosome\n"
-  "   -minGap=N     Split only on gaps >N bp\n"
-  "   -minRepeat=N  Split only on repeats >N bp\n"
+  "   -minGap=N     Split only on gaps >N bp, defaults to 100, specify -1 to disable\n"
+  "   -minRepeat=N  Split only on repeats >N bp, defaults to 100, specify -1 to disable\n"
   );
 }
 
 static struct optionSpec options[] = {
@@ -120,15 +120,17 @@
 int prevPos = 0;
 
 while (desiredPos < chromSize)
     {
-    splitPos = gapPos = nextGapPos(chrom, desiredPos, conn);
+    splitPos = gapPos = (minGap < 0) ? -1 : nextGapPos(chrom, desiredPos, conn);
     if (splitPos < 0 || splitPos > desiredPos + (desiredPos/10))
         {
         /* next gap is further out than 10% of desired position,
          * so look for the next new repeat */
-        splitPos = nextRepeatPos(chrom, desiredPos, conn);
-        if (splitPos < 0 || splitPos > desiredPos + (desiredPos/10))
+        splitPos = (minRepeat < 0) ? -1 : nextRepeatPos(chrom, desiredPos, conn);
+        if (splitPos < 0)
+            splitPos = gapPos; /* no acceptable repeat position */
+        else if ((gapPos >= 0) && (splitPos > desiredPos))
             splitPos = min(splitPos, gapPos);
         }
     if (splitPos < 0)
         /* no places to split on this chrom */
@@ -136,9 +138,9 @@
     fprintf(f, "%s\t%d\t%d\n", chrom, splitPos, splitPos+1), 
     verbose(2, "      %s\t%d\n", splitPos == gapPos ? "gap" : "repeat", 
            (splitPos - prevPos)/1000000);
     prevPos = splitPos;
-    desiredPos += splitSize;
+    desiredPos = splitPos + splitSize;
     }
 }
 
 void mafSplitPos(char *database, char *size, char *outFile)