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.VariantContextUtils;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
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"));
final VCFHeader vcfHeader = new VCFHeader(headerLines, Collections.<String>emptySet());
baseWriter.writeHeader(vcfHeader);
writer = VariantContextWriterFactory.sortOnTheFly(baseWriter, ACTIVE_WINDOW);
writer = new SortingVariantContextWriter(baseWriter, ACTIVE_WINDOW);
}
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 htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.io.*;
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,
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:
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.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import htsjdk.variant.vcf.VCFHeader;
import java.io.*;
@ -82,8 +82,11 @@ public class VariantContextWriterStorage implements Storage<VariantContextWriter
else if ( stub.getOutputStream() != null ) {
this.file = null;
this.stream = stub.getOutputStream();
writer = VariantContextWriterFactory.create(stream,
stub.getMasterSequenceDictionary(), stub.getWriterOptions(false));
writer = new VariantContextWriterBuilder()
.setOutputVCFStream(stream)
.setReferenceDictionary(stub.getMasterSequenceDictionary())
.setOptions(stub.getWriterOptions(false))
.build();
}
else
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);
}
EnumSet<Options> options = stub.getWriterOptions(indexOnTheFly);
VariantContextWriter writer = VariantContextWriterFactory.create(file, this.stream, stub.getMasterSequenceDictionary(), stub.getIndexCreator(), options);
final VariantContextWriterBuilder.OutputType fileOutputType = allowCompressed && stub.isCompressed() ?
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
// 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);
if ( bcfFile != null ) {
FileOutputStream bcfStream;
try {
bcfStream = new FileOutputStream(bcfFile);
} catch (FileNotFoundException e) {
throw new RuntimeException(bcfFile + ": Unable to create BCF writer", e);
}
final VariantContextWriter bcfWriter = new VariantContextWriterBuilder()
.setOutputFile(bcfFile)
.setOutputFileType(VariantContextWriterBuilder.OutputType.BCF)
.setReferenceDictionary(stub.getMasterSequenceDictionary())
.setOptions(options)
.build();
VariantContextWriter bcfWriter = VariantContextWriterFactory.create(bcfFile, bcfStream, stub.getMasterSequenceDictionary(), stub.getIndexCreator(), options);
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.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.vcf.VCFHeader;
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 ( 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);
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.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import java.io.*;
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);
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;
int count = 0;
while(!priorityQueue.isEmpty() ){

View File

@ -55,7 +55,7 @@ import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature;
import org.broadinstitute.gatk.utils.sam.AlignmentUtils;
import htsjdk.variant.variantcontext.*;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.SortingVariantContextWriter;
import java.util.*;
@ -194,7 +194,7 @@ public class LeftAlignAndTrimVariants extends RodWalker<Integer, Integer> {
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;
}

View File

@ -44,7 +44,7 @@ import org.broadinstitute.gatk.utils.exceptions.UserException;
import org.broadinstitute.gatk.utils.help.DocumentedGATKFeature;
import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import java.io.File;
import java.util.*;
@ -134,14 +134,20 @@ public class RandomlySplitVariants extends RodWalker<Integer, Integer> {
if(splitToMany){
writers = new VariantContextWriter[numOfFiles];
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));
}
}
else {
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));
}
}

View File

@ -41,7 +41,7 @@ import org.broadinstitute.gatk.engine.GATKVCFUtils;
import org.broadinstitute.gatk.utils.variant.GATKVariantContextUtils;
import htsjdk.variant.variantcontext.*;
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.VCFHeaderLine;
@ -100,7 +100,7 @@ public class VariantsToAllelicPrimitives extends RodWalker<Integer, Integer> {
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) {

View File

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