public int compare(SAMRecord lhs, SAMRecord rhs) { if(!lhs.getReferenceIndex().equals(rhs.getReferenceIndex())) return lhs.getReferenceIndex() - rhs.getReferenceIndex(); // Note: no integer overflow here because alignment starts are >= 0. return lhs.getAlignmentStart() - rhs.getAlignmentStart(); } }
private void setCurrentPosition( final T read ) { currentContigIndex = read.getReferenceIndex(); currentAlignmentStart = read.getAlignmentStart(); positionEstablished = true; }
@Override public Integer getReferenceIndex() { if (!initializedFields.contains(LazyField.REFERENCE_NAME)) { setReferenceName(getReferenceNameImpl()); } return super.getReferenceIndex(); }
private boolean readIsPastCurrentPosition( final T read ) { return ! positionEstablished || read.getReferenceIndex() > currentContigIndex || read.getAlignmentStart() > currentAlignmentStart || (read.getReadUnmappedFlag() && ! unmappedReadsReached); }
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 BAMFileIndexUnmappedIterator() { while (this.hasNext() && peek().getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { advance(); } } }
private BAMFileIndexUnmappedIterator() { while (this.hasNext() && peek().getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { advance(); } } }
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 BAMFileIndexUnmappedIterator() { while (this.hasNext() && peek().getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { advance(); } } }
@Test public void testSetHeaderStrictValid() { SAMRecord sam = createTestRecordHelper(); final SAMFileHeader samHeader = sam.getHeader(); Integer originalRefIndex = sam.getReferenceIndex(); Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalRefIndex); // force re-resolution of the reference name sam.setHeaderStrict(samHeader); Assert.assertEquals(sam.getReferenceIndex(), originalRefIndex); }
/** * Records that a given record has been processed and triggers logging if necessary. * @return boolean true if logging was triggered, false otherwise */ public synchronized boolean record(final SAMRecord rec) { if (rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return record(null, 0); } else { return record(rec.getReferenceName(), rec.getAlignmentStart()); } }
/** * Tests if the provided record is mapped entirely beyond the end of the reference (i.e., the alignment start is greater than the * length of the sequence to which the record is mapped). */ public static boolean recordMapsEntirelyBeyondEndOfReference(final SAMRecord record) { return record.getHeader().getSequence(record.getReferenceIndex()).getSequenceLength() < record.getAlignmentStart(); }
@Test public void tenPerChromosome() { GATKSAMIterator iter = ArtificialSAMUtils.mappedReadIterator(1, 100, 10); int count = 0; while (iter.hasNext()) { SAMRecord rec = iter.next(); assertEquals(Integer.valueOf(Math.round(count / 10)), rec.getReferenceIndex()); count++; } assertEquals(count, 100 * 10); }
@Test public void testSetHeaderStrictValidHeaderless() { SAMRecord sam = createTestRecordHelper(); final SAMFileHeader samHeader = sam.getHeader(); Integer originalRefIndex = sam.getReferenceIndex(); Assert.assertTrue(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX != originalRefIndex); sam.setHeader(null); // force re-resolution of the reference name sam.setHeaderStrict(samHeader); Assert.assertEquals(sam.getReferenceIndex(), originalRefIndex); }
@Test public void onePerChromosome() { GATKSAMIterator iter = ArtificialSAMUtils.mappedReadIterator(1, 100, 1); int count = 0; while (iter.hasNext()) { SAMRecord rec = iter.next(); assertEquals(Integer.valueOf(count), rec.getReferenceIndex()); count++; } assertEquals(count, 100 * 1); }
@Test(expectedExceptions=IllegalStateException.class) public void testNullHeaderForceIndexResolutionFailure() { // force the internal SAMRecord reference index value to null initial state final SAMRecord sam = new SAMRecord(null); sam.setReferenceName("unresolvable"); sam.getReferenceIndex(); }
@Test(expectedExceptions=IllegalStateException.class) public void testNullHeaderGetReferenceIndex() { final SAMRecord sam = createTestRecordHelper(); sam.setHeader(null); // getReferenceIndex with null header throws sam.getReferenceIndex(); }
@Test(expectedExceptions=IllegalArgumentException.class) public void testSetHeaderStrictInvalidReference() { SAMRecord sam = createTestRecordHelper(); final SAMFileHeader samHeader = sam.getHeader(); sam.setReferenceName("unresolvable"); Assert.assertEquals(new Integer(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX), sam.getReferenceIndex()); // throw on force re-resolution of the unresolvable reference name sam.setHeaderStrict(samHeader); }
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()); }
@Test public void testSetHeaderStrictValidNewHeader() { final SAMRecord sam = createTestRecordHelper(); final String origSequenceName = sam.getContig(); final SAMFileHeader origSamHeader = sam.getHeader(); final int origSequenceLength = origSamHeader.getSequence(origSequenceName).getSequenceLength(); final SAMFileHeader newHeader = new SAMFileHeader(); newHeader.addSequence(new SAMSequenceRecord(origSequenceName, origSequenceLength)); // force re-resolution of the reference name against the new header sam.setHeaderStrict(newHeader); Assert.assertEquals(sam.getReferenceIndex(), new Integer(0)); }