package com.github.lindenb.jvarkit.tools.misc;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import com.beust.jcommander.Parameter;
import com.github.lindenb.jvarkit.util.jcommander.Launcher;
import com.github.lindenb.jvarkit.util.jcommander.Program;
import com.github.lindenb.jvarkit.util.log.Logger;
import com.github.lindenb.jvarkit.util.vcf.ContigPos;
import com.github.lindenb.jvarkit.util.vcf.VcfIterator;
import htsjdk.samtools.SAMSequenceDictionary;
import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.variantcontext.writer.VariantContextWriter;
import htsjdk.variant.vcf.VCFHeader;
@Program(name="bluntgvcf",description="blunt a gvcf")
public class BluntGVcf extends Launcher
{
private static final Logger LOG = Logger.build(BluntGVcf.class).make();
@Parameter(names = { "-o", "--out" }, description = "Output file or stdout")
private File outputFile = null;
@Parameter(names = { "-E", "--stop" }, description = "Blunt end this position",converter=ContigPos.Converter.class,required=true)
private ContigPos pos = null;
@Override
protected int doVcfToVcf(
final String inputName,
final VcfIterator in,
final VariantContextWriter out
)
{
try
{
final LinkedList<String> buffer= new LinkedList<>();
final VCFHeader header= in.getHeader();
final SAMSequenceDictionary dict = header.getSequenceDictionary();
if( dict == null ) {
throw new IOException("Dict missing in input vcf.");
}
final int end_tid = dict.getSequenceIndex(this.pos.getContig());
if( end_tid == -1 ) {
throw new IOException("No such contig in dictionary "+this.pos);
}
out.writeHeader(header);
while(in.hasNext())
{
final VariantContext ctx = in.next();
int tid = dict.getSequenceIndex(ctx.getContig());
if( tid == -1 ) {
throw new IOException("No such contig in dictionary "+ctx);
}
if( tid > end_tid) break;
if( tid < end_tid) {
out.add(ctx);
continue;
}
}
return 0;
}
catch (Exception e)
{
LOG.error(e);
return -1;
}
finally
{
}
}
@Override
public int doWork(final List<String> args)
{
try
{
return doVcfToVcf(args,outputFile);
}
catch (Exception e)
{
LOG.error(e);
return -1;
}
}
public static void main(String[] args)
{
new BluntGVcf().instanceMainWithExit(args);
}
}