VET:基因变异VCF数据集便捷提取工具

VET:Vcf Export Tools

工具简介

VET是一个基于R语言开发的变异位点信息批量提取工具,主要功能是根据VCF数据集,按照基因ID、样品ID、变异位点ID等参数,实现批量提取,同时支持变异位点结构注释,一步搞定变异数据的快速提取。

########## WelCome to VCF Export Tools ###########
>>>>>>>>>>>>>>>> Design By BioNote <<<<<<<<<<<<<<<<<
可选参数:
[1]根据基因ID提取变异数据
[2]根据物理位置提取变异数据
[3]根据样品名称提取变异数据
[4]根据SNP名称提取变异数据
--------------------------------------------------
[INFO]第一个参数填选项,第二个参数填项目备注名称
[INFO]第三个参数选择是否过滤样本,默认为“N”
[INFO]第四个参数选择是否进行结构注释,默认为“N”
[INFO]运行方法 $ Rscript ./run.R 1 test Y Y
>>>>>>>>>>>>>>>> 程序版本:V 2.0.1 <<<<<<<<<<<<<<<<
##################################################

功能与应用

基因测序后经过上游分析得到的VCF文件储存了所有样本对应的所有变异信息,通常数据量非常大,在实际使用中需要根据情况对指定信息进行提取。目前已有vcftools或bcftools等工具能够实现上述操作,但是用的时候参数比较复杂,整个过程略显繁琐。


本工具集成了R、tidyverse、Python、vcftools、bcftools、snpEff等常用工具,开发便捷式流程实现批量操作。

主要应用场景是对大规模VCF原始数据集进行提取,支持多种个性化方式

  • 按基因ID提取指定基因内变异信息
  • 按材料名称提取某些材料变异信息
  • 按变异位点名称筛选指定变异信息
  • 按照物理位置提取指定区段内数据

支持流式操作,提取后筛选指定样品并对每个变异位点进行结构注释(判断错义突变、移码突变等),最终将结果文件打包生成压缩包。

使用方法

  • 第一步:输入待提取的信息
  • 第二步:运行Run.R脚本
  • 第三步:下载结果文件

可以批量操作,无需手写代码。

原理介绍

VCF是生信研究中储存基因变异信息的重要格式,通常经过测序上游分析后得到一份具有丰富信息量的vcf或者vcf.gz文件。

alt

以“##”开头的行表示注释信息,一般记录了字段类型和历史命令,这部分相当于一个日志信息。剩下的数据部分类似一个表格,大体上每行是一个变异位点,每列是一个材料样本。

变异位点(简称SNP)是按照染色体上不同位置进行统计的,展示不同材料中在某个位置碱基差异。

alt

按照突变的类型可以分为3种类型:

  • 缺失:Del,某些碱基不见了
  • 插入:Ins,新出现了某些碱基
  • 替换:SNP,单核苷酸多态性变异

alt 一般常见的VCF文件主要由上述信息组成,对于大规模测序得到的多个样品合并VCF文件,可能包含几千万行×几千列(亿级数据量)。

在实际进行分析时,可能只需要考虑某几个基因或者是一小段区间内的变异数据,因此需要对VCF文件进行提取,只取出想要的一小部分,这个过程涉及到Linux下不同软件的相互配合。

VET 源代码

首先,建立项目文件夹并生成以下结构:

Aug  9 16:30 00_scripts
Aug 17 15:24 01_INPUT_GeneID.txt
Aug 17 16:09 01_out_byGeneID
Aug  9 18:30 02_INPUT_Postion.txt
Aug 10 11:25 02_out_byPostion
Aug 10 11:02 03_INPUT_SampleName.txt
Aug  4 15:13 03_out_bySampleName
Aug  4 15:31 04_INPUT_SNP.txt
Aug  4 15:14 04_out_bySNP
Aug  6 11:34 05_INPUT_filevcf.txt
Aug  6 11:33 05_out_bySnpEff

程序初始化

