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)