GATK最佳实践之数据预处理SnakeMake流程

news2024/10/5 14:20:22

<~生~信~交~流~与~合~作~请~关~注~公~众~号@生信探索>

写的数据预处理snakemake流程其实包括在每个单独的分析中比如种系遗传变异和肿瘤变异流程中,这里单独拿出来做演示用,因为数据预处理是通用的,在call变异之前需要处理好数据。

数据预处理过程包括,从fastq文件去接头、比对到基因组、去除重复、碱基质量校正,最后得到处理好的BAM或CRAM文件。

alt

fastq去接头

fastq产生的报告json可以用multiqc汇总成一份报告

if config["fastq"].get("pe"):
    rule fastp_pe:
        input:
            sample=get_fastq
        output:
            trimmed=[temp("results/trimmed/{s}{u}.1.fastq.gz"), temp("results/trimmed/{s}{u}.2.fastq.gz")],
            html=temp("report/{s}{u}.fastp.html"),
            json=temp("report/{s}{u}.fastp.json"),
        log:
            "logs/trim/{s}{u}.log"
        threads: 32
        wrapper:
            config["warpper_mirror"]+"bio/fastp"
else:
    rule fastp_se:
        input:
            sample=get_fastq
        output:
            trimmed=temp("results/trimmed/{s}{u}.fastq.gz"),
            html=temp("report/{s}{u}.fastp.html"),
            json=temp("report/{s}{u}.fastp.json"),
        log:
            "logs/trim/{s}{u}.log"
        threads: 32
        wrapper:
            config["warpper_mirror"]+"bio/fastp"

BWA-mem2 比对+去重+排序

mem2的速度更快,所以采用。

sambaster的去除重复速度比MarkDuplicat快,所以采用。

最后用picard按照coordinate对比对结果排序。

输出的格式是CRAM,不是BAM,因为CRAM压缩效率更高,所以采用。