下面的代码为程序初始化过程,将会加载tidyverse等软件包,并读取重要参数,完成后将获得输出提示。

#!/usr/local/bin/Rscript
# VCF Export Tools 基因型变异数据批量提取工具,快捷提取VCF文件
# 依赖软件:Python、bcftools、tidyverse、snpeff
suppressPackageStartupMessages(library("cli"))
suppressPackageStartupMessages(library("tidyverse"))
cli::cli_text("########## WelCome to VCF Export Tools ###########
 \n >>>>>>>>>>>>>>>> Design By Jewel <<<<<<<<<<<<<<<<<
 \n可选参数:
 \n\t[1]根据基因ID提取变异数据
 \n\t[2]根据物理位置提取变异数据
 \n\t[3]根据样品名称提取变异数据
 \n\t[4]根据SNP名称提取变异数据
 \n--------------------------------------------------
 \n[INFO]第一个参数填选项,第二个参数填项目备注名称
 \n[INFO]第三个参数选择是否过滤样本,Y为过滤指定样本
 \n[INFO]第四个参数为'Y'时将对vcf文件进行变异结构注释
 \n[INFO]例如 $ ./run.R 1 test Y Y
 \n>>>>>>>>>>>>>>>> 程序版本:V 2.0.1 <<<<<<<<<<<<<<<<
 \n ##################################################"
)
 args <- commandArgs(T)
if(length(args)!=4){stop("参数输入有误,请检查输入格式,示例“./Run.R 1 jobname Y/N Y/N")}
# CONFIG SETTING:
db_file <- "wgs_all.vcf.gz" # 设置数据库名称
db_name <- "WGS"

# 程序初始化,删除上次输出结果文件----------
OPT <- args[1] # 程序子选项
JOB <- args[2] # 项目备注信息
SAM <- args[3] # 是否过滤样本
EFF <- args[4] # 是否结构注释
print(str_c("INFO   当前选择的数据库为:",db_file))
print(str_c("INFO   当前项目名称为: ",OPT," <-> ",JOB))
print(str_c("INFO   是否对样品进行过滤(Y为过滤指定样本,否则不过滤):"),SAM)
print(str_c("INFO   是否对vcf进行结构变异注释(Y为进行注释,否则不注释):"),EFF)
system("rm -rf ./01_out_byGeneID/*")
system("rm -rf ./02_out_byPostion/*")
system("rm -rf ./03_out_bySampleName/*")
system("rm -rf ./04_out_bySNP/*")
system("rm -rf ./05_out_bySnpEff/*")
cli::cli_text("INFO   系统输出文件夹初始化完成")

根据基因ID提取变异信息

根据输入的参数进行判断,如果选项为1,则执行下面的步骤,主要调用Python程序进行信息检索,并由bcftools工具批量提取变异信息,若需要根据指定样品进行过滤,则利用view功能对样品进行筛选,最后生成结果压缩文件。

if (OPT == "1"){
  cli::cli_text("INFO   待提取的基因ID如下,将自动自取上下游3000bp内的变异数据")
  id <- read.table("./01_INPUT_GeneID.txt",header = F)
  print(id$V1)
  cli::cli_text("INFO   基因ID信息整理完毕,接下来开始检索物理区间")
  system("Rscript prefix_gene_filter.R ./01_INPUT_GeneID.txt")
  cli::cli_text("INFO   接下来执行Python脚本调用bcftools提取基因变异信息")
  system(str_c("python bcftools_view_filiter_Chr.py --input ./00_scripts/id.txt --vcf ./",
               db_file))
  cli::cli_text("INFO   提取完成,对结果进行打包压缩")
  
  if (SAM == "Y"){
    for (i in 1:nrow(id)){
      system(str_c("bcftools view --force-samples -S ",
                   "./03_INPUT_SampleName.txt ",
                   id$V1[i],".vcf.gz > ",
                   id$V1[i],".vcf"))
    }
    system("mv ./Traes*vcf ./01_out_byGeneID/")
    system("rm -rf ./Traes*vcf.gz")
    system(str_c("tar -czvf ",format(Sys.Date(), "%Y_%m_%d"),"_",JOB,"_ExportFrom_",db_name,
                 "_LOTSample_Filter_ByGeneID",".tar.gz ./01_out_byGeneID/* ./Tips.pdf"))
  }else{
    system("mv ./Traes* ./01_out_byGeneID/")
    system(str_c("tar -czvf ",format(Sys.Date(), "%Y_%m_%d"),"_",JOB,"_ExportFrom_",db_name,
                 "_AllSample_Filter_ByGeneID",".tar.gz ./01_out_byGeneID/* ./Tips.pdf"))
  }
  cli::cli_text("INFO   任务运行结束,请及时下载结果文件,下次运行前将清空结果文件")
}

