首页 > 其他分享 >GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题

GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题

时间:2023-10-27 15:37:49浏览次数:30  
标签:GLNexus vcf calls ## Chr1 GATK calling half 位点

目录

  • 关于GLNexus
  • 由于重叠变异产生的half-calls
  • GATK joint calling对于half-calls的处理
  • 建议处理

关于GLNexus

GLnexus是由DNAnexus开发,用于可扩展的gVCF合并和联合变异(joint calling)要求群体测序项目,GL即genotype likelihood之意。

GATK作为变异检测金标准软件,缺点在于速度很慢。尽管在分析上游的比对、单样本HaplotypeCaller检测等环节已经有很多替代品,如Sentieon、Parabricks等,但下游joint calling这一步优化仍然有限。而这正是整个GATK流程的最限速的步骤,在GATK中只能通过分区的方法来加速,效果非常有限。

GLnexus的开发解决了这个痛点问题,在速度上不说几十上百倍的提升,至少也有十多倍。对于大规模群体/队列而言(主要针对人类基因组开发),是个非常好的工具。

DeepvariantClara Parabricks都推荐它来做联合变异。

详见:

https://github.com/dnanexus-rnd/GLnexus

GLnexus: joint variant calling for large cohort sequencing

由于重叠变异产生的half-calls

但是GLNexus和GATK joint calling得到的最终vcf的信息略有不同。如INFO列,GLNexus中只有AF和AQ,FORMAT列则为GT:DP:AD:SB:GQ:PL:RNC。示例如下:

1 ##fileformat=VCFv4.2
      2 ##FILTER=<ID=MONOALLELIC,Description="Site represents one ALT allele in a region with multiple variants that could not be unified into non-overlapping multi-allelic sites">
      3 ##FILTER=<ID=PASS,Description="All filters passed">
      4 ##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
      5 ##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
      6 ##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
      7 ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
      8 ##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Phred-scaled genotype Likelihoods">
      9 ##FORMAT=<ID=RNC,Number=2,Type=Character,Description="Reason for No Call in GT: . = n/a, M = Missing data, P = Partial data, I = gVCF input site is non-called, D = insufficient Dept
     10 ##FORMAT=<ID=SB,Number=4,Type=Integer,Description="Per-sample component statistics which comprise the Fishers Exact Test to detect strand bias.">
     11 ##GLnexusConfig={unifier_config: {drop_filtered: false, min_allele_copy_number: 1, min_AQ1: 70, min_AQ2: 40, min_GQ: 40, max_alleles_per_site: 32, monoallelic_sites_for_lost_alleles
     12 ##GLnexusConfigCRC32C=1926883223
     13 ##GLnexusConfigName=gatk
     14 ##GLnexusVersion=v1.4.1-0-g68e25e5
     15 ##INFO=<ID=AC,Number=A,Type=Integer,Description="Allele count in genotypes">
     16 ##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency estimate for each alternate allele">
     17 ##INFO=<ID=AN,Number=1,Type=Integer,Description="Total number of alleles in called genotypes">
     18 ##INFO=<ID=AQ,Number=A,Type=Integer,Description="Allele Quality score reflecting evidence for each alternate allele (Phred scale)">
     19 ##bcftools_viewCommand=view -Oz -o liangke_Zm164.B73_RefGen_v3.refine.Chr1.vcf.gz liangke_Zm164.B73_RefGen_v3.refine.Chr1.bcf; Date=Wed Sep  6 05:27:17 2023
     20 ##bcftools_viewVersion=1.13+htslib-1.13+ds
     21 ##contig=<ID=Chr1,length=305476924>
     22 ##contig=<ID=Chr2,length=159038028>
     23 #CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  Sample1      Sample2     Sample3     Sample4     Sample5
     24 Chr1   3440    Chr1_3440_G_A  G       A       378     .       AF=0.036585;AQ=378      GT:DP:AD:SB:GQ:PL:RNC   0/0:51:51,0:.,.,.,.:99:.:..     ./.:118:118,0:.,.,.,.:99:.:..   0/0:8
     25 Chr1   3545    Chr1_3545_T_C  T       C       700     .       AF=0.22561;AQ=700       GT:DP:AD:SB:GQ:PL:RNC   0/0:48:48,0:.,.,.,.:99:.:..     ./.:118:95,22:58,36,13,10:99:320,0,33
     26 Chr1   3560    Chr1_3560_G_A  G       A       908     .       AF=0.268293;AQ=908      GT:DP:AD:SB:GQ:PL:RNC   0/0:51:51,0:.,.,.,.:99:.:..     ./.:112:86,25:43,43,19,7:99:596,0,311
     27 Chr1   3658    Chr1_3658_A_C  A       C       3109    .       AF=0.320122;AQ=3109     GT:DP:AD:SB:GQ:PL:RNC   0/1:47:10,36:6,4,20,17:99:1287,0,194:.. 1/1:90:6,83:2,4,34,50:39:2937

