/** * shortcut to <pre>SAMFlag.getFlags( this.getFlags() );</pre> * @returns a set of SAMFlag associated to this sam record */ public final Set<SAMFlag> getSAMFlags() { return SAMFlag.getFlags(this.getFlags()); }
/** * shortcut to <pre>SAMFlag.getFlags( this.getFlags() );</pre> * @returns a set of SAMFlag associated to this sam record */ public final Set<SAMFlag> getSAMFlags() { return SAMFlag.getFlags(this.getFlags()); }
/** * Returns true if the input read is primary. * i.e. Bit flag not secondary 0x200 or supplemental 0x800 */ public static boolean isPrimary(SAMRecord read) { return ((read.getFlags() & 0x800) == 0) && (!read.getNotPrimaryAlignmentFlag()); }
public SAMRecord read() { while(iterator.hasNext()) { SAMRecord record = iterator.next(); if (filter != 0 && (record.getFlags() & filter) != 0) { continue; } return record; } return null; }
public boolean compareFieldValue(SAMRecord r1, SAMRecord r2, FIELD_TYPE field, String tagId) { if (field == null) throw new IllegalArgumentException("Record field is null."); if (field == FIELD_TYPE.FLAG) { int f1 = r1.getFlags() & ~ignoreFlags; int f2 = r2.getFlags() & ~ignoreFlags; return f1 == f2; } if (field == FIELD_TYPE.TLEN) { int t1 = r1.getInferredInsertSize(); int t2 = r2.getInferredInsertSize(); return Math.abs(t1 - t2) <= ignoreTLENDiff; } Object value1 = getValue(r1, field, tagId); Object value2 = getValue(r2, field, tagId); return compareObjects(value1, value2); }
@Override public int getFlags() { for (LazyFlag flag : LazyFlag.values()) { if (initializedFlags.contains(flag)) { continue; } if (flag.canCallOnNotPaired() || getReadPairedFlag()) { flag.getFlag(this); } } return super.getFlags(); }
@Override public int getFlags() { for (LazyFlag flag : LazyFlag.values()) { if (initializedFlags.contains(flag)) { continue; } if (flag.canCallOnNotPaired() || getReadPairedFlag()) { flag.getFlag(this); } } return super.getFlags(); }
@Override public int compareTo(InsertShiftSAMRecord that) { int compare = this.read.getReferenceIndex() - that.read.getReferenceIndex(); if (compare == 0) { compare = this.getAlignmentStart() - that.getAlignmentStart(); } if (compare == 0) { compare = this.read.getReadName().compareTo(that.read.getReadName()); } if (compare == 0) { compare = this.read.getFlags() - that.read.getFlags(); } return compare; } }
public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) { int cmp = fileOrderCompare(samRecord1, samRecord2); // Note: secondary sort order does not match SAMRecordCoordinateComparator if (cmp != 0) return cmp; cmp = samRecord1.getReadName().compareTo(samRecord2.getReadName()); if (cmp != 0) return cmp; cmp = compareInts(samRecord1.getFlags(), samRecord2.getFlags()); if (cmp != 0) return cmp; cmp = compareInts(samRecord1.getMappingQuality(), samRecord2.getMappingQuality()); if (cmp != 0) return cmp; cmp = compareInts(samRecord1.getInferredInsertSize(), samRecord2.getInferredInsertSize()); return cmp; }
private static void testSingleRecord(SAMRecord record, byte[] ref) throws IOException { CRAMFileReader cramFileReader = CRAMTestUtils.writeAndReadFromInMemoryCram(Collections.singletonList(record), ref); final SAMRecordIterator iterator = cramFileReader.getIterator(); Assert.assertTrue(iterator.hasNext()); SAMRecord s2 = iterator.next(); Assert.assertNotNull(s2); Assert.assertFalse(iterator.hasNext()); Assert.assertEquals(record.getFlags(), s2.getFlags()); Assert.assertEquals(record.getReadName(), s2.getReadName()); Assert.assertEquals(record.getReferenceName(), s2.getReferenceName()); Assert.assertEquals(record.getAlignmentStart(), s2.getAlignmentStart()); Assert.assertEquals(record.getReadBases(), s2.getReadBases()); Assert.assertEquals(record.getBaseQualities(), s2.getBaseQualities()); }
private static void testRecords(Collection<SAMRecord> records, byte[] ref) throws IOException { CRAMFileReader cramFileReader = CRAMTestUtils.writeAndReadFromInMemoryCram(records, ref); Iterator<SAMRecord> it; final SAMRecordIterator iterator = cramFileReader.getIterator(); Assert.assertTrue(iterator.hasNext()); it = records.iterator(); while (it.hasNext()) { SAMRecord record = it.next(); SAMRecord s2 = iterator.next(); Assert.assertNotNull(s2); Assert.assertEquals(record.getFlags(), s2.getFlags()); Assert.assertEquals(record.getReadName(), s2.getReadName()); Assert.assertEquals(record.getReferenceName(), s2.getReferenceName()); Assert.assertEquals(record.getAlignmentStart(), s2.getAlignmentStart()); Assert.assertEquals(record.getReadBases(), s2.getReadBases()); Assert.assertEquals(record.getBaseQualities(), s2.getBaseQualities()); } Assert.assertFalse(iterator.hasNext()); }
private void assertSameRecordsPartial(Integer majorVersion, SAMRecord record1, SAMRecord record2) { // test a partial set of fields for equality, avoiding known CRAM conversion issues Assert.assertEquals(record2.getFlags(), record1.getFlags()); Assert.assertEquals(record2.getReadName(), record1.getReadName()); Assert.assertEquals(record2.getReferenceName(), record1.getReferenceName()); Assert.assertEquals(record2.getAlignmentStart(), record1.getAlignmentStart()); /** * Known issue: CRAM v2.1 doesn't handle reads with missing bases correctly. This * causes '*' bases to arise when reading CRAM. Skipping the base comparison asserts. * https://github.com/samtools/htsjdk/issues/509 */ if (record1.getReadBases() != SAMRecord.NULL_SEQUENCE || majorVersion >= CramVersions.CRAM_v3.major) { // BAM and CRAM convert read bases to upper case IUPAC codes final byte[] originalBases = record1.getReadBases(); SequenceUtil.toBamReadBasesInPlace(originalBases); Assert.assertEquals(record2.getReadBases(), originalBases); } Assert.assertEquals(record2.getBaseQualities(), record1.getBaseQualities()); }
private void validateRecords(final List<SAMRecord> expectedRecords, ByteArrayInputStream is, ReferenceSource referenceSource) { CRAMFileReader cReader = new CRAMFileReader(null, is, referenceSource); SAMRecordIterator iterator2 = cReader.getIterator(); int index = 0; while (iterator2.hasNext()) { SAMRecord actualRecord = iterator2.next(); SAMRecord expectedRecord = expectedRecords.get(index++); Assert.assertEquals(actualRecord.getReadName(), expectedRecord.getReadName()); Assert.assertEquals(actualRecord.getFlags(), expectedRecord.getFlags()); Assert.assertEquals(actualRecord.getAlignmentStart(), expectedRecord.getAlignmentStart()); Assert.assertEquals(actualRecord.getAlignmentEnd(), expectedRecord.getAlignmentEnd()); Assert.assertEquals(actualRecord.getReferenceName(), expectedRecord.getReferenceName()); Assert.assertEquals(actualRecord.getMateAlignmentStart(), expectedRecord.getMateAlignmentStart()); Assert.assertEquals(actualRecord.getMateReferenceName(), expectedRecord.getMateReferenceName()); Assert.assertEquals(actualRecord.getReadBases(), expectedRecord.getReadBases()); Assert.assertEquals(actualRecord.getBaseQualities(), expectedRecord.getBaseQualities()); } cReader.close(); }
/** * Strip mapping information from a SAMRecord, but preserve it in the 'O' tags if it isn't already set. */ public static void makeReadUnmappedWithOriginalTags(final SAMRecord rec) { if (!hasOriginalMappingInformation(rec)) { rec.setAttribute(SAMTag.OP.name(), rec.getAlignmentStart()); rec.setAttribute(SAMTag.OC.name(), rec.getCigarString()); rec.setAttribute(SAMTag.OF.name(), rec.getFlags()); rec.setAttribute(SAMTag.OR.name(), rec.getReferenceName()); } makeReadUnmapped(rec); }
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()); }
/** * Strip mapping information from a SAMRecord, but preserve it in the 'O' tags if it isn't already set. */ public static void makeReadUnmappedWithOriginalTags(final SAMRecord rec) { if (!hasOriginalMappingInformation(rec)) { rec.setAttribute(SAMTag.OP.name(), rec.getAlignmentStart()); rec.setAttribute(SAMTag.OC.name(), rec.getCigarString()); rec.setAttribute(SAMTag.OF.name(), rec.getFlags()); rec.setAttribute(SAMTag.OR.name(), rec.getReferenceName()); } makeReadUnmapped(rec); }
/** * Strip mapping information from a SAMRecord, but preserve it in the 'O' tags if it isn't already set. */ public static void makeReadUnmappedWithOriginalTags(final SAMRecord rec) { if (!hasOriginalMappingInformation(rec)) { rec.setAttribute(SAMTag.OP.name(), rec.getAlignmentStart()); rec.setAttribute(SAMTag.OC.name(), rec.getCigarString()); rec.setAttribute(SAMTag.OF.name(), rec.getFlags()); rec.setAttribute(SAMTag.OR.name(), rec.getReferenceName()); } makeReadUnmapped(rec); }
public static Alignment buildAlignment(SAMRecord record, Map<String, Object> attributes, String referenceSequence) { List<Alignment.AlignmentDifference> differences; differences = AlignmentUtils.getDifferencesFromCigar(record, referenceSequence, Integer.MAX_VALUE); Alignment alignment = new Alignment(record.getReadName(), record.getReferenceName(), record.getAlignmentStart(), record.getAlignmentEnd(), record.getUnclippedStart(), record.getUnclippedEnd(), record.getReadLength(), record.getMappingQuality(), record.getBaseQualityString(),//.replace("\\", "\\\\").replace("\"", "\\\""), record.getMateReferenceName(), record.getMateAlignmentStart(), record.getInferredInsertSize(), record.getFlags(), differences, attributes); return alignment; } public static Alignment buildAlignment(SAMRecord record, String referenceSequence) {
@Test public void testNullHeadGetCigarBAM() { SAMRecord sam = createTestRecordHelper(); SAMRecordFactory factory = new DefaultSAMRecordFactory(); BAMRecord bamRec = factory.createBAMRecord( sam.getHeader(), sam.getReferenceIndex(), sam.getAlignmentStart(), (short) sam.getReadNameLength(), (short) sam.getMappingQuality(), 0, sam.getCigarLength(), sam.getFlags(), sam.getReadLength(), sam.getMateReferenceIndex(), sam.getMateAlignmentStart(), 0, null); bamRec.setCigarString(sam.getCigarString()); testNullHeaderCigar(bamRec); }
private int translate(SAMRecord record, BAMRecordView view) { view.setReadName(record.getReadName()); view.setFlags(record.getFlags()); view.setRefID(record.getReferenceIndex()); view.setAlignmentStart(record.getAlignmentStart()); view.setMappingScore(record.getMappingQuality()); view.setCigar(record.getCigar()); view.setMateRefID(record.getMateReferenceIndex()); view.setMateAlStart(record.getMateAlignmentStart()); view.setInsertSize(record.getInferredInsertSize()); view.setBases(record.getReadBases()); view.setQualityScores(record.getBaseQualities()); view.setTagData(new byte[0], 0, 0); return view.finish(); }