Skip to main content

1.2 Meta-information lines

可以把这些 ## 开头的行理解成 VCF 的“说明书 / 数据库 schema”:它们不描述具体变异,而是定义后面正文里会用到的版本、字段、类型、参考序列、样本和关系。解析器必须先读它们,才能正确解释数据行。

Meta-information lines 就是 VCF 的“元数据 / schema 区”:
##fileformat 定版本,##INFO 定 INFO 列,##FILTER 定过滤码,##FORMAT 定样本格式,##ALT 定符号等位基因,##contig 定染色体,##SAMPLE 和 ##PEDIGREE 定样本与基因组关系。先定义,后使用,解析器才能正确读懂后面的数据行。

总原则:

  • 元信息行以 ## 开头,必须是 key=value 形式。
  • ##fileformat 必须存在,且必须是文件第一行。
  • 强烈建议把正文中用到的 INFO、FILTER、FORMAT 字段都在头部声明。
  • 这些行虽然是可选的,但只要写了,就必须格式完全正确。
  • #CHROM ... 是表头行,不是元信息行;它只有一个 #。

1.2.1 File format:文件版本​

##fileformat=VCFv4.2
  • 必须有,且只能是第一行。
  • 说明这是 VCF 4.2 格式。
  • 如果解析器看到别的版本,可能按不同规则处理。

1.2.2 Information field format:INFO 字段定义​

INFO 列里可以写很多键值,例如:

NS=3;DP=14;AF=0.5;DB;H2

这些键必须在头部有定义,格式为:

##INFO=<ID=ID,Number=number,Type=type,Description="description",Source="source",Version="version">

其中:

  • ID:INFO 键名,例如 DP、AF。
  • Number:这个字段有几个值。
  • Type:值类型。
  • Description:描述,必须用双引号。
  • Source、Version:推荐字段,用于说明注释来源和版本。

前四个键 ID、Number、Type、Description 是必需的。

Type 可选类型​

INFO 的 Type 可以是:

  • Integer
  • Float
  • Flag
  • Character
  • String

Number 的常见值​

Number 是整数,也可以是特殊字符:

Number含义
1一个值
2两个值
A每个 ALT 等位基因一个值,顺序与 ALT 一致
R每个可能等位基因一个值,包括 REF
G每个可能基因型一个值,常用于 FORMAT
.数量可变、未知或无界
0用于 Flag,表示没有值

例如:

##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership">
  • DP=14:一个整数。
  • AF=0.5,0.2:如果 ALT 有两个等位基因,就按顺序给两个频率。
  • DB:Flag 类型,正文里只写键名,不写 =1。

Flag 类型不包含值,所以 Number 必须为 0。

转义​

Description 必须用双引号包围。如果描述里有双引号,要写成 \";反斜杠写成 \\。

Source 和 Version 也推荐用双引号,例如:

##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele",Source="dbsnp",Version="138">

额外字段可以加在默认字段后面。即使额外字段是数字,也建议按字符串存储。


1.2.3 Filter field format:FILTER 定义​

FILTER 列表示这个位点是否通过过滤。自定义过滤码要这样定义:

##FILTER=<ID=q10,Description="Quality below 10">
##FILTER=<ID=s50,Description="Less than 50% of samples have data">

含义:

  • ID 是过滤码,会出现在正文 FILTER 列,例如 q10。
  • Description 解释这个过滤码代表什么。
  • PASS 是保留词,表示通过所有过滤,通常不需要自定义。
  • 0 是保留的,不应作为过滤码。

例如数据行:

20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017

这里 q10 就来自上面的 ##FILTER 定义。


1.2.4 Individual format field format:FORMAT 定义​

如果文件包含样本基因型,就会有 FORMAT 列和样本列。FORMAT 定义样本列中冒号分隔的子字段:

##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">

格式:

##FORMAT=<ID=ID,Number=number,Type=type,Description="description">

FORMAT 的 Type 可以是:

  • Integer
  • Float
  • Character
  • String

注意:FORMAT 字段一般不用 Flag。它的 Number 规则和 INFO 类似,也支持 A、R、G、. 等特殊值。

例如数据行:

FORMAT NA00001 NA00002 NA00003
GT:GQ:DP 0/0:48:1 0/1:9:8 1/1:43:5

解析器靠 ##FORMAT 知道:

  • GT 是字符串,表示基因型;
  • GQ 是整数,表示基因型质量;
  • DP 是整数,表示深度。

1.2.5 Alternative allele field format:ALT 定义​

对于不精确的结构变异,ALT 可以用符号表示,例如 <DEL>、<DUP>。这些符号要在头部定义:

