首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GATK的FilterMutectCalls如何才能成功呢

GATK的FilterMutectCalls如何才能成功呢

作者头像
生信技能树
发布于 2020-10-26 02:26:44
发布于 2020-10-26 02:26:44
1.9K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

因为有粉丝求助,他学习前面我分享的GATK的Mutect2流程都快奔溃了,总是各种报错。为了证明我教程没有错,所以我赶紧检查了代码,自己走了一遍,重新写了教程,了:最新最全的mutect2教程,提到了因为GATK的Mutect2流程更新太频繁,导致这个软件出现了一些无法解决的报错。走完了体细胞突变(somatic mutation)检测流程(Mutect2命令),这个时候拿到的文件仍然是需要过滤(走FilterMutectCalls命令)的,但是很多人就卡在了这一步。

比如我运行这个软件的FilterMutectCalls命令,测试了下面的几个情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reference=$HOME/biosoft/GATK/resources/bundle/hg38/Homo_sapiens_assembly38.fasta  
GATK=$HOME/biosoft/GATK/gatk-4.1.8.1/gatk 
GATK=$HOME/biosoft/GATK/gatk-4.0.3.0/gatk
GATK=$HOME/biosoft/GATK/gatk-4.0.2.1/gatk
ls $reference $GATK 
ls  *_mutect2.vcf  |while read id
do
sample=$(basename "$id" _mutect2.vcf)
$GATK  FilterMutectCalls -R $reference  --java-options  -DGATK_STACKTRACE_ON_USER_EXCEPTION=true  \
   -V  $id \
   -O ${sample}_filtered.vcf 
done

如果是gatk-4.1.8.1,就会报错如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A USER ERROR has occurred: Mutect stats table  _mutect2.vcf.stats not found.  
When Mutect2 outputs a file calls.vcf it also creates a calls.vcf.stats file.  
Perhaps this file was not moved along with the vcf, 
or perhaps it was not delocalized from a virtual machine while running in the cloud.

gatk官方论坛的意思是,在集群运行的过程中,会丢失后缀为.vcf.stats的文件,所以FilterMutectCalls 命令失败。

如果是Gatk-4.0.3.0,就会报错如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.IllegalStateException: Key P_CONTAM found in VariantContext field INFO at chr1:14932 but this key isn't defined in the VCFHeader.  We require all VCFs to have complete VCF headers by default.

但是,我记得我以前写这个软件教程的时候,明明没有出现问题啊,所以就去检查了我的脚本,发现居然是 gatk-4.0.2.1 版本。

如果是是 gatk-4.0.2.1 版本

报错就更诡异了,运行到一半后戛然而止。仔细检查了vcf文件停止的地方,发现它对

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chr2	112391072	.	GAAA	G,GA,GAA
chr2	131598742	.	CT	C,CTT,CTTT

所以我干脆仅仅是保留SNP吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reference=$HOME/biosoft/GATK/resources/bundle/hg38/Homo_sapiens_assembly38.fasta   
GATK=$HOME/biosoft/GATK/gatk-4.0.2.1/gatk
ls $reference $GATK 
ls  *_mutect2.vcf  |while read id
do
sample=$(basename "$id" _mutect2.vcf)
cat $id  | perl -alne '{if(/^#/){print}else{ next if $F[0] =~ "_";print if (length($F[3])+length($F[4])) eq 2   } }'  >  ${sample}_snp.vcf 
$GATK  FilterMutectCalls -R $reference  --java-options  -DGATK_STACKTRACE_ON_USER_EXCEPTION=true  \
   -V ${sample}_snp.vcf   \
   -O ${sample}_filtered.vcf 
cat  ${sample}_filtered.vcf |perl -alne '{if(/^#/){print}else{next unless $F[6] eq "PASS";next if $F[0] =~/_/;print } }' >  ${sample}_pass.vcf 
done

讽刺的是,居然就看到了成功的log日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
18:10:54.132 INFO  ProgressMeter - Starting traversal
18:10:54.132 INFO  ProgressMeter -        Current Locus  Elapsed Minutes    Variants Processed  Variants/Minute
18:10:54.504 INFO  ProgressMeter -             unmapped              0.0                   792         128086.3
18:10:54.504 INFO  ProgressMeter - Traversal complete. Processed 792 total variants in 0.0 minutes.
18:10:54.657 INFO  FilterMutectCalls - Shutting down engine
[September 29, 2020 6:10:54 PM CST] org.broadinstitute.hellbender.tools.walkers.mutect.FilterMutectCalls done. Elapsed time: 0.04 minutes.
Runtime.totalMemory()=357564416
Tool returned:
SUCCESS

接下来这些后缀为_pass.vcf 的文件,就需要走vcf2maf流程啦!

