public static int countInsertedBases(final SAMRecord read) { return countInsertedBases(read.getCigar()); }
public static int countInsertedBases(final SAMRecord read) { return countInsertedBases(read.getCigar()); }
public static int countInsertedBases(final SAMRecord read) { return countInsertedBases(read.getCigar()); }
@Test(dataProvider = "countInsertedAndDeletedBasesTestCases") public void testCountInsertedAndDeletedBases(final String cigarString, final int insertedBases, final int deletedBases) { final Cigar cigar = TextCigarCodec.decode(cigarString); Assert.assertEquals(SequenceUtil.countInsertedBases(cigar), insertedBases); Assert.assertEquals(SequenceUtil.countDeletedBases(cigar), deletedBases); }
/** * 0-1 scaled percentage identity of mapped read bases. * * @return portion of reference-aligned bases that match reference */ public static float getAlignedIdentity(SAMRecord record) { Integer nm = record.getIntegerAttribute(SAMTag.NM.name()); if (nm != null) { int refBasesToConsider = record.getReadLength() - SAMRecordUtil.getStartSoftClipLength(record) - SAMRecordUtil.getEndSoftClipLength(record); int refBaseMatches = refBasesToConsider - nm + SequenceUtil.countInsertedBases(record) + SequenceUtil.countDeletedBases(record); return refBaseMatches / (float) refBasesToConsider; } String md = record.getStringAttribute(SAMTag.MD.name()); if (StringUtils.isNotEmpty(md)) { // Socrates handles this: should we? Which aligners write MD but not // NM? throw new RuntimeException("Not Yet Implemented: calculation from reads with MD tag but not NM tag"); } throw new IllegalStateException(String.format("Read %s missing NM tag", record.getReadName())); }
private void addRead(final GcObject gcObj, final SAMRecord rec, final String group, final byte[] gc, final byte[] refBases) { if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++gcObj.totalClusters; final int pos = rec.getReadNegativeStrandFlag() ? rec.getAlignmentEnd() - scanWindowSize : rec.getAlignmentStart(); ++gcObj.totalAlignedReads; if (pos > 0) { final int windowGc = gc[pos]; if (windowGc >= 0) { ++gcObj.readsByGc[windowGc]; gcObj.basesByGc[windowGc] += rec.getReadLength(); gcObj.errorsByGc[windowGc] += SequenceUtil.countMismatches(rec, refBases, bisulfite) + SequenceUtil.countInsertedBases(rec) + SequenceUtil.countDeletedBases(rec); } } if (gcObj.group == null) { gcObj.group = group; } } }
private void addRead(final GcObject gcObj, final SAMRecord rec, final String group, final byte[] gc, final byte[] refBases) { if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++gcObj.totalClusters; final int pos = rec.getReadNegativeStrandFlag() ? rec.getAlignmentEnd() - scanWindowSize : rec.getAlignmentStart(); ++gcObj.totalAlignedReads; if (pos > 0) { final int windowGc = gc[pos]; if (windowGc >= 0) { ++gcObj.readsByGc[windowGc]; gcObj.basesByGc[windowGc] += rec.getReadLength(); gcObj.errorsByGc[windowGc] += SequenceUtil.countMismatches(rec, refBases, bisulfite) + SequenceUtil.countInsertedBases(rec) + SequenceUtil.countDeletedBases(rec); } } if (gcObj.group == null) { gcObj.group = group; } } }