因此,它不存在类似GATK硬过滤指标,只能基于它的结果和指标做过滤。一般来说,最终得到的位点会比GATK多不少。由于很多软件都是适配GATK结果而开发,因此如果直接用GLNexus时,可能会报错。比如Plink1.9处理vcf转化为plink时报错:

$plink --vcf test.vcf --recode --out snp --double-id --allow-extra-chr

Error: Line 53 of .vcf file has a GT half-call.
Use --vcf-half-call to specify how these should be processed.

原因是vcf文件中存在half-call,如./0,./1,./2等形式的基因型。Plink默认处理为error,若想不报错,需设置其他模式(如haploid、missing、reference等),每种模式的具体含义如下所示:

GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题_github

为什么会产生这种基因型?需要了解下joint calling的原理,我估计我很难比官方解释得更加清楚。这里有一个图,举例说明4个人的joint calling过程,看了之后基本清楚了。

GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题_github_02

简言之,GLnexus首先将尽可能多的等位基因统一到不重叠的多等位基因位点,像往常一样调用每个样本的二倍体基因型。对于其余不能很好地统一的等位基因(如上图chr22的100位置),通常是因为它们与多个其他位点重叠,GLnexus生成单等位基因位点(MONOALLELIC)来代表每个等位基因。这些单等位基因位点在FILTER字段中标记,以便于识别,并且它们的格式和解释略有不同:GT(基因型)字段仅指示ALT等位基因的调用拷贝数(./.表示零拷贝,./1表示一个拷贝,1/1表示两个拷贝),不断言 REF 等位基因或任何其他等位基因的存在/不存在,这避免了在重叠的多等位基因位点中传达的重复信息。

vcf中对于单等位基因位点的解释如下:

MONOALLELIC,Description="Site represents one ALT allele in a region with multiple variants that could not be unified into non-overlapping multi-allelic sites"

小编推测,half-calls一般是snp和indel同时在某一个位置存在才会出现,而它的存在可能是GLNexus结果多于GATK的重要原因之一。

关于GLNexus half-calls的更多内容,请参考:

GATK joint calling对于half-calls的处理

那么,在GATK的joint calling中,GenomicsDBImport或CombineGVCFs是怎么处理的呢?

GATK的vcf中,我们可能会看到某些SNP的ALT列中出现星号* 的情况,这是由于该SNP附近有indel缺失造成,也就是它对于half-calls的处理方法。

GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题_bc_03

在vcf v4.3文档中,对于ALT的*号解释是:

GLNexus进行joint calling时的"half-calls"(如./0, ./1)问题_github_04

关于GATK的处理,请参考:

建议处理

若是GLNexus的结果,小编建议对这些位点进行处理,不然下游可能很多分析会出错。

一是直接删掉。

