package picard.vcf;
import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.Options;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
import htsjdk.variant.vcf.VCFFileReader;
import htsjdk.variant.vcf.VCFHeader;
import java.io.File;
import java.io.IOException;
import java.util.EnumSet;
public class VcfTestUtils {
/**
* This method creates a temporary VCF file and it's appropriately named index file, and will delete them on exit.
* @param prefix - The prefix string to be used in generating the file's name; must be at least three characters long
* @param suffix - The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be used
* @return A File object referencing the newly created temporary VCF file
* @throws IOException - if a file could not be created.
*/
public static File createTemporaryIndexedVcfFile(final String prefix, final String suffix) throws IOException {
final File out = File.createTempFile(prefix, suffix);
out.deleteOnExit();
String indexFileExtension = null;
if (suffix.endsWith("vcf.gz")) {
indexFileExtension = ".tbi";
}
else if (suffix.endsWith("vcf")) {
indexFileExtension = ".idx";
}
if (indexFileExtension != null) {
final File indexOut = new File(out.getAbsolutePath() + indexFileExtension);
indexOut.deleteOnExit();
}
return out;
}
/**
* This method makes a copy of the input VCF and creates an index file for it in the same location.
* This is done so that we don't need to store the index file in the same repo
* The copy of the input is done so that it and its index are in the same directory which is typically required.
* @param vcfFile the vcf file to index
* @return File a vcf file (index file is created in same path).
*/
public static File createTemporaryIndexedVcfFromInput(final File vcfFile, final String tempFilePrefix) throws IOException {
final File output = File.createTempFile(tempFilePrefix, ".vcf");
output.deleteOnExit();
final File indexFile = new File(output.getAbsolutePath() + ".idx");
indexFile.deleteOnExit();
final VCFFileReader in = new VCFFileReader(vcfFile, false);
final VCFHeader header = in.getFileHeader();
final VariantContextWriter out = new VariantContextWriterBuilder().
setReferenceDictionary(header.getSequenceDictionary()).
setOptions(EnumSet.of(Options.INDEX_ON_THE_FLY)).
setOutputFile(output).build();
out.writeHeader(header);
for (final VariantContext ctx : in) {
out.add(ctx);
}
out.close();
in.close();
return output;
}
}