Fixed subtle bug in permitting EXPAND_WINDOW to be > 1. We now use the right window size so we avoid including empty hangers. There's still a rare bug to sort out, which occurs in the case where a read with an indel can generate empty hangers.

Also cleaned up the debugging output.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@432 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
depristo 2009-04-15 19:08:26 +00:00
parent 180ff13290
commit 9cc808104e
1 changed files with 14 additions and 14 deletions

View File

@ -34,7 +34,7 @@ public class LocusIteratorByHanger extends LocusIterator {
private RefHanger<SAMRecord> readHanger = new RefHanger<SAMRecord>(); private RefHanger<SAMRecord> readHanger = new RefHanger<SAMRecord>();
private RefHanger<Integer> offsetHanger = new RefHanger<Integer>(); private RefHanger<Integer> offsetHanger = new RefHanger<Integer>();
final int INCREMENT_SIZE = 100; final int INCREMENT_SIZE = 1;
final boolean DEBUG = false; final boolean DEBUG = false;
boolean justCleared = false; boolean justCleared = false;
@ -64,19 +64,17 @@ public class LocusIteratorByHanger extends LocusIterator {
RefHanger.Hanger rhanger = readHanger.getHanger(i); RefHanger.Hanger rhanger = readHanger.getHanger(i);
RefHanger.Hanger ohanger = offsetHanger.getHanger(i); RefHanger.Hanger ohanger = offsetHanger.getHanger(i);
logger.debug(String.format(" -> %s:", rhanger.loc)); logger.debug(String.format("printState(): location %s", rhanger.loc));
for ( int j = 0; j < rhanger.size(); j++ ) { for ( int j = 0; j < rhanger.size(); j++ ) {
SAMRecord read = (SAMRecord)rhanger.get(j); SAMRecord read = (SAMRecord)rhanger.get(j);
int offset = (Integer)ohanger.get(j); int offset = (Integer)ohanger.get(j);
logger.debug(String.format(" %s(%d)=%s", read.getReadName(), offset, read.getReadString().charAt(offset) )); logger.debug(String.format(" read: %s(%d)=%s", read.getReadName(), offset, read.getReadString().charAt(offset) ));
} }
logger.debug(String.format("%n"));
} }
} }
public void clear() { public void clear() {
logger.debug(String.format(("clear() called%n"))); logger.debug(String.format(("clear() called")));
readHanger.clear(); readHanger.clear();
offsetHanger.clear(); offsetHanger.clear();
} }
@ -102,7 +100,7 @@ public class LocusIteratorByHanger extends LocusIterator {
expandWindow(INCREMENT_SIZE); expandWindow(INCREMENT_SIZE);
if ( DEBUG ) { if ( DEBUG ) {
logger.debug(String.format(("in Next:%n"))); logger.debug(String.format(("in Next:")));
printState(); printState();
} }
@ -126,14 +124,12 @@ public class LocusIteratorByHanger extends LocusIterator {
*/ */
for ( AlignmentBlock block : read.getAlignmentBlocks() ) { for ( AlignmentBlock block : read.getAlignmentBlocks() ) {
if ( DEBUG ) if ( DEBUG ) logger.debug(String.format("Processing block %s len=%d", block, block.getLength()));
logger.debug(String.format("Processing block %s len=%d%n", block, block.getLength()));
for ( int i = 0; i < block.getLength(); i++ ) { for ( int i = 0; i < block.getLength(); i++ ) {
GenomeLoc offset = new GenomeLoc(readLoc.getContigIndex(), block.getReferenceStart() + i); GenomeLoc offset = new GenomeLoc(readLoc.getContigIndex(), block.getReferenceStart() + i);
readHanger.expandingPut(offset, read); readHanger.expandingPut(offset, read);
offsetHanger.expandingPut(offset, block.getReadStart() + i - 1); offsetHanger.expandingPut(offset, block.getReadStart() + i - 1);
if ( DEBUG ) if ( DEBUG ) logger.debug(String.format(" # Added %s", offset));
logger.debug(String.format(" # Added %s%n", offset));
} }
} }
} }
@ -164,14 +160,18 @@ public class LocusIteratorByHanger extends LocusIterator {
} }
private final void expandWindow(final int incrementSize) { private final void expandWindow(final int incrementSize) {
if ( incrementSize != 1 ) {
Utils.scareUser(String.format("BUG: IncrementSize=%d != 1, the codebase doesn't support this extension strategy yet", incrementSize));
}
if ( DEBUG ) { if ( DEBUG ) {
logger.debug(String.format("entering expandWindow..., hasNext=%b%n", it.hasNext())); logger.debug(String.format("entering expandWindow..., hasNext=%b", it.hasNext()));
printState(); printState();
} }
while ( it.hasNext() ) { while ( it.hasNext() ) {
if ( DEBUG ) { if ( DEBUG ) {
logger.debug(String.format("Expanding window%n")); logger.debug(String.format("Expanding window"));
printState(); printState();
} }
@ -180,7 +180,7 @@ public class LocusIteratorByHanger extends LocusIterator {
GenomeLoc readLoc = new GenomeLoc(read); GenomeLoc readLoc = new GenomeLoc(read);
if ( DEBUG ) { if ( DEBUG ) {
logger.debug(String.format(" Expanding window sizes %d with %d : left=%s, right=%s, readLoc = %s, cmp=%d%n", logger.debug(String.format(" Expanding window sizes %d with %d : left=%s, right=%s, readLoc = %s, cmp=%d",
readHanger.size(), incrementSize, readHanger.size(), incrementSize,
readHanger.hasHangers() ? readHanger.getLeftLoc() : "NA", readHanger.hasHangers() ? readHanger.getLeftLoc() : "NA",
readHanger.hasHangers() ? readHanger.getRightLoc() : "NA", readHanger.hasHangers() ? readHanger.getRightLoc() : "NA",