jexl 语法

ads

JEXL格式是Java的表达式引擎,对于我这本科生物背景的学渣,Java脚本都没见过长啥样。这里通过GATK的相关文档学习一下。



  1. JEXL表达式的基本结构
简而言之,就是一串字符串,而这串字符串可以告诉GATK该去看哪一个注释信息并且根据规则进行过滤。主要包括三个成分:键、值以及连接二者的操作符。
完整的语句必须用双引号引起来,键是字符串,对应的值可以是字符串、数字或布尔值(TRUE或FALSE)。如果对应的值里面是字符串,还需要加单引号将值引起来。比如
"MY_STRING_KEY == 'foo'"
  1. 使用多个注释

可以通过两个注释指标建立新的表达式,比如下面这个,通过QUAL和DP作比小于10的位点去除
"QUAL / DP < 10.0"
可以通过逻辑连接符(&&或者AND)使用多个过滤条件
"QUAL > 30.0 && DP == 10"
如果想满足其中之一的过滤条件,使用反斜线连接。尽量不要用OR代替反斜线,如果数据集中缺少表达式中的某一注释,会将整个表达式否定。
"QD < 2.0" "ReadPosRankSum < -20.0" "FS > 200.0"
  1. 筛选样本/基因型水平的特征

在VCF文件格式中,有FORMAT栏,以冒号:分隔的条目,分别针对着后面每个样本的相关特征值。
针对过滤的样本,Variant Filtration会将样本水平的FT标签加入到FORMAT栏中(不知道具体长什么样子,先暂时记录下来)。就作者所言,目前这个功能还没方便可用到他们满意的程度。
针对其他的常见的特征值,如GQ,可以直接 "GQ < 5.0"进行过滤。
针对genotype的filtering,GATK提供了更加方便的提取方法。使用三个表达式分别对应三种不同的基因型。也就是上一篇推送中提到的过滤。
isHet == 1    heterozygous calls    1/00/1杂合型isHomRef == 1    homozygous-reference calls    0/0纯和参考基因组基因型isHomVar == 1    homozygous-variant calls    1/1纯和变异基因型
  1. 重要提醒

关于JEXL表达式的书写,其对大小写是敏感的,对数据类型也是非常敏感的,比如字符串、(非)整数型、浮点数型或布尔型等。
针对过滤,尤其是多种条件组合的过滤,尽量还是分布过滤以方便知道每一次过滤发生了什么,毕竟很多条件在一起运行,如果报错了,第一时间很难知道到底是哪一个条件出了问题。
以及官方的一点建议:The GATK does not recommend use of compound filtering expressions, e.g. the logical || "OR". For such expressions, if a record is null for or missing a particular annotation in the expression, the tool negates the entire compound expression and so automatically passes the variant record even if it fails on one of the expressions.



后面还有一些高级的使用方法,这里就不作搬运了。

不要指望通过这就懂了Java的JEXL格式,目前我对自己的要求就是:够用就行,不够再学!!



原文参考:

https://gatk.broadinstitute.org/hc/en-us/articles/360035891011

https://gatk.broadinstitute.org/hc/en-us/articles/360035531112#2


感兴趣也可以通过阅读原文继续学习(可能对国内网络不太友好, 如果打不开建议复制上面链接到浏览器多试几次)

↓↓↓


最后编辑于:2024/1/10 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com