Hi, I have a reference fasta file and a vcf file of SNP variant calls. For each individual in the vcf file, I want to create a new, "pseudo-haploid" fasta file where every base is randomly sampled from one of the individual's alleles.
This seems to be a different problem than GATK's FastaAlternateReferenceMaker which inserts the alternate allele (not caring about individual genotypes or ever retaining the reference allele).
Can anybody offer a tool or some advice? Thanks!
Short example:
Sequence: ATAAATTCCC (10 bp long)
VCF:
POS REF ALT Ind1 Ind2
2 T C 0/1 1/1
5 A G 0/0 0/1
Output:
Ind1: A **T** AAATTCCC or A **C** AAATTCCC
Ind2: A*C*AA **A** TTCCC or A*C*AA **G** TTCCC
1 answer
Fairly close is rtg samplereplay from RTG Tools, which generates a "pseudo-genome" for an individual based on the genotypes in the VCF, e.g.:
# Make test data
$ cat <<EOF >ref.fa
>seq
ATAAATTCCC
EOF
# RTG likes to store sequence data in it's "SDF" format:
$ rtg format -o ref.sdf ref.fa
Formatting FASTA data
Processing "ref.fa"
Input Data
Files : ref.fa
Format : FASTA
Type : DNA
Number of sequences: 1
Total residues : 10
Minimum length : 10
Mean length : 10
Maximum length : 10
Output Data
SDF-ID : 9b0da935-33c8-421d-bf83-54fd8a13ce5f
Number of sequences: 1
Total residues : 10
Minimum length : 10
Mean length : 10
Maximum length : 10
# Make test VCF (contains embedded tabs)
$ cat <<EOF >ind.vcf
##fileformat=VCFv4.1
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Ind1 Ind2
seq 2 . T C . . . GT 0/1 1/1
seq 5 . A G . . . GT 0/0 0/1
EOF
# Index the variants VCF
$ rtg bgzip ind.vcf && rtg index ind.vcf.gz
Creating index for: ind.vcf.gz (ind.vcf.gz.tbi)
# Generate the pseudo-genome for Ind1 and show us the FASTA
$ rtg samplereplay -t ref.sdf -i ind.vcf.gz -o Ind1.sdf --sample Ind1 && rtg sdf2fasta -i Ind1.sdf -o -
>seq_0
ATAAATTCCC
>seq_1
ACAAATTCCC
# Generate the pseudo-genome for Ind2 and show us the FASTA
$ rtg samplereplay -t ref.sdf -i ind.vcf.gz -o Ind2.sdf --sample Ind2 && rtg sdf2fasta -i Ind2.sdf -o -
>seq_0
ACAAATTCCC
>seq_1
ACAAGTTCCC
The rtg samplereplay command doesn't randomly sample the alleles, it treats the input VCF as though it were phased and produces the two simulated chromosomes (it's usually used with rtg samplesim which produces a VCF of phased simulated genotypes, and rtg readsim to simulate NGS sequencing of the sample genome). Hope this helps with your use case.
Log in to answer this question.