private static SAMFileHeader initializeSAMFileHeaderForTests() { final SAMFileHeader header = new SAMFileHeader(); // arbitrary names and length. Just ensure we have 10 different valid refs. header.addSequence(new SAMSequenceRecord("0", 10)); header.addSequence(new SAMSequenceRecord("1", 10)); header.addSequence(new SAMSequenceRecord("2", 10)); header.addSequence(new SAMSequenceRecord("3", 10)); header.addSequence(new SAMSequenceRecord("4", 10)); header.addSequence(new SAMSequenceRecord("5", 10)); header.addSequence(new SAMSequenceRecord("6", 10)); header.addSequence(new SAMSequenceRecord("7", 10)); header.addSequence(new SAMSequenceRecord("8", 10)); header.addSequence(new SAMSequenceRecord("9", 10)); return header; }
private static SAMFileHeader getHeader() { final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("1", 1000)); return header; } }
private static void addRandomSequence(SAMFileHeader header, int length, InMemoryReferenceSequenceFile rsf) { String name = String.valueOf(header.getSequenceDictionary().size() + 1); header.addSequence(new SAMSequenceRecord(name, length)); byte[] refBases = new byte[length]; byte[] alphabet = "ACGTN".getBytes(); for (int i = 0; i < refBases.length; i++) refBases[i] = alphabet[random.nextInt(alphabet.length)]; rsf.add(name, refBases); } }
private SAMFileHeader createSAMHeader(SAMFileHeader.SortOrder sortOrder) { final SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(sortOrder); header.addSequence(new SAMSequenceRecord("chr1", 123)); header.addSequence(new SAMSequenceRecord("chr2", 123)); SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord("1"); header.addReadGroup(readGroupRecord); return header; }
@Test(dataProvider = "testGetPairOrientation") public void testGetPairOrientation(final String testName, final int read1Start, final int read1Length, final boolean read1Reverse, final int read2Start, final int read2Length, final boolean read2Reverse, final SamPairUtil.PairOrientation expectedOrientation) { final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("chr1", 100000000)); final SAMRecord rec1 = makeSamRecord(header, read1Start, read1Length, read1Reverse, true); final SAMRecord rec2 = makeSamRecord(header, read2Start, read2Length, read2Reverse, false); SamPairUtil.setMateInfo(rec1, rec2, true); Assert.assertEquals(SamPairUtil.getPairOrientation(rec1), expectedOrientation, testName + " first end"); Assert.assertEquals(SamPairUtil.getPairOrientation(rec2), expectedOrientation, testName + " second end"); }
@Test(dataProvider="invalidIntervalTestData", expectedExceptions=UserException.class, enabled = true) public void testInvalidPicardIntervalHandling(GenomeLocParser genomeLocParser, String contig, int intervalStart, int intervalEnd ) throws Exception { SAMFileHeader picardFileHeader = new SAMFileHeader(); picardFileHeader.addSequence(genomeLocParser.getContigInfo(contig)); IntervalList picardIntervals = new IntervalList(picardFileHeader); picardIntervals.add(new Interval(contig, intervalStart, intervalEnd, true, "dummyname")); File picardIntervalFile = createTempFile("testInvalidPicardIntervalHandling", ".intervals"); picardIntervals.write(picardIntervalFile); List<IntervalBinding<Feature>> intervalArgs = new ArrayList<IntervalBinding<Feature>>(1); intervalArgs.add(new IntervalBinding<Feature>(picardIntervalFile.getAbsolutePath())); IntervalUtils.loadIntervals(intervalArgs, IntervalSetRule.UNION, IntervalMergingRule.ALL, 0, genomeLocParser); }
private SAMFileHeader loadSamHeader() throws ErrorMsg { if (run == null) { throw new RuntimeException("Cannot load SAMFileHeader - SRA run is uninitialized"); } String runName = run.getName(); SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); ReadGroupIterator itRg = run.getReadGroups(); while (itRg.nextReadGroup()) { String rgName = itRg.getName(); if (rgName.isEmpty()) rgName = runName; SAMReadGroupRecord rg = new SAMReadGroupRecord(rgName); rg.setSample(runName); header.addReadGroup(rg); } ReferenceIterator itRef = run.getReferences(); while (itRef.nextReference()) { header.addSequence(new SAMSequenceRecord(itRef.getCanonicalName(), (int) itRef.getLength())); } return header; }
@Test(dataProvider = "testSetMateInfoMateCigar") public void testSetMateInfoMateCigar(final String testName, final int read1Start, final boolean read1Reverse, final String read1Cigar, final int read2Start, final boolean read2Reverse, final String read2Cigar) { final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("chr1", 100000000)); final SAMRecord rec1 = makeSamRecord2(header, read1Start, read1Reverse, read1Cigar, true); final SAMRecord rec2 = makeSamRecord2(header, read2Start, read2Reverse, read2Cigar, false); SamPairUtil.setMateInfo(rec1, rec2, true); Assert.assertEquals(SAMUtils.getMateCigarString(rec1), rec2.getCigarString(), testName + " first end"); Assert.assertEquals(SAMUtils.getMateCigarString(rec2), rec1.getCigarString(), testName + " second end"); }
@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)); }
private SAMFileHeader createSAMHeader(SAMFileHeader.SortOrder sortOrder) { final SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(sortOrder); header.addSequence(new SAMSequenceRecord("chr1", 123)); SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord("1"); header.addReadGroup(readGroupRecord); return header; }
private IntervalList buildIntervalList(final int start, final int end) { final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("CONTIG", 100000000)); final IntervalList intervals = new IntervalList(header); if (0 < start) intervals.add(new Interval("CONTIG", start, end)); return intervals; }
@Test(description="check that factory settings are propagated to writer") public void testFactorySettings() throws Exception { final SAMFileWriterFactory factory = new SAMFileWriterFactory(); factory.setCreateIndex(false); factory.setCreateMd5File(false); final File wontBeUsed = new File("wontBeUsed.tmp"); final int maxRecsInRam = 271828; factory.setMaxRecordsInRam(maxRecsInRam); factory.setTempDirectory(wontBeUsed); final SAMFileHeader header = new SAMFileHeader(); header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.addSequence(new SAMSequenceRecord("chr1", 123)); try (final SAMFileWriter writer = factory.makeBAMWriter(header, false, new ByteArrayOutputStream())) { Assert.assertEquals(maxRecsInRam, ((SAMFileWriterImpl) writer).getMaxRecordsInRam()); Assert.assertEquals(wontBeUsed, ((SAMFileWriterImpl) writer).getTempDirectory()); } try (final SAMFileWriter writer = factory.makeSAMWriter(header, false, new ByteArrayOutputStream())) { Assert.assertEquals(maxRecsInRam, ((SAMFileWriterImpl) writer).getMaxRecordsInRam()); Assert.assertEquals(wontBeUsed, ((SAMFileWriterImpl) writer).getTempDirectory()); } }
private SAMFileWriterFactory createWriterFactoryWithOptions(SAMFileHeader header) { final SAMFileWriterFactory factory = new SAMFileWriterFactory(); factory.setCreateIndex(true); factory.setCreateMd5File(true); // index only created if coordinate sorted header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.addSequence(new SAMSequenceRecord("chr1", 123)); header.addReadGroup(new SAMReadGroupRecord("1")); return factory; }
@Test public void testSimpleClippingOfRecord() { // setup the record final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("1", 1000)); final SAMRecord record = new SAMRecord(header); record.setReadPairedFlag(true); record.setCigar(TextCigarCodec.decode("10M")); record.setReferenceIndex(0); record.setAlignmentStart(1); record.setMateReferenceIndex(0); record.setMateAlignmentStart(6); // should overlap 5M record.setReadBases("AAAAAAAAAA".getBytes()); final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record); Assert.assertEquals(numToClip, 5); SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("5M5S"))); }
@Test public void testClippingOfRecordWithInsertion() { /** * Tests that if we need to clip a read with an insertion that overlaps */ // setup the record final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("1", 1000)); final SAMRecord record = new SAMRecord(header); record.setReadPairedFlag(true); record.setCigar(TextCigarCodec.decode("5M1I5M")); record.setReferenceIndex(0); record.setAlignmentStart(1); record.setMateReferenceIndex(0); record.setMateAlignmentStart(5); // should overlap the 1M1I5M record.setReadBases("AAAAAAAAAAA".getBytes()); final int numToClip = SAMUtils.getNumOverlappingAlignedBasesToClip(record); Assert.assertEquals(numToClip, 7); SAMUtils.clipOverlappingAlignedBases(record, numToClip, false); // Side-effects are OK Assert.assertTrue(record.getCigar().equals(TextCigarCodec.decode("4M7S"))); }
private void createSmallBam(final Path outputPath) { final SAMFileWriterFactory factory = new SAMFileWriterFactory(); factory.setCreateIndex(true); factory.setCreateMd5File(true); final SAMFileHeader header = new SAMFileHeader(); // index only created if coordinate sorted header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.addSequence(new SAMSequenceRecord("chr1", 123)); try (final SAMFileWriter writer = factory.makeBAMWriter(header, false, outputPath)) { fillSmallBam(writer); } }
private void createSmallBam(final File outputFile) { final SAMFileWriterFactory factory = new SAMFileWriterFactory(); factory.setCreateIndex(true); factory.setCreateMd5File(true); final SAMFileHeader header = new SAMFileHeader(); // index only created if coordinate sorted header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.addSequence(new SAMSequenceRecord("chr1", 123)); try (final SAMFileWriter writer = factory.makeBAMWriter(header, false, outputFile)) { fillSmallBam(writer); } }
private void createSmallBamToOutputStream(final OutputStream outputStream,boolean binary) { final SAMFileWriterFactory factory = new SAMFileWriterFactory(); factory.setCreateIndex(false); factory.setCreateMd5File(false); final SAMFileHeader header = new SAMFileHeader(); // index only created if coordinate sorted header.setSortOrder(SAMFileHeader.SortOrder.coordinate); header.addSequence(new SAMSequenceRecord("chr1", 123)); try (final SAMFileWriter writer = (binary? factory.makeBAMWriter(header, false, outputStream): factory.makeSAMWriter(header, false, outputStream) )) { fillSmallBam(writer); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void changeHeader() { SAMFileHeader clonedHeader = fileHeader.clone(); clonedHeader.addSequence(new SAMSequenceRecord("4", 1000)); IntervalList usingClone1 = new IntervalList(clonedHeader); usingClone1.add(new Interval("4", 1, 100)); IntervalList usingClone2 = new IntervalList(clonedHeader); usingClone2.add(new Interval("4", 10, 20)); IntervalList expected = new IntervalList(clonedHeader); expected.add(new Interval("4", 1, 9)); expected.add(new Interval("4", 21, 100)); //pull rug from underneath (one call will change all the headers, since there's actually only one) usingClone1.getHeader().setSequenceDictionary(fileHeader.getSequenceDictionary()); //now interval lists are in "illegal state" since they contain contigs that are not in the header. //this next step should fail IntervalList.subtract(usingClone1, usingClone2); Assert.assertTrue(false); }
private void testSingleRecord(byte[] bases, byte[] scores, byte[] ref) throws IOException { SAMFileHeader header = new SAMFileHeader(); header.addReadGroup(new SAMReadGroupRecord("1")); header.addSequence(new SAMSequenceRecord("chr1", ref.length)); SAMRecord s = new SAMRecord(header); s.setReadBases(bases); s.setBaseQualities(scores); s.setFlags(0); s.setAlignmentStart(1); s.setReferenceName("chr1"); s.setReadName("1"); if (bases == SAMRecord.NULL_SEQUENCE) { s.setCigarString("10M"); } else { s.setCigarString(s.getReadLength() + "M"); } testSingleRecord(s, ref); } }