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