@Override public String getReadString() { if ( mReadString == null ) mReadString = super.getReadString(); return mReadString; }
@Override public String getReadSequence() { return record.getReadString(); }
public String getSeq() { String seq; if (mergedSeq != null) { seq = mergedSeq; } else { seq = samRecord.getReadString(); } return seq; }
@Override public String getAlignedSequence(SAMRecord alignment) { return alignment.getReadString(); }
@Override public int getReadLength() { return record.getReadString().length(); }
private static void printFastq(PrintStream ps, SAMRecord record) { ps.print('@'); ps.println(record.getReadName()); ps.println(record.getReadString()); ps.println('+'); ps.println(record.getBaseQualityString()); }
/** * The following passage is for paranoid mode only. When java is run with * asserts on it will throw an {@link AssertionError} if read bases or * quality scores of a restored SAM record mismatch the original. This is * effectively a runtime round trip test. */ private static void assertSame(SAMFileHeader samFileHeader, List<SAMRecord> samRecords, List<CramCompressionRecord> cramRecords) { @SuppressWarnings("UnusedAssignment") boolean assertsEnabled = false; assert assertsEnabled = true; if (assertsEnabled) { final Cram2SamRecordFactory f = new Cram2SamRecordFactory(samFileHeader); for (int i = 0; i < samRecords.size(); i++) { final SAMRecord restoredSamRecord = f.create(cramRecords.get(i)); assert (restoredSamRecord.getAlignmentStart() == samRecords.get(i).getAlignmentStart()); assert (restoredSamRecord.getReferenceName().equals(samRecords.get(i).getReferenceName())); assert (restoredSamRecord.getReadString().equals(samRecords.get(i).getReadString())); assert (restoredSamRecord.getBaseQualityString().equals(samRecords.get(i).getBaseQualityString())); } } }
public static String getMappedReadPortion(SAMRecord read) { int start = 0; List<CigarElement> elems = read.getCigar().getCigarElements(); int i = 0; while (i < elems.size() && isClip(elems.get(i))) { if (elems.get(i).getOperator() == CigarOperator.S) { start += elems.get(i).getLength(); } i += 1; } int stop = read.getReadLength(); i = elems.size()-1; while (i >= 0 && isClip(elems.get(i))) { if (elems.get(i).getOperator() == CigarOperator.S) { stop -= elems.get(i).getLength(); } i -= 1; } return read.getReadString().substring(start, stop); }
final char[] seqs = rec.getReadString().toCharArray(); final char[] quals = rec.getBaseQualityString().toCharArray();
@Test(dataProvider = "ambiguityCodeVerification") public void ambiguityCodeVerificationTest(String name) throws IOException { doComplianceTest(name, (version, expected, actual) -> { if (expected.getReadString().equals(actual.getReadString())) { Assert.assertEquals(expected, actual); } else { // tolerate BAM and CRAM conversion of read bases to upper case IUPAC codes by // creating a deep copy of the expected reads and normalizing (upper case IUPAC) // the bases; then proceeding with the full compare with the actual SAMRecord expectedNormalized = actual.deepCopy(); final byte[] expectedBases = expectedNormalized.getReadBases(); SequenceUtil.toBamReadBasesInPlace(expectedBases); Assert.assertEquals(actual, expectedNormalized); } } ); }
@Test public void testReverseComplement() { final SAMRecord rec = createTestSamRec(); rec.reverseComplement(Arrays.asList("Y1"), Arrays.asList("X1", "X2", "X3", "X4", "X5"), false); Assert.assertEquals(rec.getReadString(), "GTGTGTGTGT"); Assert.assertEquals(rec.getBaseQualityString(), "IIIIIHHHHH"); Assert.assertEquals(rec.getByteArrayAttribute("X1"), new byte[] {5,4,3,2,1}); Assert.assertEquals(rec.getSignedShortArrayAttribute("X2"), new short[] {5,4,3,2,1}); Assert.assertEquals(rec.getSignedIntArrayAttribute("X3"), new int[] {5,4,3,2,1}); Assert.assertEquals(rec.getFloatArrayAttribute("X4"), new float[] {5.0f,4.0f,3.0f,2.0f,1.0f}); Assert.assertEquals(rec.getStringAttribute("Y1"), "GTTTTCTTTT"); }
@Test(dataProvider = "reverseComplementData") public void testSafeReverseComplement(boolean inplace, String bases, String quals, String y1, byte[] x1, short[] x2, int[] x3, float[] x4) throws CloneNotSupportedException { final SAMRecord original = createTestSamRec(); final SAMRecord cloneOfOriginal = (SAMRecord) original.clone(); //Runs a copy (rather than in-place) reverseComplement cloneOfOriginal.reverseComplement(Arrays.asList("Y1"), Arrays.asList("X1", "X2", "X3", "X4", "X5"), inplace); Assert.assertEquals(original.getReadString(), bases); Assert.assertEquals(original.getBaseQualityString(), quals); Assert.assertEquals(original.getByteArrayAttribute("X1"), x1); Assert.assertEquals(original.getSignedShortArrayAttribute("X2"), x2); Assert.assertEquals(original.getSignedIntArrayAttribute("X3"), x3); Assert.assertEquals(original.getFloatArrayAttribute("X4"), x4); Assert.assertEquals(original.getStringAttribute("Y1"), y1); Assert.assertEquals(cloneOfOriginal.getReadString(), "GTGTGTGTGT"); Assert.assertEquals(cloneOfOriginal.getBaseQualityString(), "IIIIIHHHHH"); Assert.assertEquals(cloneOfOriginal.getByteArrayAttribute("X1"), new byte[] {5,4,3,2,1}); Assert.assertEquals(cloneOfOriginal.getSignedShortArrayAttribute("X2"), new short[] {5,4,3,2,1}); Assert.assertEquals(cloneOfOriginal.getSignedIntArrayAttribute("X3"), new int[] {5,4,3,2,1}); Assert.assertEquals(cloneOfOriginal.getFloatArrayAttribute("X4"), new float[] {5.0f,4.0f,3.0f,2.0f,1.0f}); Assert.assertEquals(cloneOfOriginal.getStringAttribute("Y1"), "GTTTTCTTTT"); }
Alignment result = getImprovedAlignment(origEditDist, samRecord.getReadString());
/** * Converts a {@link SAMRecord} into a {@link FastqRecord}. */ public static FastqRecord asFastqRecord(final SAMRecord record) { String readName = record.getReadName(); if(record.getReadPairedFlag() && (record.getFirstOfPairFlag() || record.getSecondOfPairFlag())) { readName += (record.getFirstOfPairFlag()) ? FastqConstants.FIRST_OF_PAIR : FastqConstants.SECOND_OF_PAIR; } return new FastqRecord(readName, record.getReadString(), record.getStringAttribute(SAMTag.CO.name()), record.getBaseQualityString()); }
/** * Converts a {@link SAMRecord} into a {@link FastqRecord}. */ public static FastqRecord asFastqRecord(final SAMRecord record) { String readName = record.getReadName(); if(record.getReadPairedFlag() && (record.getFirstOfPairFlag() || record.getSecondOfPairFlag())) { readName += (record.getFirstOfPairFlag()) ? FastqConstants.FIRST_OF_PAIR : FastqConstants.SECOND_OF_PAIR; } return new FastqRecord(readName, record.getReadString(), record.getStringAttribute(SAMTag.CO.name()), record.getBaseQualityString()); }
public void addAlignment(int sampleIdx, SAMRecordWrapper samRecord, int chromosomeChunkIdx) { Feature chunk = this.chromosomeChunker.getChunks().get(chromosomeChunkIdx); SAMRecord read = samRecord.getSamRecord(); // Only output reads with original start pos within specified chromosomeChunk // Avoids reads being written in 2 different chunks int origAlignmentStart = read.getAlignmentStart(); String yo = read.getStringAttribute("YO"); if (yo != null) { String[] fields = yo.split(":"); origAlignmentStart = Integer.parseInt(fields[1]); } if (origAlignmentStart >= chunk.getStart() && origAlignmentStart <= chunk.getEnd()) { if (samRecord.isUnalignedRc() && read.getReadUnmappedFlag()) { // This read was reverse complemented, but not updated. // Change it back to its original state. read.setReadString(rc.reverseComplement(read.getReadString())); read.setBaseQualityString(rc.reverse(read.getBaseQualityString())); read.setReadNegativeStrandFlag(!read.getReadNegativeStrandFlag()); } writers[sampleIdx][chromosomeChunkIdx].addAlignment(read); } }
@Test(dataProvider = "basicDataProvider") public void basic(final String tempFileExtension) throws Exception { final File outputFile = File.createTempFile("iupacTest.", tempFileExtension); outputFile.deleteOnExit(); final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(new SAMFileHeader(), false, outputFile); final String bases1 = "=ACMGRSVTWYHKDBNA"; final String bases2 = "A=ACMGRSVTWYHKDBN"; // Test both high-order and low-order base encoding. final byte[] quals = new byte[bases1.length()]; Arrays.fill(quals, (byte) 20); final String[] reads = {bases1, bases1.toLowerCase(), bases2, bases2.toLowerCase()}; for (int i = 0; i < reads.length; ++i) { final SAMRecord rec = new SAMRecord(writer.getFileHeader()); rec.setReadName("read" + i); rec.setReadUnmappedFlag(true); rec.setReadString(reads[i]); rec.setBaseQualities(quals); writer.addAlignment(rec); } writer.close(); final SamReader reader = SamReaderFactory.makeDefault().open(outputFile); final SAMRecordIterator it = reader.iterator(); for (int i = 0; i < reads.length; ++i) { final SAMRecord rec = it.next(); Assert.assertEquals(rec.getReadString(), reads[i].toUpperCase()); } reader.close(); }
read.setReadString(padBases(element.getLength()) + read.getReadString()); } else { read.setReadString(read.getReadString() + padBases(element.getLength()));
/** * * @return String representation of this. * @deprecated This method is not guaranteed to return a valid SAM text representation of the SAMRecord. * To get standard SAM text representation, {@link SAMRecord#getSAMString}. */ @Deprecated public String format() { final StringBuilder buffer = new StringBuilder(); addField(buffer, getReadName(), null, null); addField(buffer, getFlags(), null, null); addField(buffer, getReferenceName(), null, "*"); addField(buffer, getAlignmentStart(), 0, "*"); addField(buffer, getMappingQuality(), 0, "0"); addField(buffer, getCigarString(), null, "*"); addField(buffer, getMateReferenceName(), null, "*"); addField(buffer, getMateAlignmentStart(), 0, "*"); addField(buffer, getInferredInsertSize(), 0, "*"); addField(buffer, getReadString(), null, "*"); addField(buffer, getBaseQualityString(), null, "*"); if (mAttributes != null) { SAMBinaryTagAndValue entry = getBinaryAttributes(); while (entry != null) { addField(buffer, formatTagValue(entry.tag, entry.value)); entry = entry.getNext(); } } return buffer.toString(); }
/** * * @return String representation of this. * @deprecated This method is not guaranteed to return a valid SAM text representation of the SAMRecord. * To get standard SAM text representation, use htsjdk.samtools.SAMRecord#getSAMString(). */ public String format() { final StringBuilder buffer = new StringBuilder(); addField(buffer, getReadName(), null, null); addField(buffer, getFlags(), null, null); addField(buffer, getReferenceName(), null, "*"); addField(buffer, getAlignmentStart(), 0, "*"); addField(buffer, getMappingQuality(), 0, "0"); addField(buffer, getCigarString(), null, "*"); addField(buffer, getMateReferenceName(), null, "*"); addField(buffer, getMateAlignmentStart(), 0, "*"); addField(buffer, getInferredInsertSize(), 0, "*"); addField(buffer, getReadString(), null, "*"); addField(buffer, getBaseQualityString(), null, "*"); if (mAttributes != null) { SAMBinaryTagAndValue entry = getBinaryAttributes(); while (entry != null) { addField(buffer, formatTagValue(entry.tag, entry.value)); entry = entry.getNext(); } } return buffer.toString(); }