Don't exception out when bad aligners emit wonky alignments; instead, just don't clean

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4038 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
ebanks 2010-08-16 02:36:04 +00:00
parent a36951f11a
commit 37586d3a43
1 changed files with 22 additions and 13 deletions

View File

@ -526,7 +526,8 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
// start cleaning the appropriate reads
for ( Pair<Integer, Integer> indexPair : bestConsensus.readIndexes ) {
AlignedRead aRead = altReads.get(indexPair.first);
updateRead(bestConsensus.cigar, bestConsensus.positionOnReference, indexPair.second, aRead, (int)leftmostIndex);
if ( !updateRead(bestConsensus.cigar, bestConsensus.positionOnReference, indexPair.second, aRead, (int)leftmostIndex) )
return;
}
if ( !alternateReducesEntropy(altReads, reference, leftmostIndex) ) {
if ( statsOutput != null ) {
@ -844,7 +845,7 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
}
private void updateRead(final Cigar altCigar, final int altPosOnRef, final int myPosOnAlt, final AlignedRead aRead, final int leftmostIndex) {
private boolean updateRead(final Cigar altCigar, final int altPosOnRef, final int myPosOnAlt, final AlignedRead aRead, final int leftmostIndex) {
Cigar readCigar = new Cigar();
// special case: there is no indel
@ -852,7 +853,7 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
aRead.setAlignmentStart(leftmostIndex + myPosOnAlt);
readCigar.add(new CigarElement(aRead.getReadLength(), CigarOperator.M));
aRead.setCigar(readCigar);
return;
return true;
}
CigarElement altCE1 = altCigar.getCigarElement(0);
@ -863,16 +864,22 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
CigarElement indelCE;
if ( altCE1.getOperator() == CigarOperator.I ) {
indelCE=altCE1;
if ( altCE2.getOperator() != CigarOperator.M )
throw new StingException("When first element of the alt consensus is I, the second one must be M. Actual: "+altCigar.toString());
if ( altCE2.getOperator() != CigarOperator.M ) {
logger.warn("When the first element of the alt consensus is I, the second one must be M. Actual: " + altCigar.toString() + ". Skipping this site...");
return false;
}
}
else {
if ( altCE1.getOperator() != CigarOperator.M )
throw new StingException("First element of the alt consensus cigar must be M or I. Actual: "+altCigar.toString());
if ( altCE2.getOperator() == CigarOperator.I || altCE2.getOperator() == CigarOperator.D )
if ( altCE1.getOperator() != CigarOperator.M ) {
logger.warn("First element of the alt consensus cigar must be M or I. Actual: " + altCigar.toString() + ". Skipping this site...");
return false;
}
if ( altCE2.getOperator() == CigarOperator.I || altCE2.getOperator() == CigarOperator.D ) {
indelCE=altCE2;
else
throw new StingException("When first element of the alt consensus is M, the second one must be I or D. Actual: "+altCigar.toString());
} else {
logger.warn("When first element of the alt consensus is M, the second one must be I or D. Actual: " + altCigar.toString() + ". Skipping this site...");
return false;
}
leadingMatchingBlockLength = altCE1.getLength();
}
@ -889,7 +896,7 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
if ( myPosOnAlt + aRead.getReadLength() <= endOfFirstBlock) {
readCigar.add(new CigarElement(aRead.getReadLength(), CigarOperator.M));
aRead.setCigar(readCigar);
return;
return true;
}
readCigar.add(new CigarElement(endOfFirstBlock - myPosOnAlt, CigarOperator.M));
}
@ -901,7 +908,7 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
if ( myPosOnAlt + aRead.getReadLength() < endOfFirstBlock + indelCE.getLength() ) {
readCigar.add(new CigarElement(myPosOnAlt + aRead.getReadLength() - endOfFirstBlock, CigarOperator.I));
aRead.setCigar(readCigar);
return;
return true;
}
// for reads that start in an insertion
@ -925,7 +932,7 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
aRead.setAlignmentStart(leftmostIndex + myPosOnAlt + indelOffsetOnRef - indelOffsetOnRead);
readCigar.add(new CigarElement(aRead.getReadLength(), CigarOperator.M));
aRead.setCigar(readCigar);
return;
return true;
}
int readRemaining = aRead.getReadBases().length;
@ -936,6 +943,8 @@ public class IndelRealigner extends ReadWalker<Integer, Integer> {
if ( readRemaining > 0 )
readCigar.add(new CigarElement(readRemaining, CigarOperator.M));
aRead.setCigar(readCigar);
return true;
}
private boolean alternateReducesEntropy(final List<AlignedRead> reads, final byte[] reference, final long leftmostIndex) {