@Override public void align(final File fastq, final File output, final File reference, final int threads) throws IOException { List<String> commandline = template.stream() .map(s -> String.format(s, fastq.getPath(), reference.getPath(), threads)) .collect(Collectors.toList()); if (SystemUtils.IS_OS_WINDOWS) { // WSL path conversion commandline = commandline.stream() .map(s -> s.replace('\\', '/')) .collect(Collectors.toList()); } String commandlinestr = commandline.stream().collect(Collectors.joining(" ")); log.info("Invoking external aligner"); log.info(commandlinestr); Process aligner = new ProcessBuilder(commandline) .redirectError(Redirect.INHERIT) .start(); final SamReader reader = readerFactory.open(SamInputResource.of(aligner.getInputStream())); final SAMFileHeader header = reader.getFileHeader(); try (final SAMFileWriter writer = writerFactory.clone().setCompressionLevel(0).makeWriter(header, false, output, reference)) { final SAMRecordIterator it = reader.iterator(); while (it.hasNext()) { writer.addAlignment(it.next()); } } ExternalProcessHelper.shutdownAligner(aligner, commandlinestr, reference); } }
@DataProvider public Object[][] testOverlappingErrorCalculatorWithManyReadsData() throws IOException { final File temp = File.createTempFile("Overlapping", ".bam"); temp.deleteOnExit(); try ( final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(new File("testdata/picard/sam/BamErrorMetrics/chrM.reference.fasta"))) { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); builder.getHeader().setSequenceDictionary(referenceSequenceFileWalker.getSequenceDictionary()); for (int i = 0; i < 4000; i++) { builder.addPair("Read" + i, 0, 1, 1, false, false, "36M", "36M", true, false, 20); } try (final SAMFileWriter writer = new SAMFileWriterFactory() .setCompressionLevel(2) .makeBAMWriter(builder.getHeader(), false, temp)) { builder.forEach(writer::addAlignment); } } return new Object[][]{{temp}}; }
writerFactory.setCompressionLevel(finalCompressionLevel); if (shouldSort) { samHeaders[sampleIdx].setSortOrder(SortOrder.coordinate);