vcf2maf流程我前些天在生信技能树已经分享过了,见:mskcc的vcf2maf极简解决方案代码分享

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strcpy函数: char *strcpy(char *Dest , const char *Src)   {       assert((Dest != NULL) && (Src != NULL));   char *address = Dest;   while((*Dest++ = *Src++) != '\0')           NULL;   return address;   }   strncpy函数: 利用标准库函数strncpy(),可以将一字符串的一部分拷贝到另一个字
猿人谷
2018/01/17
2.7K0
【如何手写strcpy和memcpy】c++面试常问问题总结01
要根据输入的长度做一个控制,而往往我们使用的时候,输入的长度都是目标字符串的长度减1,因为要留一个位置给结束符’\0’。
20岁爱吃必胜客
2022/11/13
9250
strcpy函数
1 #include<stdio.h> 2 #include <assert.h> 5 void myStrcpy(char* Dest, const char *Src) 6 { 7 assert((Dest!= NULL)&&(Src!=NULL)); 8 while((*Dest = *Src)!='\0') 9 { 10 Dest++; 11 Src++; 12 } 13 } 14 15 int main() 16
猿人谷
2018/01/17
1.3K0
手写strcpy和memcpy代码实现
本篇文章聊一下strcpy和memcpy的代码实现,这两个也是c和c++面试中常考的问题点。
cpp加油站
2021/06/07
1.3K0
c语言面试知识点总结_c语言电话面试题
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 一个被声明为静态的变量可以被模块内所用函数访问,但不能被其他文件函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用,这个函数被限制在声明它的模块的本地范围内使用。
全栈程序员站长
2022/11/15
1K0
c语言面试知识点总结_c语言电话面试题
sprintf、strcpy和memcpy的区别
做某题用到了sprintf把一个字符数组(字符串)写到二维字符数组里,然后耗时挺长的,想了想strcpy好像也可以,事实证明strcpy效率果然更高,然后想了想觉得memcpy好像也可以。实践了一下的确可以,效率不用说也比sprintf高,毕竟memcpy是对内存操作。然后我就百度了一下它们的区别,做个总结(记笔记)。
饶文津
2020/06/02
1.8K0
程序面试题
1已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。 a)不调用C++/C的字符串库函数,请写出函数strcpy。 b)strcpy能把strSrc的内容复制到strDest,为什么还要char* 类型的返回值? a) char *strcpy(char *strDest, const char *strSrc) { assert((st
用户1624346
2018/04/17
4750
面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort
        继上一次发表了一片关于参加秋招的学弟学妹们如何准备找工作的博客之后,反响很大,顾在此整理一下,以便大家复习。好多源自july的这篇博客,也有很多是我自己整理的。希望大家能够一遍一遍的写,直到能够秒杀为止。
bear_fish
2018/09/14
1.1K0
strcpy和memcpy的差别
即strcpy仅仅用于字符串复制。而且它不仅复制字符串内容之外,还会复制字符串的结束符,strcpy_s更安全。
全栈程序员站长
2022/07/11
9090
你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题
  如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof:
Edison Zhou
2018/08/20
1.6K2
你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题
strcpy函数的实现
http://blog.csdn.net/gpengtao/article/details/7464061
bear_fish
2018/09/20
2.1K0
精选 30 个 C++ 面试题(含解析)
malloc和free都是C/C++语言的标准库函数,new/delete是C++的运算符。
肉眼品世界
2022/03/29
3.5K0
【C语言】strcpy()函数(字符串拷贝函数详解)
我们先来看一下cplusplus.com - The C++ Resources Network网站上strcpy()函数的基本信息:
修修修也
2024/04/01
1.8K0
【C语言】strcpy()函数(字符串拷贝函数详解)
库函数之字符函数与字符串函数(上)
1.对于**const关键字,**这位博主讲的十分详细. const介绍 2.assert函数简单介绍. 函数名:断言函数 头文件:
初阶牛
2023/03/13
3200
库函数之字符函数与字符串函数(上)
linux c/c++ 面试题目整理(一)
如果数不多的情况下,可以直接将文件中所有整数读到set中,set类型会自动排好序,读完后再将所有整数写到另一个文件中去。
cpp加油站
2021/04/16
6500
linux c/c++ 面试题目整理(一)
c++-strcpy函数的实现
1,检查指针有效性; 2,返回目的指针des; 3,源字符串的末尾 ‘\0’ 需要拷贝。 写出了流行的写法,不过不完美。
kdyonly
2023/03/03
4230
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy
Gxjun
2018/03/21
1.4K0
C语言代码优化的一些经验及小技巧(二)
参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充。例如:
正念君
2019/11/28
5590
字符串函数&&内存函数(从零到一)【C语言】
 strlen函数是库函数中我们最常使用的函数,它可以求出字符串的长度(不包含‘\0’)
see.
2024/06/04
1540
字符串函数&&内存函数(从零到一)【C语言】
C语言进阶-字符串函数与内存函数
目录 前言 字符串函数与内存函数总汇(讲解的) 字符串函数介绍 strlen(字符串长度计算函数) strcpy/strncpy(字符串拷贝函数) strcat/strncat(字符串拼接函数) strcmp/strncmp(字符串比较函数) strstr(字符串查找函数) strtok(字符串切分函数) strerror(返回错误原因的描述字符串函数) 内存函数介绍 memcpy(内存拷贝函数) memmove(内存移动函数) memcmp(内存比较函数) ---- 前言 ---- 本章主要讲解: 字符和
用户9645905
2022/11/30
1.4K0
相关推荐
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档