Replace VariantContextWriterFactory with VariantContextWriterBuilder

This commit is contained in:
Ron Levine 2016-11-28 21:01:47 -05:00
parent 7c8f97fdb9
commit 68b6f8f638
9 changed files with 54 additions and 32 deletions

View File

@ -77,8 +77,7 @@ import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.VariantContextBuilder; import htsjdk.variant.variantcontext.VariantContextBuilder;
import htsjdk.variant.variantcontext.VariantContextUtils; import htsjdk.variant.variantcontext.VariantContextUtils;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.util.*; import java.util.*;
/** /**
@ -186,7 +185,7 @@ public class HaplotypeResolver extends RodWalker<Integer, Integer> {
headerLines.add(new VCFInfoHeaderLine(STATUS_KEY, 1, VCFHeaderLineType.String, "Extent to which records match")); headerLines.add(new VCFInfoHeaderLine(STATUS_KEY, 1, VCFHeaderLineType.String, "Extent to which records match"));
final VCFHeader vcfHeader = new VCFHeader(headerLines, Collections.<String>emptySet()); final VCFHeader vcfHeader = new VCFHeader(headerLines, Collections.<String>emptySet());
baseWriter.writeHeader(vcfHeader); baseWriter.writeHeader(vcfHeader);
writer = VariantContextWriterFactory.sortOnTheFly(baseWriter, ACTIVE_WINDOW); writer = new SortingVariantContextWriter(baseWriter, ACTIVE_WINDOW);
} }
public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {

View File

@ -81,7 +81,7 @@ import org.broadinstitute.gatk.utils.pileup.PileupElement;
import org.broadinstitute.gatk.utils.pileup.ReadBackedPileup; import org.broadinstitute.gatk.utils.pileup.ReadBackedPileup;
import htsjdk.variant.variantcontext.*; import htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
@ -257,7 +257,7 @@ public class ReadBackedPhasing extends RodWalker<PhasingStatsAndOutput, PhasingS
But, NOTE that map() is careful to pass out a list of records to be written that FIRST includes any records discarded due to having reached mostDownstreamLocusReached, But, NOTE that map() is careful to pass out a list of records to be written that FIRST includes any records discarded due to having reached mostDownstreamLocusReached,
and only THEN records located at mostDownstreamLocusReached. The opposite order in map() would violate the startDistance limits imposed when contracting SortingVCFWriter with (2 * cacheWindow). and only THEN records located at mostDownstreamLocusReached. The opposite order in map() would violate the startDistance limits imposed when contracting SortingVCFWriter with (2 * cacheWindow).
*/ */
writer = VariantContextWriterFactory.sortOnTheFly(writer, 2 * cacheWindow, writer != origWriter); writer = new SortingVariantContextWriter(writer, 2 * cacheWindow, writer != origWriter);
// setup the header fields: // setup the header fields:
Set<VCFHeaderLine> hInfo = new HashSet<VCFHeaderLine>(); Set<VCFHeaderLine> hInfo = new HashSet<VCFHeaderLine>();

View File

