@Override public Integer getMateReferenceIndex() { if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) { setMateReferenceName(getMateReferenceNameImpl()); } return super.getMateReferenceIndex(); }
@Override public Integer getMateReferenceIndex() { if (!initializedFields.contains(LazyField.MATE_REFERENCE_NAME)) { setMateReferenceName(getMateReferenceNameImpl()); } return super.getMateReferenceIndex(); }
public static boolean hasBadMate(final SAMRecord rec) { return (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag() && !rec.getReferenceIndex().equals(rec.getMateReferenceIndex())); }
/** * Checks whether the given read is part of a chimeric pair. * Note that this method returns false if the read is unpaired or if either end of the pair is unmapped. * * @param rec the read * @param maxInsertSize max insert size to be considered non-chimeric * @param expectedOrientations set of orientations that are not chimeric; must not ne null * @return true if this record is part of a chimeric read pair, false otherwise */ public static boolean isChimeric(final SAMRecord rec, final int maxInsertSize, final Set<PairOrientation> expectedOrientations) { return isMappedPair(rec) && // the read pair needs to be mapped and... (Math.abs(rec.getInferredInsertSize()) > maxInsertSize || // either far apart on the same contig !rec.getReferenceIndex().equals(rec.getMateReferenceIndex()) || // or on different contigs !matchesExpectedOrientations(rec, expectedOrientations)); // or in unexpected orientations }
private int getMateReferenceIndex(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return record.getMateReferenceIndex(); } else { return -1; } }
private int getReferenceIndex(final SAMRecord samRecord) { if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getReferenceIndex()); } if (samRecord.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getMateReferenceIndex()); } return SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX; } }
private int getMateReferenceIndex(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return record.getMateReferenceIndex(); } else { return -1; } }
private int getReferenceIndex(final SAMRecord samRecord) { if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getReferenceIndex()); } if (samRecord.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getMateReferenceIndex()); } return SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX; } }
private int getReferenceIndex(final SAMRecord samRecord) { if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getReferenceIndex()); } if (samRecord.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getMateReferenceIndex()); } return SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX; } }
@Test(expectedExceptions=IllegalStateException.class) public void testNullHeaderForceMateIndexResolutionFailure() { // force the internal SAMRecord reference index value to null initial state final SAMRecord sam = new SAMRecord(null); sam.setMateReferenceName("unresolvable"); sam.getMateReferenceIndex(); }
@Test public void testMateReferenceIndex() { // NO_ALIGNMENT_REFERENCE SAMRecord sam = createTestRecordHelper(); sam.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); Assert.assertTrue(sam.getMateReferenceIndex().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX)); Assert.assertTrue(sam.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)); // valid reference sam = createTestRecordHelper(); sam.setMateReferenceIndex(3); Assert.assertTrue(sam.getMateReferenceIndex().equals(3)); Assert.assertTrue(sam.getMateReferenceName().equals("chr4")); }
@Test(expectedExceptions=IllegalArgumentException.class) public void testSetHeaderStrictInvalidMateReference() { SAMRecord sam = createTestRecordHelper(); final SAMFileHeader samHeader = sam.getHeader(); sam.setMateReferenceName("unresolvable"); Assert.assertEquals(new Integer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX), sam.getMateReferenceIndex()); // throw on force re-resolution of the unresolvable mate reference name sam.setHeaderStrict(samHeader); }
@Test(expectedExceptions=IllegalStateException.class) public void testNullHeaderGetMateReferenceIndex() { final SAMRecord sam = createTestRecordHelper(); sam.setMateReferenceName("chr1"); sam.setHeader(null); // getMateReferenceIndex with null header throws sam.getMateReferenceIndex(); }
private void assertMate(final SAMRecord rec, final SAMRecord mate) { Assert.assertNotNull(mate); Assert.assertEquals(mate.getReadName(), rec.getReadName()); Assert.assertEquals(mate.getReferenceIndex(), rec.getMateReferenceIndex()); if (SAMUtils.getMateCigarString(rec) != null) { Assert.assertEquals(mate.getCigarString(), SAMUtils.getMateCigarString(rec)); } Assert.assertEquals(mate.getAlignmentStart(), rec.getMateAlignmentStart()); Assert.assertFalse(mate.getFirstOfPairFlag() == rec.getFirstOfPairFlag()); }
protected Range<Long> getMateRange(SAMRecord r) { if (!r.getReadPairedFlag() || r.getMateUnmappedFlag()) { return null; } Object mc = r.getAttribute(SAMTag.MC.name()); Cigar mateCigar = null; if (mc instanceof String) { mateCigar = TextCigarCodec.decode((String)mc); } long start = lgc.getLinearCoordinate(r.getMateReferenceIndex(), r.getMateAlignmentStart()); return rangeOf(start, mateCigar); }
private boolean isLowerMappedOfNonOverlappingConcordantPair(SAMRecord read) { return !read.getReadUnmappedFlag() && read.getReadPairedFlag() && !read.getMateUnmappedFlag() && read.getAlignmentEnd() < read.getMateAlignmentStart() && read.getReferenceIndex().equals(read.getMateReferenceIndex()) && (read.getAlignmentStart() < read.getMateAlignmentStart() || (read.getAlignmentStart() == read.getMateAlignmentStart() && read.getFirstOfPairFlag())) && pairing.isConcordant(read); } private String trackedBufferName_currentReferenceRead = "coverage.currentReferenceRead";
public PairEndInfo(final SAMRecord record, final long recordNumber) { this.recordNumber = recordNumber; this.readAlignmentStart = record.getAlignmentStart(); this.readNegStrandFlag = record.getReadNegativeStrandFlag(); this.readReferenceIndex = record.getReferenceIndex(); this.readUnmappedFlag = record.getReadUnmappedFlag(); this.readCigarString = record.getCigarString(); this.mateAlignmentStart = record.getMateAlignmentStart(); this.mateNegStrandFlag = record.getMateNegativeStrandFlag(); this.mateReferenceIndex = record.getMateReferenceIndex(); this.mateUnmappedFlag = record.getMateUnmappedFlag(); final Object mcs = record.getAttribute(SAMTag.MC.name()); this.mateCigarString = (mcs != null) ? (String) mcs : null; this.firstOfPairFlag = record.getFirstOfPairFlag(); }
private void compare(SAMRecord r1, SAMRecord r2) { assertThat(r1.getReadName(), equalTo(r2.getReadName())); assertThat(r1.getFlags(), equalTo(r2.getFlags())); assertThat(r1.getReferenceIndex(), equalTo(r2.getReferenceIndex())); assertThat(r1.getAlignmentStart(), equalTo(r2.getAlignmentStart())); assertThat(r1.getMappingQuality(), equalTo(r2.getMappingQuality())); assertThat(r1.getCigarString(), equalTo(r2.getCigarString())); assertThat(r1.getMateReferenceIndex(), equalTo(r2.getMateReferenceIndex())); assertThat(r1.getMateAlignmentStart(), equalTo(r2.getMateAlignmentStart())); assertThat(r1.getInferredInsertSize(), equalTo(r2.getInferredInsertSize())); assertArrayEquals(r1.getReadBases(), r2.getReadBases()); assertArrayEquals(r1.getBaseQualities(), r2.getBaseQualities()); }
public PairEndInfo(final SAMRecord record, final long recordNumber) { this.recordNumber = recordNumber; this.readAlignmentStart = record.getAlignmentStart(); this.readNegStrandFlag = record.getReadNegativeStrandFlag(); this.readReferenceIndex = record.getReferenceIndex(); this.readUnmappedFlag = record.getReadUnmappedFlag(); this.readCigarString = record.getCigarString(); this.mateAlignmentStart = record.getMateAlignmentStart(); this.mateNegStrandFlag = record.getMateNegativeStrandFlag(); this.mateReferenceIndex = record.getMateReferenceIndex(); this.mateUnmappedFlag = record.getMateUnmappedFlag(); final Object mcs = record.getAttribute(SAMTag.MC.name()); this.mateCigarString = (mcs != null) ? (String) mcs : null; this.firstOfPairFlag = record.getFirstOfPairFlag(); }
public static boolean isDovetailing(SAMRecord record, PairOrientation expectedOrientation, int margin) { if (record.getReadUnmappedFlag()) return false; if (!record.getReadPairedFlag()) return false; if (record.getMateUnmappedFlag()) return false; Cigar cigar2 = null; String mc = record.getStringAttribute(SAMTag.MC.name()); if (mc != null) { cigar2 = TextCigarCodec.decode(mc); } return isDovetailing(record.getReferenceIndex(), record.getAlignmentStart(), record.getReadNegativeStrandFlag(), record.getCigar(), record.getMateReferenceIndex(), record.getMateAlignmentStart(), record.getMateNegativeStrandFlag(), cigar2, expectedOrientation, margin); }