This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Cannot process a custom VCF file using bcftools

I created a VCF file as below which bcftools cannot parse the header. Can anyone tell me what is wrong with my VCF file? Thanks!

bcftools query -f '%CHROM %POS [%DS1]\n' haha.vcf >haha.DS1.out
[E::bcf_hdr_parse_sample_line] Could not parse the "#CHROM.." line, either the fields are incorrect or spaces are present instead of tabs:
        #CHROM  POS     FORMAT  A-BCT-WA403-CT  A-BCT-DF87-WA

Failed to read from haha.vcf: could not parse header

Below is haha.vcf

##fileformat=VCFv4.2
##filedate=20240926
##FORMAT=<ID=DS1,Number=1,Type=Float,Description="EUR dosage">
##FORMAT=<ID=DS2,Number=1,Type=Float,Description="EAS dosage">
##FORMAT=<ID=DS3,Number=1,Type=Float,Description="AFR dosage">
##FORMAT=<ID=DS4,Number=1,Type=Float,Description="SAS dosage">
##FORMAT=<ID=DS5,Number=1,Type=Float,Description="AMR dosage">
##ANCESTRY=<EUR=0,EAS=1,AFR=2,SAS=3,AMR=4>
#CHROM  POS FORMAT  A-BCT-WA403-CT  A-BCT-DF87-WA
chr22   10550966    DS1:DS2:DS3:DS4:DS5 0.95:0:0:0:0.05 0.99:0:0:0:0.01
chr22   10586957    DS1:DS2:DS3:DS4:DS5 0.90:0:0:0:0.01 0.93:0:0:0:0.07
chr22   10550966    DS1:DS2:DS3:DS4:DS5 0.97:0:0:0:0.03 0.99:0:0:0:0.01

Following is the output of R readLine("haha.vcf"). Tabs were used to separate fields.

a <-readLines("haha.vcf")
a

[1] "##fileformat=VCFv4.2"                                                  
 [2] "##filedate=20240926"                                                   
 [3] "##FORMAT=<ID=DS1,Number=1,Type=Float,Description=\"EUR dosage\">"      
 [4] "##FORMAT=<ID=DS2,Number=1,Type=Float,Description=\"EAS dosage\">"      
 [5] "##FORMAT=<ID=DS3,Number=1,Type=Float,Description=\"AFR dosage\">"      
 [6] "##FORMAT=<ID=DS4,Number=1,Type=Float,Description=\"SAS dosage\">"      
 [7] "##FORMAT=<ID=DS5,Number=1,Type=Float,Description=\"AMR dosage\">"      
 [8] "##ANCESTRY=<EUR=0,EAS=1,AFR=2,SAS=3,AMR=4>"                            
 [9] "#CHROM\tPOS\tFORMAT\tA-BCT-WA403-CT\tA-BCT-DF87-WA"                    
[10] "chr22\t10550966\tDS1:DS2:DS3:DS4:DS5\t0.95:0:0:0:0.05\t0.99:0:0:0:0.01"
[11] "chr22\t10586957\tDS1:DS2:DS3:DS4:DS5\t0.90:0:0:0:0.01\t0.93:0:0:0:0.07"
[12] "chr22\t10550966\tDS1:DS2:DS3:DS4:DS5\t0.97:0:0:0:0.03\t0.99:0:0:0:0.01"
r bcftools vcf

1 answer

Hi Qiong,

It appears there are 5 tab-delimited fields for describing the variants when there should be 7. Here is the specifications for VCF files by the Broad Institute's GATK framework:

These first 7 fields are required by the VCF format and must be present, although they can be empty (in practice, there has to be a dot, ie . to serve as a placeholder).

The fields are here:

CHROM POS ID REF ALT QUAL FILTER

If the VCF file follows the specifications provided by GATK, there should be no parsing errors with tools like bcftools.

Hope this is helpful.

Maze

Thanks. It worked after I added these additional columns!

Nice. Thank you for letting me know.

Don't forget to follow up on your threads. If an answer was helpful, you should upvote it; if the answer resolved your question, you should mark it as accepted. You can accept more than one answer if they all work. If an answer was not really helpful or did not work, provide detailed feedback so others know not to use that answer.

Upvote|Bookmark|Accept

Log in to answer this question.