根据物理位置提取变异信息

根据指定的物理区间判断染色体的和起止位置,并结果VCF文件筛选指定区间内的变异数据,采用bcftools的 filter功能进行实现,提取完成后进行打包压缩。

if (OPT == "2"){
  cli::cli_text("INFO   待提取物理区间如下,正在提取中......")
  region <- read.table("./02_INPUT_Postion.txt",header = F)
  for (i in 1:nrow(region)){
    print(str_c("Index: ",i,"   Region: ",region$V1[i],"   Info: ",region$V2[i]))
    system(str_c("bcftools filter ",db_file," --regions ",region$V1[i]," > ",region$V1[i],"_",region$V2[i],".vcf"))
    system("mv Chr* ./02_out_byPostion/")
    system("rename : _ ./02_out_byPostion/*")
    system("rename - _ ./02_out_byPostion/*")
  }
  cli::cli_text("INFO   提取完成,对结果进行打包压缩")
  system(str_c("tar -czvf ",format(Sys.Date(), "%Y_%m_%d"),"_",JOB,"_ExportFrom_",db_name,
               "_AllSample_Filter_ByPositin",".tar.gz ./02_out_byPostion/* ./Tips.pdf"))
  cli::cli_text("INFO   任务运行结束,请及时下载结果文件,下次运行前将清空结果文件")
}

今天分享的内容就到这里,还有两个功能正在开发中,之后有时间再分享关于提取指定位点名称和结构注释的方法,目前这项工具还未完成,如需抢先体验请后台联系,后续将开源至Github,欢迎转发分享。


参考资料:

https://mp.weixin.qq.com/s/DdXyqiW7c7lCp4103flQZQ

本文由 mdnice 多平台发布

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

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

相关文章

android 的Thread类

Thread类 位于java.lang包下的Thread类是非常重要的线程类&#xff0c;它实现了Runnable接口&#xff0c;学习Thread类包括这些相关知识&#xff1a;线程的几种状态、上下文切换&#xff0c;Thread类中的方法的具体使用。 线程&#xff1a;比进程更小的执行单元&#xff0c;每…

uniapp编写微信小程序遇到的坑总结

1、阻止事件冒泡 使用uniapp开发微信小程序的时候&#xff0c;发现使用click.stop来阻止事件冒泡没有作用&#xff0c;点击了之后发现仍然会触发父组件或者祖先组件的事件。 在网上查阅&#xff0c;发现使用tap.stop才能阻止事件冒泡。 2、二维码生成 在网上找了很多&…

adb对安卓app进行抓包(ip连接设备)

adb对安卓app进行抓包&#xff08;ip连接设备&#xff09; 一&#xff0c;首先将安卓设备的开发者模式打开&#xff0c;提示允许adb调试 二&#xff0c;自己的笔记本要和安卓设备在同一个网段下&#xff08;同连一个WiFi就可以了&#xff09; 三&#xff0c;在笔记本上根据i…

JVM——类的生命周期

文章目录 类加载过程加载验证准备解析初始化 卸载 一个类的完整生命周期如下&#xff1a; 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用&#xff0c;那么虚拟机是如何加载这些 Class 文件呢&#xff1f; 系统加载 Class 类型的文件主要三步:加载->连接->…

