public static String prettyPrintSequenceRecords(SAMSequenceDictionary sequenceDictionary) { String[] sequenceRecordNames = new String[sequenceDictionary.size()]; int sequenceRecordIndex = 0; for (SAMSequenceRecord sequenceRecord : sequenceDictionary.getSequences()) sequenceRecordNames[sequenceRecordIndex++] = sequenceRecord.getSequenceName(); return Arrays.deepToString(sequenceRecordNames); }
/** * Check to ensure that the alignment makes sense based on the contents of the header. * * @param header The SAM file header. * @param read The read to verify. * @return true if alignment agrees with header, false otherwise. */ public static boolean alignmentAgreesWithHeader(final SAMFileHeader header, final GATKRead read) { final int referenceIndex = getReferenceIndex(read, header); // Read is aligned to nonexistent contig if (!read.isUnmapped() && referenceIndex == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) { return false; } final SAMSequenceRecord contigHeader = header.getSequence(referenceIndex); // Read is aligned to a point after the end of the contig return read.isUnmapped() || read.getStart() <= contigHeader.getSequenceLength(); }
private List<String> getReferenceNames(final URL bamFile) throws IOException { final SamReader reader = SamReaderFactory.makeDefault().open(SamInputResource.of(bamFile.openStream())); final List<String> result = new ArrayList<String>(); final List<SAMSequenceRecord> seqRecords = reader.getFileHeader().getSequenceDictionary().getSequences(); for (final SAMSequenceRecord seqRecord : seqRecords) { if (seqRecord.getSequenceName() != null) { result.add(seqRecord.getSequenceName()); } } reader.close(); return result; }
public List<String> getSequenceNames() { if (sequenceNames == null) { SAMFileHeader header = getFileHeader(); if (header == null) { return null; } sequenceNames = new ArrayList(); List<SAMSequenceRecord> records = header.getSequenceDictionary().getSequences(); if (records.size() > 0) { for (SAMSequenceRecord rec : header.getSequenceDictionary().getSequences()) { String chr = rec.getSequenceName(); sequenceNames.add(chr); } } } return sequenceNames; }
@Test public void testSequenceDictionaryMerge() { final String sd1 = sq1 + sq2 + sq5; final String sd2 = sq2 + sq3 + sq4; SAMFileReader reader1 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd1))); SAMFileReader reader2 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd2))); final List<SAMFileHeader> inputHeaders = Arrays.asList(reader1.getFileHeader(), reader2.getFileHeader()); SamFileHeaderMerger merger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, inputHeaders, true); final SAMFileHeader mergedHeader = merger.getMergedHeader(); for (final SAMFileHeader inputHeader : inputHeaders) { int prevTargetIndex = -1; for (final SAMSequenceRecord sequenceRecord : inputHeader.getSequenceDictionary().getSequences()) { final int targetIndex = mergedHeader.getSequenceIndex(sequenceRecord.getSequenceName()); Assert.assertNotSame(targetIndex, -1); Assert.assertTrue(prevTargetIndex < targetIndex); prevTargetIndex = targetIndex; } } }