public SAMFileWriterFactory getSamFileWriterFactory(boolean sorted) { return new SAMFileWriterFactory() .setTempDirectory(fsContext.getTemporaryDirectory()) .setCreateIndex(sorted); // also covered by -Dcreate_index=true }
@Override public void run() throws IOException { SamReaderFactory.setDefaultValidationStringency(ValidationStringency.SILENT); final SamReader reader = SamReaderFactory.makeDefault().open(inputFile); reader.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate); SAMFileWriterFactory samFileWriterFactory = new SAMFileWriterFactory(); if(this.tmpDir != null) { samFileWriterFactory.setTempDirectory(this.tmpDir); } if(this.maxRecords > 0) { samFileWriterFactory.setMaxRecordsInRam(this.maxRecords); } final SAMFileWriter writer = samFileWriterFactory.makeSAMOrBAMWriter(reader.getFileHeader(), false, outputFile); int count = 0; for (final SAMRecord rec : reader) { if(++count % 100000 == 0) { if(IGV.hasInstance()) { System.out.println("" + count + " records processed"); // GUI } else { log.info("" + count + " records processed"); // Command line } } writer.addAlignment(rec); } CloserUtil.close(reader); writer.close(); }
@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()); } }