← back to vcfclick

combine — live demo

vcfclick combine reimplements GATK3 CombineVariants, the multi-callset merge GATK4 removed. Edit the two call sets below; the merge runs in your browser and is checked against real GATK 3.8 output on the same inputs.

GATK3 (removed in GATK4)

java -jar GenomeAnalysisTK.jar -T CombineVariants -R ref.fasta \
    -V:first first.vcf.gz -V:second second.vcf.gz -o out.vcf \
    -genotypeMergeOptions PRIORITIZE -priority first,second

vcfclick (no Java, no reference)

vcfclick combine first.vcf second.vcf -o out.vcf \
    --name first --name second

Inputs — two call sets (priority: first, then second)

first.vcf (samples S1, S2 — higher priority)

second.vcf (samples S2, S3 — S2 shared)

vcfclick combine

✓ matches GATK 3.8
posset=S1S2S3
chr1:101first0/10/1./.
chr1:202Intersection1/10/10/1
chr1:303Intersection0/11/10/0
chr1:404second./.0/01/1

FORMAT: GT · runs entirely in your browser

GATK 3.8 CombineVariants

posset=S1S2S3
chr1:101first0/10/1./.
chr1:202Intersection1/10/10/1
chr1:303Intersection0/11/10/0
chr1:404second./.0/01/1

Frozen output of real GATK 3.8-1-0 on the default inputs. Edit the inputs above and vcfclick re-runs live; this reference stays fixed.

What you're looking at

The two inputs are call sets that share sample S2 — the case bcftools merge can't handle. At chr1:202, S2 is 0/1 in first but 1/1 in second. PRIORITIZE keeps the higher-priority call — 0/1 — exactly as GATK3 does.

Each record is annotated with set=: which inputs it came from, or Intersection when all of them. A sample with no record at a site is ./., never a silent 0/0. Set --min-callsets 2 to keep only the consensus sites.

This equivalence is pinned in CI by a test against the same frozen GATK 3.8 output. See the combine docs and the trio demo →.