/** * Set or unset option depending on the boolean given * @param option the option to modify * @param setIt true to set the option, false to unset it. * @return this <code>VariantContextWriterBuilder</code> */ public VariantContextWriterBuilder modifyOption(final Options option, final boolean setIt) { return (setIt) ? this.setOption(option) : this.unsetOption(option); }
/** * Set or unset option depending on the boolean given * @param option the option to modify * @param setIt true to set the option, false to unset it. * @return this <code>VariantContextWriterBuilder</code> */ public VariantContextWriterBuilder modifyOption(final Options option, final boolean setIt) { return (setIt) ? this.setOption(option) : this.unsetOption(option); }
/** Gets the variant context writer if the output VCF is to be written, otherwise empty. */ private Optional<VariantContextWriter> getVariantContextWriter(final VCFFileReader truthReader, final VCFFileReader callReader) { if (OUTPUT_VCF) { final File outputVcfFile = new File(OUTPUT + OUTPUT_VCF_FILE_EXTENSION); final VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setOutputFile(outputVcfFile) .setReferenceDictionary(callReader.getFileHeader().getSequenceDictionary()) .setOption(Options.ALLOW_MISSING_FIELDS_IN_HEADER) .setOption(Options.INDEX_ON_THE_FLY); final VariantContextWriter writer = builder.build(); // create the output header final List<String> sampleNames = Arrays.asList(OUTPUT_VCF_CALL_SAMPLE_NAME, OUTPUT_VCF_TRUTH_SAMPLE_NAME); final Set<VCFHeaderLine> headerLines = new HashSet<>(); headerLines.addAll(callReader.getFileHeader().getMetaDataInInputOrder()); headerLines.addAll(truthReader.getFileHeader().getMetaDataInInputOrder()); headerLines.add(CONTINGENCY_STATE_HEADER_LINE); writer.writeHeader(new VCFHeader(headerLines, sampleNames)); return Optional.of(writer); } else { return Optional.empty(); } }
/** Gets the variant context writer if the output VCF is to be written, otherwise empty. */ private Optional<VariantContextWriter> getVariantContextWriter(final VCFFileReader truthReader, final VCFFileReader callReader) { if (OUTPUT_VCF) { final File outputVcfFile = new File(OUTPUT + OUTPUT_VCF_FILE_EXTENSION); final VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setOutputFile(outputVcfFile) .setReferenceDictionary(callReader.getFileHeader().getSequenceDictionary()) .setOption(Options.ALLOW_MISSING_FIELDS_IN_HEADER) .setOption(Options.INDEX_ON_THE_FLY); final VariantContextWriter writer = builder.build(); // create the output header final List<String> sampleNames = Arrays.asList(OUTPUT_VCF_CALL_SAMPLE_NAME, OUTPUT_VCF_TRUTH_SAMPLE_NAME); final Set<VCFHeaderLine> headerLines = new HashSet<>(); headerLines.addAll(callReader.getFileHeader().getMetaDataInInputOrder()); headerLines.addAll(truthReader.getFileHeader().getMetaDataInInputOrder()); headerLines.add(CONTINGENCY_STATE_HEADER_LINE); writer.writeHeader(new VCFHeader(headerLines, sampleNames)); return Optional.of(writer); } else { return Optional.empty(); } }
/** * Create a VariantContextWriter. * * @param outputStream Output stream to write. * @param sequenceDictionary SAM sequence directory (it can be got from VCFHeader) * @param options Writer options * @return The variant context writer */ public static VariantContextWriter createVariantContextWriter(OutputStream outputStream, SAMSequenceDictionary sequenceDictionary, Options ...options) { // setup writer VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setOutputStream(outputStream) .setReferenceDictionary(sequenceDictionary) .setOption(Options.WRITE_FULL_FORMAT_FIELD) .unsetOption(Options.INDEX_ON_THE_FLY); // options if (options != null) { for (Options option : options) { builder.setOption(option); } } return builder.build(); }
protected VariantContextWriter createVariantContextWriter(Configuration conf, OutputStream out) { return new VariantContextWriterBuilder().clearOptions() .setOption(Options.FORCE_BCF) .setOutputBCFStream(out).build(); }
protected VariantContextWriter createVariantContextWriter(Configuration conf, OutputStream out) { return new VariantContextWriterBuilder().clearOptions() .setOption(Options.FORCE_BCF) .setOutputBCFStream(out).build(); }
@Test public void testClearOptions() { // Verify that clearOptions doesn't have a side effect of carrying previously set options // forward to subsequent builders VariantContextWriterBuilder vcwb = new VariantContextWriterBuilder(); vcwb.clearOptions().setOption(Options.INDEX_ON_THE_FLY); final VariantContextWriterBuilder builder = new VariantContextWriterBuilder().clearOptions(); Assert.assertTrue(builder.options.isEmpty()); }
/** * Common parts of {@link VariantContextWriterBuilder} creation for the openVariantContextWriter functions. */ private static VariantContextWriterBuilder makeBuilder(VCFHeader header) { // construct factory object for VariantContextWriter VariantContextWriterBuilder builder = new VariantContextWriterBuilder(); builder.setReferenceDictionary(header.getSequenceDictionary()); // Be more lenient in missing header fields. builder.setOption(Options.ALLOW_MISSING_FIELDS_IN_HEADER); // Disable on-the-fly generation of Tribble index if the input file does not have a sequence dictionary. if (header.getSequenceDictionary() == null) builder.unsetOption(Options.INDEX_ON_THE_FLY); return builder; }
@Test(expectedExceptions = IllegalArgumentException.class) public void testRefDictRequiredForVCFIndexOnTheFly() { new VariantContextWriterBuilder() .setOutputFile(vcf) .setOption(Options.INDEX_ON_THE_FLY) .build(); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testRefDictRequiredForBCFIndexOnTheFly() { new VariantContextWriterBuilder() .setOutputFile(bcf) .setOption(Options.INDEX_ON_THE_FLY) .build(); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testUnsupportedIndexOnTheFlyForStreaming() { new VariantContextWriterBuilder() .setReferenceDictionary(dictionary) .setOutputStream(new ByteArrayOutputStream()) .setOption(Options.INDEX_ON_THE_FLY) .build(); }
@Test public void testAsync() { final VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setReferenceDictionary(dictionary) .setOutputFile(vcf); VariantContextWriter writer = builder.build(); Assert.assertEquals(writer instanceof AsyncVariantContextWriter, Defaults.USE_ASYNC_IO_WRITE_FOR_TRIBBLE, "testAsync default"); writer = builder.setOption(Options.USE_ASYNC_IO).build(); Assert.assertTrue(writer instanceof AsyncVariantContextWriter, "testAsync option=set"); writer = builder.unsetOption(Options.USE_ASYNC_IO).build(); Assert.assertFalse(writer instanceof AsyncVariantContextWriter, "testAsync option=unset"); }
private void init( OutputStream output, VCFHeader header, final boolean writeHeader) throws IOException { final BCFStoppableOutputStream stopOut = new BCFStoppableOutputStream(!writeHeader, output); writer = new VariantContextWriterBuilder().clearOptions() .setOption(Options.FORCE_BCF) .setOutputBCFStream(stopOut).build(); writer.writeHeader(header); stopOut.stopped = false; setInputHeader(header); }
public VariantContextWriterBuilder getVariantContextWriterBuilder(File output, boolean createIndex) { VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setOutputFile(output) .setReferenceDictionary(getReference().getSequenceDictionary()); builder.clearOptions(); if (createIndex) { builder.setOption(Options.INDEX_ON_THE_FLY); } else { builder.clearIndexCreator(); } return builder; } /**
private VariantContextWriter openOutputFile() { VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setReferenceDictionary(fasta.getSequenceDictionary()).setOutputFile(options.getPathOutputVCF()); if (options.getPathOutputVCF().endsWith(".gz") || options.getPathOutputVCF().endsWith(".bcf")) builder.setOption(Options.INDEX_ON_THE_FLY); else builder.unsetOption(Options.INDEX_ON_THE_FLY); VariantContextWriter writer = builder.build(); VCFHeader header = new VCFHeader(); int i = 0; for (SAMSequenceRecord record : fasta.getSequenceDictionary().getSequences()) { Map<String, String> mapping = new TreeMap<String, String>(); mapping.put("ID", record.getSequenceName()); mapping.put("length", Integer.toString(record.getSequenceLength())); header.addMetaDataLine(new VCFContigHeaderLine(mapping, i++)); } header.addMetaDataLine(new VCFSimpleHeaderLine("ALT", "ERROR", "Error in conversion")); header.addMetaDataLine(new VCFFilterHeaderLine("PARSE_ERROR", "Problem in parsing original HGVS variant string, written out as variant at 1:g.1N>N")); header.addMetaDataLine(new VCFInfoHeaderLine("ERROR_MESSAGE", 1, VCFHeaderLineType.String, "Error message")); header.addMetaDataLine(new VCFInfoHeaderLine("ORIG_VAR", 1, VCFHeaderLineType.String, "Original HGVS variant string from input file to hgvs-to-vcf")); writer.writeHeader(header); return writer; }
@Test public void testSetOutputStream() { final OutputStream stream = new ByteArrayOutputStream(); final VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setReferenceDictionary(dictionary) .unsetOption(Options.INDEX_ON_THE_FLY) .setOutputStream(stream); VariantContextWriter writer = builder.build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream default"); writer = builder.setOption(Options.FORCE_BCF).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set -> expected BCF stream, was VCF stream"); // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF writer = builder.setOutputVCFStream(stream).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set 2 -> expected BCF stream, was VCF stream"); writer = builder.unsetOption(Options.FORCE_BCF).build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream FORCE_BCF unset -> expected VCF stream, was BCF stream"); writer = builder.setOutputBCFStream(stream).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream BCF"); writer = builder.setOutputVCFStream(stream).build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream VCF"); }
@Test public void testSetOutputFileType() { final VariantContextWriterBuilder builder = new VariantContextWriterBuilder() .setReferenceDictionary(dictionary) .setOutputFile(unknown); VariantContextWriter writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType VCF"); Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType VCF was compressed"); writer = builder.setOption(Options.FORCE_BCF).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set -> expected BCF, was VCF"); // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set 2 -> expected BCF, was VCF"); writer = builder.unsetOption(Options.FORCE_BCF).build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType FORCE_BCF unset -> expected VCF, was BCF"); Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType FORCE_BCF unset was compressed"); writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BLOCK_COMPRESSED_VCF).build(); Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile BLOCK_COMPRESSED_VCF"); Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType BLOCK_COMPRESSED_VCF was not compressed"); writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BCF).build(); Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType BCF"); }
.setReferenceDictionary(sequenceDictionary); if (CREATE_INDEX) builder.setOption(Options.INDEX_ON_THE_FLY); else builder.unsetOption(Options.INDEX_ON_THE_FLY);
.setReferenceDictionary(sequenceDictionary); if (CREATE_INDEX) builder.setOption(Options.INDEX_ON_THE_FLY); else builder.unsetOption(Options.INDEX_ON_THE_FLY);