CentOS系统环境搭建(十五)——CentOS安装Kibana

centos系统环境搭建专栏&#x1f517;点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建&#xff08;十二&#xff09;——CentOS7安装Elasticsearch。 CentOS安装Kibana 文章目录 CentOS安装Kibana1.下载2.上传3.解压4.修改kibana配置文件5.授予es用户权限6.kibana 后台…

uniapp的UI框架组件库——uView

在写uniapp项目时候&#xff0c;官方所推荐的样式库并不能满足日常的需求&#xff0c;也不可能自己去写相应的样式&#xff0c;费时又费力&#xff0c;所以我们一般会去使用第三方的组件库UI&#xff0c;就像vue里我们所熟悉的elementUI组件库一样的道理&#xff0c;在uniapp中…

​ Spring Clould 配置中心 - Nacos

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Nacos配置管理-Nacos实现配置管理&#xff08;P24、P25&#xff09; Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 当微服务部署的实例越来越多&#xff0c…

18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD

导读&#xff1a;原文《18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目 录 第一章 项目概述 1.1项目…

私域新零售商业模式成功的八大要素

从事互联网行业多年以来&#xff0c;遇到客户问最多的一个问题&#xff0c;就是什么样的模式火呀&#xff1f;在设计一个商业模式时&#xff0c;不单单只是考虑资金和人脉等等资源的&#xff0c;其实还是需要遵循这八大原则&#xff0c;它包括&#xff1a;客户价值最大化原则、…

PyTorch学习笔记(十三)——现有网络模型的使用及修改

以分类模型的VGG为例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

Docker+Selenium Grid搭建自动化测试平台

安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下载镜像 hu…

laravel-admin之 解决上传图片不显示 $form->image(‘image‘); 及 $grid->column(‘image‘);

参考 https://blog.csdn.net/u013164285/article/details/106017464 $grid->column(‘image’)->image(‘http://wuyan.cn’, 100, 100); // //设置服务器和宽高 图片上传的域名 上传的图片不显示 在 这里设置了图片的上传路径 在这里设置 域名 就可以回显图片

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks 链接&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

Android DataStore:安全存储和轻松管理数据

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用3.1 Preferences DataStore添加依赖数据读…

LVS负载均衡集群-NAT模式部署

集群 集群&#xff1a;将多台主机作为一个整体&#xff0c;然后对外提供相同的服务 集群使用场景&#xff1a;高并发的场景 集群的分类 1.负载均衡器集群 减少响应延迟&#xff0c;提高并发处理的能力 2&#xff0c;高可用集群 增强系统的稳定性可靠性&…

Java SPI加载机制

SPI加载机制 SPI&#xff08;Service Provider Interface&#xff09;是一种通过外界配置来加载具体代码内容的技术手段。SPI是JDK内置的一种服务提供发现机制&#xff0c;用于实现框架的扩展和组件替换。 在SPI中&#xff0c;框架提供一整套接口&#xff0c;使用者实现这些接…

学习红外成像仪开发注意要点

学习红外成像仪开发注意要点 三河凡科科技飞讯红外成像仪开发学习注意要点 红外成像仪是一种高级的光学设备&#xff0c;可用于探测、分析和显示红外辐射&#xff0c;它广泛应用于医学、军事、石油、矿产资源勘探等领域。红外成像仪的开发需要注意以下几个方面&#xff1a; 1…

(搜索) 剑指 Offer 12. 矩阵中的路径 ——【Leetcode每日一题】

❓剑指 Offer 12. 矩阵中的路径 难度&#xff1a;中等 给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构…

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限

文章目录 背景环境代码实现0. 项目结构图&#xff08;供参考&#xff09;1. 数据库中的表&#xff08;供参考&#xff09;2. 依赖&#xff08;pom.xml&#xff09;3. 配置文件&#xff08;application.yml&#xff09;4. 配置文件&#xff08;application-dev.yml&#xff09;5…

在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…