/** * Try to fix the given read using the given split * * @param read the read to fix * @param splice the split (bad region to clip out) */ private void fixSplit(final SplitRead read, final Splice splice) { // if the read doesn't even overlap the split position then we can just exit if (read.loc == null || !splice.loc.overlapsP(read.loc)) return; if (isLeftOverhang(read.loc, splice.loc)) { final int overhang = splice.loc.getStop() - read.loc.getStart() + 1; if (overhangingBasesMismatch( read.read.getBases(), 0, splice.reference, splice.reference.length - overhang, overhang)) { final GATKRead clippedRead = ReadClipper.hardClipByReadCoordinates(read.read, 0, overhang - 1); read.setRead(clippedRead); } } else if (isRightOverhang(read.loc, splice.loc)) { final int overhang = read.loc.getStop() - splice.loc.getStart() + 1; if (overhangingBasesMismatch( read.read.getBases(), read.read.getLength() - overhang, splice.reference, 0, overhang)) { final GATKRead clippedRead = ReadClipper.hardClipByReadCoordinates( read.read, read.read.getLength() - overhang, read.read.getLength() - 1); read.setRead(clippedRead); } } }
/** * Given a read, clips low quality ends (by overwriting with N) and returns the underlying bases, * after reverse-complementing for negative-strand reads. * * @param read the read * @param lowQTail every base quality lower than or equal to this in the tail of the read will be * replaced with N. * @return bases of the read. */ public static byte[] getStrandedBytes(final SAMRecord read, final byte lowQTail) { // Write N's over the low quality tail of the reads to avoid adding them into the context final SAMRecord clippedRead = ReadClipper.clipLowQualEnds(read, lowQTail, ClippingRepresentation.WRITE_NS); final byte[] bases = clippedRead.getReadBases(); if (read.getReadNegativeStrandFlag()) { return BaseUtils.simpleReverseComplement(bases); } else { return bases; } }