rule bwa_mem2:
    input:
        reads=get_trimmed_fastq,
        reference=gatk_dict["ref"],
        idx=multiext(gatk_dict["ref"], ".0123"".amb"".bwt.2bit.64"".ann",".pac"),
    output:
        temp("results/prepared/{s}{u}.aligned.cram"# Output can be .cram, .bam, or .sam
    log:
        "logs/prepare/bwa_mem2/{s}{u}.log"
    params:
        bwa="bwa-mem2"# Can be 'bwa-mem, bwa-mem2 or bwa-meme.
        extra=get_read_group,
        sort="picard",
        sort_order="coordinate",
        dedup=config['fastq'].get('duplicates',"remove"), # Can be 'mark' or 'remove'.
        dedup_extra=get_dedup_extra(),
        exceed_thread_limit=True,
        embed_ref=True,
    threads: 32
    wrapper:
        config["warpper_mirror"]+"bio/bwa-memx/mem"

碱基质量校正

GATK说碱基的质量分数对call变异很重要,所以需要校正。

BaseRecalibrator计算怎么校正,ApplyBQSR更具BaseRecalibrator结果去校正。

rule BaseRecalibrator:
    input:
        bam="results/prepared/{s}{u}.aligned.cram",
        ref=gatk_dict["ref"],
        dict=gatk_dict["dict"],
        known=gatk_dict["dbsnp"],  # optional known sites - single or a list
    output:
        recal_table=temp("results/prepared/{s}{u}.grp")
    log:
        "logs/prepare/BaseRecalibrator/{s}{u}.log"
    resources:
        mem_mb=1024
    params:
        # extra=get_intervals(),  # optional
    wrapper:
        config["warpper_mirror"]+"bio/gatk/baserecalibrator"

rule ApplyBQSR:
    input:
        bam="results/prepared/{s}{u}.aligned.cram",
        ref=gatk_dict["ref"],
        dict=gatk_dict["dict"],
        recal_table="results/prepared/{s}{u}.grp",
    output:
        bam="results/prepared/{s}{u}.cram"
    log:
        "logs/prepare/ApplyBQSR/{s}{u}.log"
    params:
        embed_ref=True  # embed the reference in cram output
    resources:
        mem_mb=2048
    wrapper:
        config["warpper_mirror"]+"bio/gatk/applybqsr"

索引

最后对CRAM构建所以,之后可能用得到。

rule samtools_index:
    input:
        "results/prepared/{s}{u}.cram"
    output:
        "results/prepared/{s}{u}.cram.crai"
    log:
        "logs/prepare/samtools_index/{s}{u}.log"
    threads: 32
    params:
        extra="-c"
    wrapper:
        config["warpper_mirror"]+"bio/samtools/index"

Reference

https://gatk.broadinstitute.org/hc/en-us/articles/360035535912-Data-pre-processing-for-variant-discovery

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中如何使用策略模式减少 if / else 分支的使用

目录 1、策略模式 1.1 、策略模式包含三个角色&#xff1a; 2、需求 2.1 、传统方式 2.2 、策略模式实现 2.2.1 、新建PolicyPatternController.java 2.2.2 、Express.java(实体类) 2.2.3 、定义一个接口&#xff1a;PolicyPatternService.java 2.2.4 、定义3个实现类…

Python根据经纬度在地图上显示(folium)

Python根据经纬度在地图上显示&#xff08;folium&#xff09; 一、folium介绍1.folium.Map参数简要介绍2.folium.Marker参数介绍 二、Python根据经纬度在地图上显示&#xff08;示例&#xff09;1.经纬度坐标标记2.经纬度坐标分组标记 一、folium介绍 1.folium.Map参数简要介…

URLConnection(五)

文章目录 1. 断开与服务器的连接2. 处理服务器响应3. 错误条件4. 重定向5. 代理6. 流模式 1. 断开与服务器的连接 HTTP1.1 支持持久连接&#xff0c;允许通过一个TCP socket发送多个请求和响应。不过使用Keep-Alive时&#xff0c;服务器不会因为已经向客户端发送了最后一个字节…

chatgpt赋能python:使用Python操作股票软件:探索股票市场的新方式

使用Python操作股票软件&#xff1a;探索股票市场的新方式 在当今股票市场中&#xff0c;许多投资者正在寻找新的方式来更好地管理其投资组合。一种新的方式是使用Python编程语言操作股票软件。Python拥有简洁的语法和丰富的库来帮助投资者更好地理解和管理股票。在本文中&…

挂耳式耳机哪个牌子好?这次推荐准没错!

在校园里&#xff0c;上网课、复习考证、刷视频……耳机总是我的第一选择&#xff0c;既不会打扰别人又能有效学习&#xff0c;普通的入耳式耳机戴久了总是会耳道痛&#xff0c;甚至出现耳道发炎问题&#xff0c;耳机也总是很难清洁。但是生活中我又离不开耳机&#xff0c;所以…

【源码解析】分库分表框架 Shardingsphere 源码解析

前言 以前研究过如何使用ShardingJdbc&#xff0c;使用ShardingJdbc进行分库分表&#xff0c;但是原理方面没有细致的深入了解。如果仅仅了解如何使用的话&#xff0c;对于改造和排查问题&#xff0c;其实都是不够的&#xff0c;所以跟踪源码了解其运行原理是很重要的。 Demo…

GPT学习笔记-Embedding的降维与2D,3D可视化

嵌入&#xff08;Embedding&#xff09;在机器学习和自然语言处理中是一种表示离散变量&#xff08;如单词、句子或整个文档&#xff09;的方式&#xff0c;通常是作为高维向量或者矩阵。嵌入的目标是捕捉到输入数据中的语义信息&#xff0c;使得语义相近的元素在嵌入空间中的距…

STM32+UART串口+DMA收发

目录 1、cubemax端配置 1.1 初始化配置 1.2 GPIO配置 1.3 UART配置 1.3.1 串口基础配置 1.3.2 DMA配置 2、keil端代码设计 2.1 初始化配置 2.2 DMA接收初始化配置 2.3 DMA发送配置 2.4 接收回调函数设置 2.5 回调函数内容代码编写 2.5.1 接收回调函数 2.5.2 发送回调…

最优化理论-最速下降法的推导与应用

目录 1. 引言 2. 最速下降法的基本原理 3. 最速下降法的推导过程 3.1 梯度和梯度下降 3.2 最速下降法的数学表述 4. 最速下降法的应用 4.1 无约束优化问题 4.2 约束优化问题 5. 最速下降法的优缺点 6. 结论 7.代码实现 1. 引言 在最优化理论中&#xff0c;最速下降法…

3W字吃透:微服务网关SpringCloud gateway底层原理和实操

40岁老架构师尼恩的掏心窝&#xff1a; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xff08;50&#xff09;&#xff0c;很多小伙伴凭借 “左手云原生 右手大数据 SpringCloud Alibaba 微服务“三大绝活&#xff0c;拿…

Dock的安装和使用

1、docker基础 三大组件: 仓库、镜像、容器什么是docker: 通俗来讲就是提供服务的容器Docker 两个概念:容器:可以看做空间 例如:磁盘、文件夹 镜像:灵魂 例如:系统、应用 一个镜像可以放在多个容器中(就如同把同一个文件复制到多个磁盘或文件夹一样) 一个容器可以放多个镜…

【Nginx】实战应用(服务器端集群搭建、下载站点、用户认证模块)

文章目录 Nginx实现服务器端集群搭建Nginx与Tomcat部署环境准备(Tomcat)环境准备(Nginx) Nginx实现动静分离需求分析动静分离实现步骤 Nginx实现Tomcat集群搭建 Nginx高可用解决方案KeepalivedVRRP环境搭建Keepalived配置文件介绍访问测试keepalived之vrrp_script Nginx制作下载…

python中的常见运算符

文章目录 算数运算符赋值运算关系运算符逻辑运算符非布尔值的与或非运算条件运算符(也叫三元运算符)运算符的优先级 算数运算符 加法运算符&#xff08;如果两个字符串之间进行加法运算&#xff0c;则会进行拼串操作&#xff09; - 减法运算符 * 乘法运算符&#xff08;如果将字…

小鹏汽车Q1财报:押注G6、大力降本,明年智驾BOM降半

‍作者 | 德新编辑 | 王博 小鹏汽车本周发了Q1财报&#xff0c;数据不好看&#xff0c;以致于在微博端也发了公开信。 那后续呢&#xff1f; 小鹏第二季度指引是&#xff0c;总交付数量约为2.1 - 2.2万辆&#xff0c;收入预计约为45 - 47亿元&#xff1b;四季度&#xff0c…

Selective Kernel Networks论文总结和代码实现

论文&#xff1a;https://arxiv.org/abs/1903.06586?contextcs 中文版&#xff1a;(CVPR-2019)选择性的内核网络_sk卷积 源码&#xff1a;GitHub - implus/SKNet: Code for our CVPR 2019 paper: Selective Kernel Networks 目录 一、论文出发点 二、论文主要工作 三、SK模…

洛谷——树

洛谷——树 文章目录 洛谷——树树的重心会议题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据范围 思路 树的直径【XR-3】核心城市题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOI2003] 逃学的小孩题目描述输入格式输出格式样例 #1样例…

