I have several individual sequence data sets with very low average read depth (i.e. < 5) across most sites that cannot be further improved upon with repeated rounds of sequencing.
Consequently, I'm struggling with determining the best way to call SNPs and genotype. I've been using GATK's UnifiedGenotyper for legacy reasons, but the concerns raised would apply to newer programs such as HaplotypeCaller
Specifically, even though these are diploid Drosophila genomes, with read depths of 2-3, calling diploid genotypes is too error-prone to pursue. My first thought was to set the -ploidy argument to 1 rather than 2, i.e. to treat this as a haploid genotyping problem.
However, that would be problematic as well, since for heterozygous loci, a SNP site would be identified as indeterminate and set to "R" rather than to a nucleotide.
What I need is a program that would do the following: suppose that at a site I have read depth 4, with 3 A's and 1 G identified (with, reference C). I want A to be returned as the "haploid" genotype. If there are 2 A's and 2 G's, either A or G should be returned at random. In other words, if there are more than two nucleotides, return the more abundant of the two, or if counts are equal, select one or the other at random (whether it matches the reference allele or ot).
This would do what UnifiedGenotyper (or HaplotypeCaller) would do for ploidy = 1 at homozygous sites while returning an allele at heterozygous sites rather than treating the site as having an unknown genotype.
Is there a way to do this (or something similar) using GATK's tools, and if not, what tools may be available (using only bam files and a reference genome as input)? I suppose one approach may be to run the variant caller as diploid and then write my own script to convert that into the desired output, but I'm hoping for a more efficient method.