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) {
public static void trim(SAMRecord read, int startCount, int endCount) { int readLength = read.getReadLength(); read.setReadBases(Arrays.copyOfRange(read.getReadBases(), startCount, readLength - endCount)); read.setBaseQualities(Arrays.copyOfRange(read.getBaseQualities(), startCount, readLength - endCount)); if (read.getCigar() != null && read.getCigar().getCigarElements().size() > 0) { read.setAlignmentStart(read.getAlignmentStart() + CigarUtil.offsetOf(read.getCigar(), startCount)); read.setCigar(CigarUtil.trimReadBases(read.getCigar(), startCount, endCount)); assert (read.getReadLength() == read.getCigar().getReadLength()); } }
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";
/** * Checks whether if the read has any bases. * * Empty reads can be dangerous as it may have no cigar strings, no read names and * other missing attributes. * * @return true if the read has no bases */ public boolean isEmpty() { return super.getReadBases() == null || super.getReadLength() == 0; }
/** * Returns true if we don't think this read is eligible for the BAQ calculation. Examples include non-PF reads, * duplicates, or unmapped reads. Used by baqRead to determine if a read should fall through the calculation. * * @param read * @return */ public boolean excludeReadFromBAQ(final SAMRecord read) { // keeping mapped reads, regardless of pairing status, or primary alignment status. return read.getReadUnmappedFlag() || read.getReadFailsVendorQualityCheckFlag() || read.getDuplicateReadFlag(); } }
private void setCurrentPosition( final T read ) { currentContigIndex = read.getReferenceIndex(); currentAlignmentStart = read.getAlignmentStart(); positionEstablished = true; }
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 MateKey getMateKey(SAMRecord read) { // If mate is mapped, use read flag. // If mate is not mapped, use opposite of this read's RC flag boolean isMateRevOrientation = read.getMateUnmappedFlag() ? !read.getReadNegativeStrandFlag() : read.getMateNegativeStrandFlag(); int matePos = read.getMateUnmappedFlag() ? -1 : read.getMateAlignmentStart(); int mateNum = read.getFirstOfPairFlag() ? 2 : 1; return new MateKey(read.getReadName(), matePos, read.getMateUnmappedFlag(), isMateRevOrientation, mateNum, read.getAlignmentStart()); }
public ChimericAlignment(SAMRecord r) { this.rname = r.getReferenceName(); this.pos = r.getAlignmentStart(); this.isNegativeStrand = r.getReadNegativeStrandFlag(); this.cigar = r.getCigar(); this.mapq = r.getMappingQuality(); this.nm = r.getIntegerAttribute(SAMTag.NM.name()); } public ChimericAlignment(String str) {
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 canShadeBaseQuality() throws InvalidGenomicCoordsException, IOException, InvalidColourException { GenomicCoords gc= new GenomicCoords("chr7:1-80", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(1); rec.setCigarString("2M3D8M"); rec.setMappingQuality(30); rec.setReadBases("AAAAATTTTT".getBytes()); rec.setBaseQualities("!!!!!IIIII".getBytes()); System.err.println(rec.getSAMString()); TextRead tr= new TextRead(rec, gc, false); System.err.println(Splitter.on("m").omitEmptyStrings().splitToList(tr.getPrintableTextRead(false, false, false))); }
private static int dumpScoreDiffs(SAMRecord r1, SAMRecord r2, byte[] ref, List<PreservationPolicy> policies) { ScoreDiff[] diffs = findScoreDiffs(r1, r2, ref, policies); if (diffs.length == 0) return 0; System.out.printf("%s\t%d\t%d\t%s:\n", r1.getReadName(), r1.getAlignmentStart(), r1.getMappingQuality(), (r1.getReadUnmappedFlag() ? "unmapped" : "mapped")); for (ScoreDiff diff : diffs) { System.out.printf("%s\n", diff.toString()); } return diffs.length; }
/** * 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 testConvertedSAMRecord(final SAMRecord converted, final SAMRecord original) { Assert.assertEquals(converted.getReadName(), original.getReadName()); Assert.assertEquals(converted.getBaseQualities(), original.getBaseQualities()); Assert.assertEquals(converted.getReadBases(), original.getReadBases()); Assert.assertEquals(converted.getStringAttribute(SAMTag.CO.name()), original.getStringAttribute(SAMTag.CO.name())); Assert.assertTrue(converted.getReadUnmappedFlag()); } }
@Override public String getRemoteEvidenceID() { SAMRecord remote = this.getSAMRecord().deepCopy(); remote.setReferenceName(remoteAlignment.rname); remote.setAlignmentStart(remoteAlignment.pos); remote.setReadUnmappedFlag(false); remote.setReadNegativeStrandFlag(remoteAlignment.isNegativeStrand); remote.setCigar(remoteAlignment.cigar); remote.setAttribute(SAMTag.SA.name(), new ChimericAlignment(this.getSAMRecord()).toString()); SplitReadEvidence remoteEvidence = SplitReadEvidence.create(source, remote).get(0); return source.getContext().getEvidenceIDGenerator().getEvidenceID(remoteEvidence); } @Override
private static SAMRecord createSAMRecord(SAMFileHeader header, int recordIndex, int seqId, int start) { byte[] bases = "AAAAA".getBytes(); final SAMRecord record = new SAMRecord(header); record.setReferenceIndex(seqId); record.setAlignmentStart(start); record.setReadBases(bases); record.setBaseQualities(bases); record.setReadName(Integer.toString(recordIndex)); return record; }
private void assertGoodRead(final SAMRecord read, final ArtificialBAMBuilder bamBuilder) { Assert.assertEquals(read.getReadLength(), bamBuilder.getReadLength()); Assert.assertEquals(read.getReadBases().length, bamBuilder.getReadLength()); Assert.assertEquals(read.getBaseQualities().length, bamBuilder.getReadLength()); Assert.assertTrue(read.getAlignmentStart() >= bamBuilder.getAlignmentStart()); Assert.assertNotNull(read.getReadGroup()); } }
private static SAMRecord createRecord(int start, int mappingQuality) { final SAMRecord rec = new SAMRecord(getHeader()); rec.setReadName("read"); rec.setReferenceName("1"); rec.setAlignmentStart(start); rec.setMappingQuality(mappingQuality); return rec; }
public UnsupportedCigarOperatorException(final CigarOperator co, final SAMRecord read, final String message) { super(String.format( "Unsupported CIGAR operator %s in read %s at %s:%d. %s", co, read.getReadName(), read.getReferenceName(), read.getAlignmentStart(), message)); } }
/** * The record should already have the DS and MC tags computed */ public void addRecord(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getMateUnmappedFlag() && null == record.getAttribute(SAMTag.MC.getBinaryTag())) { throw new SAMException("Mate Cigar tag (MC) not found in: " + record.getReadName()); } this.records.add(record); }