@ -38,7 +38,7 @@ import htsjdk.variant.bcf2.BCF2Utils;
import htsjdk.variant.variantcontext.VariantContext; import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.Options; import htsjdk.variant.variantcontext.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import htsjdk.variant.vcf.VCFHeader; import htsjdk.variant.vcf.VCFHeader;
import java.io.*; import java.io.*;
@ -82,8 +82,11 @@ public class VariantContextWriterStorage implements Storage<VariantContextWriter
else if ( stub.getOutputStream() != null ) { else if ( stub.getOutputStream() != null ) {
this.file = null; this.file = null;
this.stream = stub.getOutputStream(); this.stream = stub.getOutputStream();
writer = VariantContextWriterFactory.create(stream, writer = new VariantContextWriterBuilder()
stub.getMasterSequenceDictionary(), stub.getWriterOptions(false)); .setOutputVCFStream(stream)
.setReferenceDictionary(stub.getMasterSequenceDictionary())
.setOptions(stub.getWriterOptions(false))
.build();
} }
else else
throw new ReviewedGATKException("Unable to create target to which to write; storage was provided with neither a file nor a stream."); throw new ReviewedGATKException("Unable to create target to which to write; storage was provided with neither a file nor a stream.");
@ -131,22 +134,31 @@ public class VariantContextWriterStorage implements Storage<VariantContextWriter
throw new UserException.CouldNotCreateOutputFile(file, "Unable to open target output stream", ex); throw new UserException.CouldNotCreateOutputFile(file, "Unable to open target output stream", ex);
} }
EnumSet<Options> options = stub.getWriterOptions(indexOnTheFly); final VariantContextWriterBuilder.OutputType fileOutputType = allowCompressed && stub.isCompressed() ?
VariantContextWriter writer = VariantContextWriterFactory.create(file, this.stream, stub.getMasterSequenceDictionary(), stub.getIndexCreator(), options); VariantContextWriterBuilder.OutputType.BLOCK_COMPRESSED_VCF : VariantContextWriterBuilder.OutputType.VCF;
final EnumSet<Options> options = stub.getWriterOptions(indexOnTheFly);
VariantContextWriter writer = new VariantContextWriterBuilder()
.setOutputFile(file)
.setOutputFileType(fileOutputType)
.setReferenceDictionary(stub.getMasterSequenceDictionary())
.setIndexCreator(stub.getIndexCreator())
.setOptions(options)
.build();
// if the stub says to test BCF, create a secondary writer to BCF and an 2 way out writer to send to both // if the stub says to test BCF, create a secondary writer to BCF and an 2 way out writer to send to both
// TODO -- remove me when argument generateShadowBCF is removed // TODO -- remove me when argument generateShadowBCF is removed
if ( stub.alsoWriteBCFForTest() && ! VariantContextWriterFactory.isBCFOutput(file, options)) { if ( stub.alsoWriteBCFForTest() &&
! (options.contains(Options.FORCE_BCF) || file != null && file.getName().contains(".bcf")) ) {
final File bcfFile = BCF2Utils.shadowBCF(file); final File bcfFile = BCF2Utils.shadowBCF(file);
if ( bcfFile != null ) { if ( bcfFile != null ) {
FileOutputStream bcfStream; final VariantContextWriter bcfWriter = new VariantContextWriterBuilder()
try { .setOutputFile(bcfFile)
bcfStream = new FileOutputStream(bcfFile); .setOutputFileType(VariantContextWriterBuilder.OutputType.BCF)
} catch (FileNotFoundException e) { .setReferenceDictionary(stub.getMasterSequenceDictionary())
throw new RuntimeException(bcfFile + ": Unable to create BCF writer", e); .setOptions(options)
} .build();
VariantContextWriter bcfWriter = VariantContextWriterFactory.create(bcfFile, bcfStream, stub.getMasterSequenceDictionary(), stub.getIndexCreator(), options);
writer = new TestWriter(writer, bcfWriter); writer = new TestWriter(writer, bcfWriter);
} }
} }

View File

@ -34,7 +34,6 @@ import org.broadinstitute.gatk.engine.GATKVCFUtils;
import htsjdk.variant.variantcontext.VariantContext; import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.Options; import htsjdk.variant.variantcontext.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.vcf.VCFHeader; import htsjdk.variant.vcf.VCFHeader;
import htsjdk.variant.vcf.VCFHeaderLine; import htsjdk.variant.vcf.VCFHeaderLine;
@ -216,7 +215,8 @@ public class VariantContextWriterStub implements Stub<VariantContextWriter>, Var
if ( indexOnTheFly) options.add(Options.INDEX_ON_THE_FLY); if ( indexOnTheFly) options.add(Options.INDEX_ON_THE_FLY);
if ( writeFullFormatField ) options.add(Options.WRITE_FULL_FORMAT_FIELD); if ( writeFullFormatField ) options.add(Options.WRITE_FULL_FORMAT_FIELD);
if ( forceBCF || (getOutputFile() != null && VariantContextWriterFactory.isBCFOutput(getOutputFile())) ) final File file = getOutputFile();
if ( forceBCF || (file != null && options.contains(Options.FORCE_BCF) || file != null && file.getName().contains(".bcf")) )
options.add(Options.FORCE_BCF); options.add(Options.FORCE_BCF);
return options.isEmpty() ? EnumSet.noneOf(Options.class) : EnumSet.copyOf(options); return options.isEmpty() ? EnumSet.noneOf(Options.class) : EnumSet.copyOf(options);

View File

