首页 > 其他分享 >VCF文件的genotype(GT)为何会出现".",而非常见的./.或.|.

VCF文件的genotype(GT)为何会出现".",而非常见的./.或.|.

时间:2024-06-15 22:45:51浏览次数:19  
标签:gt genotype 错误 GT 版本 VCF pysam 缺失

今天处理一个客户的基因型数据,遇到了一个格式转化的问题。

我想将标准vcf转为某特定格式(类hapmap),之前基于pysam库写了一个比较成熟的脚本,运行了n年都没问题。

但这次出错如下:

    a,b = v['GT']
ValueError: not enough values to unpack (expected 2, got 1)

如果你直接去网上搜索该错误,会有一堆教程告诉你是因为文件中有多余的换行符或者编码错误,但事实并非如此。不如直接定位脚本,发现pysam中samples.iteritems方法错误,GT应该有两个等位基因才对。

        for sample,v in rec.samples.iteritems():
            a,b = v['GT']
            if a == None or b == None:
                gt = '-'
            else:
                gt = ''.join([alleles[a],alleles[b]])
            gts.append(gt)
        h.extend(gts)

根据结果,我debug到开始出错的那个位点,发现GT为“.”,而非我们常见的“./.”或“.|.”,因此pysam解析不了。但大多数缺失是我们常见的形式,因此我不明白为什么会出现这种情况。

网上查了下,似乎没有专门针对这个问题的答案。如果有朋友知道原因,请不吝赐教。我推测可能是某些软件(比如GATK)版本的问题。

我们知道,GATK3和GATK4有比较大的区别,而从 GATK 4.2.3.0 开始又有较大改动,比如缺失值的显示变为0了,而非之前版本的点。

当然我们可以通过DP属性等于0来和REF base做区分(比如bcftools即可处理),但总归要多处理一下,不太方便的。而官方宣称这样做是为了使其运行得更快、更高效,以进行大规模的joint calling。

As the sun rose on my failed analysis, I finally realized why it's called mourning.

图片来自官方:https://gatk.broadinstitute.org/hc/en-us/articles/6012243429531-GenotypeGVCFs-and-the-death-of-the-dot

版本更新导致文件格式不统一,这是个很痛苦的事情。所以小编建议,在正式数据分析之前,大家最好搞清楚上游软件版本,尤其是结果差异较大版本,以免发生不必要的错误。

当然,找到了错误的地方,我的问题很容易解决,写个代码统一下缺失值表示即可。如果你遇到类似的错误不会解决,可以找我要脚本。

标签:gt,genotype,错误,GT,版本,VCF,pysam,缺失
From: https://www.cnblogs.com/miyuanbiotech/p/18249888

相关文章

  • PS通过GTX实现SFP网络通信2
    PS程序设计LWIP库修改 修改原因SDK2017.4自带的LWIP1.4.1库的版本为2.0,直接使用该库将无法通过SFP实现网络通信。因此需要进行修改。修改的原因有2个,第1个原因是由于2017.4版本产生的新bug。在2015.4版本中,若PL部......
  • PS通过GTX实现SFP网络通信1
    将PSENET1的GMII接口和MDIO接口通过EMIO方式引出。在PL端将引出的GMII接口和MDIO接口与IP核1G/2.5GEthernetPCS/PMAorSGMII连接,1G/2.5GEthernetPCS/PMAorSGMII通过高速串行收发器GTX与MIZ7035/7100开发板的SFP......
  • 2024.6 -> 做题记录与方法总结
    2024/6/151.P4363[九省联考2018]一双木棋chess经典轮廓线dp使用的关键在于发现状态数并不多,用\(n\)进制数来表现轮廓的状态\(dp\)的转移和轮廓线息息相关如图,蓝色轮廓线状态只能转移到含一个紫色的状态因为$1\leqn,m\leq10$用\(11\)进制压缩状态就可......
  • 编写一个函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数,且
    编写一个函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数,且要求m>n。p=m!/n!(m-n)!(float)m!#include<stdio.h>floatfactorial(intn){if(n==0){return1.0;}else{returnn*factorial(n-1);}}float......
  • Windows11系统WmsConfigTasks.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个WmsConfigTasks.dll文件(挑选合适的版本文件......
  • 如何正确使用@Bulider与<T>返回数据
    @Data@ToString@Builder@AllArgsConstructorpublicclassPageResult<T>implementsSerializable{privateList<T>items;privatelongcounts;privatelongpage;privatelongpageSize;}上述为一个简单的实体类,接下来我们需要通过建造者模式构建他......
  • python>tqdm实现git进度条效果
    注意1:这里是在python3环境下使用的git,安装要使用pipinstallGitpython来安装在python环境下的git注意2:这个方法可适用于windows环境和Linux环境importgitimporttqdmrepo_url='https://gitee.com/alichinese/oebuild-bin.git'local_path='F:\\test\\oebuild-b......
  • Vue 3 的 <teleport> 组件封装为自定义指令
    <Teleport>是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的DOM结构外层的位置去。https://cn.vuejs.org/guide/built-ins/teleport.html为了更加简便灵活,可以将Vue3的<teleport>组件类似的功能封装为自定义指令。当然,但在某些情况下,直接使用<telepo......
  • x->0时,高阶+低阶等价于低阶?为什么
    步骤1:理解高阶与低阶项在数学中,当我们谈论函数的高阶和低阶项时,通常是指在一个函数的展开式中,高阶项比低阶项增长得更快。例如,对于f(x)=x+x2f(x)=x+x^2f(x)=x+x2,x2x^2x2是高阶项,xxx是低阶项,因为x2x^2x2比xxx增长得更快。步骤2:讨论极限x→0x\to0x→0时的行......
  • 一文了解 - -> SpringMVC
    一、SpringMVC概述SpringMVC是由Spring官方提供的基于MVC设计理念的web框架。SpringMVC是基于Servlet封装的用于实现MVC控制的框架,实现前端和服务端的交互。1.1SpringMVC优势严格遵守了MVC分层思想采用了松耦合、插件式结构;相比较于我们封装的BaseServlet以及其他的......