Fixing no cigar bug

empty GATKSAMRecords will have a null cigar. Treat them accordingly.
This commit is contained in:
Mauricio Carneiro 2011-11-09 12:15:54 -05:00
parent 149b79eaad
commit 9427ada498
2 changed files with 14 additions and 10 deletions

View File

@ -58,15 +58,6 @@ public class ReadClipper {
return hardClipByReferenceCoordinates(refStart, -1); return hardClipByReferenceCoordinates(refStart, -1);
} }
private int numDeletions(GATKSAMRecord read) {
int result = 0;
for (CigarElement e: read.getCigar().getCigarElements()) {
if ( e.getOperator() == CigarOperator.DELETION || e.getOperator() == CigarOperator.D )
result =+ e.getLength();
}
return result;
}
protected GATKSAMRecord hardClipByReferenceCoordinates(int refStart, int refStop) { protected GATKSAMRecord hardClipByReferenceCoordinates(int refStart, int refStop) {
int start = (refStart < 0) ? 0 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStart, ReadUtils.ClippingTail.RIGHT_TAIL); int start = (refStart < 0) ? 0 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStart, ReadUtils.ClippingTail.RIGHT_TAIL);
int stop = (refStop < 0) ? read.getReadLength() - 1 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStop, ReadUtils.ClippingTail.LEFT_TAIL); int stop = (refStop < 0) ? read.getReadLength() - 1 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStop, ReadUtils.ClippingTail.LEFT_TAIL);
@ -90,7 +81,7 @@ public class ReadClipper {
@Requires("left <= right") @Requires("left <= right")
public GATKSAMRecord hardClipBothEndsByReferenceCoordinates(int left, int right) { public GATKSAMRecord hardClipBothEndsByReferenceCoordinates(int left, int right) {
if (left == right) if (read.isEmpty() || left == right)
return new GATKSAMRecord(read.getHeader()); return new GATKSAMRecord(read.getHeader());
GATKSAMRecord leftTailRead = hardClipByReferenceCoordinates(right, -1); GATKSAMRecord leftTailRead = hardClipByReferenceCoordinates(right, -1);
@ -104,6 +95,9 @@ public class ReadClipper {
} }
public GATKSAMRecord hardClipLowQualEnds(byte lowQual) { public GATKSAMRecord hardClipLowQualEnds(byte lowQual) {
if (read.isEmpty())
return read;
byte [] quals = read.getBaseQualities(); byte [] quals = read.getBaseQualities();
int leftClipIndex = 0; int leftClipIndex = 0;
int rightClipIndex = read.getReadLength() - 1; int rightClipIndex = read.getReadLength() - 1;
@ -126,6 +120,9 @@ public class ReadClipper {
} }
public GATKSAMRecord hardClipSoftClippedBases () { public GATKSAMRecord hardClipSoftClippedBases () {
if (read.isEmpty())
return read;
int readIndex = 0; int readIndex = 0;
int cutLeft = -1; // first position to hard clip (inclusive) int cutLeft = -1; // first position to hard clip (inclusive)
int cutRight = -1; // first position to hard clip (inclusive) int cutRight = -1; // first position to hard clip (inclusive)
@ -182,6 +179,9 @@ public class ReadClipper {
} }
public GATKSAMRecord hardClipLeadingInsertions() { public GATKSAMRecord hardClipLeadingInsertions() {
if (read.isEmpty())
return read;
for(CigarElement cigarElement : read.getCigar().getCigarElements()) { for(CigarElement cigarElement : read.getCigar().getCigarElements()) {
if (cigarElement.getOperator() != CigarOperator.HARD_CLIP && cigarElement.getOperator() != CigarOperator.SOFT_CLIP && if (cigarElement.getOperator() != CigarOperator.HARD_CLIP && cigarElement.getOperator() != CigarOperator.SOFT_CLIP &&
cigarElement.getOperator() != CigarOperator.INSERTION && cigarElement.getOperator() != CigarOperator.DELETION) cigarElement.getOperator() != CigarOperator.INSERTION && cigarElement.getOperator() != CigarOperator.DELETION)

View File

@ -237,4 +237,8 @@ public class GATKSAMRecord extends BAMRecord {
// note that we do not consider the GATKSAMRecord internal state at all // note that we do not consider the GATKSAMRecord internal state at all
return super.equals(o); return super.equals(o);
} }
public boolean isEmpty() {
return this.getReadLength() == 0;
}
} }