@ -51,7 +51,7 @@ import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.VariantContextComparator; import htsjdk.variant.variantcontext.VariantContextComparator;
import htsjdk.variant.variantcontext.writer.Options; import htsjdk.variant.variantcontext.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
@ -265,11 +265,16 @@ public class CatVariants extends CommandLineProgram {
} }
} }
FileOutputStream outputStream = new FileOutputStream(outputFile);
EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY); EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY);
IndexCreator idxCreator = GATKVCFUtils.makeIndexCreator(variant_index_type, variant_index_parameter, outputFile, ref.getSequenceDictionary()); IndexCreator idxCreator = GATKVCFUtils.makeIndexCreator(variant_index_type, variant_index_parameter, outputFile, ref.getSequenceDictionary());
final VariantContextWriter outputWriter = VariantContextWriterFactory.create(outputFile, outputStream, ref.getSequenceDictionary(), idxCreator, options);
final VariantContextWriter outputWriter =
new VariantContextWriterBuilder()
.setOutputFile(outputFile)
.setReferenceDictionary(ref.getSequenceDictionary())
.setIndexCreator(idxCreator)
.setOptions(options)
.build();
boolean firstFile = true; boolean firstFile = true;
int count = 0; int count = 0;
while(!priorityQueue.isEmpty() ){ while(!priorityQueue.isEmpty() ){

View File

@ -55,7 +55,7 @@ import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature;
import org.broadinstitute.gatk.utils.sam.AlignmentUtils; import org.broadinstitute.gatk.utils.sam.AlignmentUtils;
import htsjdk.variant.variantcontext.*; import htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.util.*; import java.util.*;
@ -194,7 +194,7 @@ public class LeftAlignAndTrimVariants extends RodWalker<Integer, Integer> {
baseWriter.writeHeader(new VCFHeader(headerLines, samples)); baseWriter.writeHeader(new VCFHeader(headerLines, samples));
writer = VariantContextWriterFactory.sortOnTheFly(baseWriter, MAX_INDEL_LENGTH); writer = new SortingVariantContextWriter(baseWriter, MAX_INDEL_LENGTH);
referenceWindowStop = getToolkit().getArguments().reference_window_stop; referenceWindowStop = getToolkit().getArguments().reference_window_stop;
} }

View File

@ -44,7 +44,7 @@ import org.broadinstitute.gatk.utils.exceptions.UserException;
import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature; import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature;
import htsjdk.variant.variantcontext.VariantContext; import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import java.io.File; import java.io.File;
import java.util.*; import java.util.*;
@ -134,14 +134,20 @@ public class RandomlySplitVariants extends RodWalker<Integer, Integer> {
if(splitToMany){ if(splitToMany){
writers = new VariantContextWriter[numOfFiles]; writers = new VariantContextWriter[numOfFiles];
for(int i = 0; i<writers.length; i++){ for(int i = 0; i<writers.length; i++){
writers[i] = VariantContextWriterFactory.create(new File(baseFileName+".split."+i+".vcf"), getMasterSequenceDictionary()); writers[i] = new VariantContextWriterBuilder()
.setOutputFile(new File(baseFileName+".split."+i+".vcf"))
.setReferenceDictionary(getMasterSequenceDictionary())
.build();
writers[i].writeHeader(new VCFHeader(hInfo,samples)); writers[i].writeHeader(new VCFHeader(hInfo,samples));
} }
} }
else { else {
vcfWriter1.writeHeader(new VCFHeader(hInfo, samples)); vcfWriter1.writeHeader(new VCFHeader(hInfo, samples));
vcfWriter2 = VariantContextWriterFactory.create(file2, getMasterSequenceDictionary()); vcfWriter2 = new VariantContextWriterBuilder()
.setOutputFile(file2)
.setReferenceDictionary(getMasterSequenceDictionary())
.build();
vcfWriter2.writeHeader(new VCFHeader(hInfo, samples)); vcfWriter2.writeHeader(new VCFHeader(hInfo, samples));
} }
} }

View File

@ -41,7 +41,7 @@ import org.broadinstitute.gatk.engine.GATKVCFUtils;
import org.broadinstitute.gatk.utils.variant.GATKVariantContextUtils; import org.broadinstitute.gatk.utils.variant.GATKVariantContextUtils;
import htsjdk.variant.variantcontext.*; import htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import htsjdk.variant.vcf.VCFHeader; import htsjdk.variant.vcf.VCFHeader;
import htsjdk.variant.vcf.VCFHeaderLine; import htsjdk.variant.vcf.VCFHeaderLine;
@ -100,7 +100,7 @@ public class VariantsToAllelicPrimitives extends RodWalker<Integer, Integer> {
baseWriter.writeHeader(new VCFHeader(headerLines, samples)); baseWriter.writeHeader(new VCFHeader(headerLines, samples));
vcfWriter = VariantContextWriterFactory.sortOnTheFly(baseWriter, 200); vcfWriter = new SortingVariantContextWriter(baseWriter, 200);
} }
public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {

View File

@ -52,7 +52,7 @@ import org.broadinstitute.gatk.utils.exceptions.UserException;
import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature; import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature;
import htsjdk.variant.variantcontext.*; import htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter; import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory; import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.io.File; import java.io.File;
import java.util.*; import java.util.*;
@ -116,7 +116,7 @@ public class VariantsToVCF extends RodWalker<Integer, Integer> {
VariantOverlapAnnotator variantOverlapAnnotator = null; VariantOverlapAnnotator variantOverlapAnnotator = null;
public void initialize() { public void initialize() {
vcfwriter = VariantContextWriterFactory.sortOnTheFly(baseWriter, 40, false); vcfwriter = new SortingVariantContextWriter(baseWriter, 40);
variantOverlapAnnotator = new VariantOverlapAnnotator(dbsnp.dbsnp, getToolkit().getGenomeLocParser()); variantOverlapAnnotator = new VariantOverlapAnnotator(dbsnp.dbsnp, getToolkit().getGenomeLocParser());
} }