/** * Creates a {@code Stream} of {@code VariantContext} from the indicated VCF file. * * @param vcfPath path of the VCF file * @return a {@code Stream} of {@code VariantContext} */ public static Stream<VariantContext> readVariantContexts(Path vcfPath) { Objects.requireNonNull(vcfPath, "Cannot read from null vcfPath"); logger.info("Reading variants from VCF file {}", vcfPath); try (VCFFileReader vcfReader = new VCFFileReader(vcfPath, false)) { return vcfReader.iterator().stream(); } }
/** If the current iterator is null or exhausted, move to the next interval. */ private void advance() { while ((currentIterator == null || !currentIterator.hasNext()) && this.intervals.hasNext()) { if (currentIterator != null) currentCloseableIterator.close(); final Interval interval = this.intervals.next(); final Interval previousInterval = this.lastInterval; this.currentCloseableIterator = this.reader.query(interval.getContig(), interval.getStart(), interval.getEnd()); this.currentIterator = this.currentCloseableIterator.stream().filter ( ctx -> null == previousInterval || !overlapsInterval(ctx, previousInterval) ).iterator(); this.lastInterval = interval; } }
/** If the current iterator is null or exhausted, move to the next interval. */ private void advance() { while ((currentIterator == null || !currentIterator.hasNext()) && this.intervals.hasNext()) { if (currentIterator != null) currentCloseableIterator.close(); final Interval interval = this.intervals.next(); final Interval previousInterval = this.lastInterval; this.currentCloseableIterator = this.reader.query(interval.getContig(), interval.getStart(), interval.getEnd()); this.currentIterator = this.currentCloseableIterator.stream().filter ( ctx -> null == previousInterval || !overlapsInterval(ctx, previousInterval) ).iterator(); this.lastInterval = interval; } }
@Test(dataProvider = "vcfshards") public void TestGatherFiles(final List<File> inputFiles, final File expectedOutput, final int expectedRetVal) throws IOException { final List<String> args = new ArrayList<>(); final File output = VcfTestUtils.createTemporaryIndexedFile("result", expectedOutput.getAbsolutePath().endsWith(".vcf") ? ".vcf" : ".vcf.gz"); inputFiles.forEach(f -> args.add("INPUT=" + f.getAbsolutePath())); args.add("OUTPUT=" + output.getAbsolutePath()); Assert.assertEquals(runPicardCommandLine(args.toArray(new String[args.size()])), expectedRetVal, "Program was expected to run successfully, but didn't."); if (expectedRetVal == 0) { final VCFFileReader expectedReader = new VCFFileReader(expectedOutput, false); final VCFFileReader outputReader = new VCFFileReader(output, false); Assert.assertEquals(expectedReader.iterator().stream().count(), outputReader.iterator().stream().count(), "The wrong number of variants was found."); } } }
@Test(dataProvider = "liftoverReverseStrand") public void testReverseComplementedIndels(final String filename, final int expectedPassing, final int expectedFailing) { final File liftOutputFile = new File(OUTPUT_DATA_PATH, "lift-delete-me.vcf"); final File rejectOutputFile = new File(OUTPUT_DATA_PATH, "reject-delete-me.vcf"); final File input = new File(TEST_DATA_PATH, filename); liftOutputFile.deleteOnExit(); rejectOutputFile.deleteOnExit(); final String[] args = new String[]{ "INPUT=" + input.getAbsolutePath(), "OUTPUT=" + liftOutputFile.getAbsolutePath(), "REJECT=" + rejectOutputFile.getAbsolutePath(), "CHAIN=" + CHAIN_FILE, "REFERENCE_SEQUENCE=" + REFERENCE_FILE, "RECOVER_SWAPPED_REF_ALT=true", "CREATE_INDEX=false" }; Assert.assertEquals(runPicardCommandLine(args), 0); final VCFFileReader liftReader = new VCFFileReader(liftOutputFile, false); Assert.assertEquals(liftReader.iterator().stream().count(), expectedPassing, "The wrong number of variants were lifted over."); final VCFFileReader rejectReader = new VCFFileReader(rejectOutputFile, false); Assert.assertEquals(rejectReader.iterator().stream().count(), expectedFailing, "The wrong number of variants were rejected."); }
private void runFixVcfHeader(final int checkFirstNRecords, final File replacementHeader, final boolean enforceSampleSamples) throws IOException { final FixVcfHeader program = new FixVcfHeader(); final File outputVcf = VcfTestUtils.createTemporaryIndexedFile("output.", ".vcf"); program.INPUT = INPUT_VCF; program.OUTPUT = outputVcf; if (replacementHeader == null) { program.CHECK_FIRST_N_RECORDS = checkFirstNRecords; } else { program.HEADER = replacementHeader; program.ENFORCE_SAME_SAMPLES = enforceSampleSamples; } Assert.assertEquals(program.instanceMain(new String[0]), 0); final VCFFileReader actualReader = new VCFFileReader(OUTPUT_VCF, false); final VCFFileReader expectedReader = new VCFFileReader(outputVcf, false); // Check that the headers match (order does not matter final VCFHeader actualHeader = actualReader.getFileHeader(); final VCFHeader expectedHeader = expectedReader.getFileHeader(); Assert.assertEquals(actualHeader.getFilterLines().size(), expectedHeader.getFilterLines().size()); Assert.assertEquals(actualHeader.getInfoHeaderLines().size(), expectedHeader.getInfoHeaderLines().size()); Assert.assertEquals(actualHeader.getFormatHeaderLines().size(), expectedHeader.getFormatHeaderLines().size()); // Check the number of records match, since we don't touch them Assert.assertEquals(actualReader.iterator().stream().count(), expectedReader.iterator().stream().count(), "The wrong number of variants was found."); CloserUtil.close(actualReader); CloserUtil.close(expectedReader); }
Stream<VariantContext> stream = iter.stream();