对于群体分析,通常拿SNP来做,因此先把SNP提取出来。其次,一般这样的位点不会太多,如果不是很核心的位点(如功能位点、芯片位点等),删除即可。

二是指定替换方式。

如plink软件的处理方式,可指定half-calls的模式,如missing(小编测试,即便在小数据情况下,也可能会出现out of memory的错误)或haploid(正常)。

作者:生物信息与育种

标签:GLNexus,vcf,calls,##,Chr1,GATK,calling,half,位点
From: https://blog.51cto.com/u_15668923/8057432

相关文章

  • c: Queue Calling
     /*********************************************************************************@fileTakeNumber.h*@brief排队等号*@author(geovindu,GeovinDu,涂聚文)*@date2023-10-19*@copyrightgeovindu站在巨人的肩膀上St......
  • How Does RPC & ORM Calls Works in Odoo 16
    HowRPCWorksinOdooFramework:*Odooisanopen-sourceERP(EnterpriseResourcePlanning)frameworkthatprovidesavastrangeofbusinessapplicationfunctionalities.Itfollowsaclient-serverarchitecture,wheretheclientinteractswiththeservert......
  • Go - Separate external calls from our main logic
    Originalimplementation:typeSingleItemstruct{Fieldstring`json:"field"`Hourint`json:"hour"`Minuteint`json:"minute"`ItemCodestring`json:"item_code"`Priceflo......
  • Web Service Tip: JSPs Calling Web Services
    WebServiceTip:JSPsCallingWebServicesHowdoIcallaWebservicefromaJSP? Seemslikeasimplequestionbutitturnsouttherearemanyways-somequickanddirtyandothersmorecorrect. Let'snotdebatecorrectness(doyoureallywantto......
  • Windows+Celery4+eventlet,异步报错:Recursion Error: maximum recursion depth exceede
    前情提要:Windows环境下,使用Celery4和eventlet,在Django项目中启用异步和周期,报错如下:RecursionError:maximumrecursiondepthexceededwhilecallingaPythonobject经过排查,只找到解决方法:改为使用gevent1、安装:pipinstallgevent2、在manage.py文件中添加以下代码imp......
  • shadow callstack
     在函数入口将X30(LR)保存到x18所指向的shadowcallstack里;在函数返回时将x18所指向的shadowcallstack里的LRpop到X30(LR)push2d5bc:d10183ffsubsp,sp,#0x602d5c0:f800865estrx30,[x18],#82d5c4:a9027bfd......
  • .net core IOC容器实现(三)--CallSite
    接着上面一节,这一节主要来看看callSite是如何生成的CallSite是通过CallSiteFactory.GetCallSite(TypeserviceType,CallSiteChaincallSiteChain)生成的,CallSiteFactory是在ServiceProvider里实例化的。代码如下privatereadonlyConcurrentDictionary<ServiceCacheKey,......
  • DisableThreadLibraryCalls与DLLMain死锁
    DisableThreadLibraryCalls与DLLMain死锁 1、首先写个简单的DLL,用来验证1234567891011121314151617181920212223242526272829303132BOOL APIENTRYDllMain( HMODULE hModule,                       ......
  • Linphone callState 电话状态的监听状态(二)
    LinphonecallState电话状态的监听状态callState是一个观察者模式接着上一篇的说,这篇主要是涉及到linphone中c层的注册监听机制.主要是代码追踪和代码过程.linphonecore_jni.cc中的添加监听事件的方法linphonecore_jni.cc中extern"C"voidJava_org_linphone_core_LinphoneC......
  • Linphone callState 电话状态的监听状态(一)
    0.阅读指南因为粘贴的代码比较多,阅读之前请先看目录.如果对这篇文章有什么建议的话,请在评论中指出.尽量把文章写好点.1.说明LinphoneService有个重要的机制,就是通过注册LinphoneCoreListener的实例,当Linphone的状态发声变化的时候,会回调相应的方法.然后linphone上层......