##ALT=<ID=DEL,Description="Deletion relative to the reference">
##ALT=<ID=DUP,Description="Region of elevated copy number relative to the reference">

格式:

##ALT=<ID=type,Description="description">

ID 表示结构变异类型,可以写一级类型,也可以用冒号分隔子类型。ID 大小写敏感,不能包含空白或尖括号。

一级类型必须是以下之一:

  • DEL:缺失
  • INS:插入新序列
  • DUP:拷贝数升高区域
  • INV:倒位
  • CNV:拷贝数可变区域,可能同时包含缺失和重复

如果有更具体的类型,就不应该用 CNV。保留子类型包括:

  • DUP:TANDEM:串联重复
  • DEL:ME:移动元件缺失
  • INS:ME:移动元件插入

此外,规范强烈建议在头部包含描述参考序列和 contig 的标签。这些标签类似 SAM 里的 SQ 字段,但都是可选的。

对于 ##INFO、##FORMAT、##FILTER、##ALT,都可以在默认字段后加额外字段。例如:

##INFO=<ID=ID,Number=number,Type=type,Description="description",Source="description",Version="128">

这里 Source 和 Version 就是额外字段。


1.2.6 Assembly field format:断点组装文件​

结构变异的断点组装可以引用外部 FASTA 文件:

##assembly=url

例如:

##assembly=ftp://somewhere.org/assembly.fa

VCF 记录里的结构变异可以通过 BKPTID INFO 键引用这个文件中的组装序列。


1.2.7 Contig field format:contig 定义​

VCF 里的 CHROM 列最好都有对应的 contig 定义。格式类似参考序列,但多一个 URL 标签:

##contig=<ID=ctg1,URL=ftp://somewhere.org/assembly.fa,...>

也可以像例子中那样写:

##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>

这些标签高度推荐,但不是 VCF 文本格式的硬性要求。它们允许不同 contig 来自不同文件。

不过要注意:转成 BCF2 时,所有 contig 定义必须完整,记录不能引用头部没有的 contig。


1.2.8 Sample field format:样本到基因组映射​

可以定义样本和基因组之间的映射:

##SAMPLE=<ID=S_ID,Genomes=G1_ID;G2_ID;...GK_ID,Mixture=N1;N2;...;NK,Description=S1;S2;...;SK>

含义:

  • ID:样本 ID。
  • Genomes:这个样本包含哪些基因组,用分号分隔。
  • Mixture:各基因组的混合比例。
  • Description:描述。

例如癌症样本中,一个肿瘤样本可能混合了正常基因组和肿瘤基因组。


1.2.9 Pedigree field format:基因组关系​

可以记录基因组之间的家系或衍生关系:

##PEDIGREE=<Name_0=G0-ID,Name_1=G1-ID,...Name_N=GN-ID>

或者链接到数据库:

##pedigreeDB=URL

一般形式表示 Name_0 衍生自 Name_1 到 Name_N。在癌症 VCF 中,也常用 Derived 和 Original 表示克隆衍生关系,例如:

##PEDIGREE=<Derived=PRIMARY-TUMOR-GENOME-ID,Original=GERMLINE-GENOME-ID>

一个综合例子​

##fileformat=VCFv4.2
##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership">
##FILTER=<ID=q10,Description="Quality below 10">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##contig=<ID=20,length=62435964>
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB GT:GQ 0|0:48

解析器读完后就知道:

  • 这是 VCF 4.2;
  • NS、DP 是整数,AF 是每个 ALT 一个浮点数,DB 是 Flag;
  • q10 是一个过滤码;
  • GT、GQ 是样本格式字段;
  • 20 是合法 contig;
  • 数据行里的 NS=3、DP=14、AF=0.5、DB、GT:GQ 都有明确含义。

常见错误​

  1. ##fileformat 不在第一行。
  2. Description 没加双引号。
  3. Flag 类型写了值,例如 DB=1,正确写法是只写 DB。
  4. Number 或 Type 和正文数据不一致。
  5. 自定义 INFO / FORMAT 字段没有在头部声明。
  6. 转 BCF2 时 contig 没有完整定义,或 INFO / FORMAT 没有完全类型化。
  7. FILTER 里用了自定义过滤码但头部没有 ##FILTER 定义。

一句话总结​

1.2 Meta-information lines 就是 VCF 的“元数据 / schema 区”:
##fileformat 定版本,##INFO 定 INFO 列,##FILTER 定过滤码,##FORMAT 定样本格式,##ALT 定符号等位基因,##contig 定染色体,##SAMPLE 和 ##PEDIGREE 定样本与基因组关系。先定义,后使用,解析器才能正确读懂后面的数据行。