Cocos creator实现《滑雪趣挑战》滑雪小游戏资源及代码

Cocos creator实现《滑雪趣挑战》滑雪小游戏资源及代码 最近在学习Cocos Creator&#xff0c;作为新手&#xff0c;刚刚开始学习Cocos Creator&#xff0c;上线了两个微信小游戏&#xff0c;刚刚入门&#xff0c;这里记录一下《滑雪趣挑战》实现及上线过程的过程。 ](https://…

vue实现深拷贝的方法

在 vue中&#xff0c;深拷贝是一个很有用的功能&#xff0c;在不改变原来对象状态的情况下&#xff0c;进行对象的复制。 但要实现深拷贝&#xff0c;需要两个对象具有相同的属性。如果两个对象不同&#xff0c;深拷贝也不能实现。 1.我们将变量A的属性赋给变量B&#xff0c;但…

springboot+java医院门诊挂号系统设计与实现ssm008

本课题的目标是使医院门诊信息管理清晰化&#xff0c;透明化&#xff0c;便于操作&#xff0c;易于管理。通过功能模块的优化组合实现不同的管理细节&#xff0c;使管理过程实现最大程度的自动化与信息化,并能自动对人工操作环节进行复查,使医院门诊挂号系统出错率降至最低。 主…

3、mqtt客户端演示(MQTT通信协议(mosquitto)发布订阅 C语言实现)

可订阅可发布模式 具体代码 客户端1代码&#xff1a;pub.c #include <stdio.h> #include <stdlib.h> #include <mosquitto.h> #include <string.h>#define HOST "localhost" #define PORT 1883 #define KEEP_ALIVE 60 #define MSG_MAX_S…