1简介

用户希望在这里提供关于VAR-Seq项目设计的背景信息。

本报告描述了一个VAR-Seq项目的分析,该项目研究了几种菌株之间的遗传差异生物....

1.1实验设计

通常,用户希望在这里指定与VAR-Seq研究分析相关的所有信息。包括FASTQ文件的详细描述、实验设计、参考基因组、基因注释等。

2工作流环境

2.1生成工作流环境

systemPipeRdata包是一个生成的辅助包,完全填充systemPipeR在当前工作目录中的工作流环境中使用单个命令。中提供了生成预配置工作流模板的所有说明systemPipeRdata装饰图案

systemPipeRdata::genWorkenvir(工作流= "varseq", mydirname = "varseq") setwd("varseq")

如果您已经拥有运行分析的环境,则可以跳过此步骤。如果没有,您可以运行它,它将创建目录结构并填充所有必要的参数和演示数据文件。

构建和加载后生成的工作流环境genWorkenvirsystemPipeRdata所有数据输入都存储在数据/目录和所有的分析结果将被写入一个单独的结果/目录,而systemPipeVARseq。限制型心肌病脚本和目标文件应该位于父目录中。R会话预计将从这个父目录运行。下存储其他参数文件参数/

要处理实际数据,用户希望以类似的方式组织自己的数据,并将所有测试数据替换为自己的数据。要在新数据上重新运行已建立的工作流,请使用初始目标文件以及相应的FASTQ文件通常是用户需要提供的唯一输入。

欲了解更多细节,请参阅文档在这里.更多有关目标文件从systemPipeR可以找到在这里

2.2使用一个命令构建工作流

此模板提供了一些常用步骤VARseq工作流。上的操作可以添加、删除、修改工作流步骤SYSargsList工作流对象。有关所有功能和实用程序的详细信息,请参阅主要装饰图案

为了启动一个VARseq工作流,整个Rmarkdown文件将被导入SYSargsList对象,通过使用importWF(“systemPipeVARseq.Rmd”)命令。

在此模板中,代码块包含选项spr = TRUE'将被添加到工作流中。其他没有此选项的R代码块将被忽略。的选项eval = FALSE在导入和构建工作流对象时可以忽略。请注意这种可能性。

模板可以为每个步骤提供多个选择,例如不同的映射方法,这些方法将接收强制性的可选国旗。一个人可以跑强制性的步骤,所有,或可选运行工作流时的步骤。

此外,每个步骤都可以在计算集群上运行(计算选项)或在当前会话上调用管理会话。要演示此模板,请使用a管理会话将被选择。

2.3工作流初始化

另一种方法是初始化工作流并将每个步骤附加到工作流对象中。

sal <- SPRproject()

2.4所需的包和资源

systemPipeR工作流可以通过一个命令从头到尾设计和构建,从R Markdown文件导入,或者从R控制台以交互模式逐步导入。本教程将演示如何以交互模式构建工作流,并附加每个步骤。工作流是通过连接每个步骤来构建的appendStep方法。每一个SYSargsListinstance包含使用特定命令行或R软件处理一组输入文件所需的指令,以及由特定工具/步骤生成的相应输出文件的路径。

systemPipeR需要加载包(H Backman and Girke 2016)

测试数据集中的一些样本在# VARseq中不能很好地工作,并且VARseq工作流需要很长时间来处理#每个样本。为了更好地测试和加快测试#工作流程,样本集减少到前8个样本。#请删除您的真实分析猫的下两行(蜡笔::红色$bold(“目标中的一些样本被删除用于测试工作流。\n")) writeLines(readLines("targetsPE.txt")[1:13], "targetsPE.txt") ### pre-end appendStep(sal) <- LineWise(code = {library(systemPipeR)}, step_name = "load_SPR")

2.5FASTQ质量报告

以下seeFastq而且seeFastqPlot函数为一组FASTQ文件生成并绘制一系列有用的质量统计数据,包括每个周期质量箱形图、基本比例、基本水平质量趋势、相对k-mer多样性、长度和读取的出现分布、超过质量截断点的读取数和平均质量分布。结果被写入一个名为fastqReport.png

这是预修fastq报告。另一个修剪后的fastq报告步骤不包括在默认值中。建议首先运行此步骤,以确定是否需要进行修剪。

请注意这里使用的是初始目标文件。在本例中,它已被添加到第一步,稍后,我们将使用该函数getColumn提取一个命名向量。

appendStep(sal) <- LineWise(code = {targets <- read.delim(" targetspee .txt", comment. delm)char = "#") updateColumn(sal, step = "load_SPR", position = "targetsWF") <- targets fq_files <- getColumn(sal, "load_SPR", "targetsWF", column = 1) fqlist <- seeFastq(fastq = fq_files, batchsize = 10000, klength = 8) png("./results/fastqReport.png", height = 162, width = 288 * length(fqlist)) seeFastqPlot(fqlist) dev.off()}, step_name = "fastq_report_pre", dependency = "load_SPR")
图1:18个样品的FASTQ质量报告


2.6读预处理

2.6.1阅读修剪与Trimmomatic

接下来,我们需要填充工作流中第一步创建的对象。下面是一个示例,说明如何使用参数模板文件来执行此任务,以修剪FASTQ文件Trimmomatic软件(Bolger, Lohse, and Usadel 2014).对于这一步,SYSargsList函数构建命令行并将其追加到萨尔对象。有关所有功能和实用程序的详细信息,请参阅主要装饰图案

如果GATK(默认)用于变量调用,任何类型的fastq修剪都将被强烈折旧。GATK内部有处理低质量岗位的职能。

appendStep(sal) <- SYSargsList(step_name = "trimmomatic", targets = " targetspee .txt", wf_file = "trimmomatic/trimmomatic-pe. txt")Cwl ", input_file = "trimmomatic/trimmomatic-pe。yml", dir_path = "param/cwl", inputvars = c(FileName1 = "_FASTQ_PATH1_", FileName2 = "_FASTQ_PATH2_", SampleName = "_SampleName_"), dependency = c("fastq_report_pre"), run_step = "optional")

2.6.2预处理与preprocessReads函数

这个函数preprocessReads允许应用预定义的或自定义的读预处理函数到文件中引用的所有FASTQ文件SYSargsList容器,如质量过滤或适配器修剪例程。在内部,preprocessReads使用FastqStreamer函数从ShortRead包以一种内存效率高的方式通过大型FASTQ文件。属性执行适配器修剪trimLRPatterns函数从Biostrings包中。

这里,我们将这一步附加到SYSargsList之前创建的对象。对象上定义了所有参数preprocessReads / preprocessReads-pe.yml文件。

appendStep(sal) <- SYSargsList(step_name = "预处理",targets = "targetsPE.txt", dir = TRUE, wf_file = "preprocessReads/preprocessReads-pe. txt"), input_file = "preprocessReads/preprocessReads-pe. cwl"。yml", dir_path = "param/cwl", inputvars = c(FileName1 = "_FASTQ_PATH1_", FileName2 = "_FASTQ_PATH2_", SampleName = "_SampleName_"), dependency = c("fastq_report_pre"), run_step = "optional")

修剪步骤完成后,将输出文件文件可以用来生成新的目标文件,其中包含裁剪后的FASTQ文件的路径。新的目标信息可以用于下一个工作流步骤实例,如。用裁剪好的FASTQ文件运行NGS对齐。

下面的示例展示如何设计自定义读取“preprocessReads”方法提供的实用程序ShortRead包,然后在批处理模式下使用“preprocessReads”函数。对于这里,可以替换上使用的函数预处理步骤和修改萨尔对象。因为它是一个自定义函数,所以必须将该部分保存在R对象中,并且在内部保存preprocessReads.doc.R加载函数。如果R对象以不同的名称保存(这里“参数/ customFCT。RData”),请将有关资料替换至preprocessReads.doc.R

请注意,此步骤没有添加到工作流中,这里只是为了演示。

首先,我们在工作流中定义了函数:

appendStep(sal) <- LineWise(code = {filterFct <- function(fq, cutoff = 20, Nexceptions = 0) {qcount <- rowsum (as(quality(fq), "matrix") <= cutoff, na。fq[qcount <= Nexceptions]} save(list = ls(), file = "param/ customcft . rdata ")}, step_name = "custom_preprocessing_function", dependency = "预处理")

之后,我们可以编辑输入参数:

yamlinput(sal, "预处理")$Fct yamlinput(sal, "预处理","Fct") <- "'filterFct(fq, cutoff=20, Nexceptions=0)'" yamlinput(sal, "预处理")$Fct ##检查新函数cmdlist(sal, "预处理",targets = 1) ##检查命令行是否更新成功

2.7修边后的FASTQ质量

这是修整后的fastq质量报告。如果包含裁剪步骤,建议增加这一步,比较前后fastq的裁剪。

appendStep(sal) <- LineWise(code = {fq_files <- getColumn(sal, "preprocessing", "outfiles", column = 1) ## get outfiles path fqlist <- seeFastq(fastq = fq_files, batchsize = 10000, klength = 8) png("./results/fastqReport_pos.png", height = 18, width = 4 * length(fqlist)) seeFastqPlot(fqlist) dev.off()}, step_name = "fastq_report_pos", dependency = "trimmomatic", run_step = "optional")

2.8读取映射BWA-MEM

本项目的NGS reads使用高变异耐受短读比对仪与参考基因组序列进行比对BWA-MEM(李2013;Li和Durbin 2009).中定义了对准器的参数设置参数/ cwl gatk / bwa-pe.cwl

该测试代码使用未修剪的fastq文件,因为演示数据很少且有限。不过,最好是用它来测试FASTQ质量报告函数首先验证您的真实数据。

2.8.1发布为BWA和GATK构建索引和字典文件

构建要运行的BWA和GATK的索引和字典文件。

appendStep(sal) <- SYSargsList(step_name = "bwa_index", dir = FALSE, targets = NULL, wf_file = "gatk/workflow_bwa-index. index. "Cwl ", input_file = "gatk/gatk。, dir_path = "param/cwl", dependency = "load_SPR")

创建参考fasta字典。

appendStep(sal) <- SYSargsList(step_name = "fasta_index", dir = FALSE, targets = NULL, wf_file = "gatk/workflow_fasta_dict. zip ")Cwl ", input_file = "gatk/gatk。Yaml ", dir_path = "param/cwl", dependency = "bwa_index")

创建字典索引。

appendStep(sal) <- SYSargsList(step_name = "faidx_index", dir = FALSE, targets = NULL, wf_file = "gatk/workflow_fasta_faidx. aspx ")Cwl ", input_file = "gatk/gatk。Yaml ", dir_path = "param/cwl", dependency = "fasta_index")

2.8.2用BWA映射读取

appendStep(sal) <- SYSargsList(step_name = "bwa_alignment", targets = "targetsPE.txt", wf_file = "gatk/workflow_bwa-pe. txt" . appstep (sal) <- SYSargsList(step_name = "bwa_align ", targets = "targetsPE.txt", wf_file = "gatk/workflow_bwa-pe. txt")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(FileName1 = "_FASTQ_PATH1_", FileName2 = "_FASTQ_PATH2_", SampleName = "_SampleName_"), dependency = c("faidx_index"))

2.9读取和对齐统计信息

下面概述了每个示例中的读取数以及其中有多少与引用对齐。

appendStep(sal) <- LineWise(code = {bampaths <- getColumn(sal, step = "bwa_alignment", "outfiles", column = "samtools_sort_bam") fqpaths <- getColumn(sal, step = "bwa_alignment", "targetsWF", column = "FileName1") read_statsDF <- alignStats(args = bampaths, fqpaths = fqpaths, pairEnd = TRUE) write。table(read_statsDF, "results/alignStats.xls", row.names = FALSE, quote = FALSE, sep = "\t")}, step_name = "align_stats", dependency = "bwa_alignment", run_step = "optional")

2.11变量调用

下面执行变量调用GATK而且BCFtools在一台机器上通过runWF函数为每个样本依次。如果集群计算可用,在计算集群上以并行方式运行可以通过runWF,使资源和选择可用Run_session = "compute"

并不是所有的用户都有一个集群系统,所以这里要演示一个变量调用工作流的例子,只显示单机命令。对于集群作业,请参考我们的主要装饰图案

此外,用户在这里只选择一个变量调用者,而不是运行多个变量调用者。然而,工作流管理器允许为运行分析保留多个可用选项。

2.11.1变量调用GATK

以下步骤是基于GATK 4.1.1.0最佳实践.有10个独立的步骤,用户可以选择从哪里开始,从哪里跳过。所有脚本位于参数/ cwl / gatkBQSR(基础质量评分重新校准)和VQSR(变异质量评分重新校准)是非常特定于有限的物种,如人类,所以这个工作流程不支持这些步骤。

2.11.2步骤1:fastqubam

转换fastq文件bam文件,为下一步做准备。这对特定的测序平台非常重要,默认是illumina公司.用户需要更改参数/ cwl gatk / gatk_fastq2ubam.cwl如果平台不同。在后面的步骤中,变体调用方需要平台信息来更正调用参数。

appendStep(sal) <- SYSargsList(step_name = "fastq2ubam", targets = " targetsspee .txt", wf_file = "gatk/workflow_gatk_fastq2ubam. txt")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(FileName1 = "_FASTQ_PATH1_", FileName2 = "_FASTQ_PATH2_", SampleName = "_SampleName_"), dependency = c("faidx_index"))

14步骤2:合并bam而且ubam

此步骤合并bam而且ubam并创建了第三个bam文件,其中包含对齐信息和已被对齐程序删除的剩余信息,如BWA.被去除的信息对于变量统计计算是必不可少的。建议使用前面的步骤,但是没有这些步骤仍然可以执行变量调用。

appendStep(sal) <- SYSargsList(step_name = "merge_bam", targets = c("bwa_align ", "fastq2ubam"), wf_file = "gatk/workflow_gatk_mergebams. aspx "), SYSargsList(step_name = "merge_bam", targets = c("bwa_align ", "fastq2ubam"), wf_file = "gatk/workflow_gatk_mergebams. aspx ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(bwa_men_sam = "_bwasam_", ubam = "_ubam_", SampleName = "_SampleName_"), rm_targets_col = c("preprocessReads_1", "preprocessReads_2"), dependency = c("bwa_align ", "fastq2ubam")))

2.11.4步骤3:排序bam按基因组坐标排列的文件

排序bam文件的基因组坐标。

appendStep(sal) <- SYSargsList(step_name = "sort", targets = "merge_bam", wf_file = "gatk/workflow_gatk_sort. sh ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(merge_bam = "_mergebam_", SampleName = " _samplename_fastq2ubam ", "Factor_fastq2ubam", "SampleName_fastq2ubam", "Experiment_fastq2ubam", "Date_fastq2ubam"), dependency = c("merge_bam"))

2.11.5第四步:标记副本

标记测序中的PCR伪影。一个duplicate_metrics该步骤还将生成文件,但不会用于下一步。该文件仅供用户检查重复状态摘要。

appendStep(sal) <- SYSargsList(step_name = "mark_dup", targets = "sort", wf_file = "gatk/ workflow_gatk_markduplcopies . ks . ks ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(sort_bam = "_sort_", SampleName = "_SampleName_"), rm_targets_col = c("merge_bam"), dependency = c("sort"))

2.11.6第五步:固定标签

bam并计算NM、MD和UQ标签。这些标记对于变量调用和筛选非常重要。建议执行该步骤,不建议执行。

appendStep(sal) <- SYSargsList(step_name = "fix_tag", targets = "mark_dup", wf_file = "gatk/workflow_gatk_fixtag. sh ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(mark_bam = "_mark_", SampleName = "_SampleName_"), rm_targets_col = c("sort_bam"), dependency = c("mark_dup"))

到这一步,样品预处理已经完成。所有分析就绪BAM文件及其索引.bai完成文件的创建。个体和群体呼叫HaplotypeCaller执行下一步。

2.11.7第六段:HaplotypeCallergvcf

HaplotypeCaller正在运行gvcf此步骤中的Mode。G代表“基因组”。该文件既包含变异站点信息,也包含非变异站点信息;因此,在接下来的步骤中,队列调用者可以使用该信息来验证真正的变体。

appendStep(sal) <- SYSargsList(step_name = "hap_caller", targets = "fix_tag", wf_file = "gatk/workflow_gatk_haplotypecaller. sh ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(fixtag_bam = "_fixed_", SampleName = "_SampleName_"), rm_targets_col = c("mark_bam"), dependency = c("fix_tag"))

2.11.8步骤7:导入全部gvcfs

建议导入allgvcfs到一个TileDB数据库快速队列变量调用在下面的步骤。注意:如果您使用的是非二倍体数据,请使用CombineGVCFs函数GATK然后改变gvcf_db_folder参数参数/ cwl gatk / gatk.yaml成为你的组合gvcf文件路径。

重要的:确保所有样品* .g.vcf.gz文件在结果文件夹中,也是创伤性脑损伤指数文件也应该在那里。

appendStep(sal) <- SYSargsList(step_name = "import", targets = NULL, dir = FALSE, wf_file = "gatk/workflow_gatk_genomicsDBImport. sh)Cwl ", input_file = "gatk/gatk。Yaml ", dir_path = "param/cwl", dependency = c("hap_caller"))

2.11.9Step8:队列呼叫gvcf

通过所有信息评估变体gvcfs.一个集体vcf被称为samples.vcf.gz由默认命名创建。

appendStep(sal) <- SYSargsList(step_name = " call_variables ", targets = NULL, dir = FALSE, wf_file = "gatk/ workflow_gatk_genotypegvcf . aspx ")Cwl ", input_file = "gatk/gatk。Yaml ", dir_path = "param/cwl", dependency = c("import"))

2.11.10Step9:队列硬过滤器变体

变体质量评分再校准(VQSR)不包括在此工作流程中。变体被硬过滤在一起。看到这个帖子用于硬过滤的参数。更改这些设置参数/ cwl gak / gatk_variantFiltration.sh如果需要的话。VQSR需要大量的样本作为训练数据,然后才能进行过滤。读到这帖子获取更多信息。

appendStep(sal) <- SYSargsList(step_name = "filter", targets = NULL, dir = FALSE, wf_file = "gatk/ workflow_gatk_variantfiltering . filter")Cwl ", input_file = "gatk/gatk。Yaml ", dir_path = "param/cwl", dependency = c(" call_variables "))

2.11.11步骤10:提取变体

经过队列调用、筛选,所有样本的所有变量都存储在一个大文件中。为每个样本提取变量并分别保存它们(只有通过过滤器的变量才会被存储)。

appendStep(sal) <- SYSargsList(step_name = "create_vcf", targets = "hap_caller", wf_file = "gatk/workflow_gatk_select_variant. sh ")Cwl ", input_file = "gatk/gatk。yaml", dir_path = "param/cwl", inputvars = c(SampleName = "_SampleName_"), dependency = c("hap_caller", "filter"))

2.12变量调用BCFtools

备选方案为BCFtool

下面运行调用with的变量BCFtools.这个工具需要BWA对齐BAM文件,分类,标记重复samtools最后调用变量byBCFtools出于传统原因,我们保留了这个选项。

appendStep(sal) <- SYSargsList(step_name = "create_vcf_BCFtool", targets = "bwa_align ", dir = TRUE, wf_file = "workflow-bcftools/workflow_bcftools. sh ")Cwl ", input_file = "工作流-bcftools/bcftools. Cwl "。yml", dir_path = "param/cwl", inputvars = c(bwa_men_sam = "_bwasam_", SampleName = "_SampleName_"), rm_targets_col = c("preprocessReads_1", "preprocessReads_2"), dependency = "bwa_align ", run_step = "optional")

变量调用到此结束。下游分析从下一节开始。

2.13检查VCF文件

下游分析脚本存储在参数/ cwl / varseq_downstream

可选:此步骤不包含在默认工作流中。在成功执行整个工作流后,用户可以将各个vcf文件加载到R中进行其他分析,如下所示。

可以将VCF文件导入R中readVcf函数。这两个VCF而且VRanges对象提供了方便的数据结构来处理不同的数据(如。SNP质量过滤)。

这个步骤没有包含在默认的工作流步骤中,但是对于检查单个样本的原始变量是有用的。

library(VariantAnnotation) vcf_raw <- getColumn(sal, "create_vcf") vcf <- readVcf(vcf_raw[1], "A. thaliana") vcf vr <- as(vcf, "VRanges") vr

2.14过滤器变体

这个函数filterVars根据用户可定义的质量参数过滤VCF文件。它依次将每个VCF文件导入到R中,对内部生成的VCF文件应用过滤VRanges对象,然后将结果写入一个新的子VCF文件。筛选器参数作为字符串传递给相应的参数。该函数将此筛选器应用于内部生成的VRanges对象,使用二维对象的标准子集语法,例如:虚拟现实(过滤)

2.14.1GATK

下面的示例筛选支持的变量> = xread和>=80%支持调用的变量。此外,所有的变体都需要通过> = x的软过滤器记录在由GATK生成的VCF文件中。由于这个工作流使用的玩具数据非常少,所以所选择的设置不合理的宽松。下面一行给出了一个更合理的筛选器设置(此处已被注释掉)。

在GATK第10步中已经有一些队列过滤。这里提供了一些额外的硬过滤。这一步包含在这里,但是在实际的分析中,您可以跳过这一步。

对于真实样本,使用以下过滤器:filter <- "totalDepth(vr) >= 20 & (altDepth(vr) / totalDepth(vr) >= 0.8)"

appendStep(sal) <- LineWise(code = {vcf_raw <- getColumn(sal, "create_vcf") library(VariantAnnotation) filter <- "totalDepth(vr) >= 2 & (altDepth(vr) / totalDepth(vr) >= 0.8)" vcf_filter <- suppressWarnings(filterVars(vcf_raw, filter, organism = "A. thaliana", out_dir = "results/vcf_filter")) #将过滤后的路径变量转储到运行环境中,以便其他sysArg步骤可以获得其值updateColumn(sal, "create_vcf", "outfiles") <- data.frame(vcf_filter = vcf_filter)},Step_name = "filter_vcf", dependency = "create_vcf")

2.14.2BCFtools

以过滤VCF文件为例BCFtools使用类似于前面过滤GATK结果的参数设置。

appendStep (sal) < - LineWise(代码= {vcf_raw < - getColumn (sal,一步=“create_vcf_BCFtool”,位置=“输出文件”,列=“bcftools_call”)图书馆(VariantAnnotation)过滤器< -“rowSums (vr) > = 2 & (rowSums (vr [3:4]) / rowSums (vr[1:4]) > = 0.8)“vcf_filter_bcf < - suppressWarnings (filterVars (vcf_raw、过滤、生物=“a芥”,out_dir =“结果/ vcf_filter_BCFtools”,varcaller =“bcftools”))updateColumn (sal,“create_vcf”、“外部档案”)<——data.frame (vcf_filter_bcf = vcf_filter_bcf)},step_name = "filter_vcf_BCFtools", dependency = "create_vcf_BCFtool", run_step = "optional")

检查一个样本的过滤结果

这个小步骤可用于比较vcf过滤前后的文件。这可以在工作流运行之后使用,并确保完成了“filter_vcf”,因为这是一个可选步骤。

copyEnvir(sal, "vcf_raw", globalenv()) copyEnvir(sal, "vcf_filter", globalenv()) length(as(readVcf(vcf_raw[1],基因组= "Ath"), "VRanges")[, 1]) length(as(readVcf(vcf_filter[1],基因组= "Ath"), "VRanges")[, 1])

2.15注释过滤后的变量

这个函数variantReport类提供的实用程序生成变量报告VariantAnnotation包中。每个样本的报告都被写入一个包含基因组上下文注释的表格文件(如。编码或非编码snp,氨基酸变化,受影响基因id等)以及每个变体的置信度统计。CWL文件参数/ cwl varseq_downstream / annotate.cwl类中存储的输入和输出文件的路径SYSargs2实例。

2.15.1注释变量的基础知识

此步骤可以在运行默认工作流(不包括在默认工作流中)之后运行。

与公共注释特性重叠的变体可以用locateVariants

library("GenomicFeatures") #注释下一行如果可选步骤'filter_vcf'是# included vcf_filter <- getColumn(sal, "create_vcf") #取消注释下一行如果可选步骤'filter_vcf'是# included copyEnvir(sal, 'vcf_filter', globalenv()) txdb <- loadDb("./data/ taair10 .sqlite") vcf <- readVcf(vcf_filter[1], "A. thaliana") locateVariants(vcf, txdb, CodingVariants())

编码序列的同义/非同义变体由predictCoding与编码区域重叠的变量函数。

fa <- FaFile("data/ ta10 .fasta") predictCoding(vcf, txdb, seqSource = fa)

2.15.2注释过滤后的变量GATKBCFtools

要求

appendStep(sal) <- LineWise(code ={#从R运行环境中获取过滤后的vcf路径copyEnvir(sal, "vcf_filter", globalenv()) library("GenomicFeatures") txdb <- loadDb("./data/ taair10 .sqlite") fa <- FaFile("data/ taair10 .fasta") vcf_anno <- suppressMessages(variantReport(vcf_filter, txdb = txdb, fa = fa, organism = "A. thaliana", out_dir = "results/vcf_anno"))}, step_name = "annotate_vcf", dependency = "filter_vcf")

查看单个样本的注释结果

copyenvirr (sal, "vcf_anno", globalenv()) read.delim(vcf_anno[1])[38:40,]

2.16组合样本之间的注释结果

为简化样本间的比较,采用了combineVarReports函数中引用的所有变量注释报告SYSargs2实例(这里arg游戏).同时,该函数允许只考虑感兴趣的某些特性类型。例如,下面的设置filtercol = c(结果=“产生”)将只包括表中列出的非同义方差结果注释报表的列。要省略筛选,可以使用该设置filtercol = "所有"

2.16.1结合的结果

要求

appendStep(sal) <- LineWise(code = {combineDF <- combineVarReports(vcf_anno, filtercol = c(Consequence = "nonsynonym "))写。表(combineDF”。/结果/ combineDF_nonsyn。tsv", quote = FALSE, row.names = FALSE, sep = "\t")}, step_name = "combine_var", dependency = "annotate_vcf")

2.17变量汇总统计

varSummary函数计算注释报告中包含的每个特性类型的变体数量。

2.18变体总结

要求

appendStep(sal) <- LineWise(code = {write.table(varSummary(vcf_anno), "./results/variantStats. "tsv", quote = FALSE, col.names = NA, sep = "\t")}, step_name = "summary_var", dependency = "combine_var")

2.19变分的维恩图

可选但包含在默认值中

类定义的维恩图实用程序systemPipeR包可用于识别不同样本和/或变量调用者报告的常见和唯一变量。下面生成了一个3向维恩图,比较了两个变量调用者各自的3个样本。

appendStep(sal) <- LineWise(code = {## make一个前三个样本的列表varlist <- sapply(names(vcf_anno[1:3]), function(x) as.character(read.delim(vcf_anno[x])$VARID) vennset <- overLapper(varlist, type = "vennsets") png("./results/vennplot_var.png") vennPlot(list(vennset), mymain = "Venn前3个样本的Venn Plot ", mysub = "" ", colmode = 2, ccol = c("red", "blue")) dev.off()}, step_name = "venn_diagram", dependency = "annotate_vcf")
图2:来自GATK和BCFtools的3个样本的维恩图


2.20以编程方式绘制变量

可选但在默认情况下

下面绘制一个选定的变量ggbio

在这个例子中,输入BAM文件来自GATK第五步,分析准备就绪。你可以使用其他对齐方式BAMs同样,但要确保它们有索引。的VCF文件是从检查VCF文件Section或者你也可以加载你自己的vcf。

appendStep(sal) <- LineWise(code ={#从R运行环境中获取过滤后的vcf路径copyEnvir(sal, "vcf_filter", globalenv()) library(ggbio) library(VariantAnnotation) mychr <- "ChrM" mystart <- 19000 myend <- 21000 bams <- getColumn(sal, "fix_tag") vcf <- suppressWarnings(readVcf(vcf_filter["M6B"], "A. thaliana")) ga <- readGAlignments(bams["M6B"], use.names = TRUE, param = ScanBamParam(which = GRanges(mychr, IRanges(mystart, myend)))) p1 <- autoplot(ga,Geom = "rect") p2 <- autoplot(ga, Geom = "line", stat = "coverage") p3 <- autoplot(vcf[seqnames(vcf) == mychr], type = "fixed") + xlim(mystart, myend) + theme(图例。position = "none", axis.text.y = element_blank(), axis.ticks.y = element_blank()) p4 <- autoplot(loadDb("./data/ taair10 .sqlite"), which = GRanges(mychr, IRanges(mystart, myend)), names。expr = "gene_id") p1_4 <- tracks(Reads = p1, Coverage = p2, Variant = p3, Transcripts = p4, heights = c(0.3, 0.2, 0.1, 0.35)) + ylab("") ggbio::ggsave(p1_4, filename = "./results/plot_variant.png", units = "in")}, step_name = "plot_variant", dependency = "filter_vcf")
图3:以编程方式绘制变量。


2.21版本信息

sessionInfo ()
## R版本4.2.1(2022-06-23)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.5 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils ##[6]数据集方法基础## ##其他附加包:# # # # [1] systemPipeRdata_2.2.0 systemPipeR_2.4.0 [3] ShortRead_1.56.0 GenomicAlignments_1.34.0 # # [5] SummarizedExperiment_1.28.0 Biobase_2.58.0 # # [7] MatrixGenerics_1.10.0 matrixStats_0.62.0 # # [9] BiocParallel_1.32.0 Rsamtools_2.14.0 # # [11] Biostrings_2.66.0 XVector_0.38.0 # # [13] GenomicRanges_1.50.0 GenomeInfoDb_1.34.0 # # [15] IRanges_2.32.0 S4Vectors_0.36.0 # # [17] BiocGenerics_0.44.0 BiocStyle_2.26.0 # # # #通过加载一个名称空间(而不是附加):## [5] BiocManager_1.30.19 latticeextr_0.6 -30 ## [9] yaml_2.3.6 pillar_1.8.1 ## [11] lattice_0.20-45 glue_1.6.2 ## [13] digest_0.6.30 RColorBrewer_1.1-3 ## [15] colorspace_2.0-3 htmltools_0.5.3 ## [17] Matrix_1.5-1 pkgconfig_2.0.3 ## [23] bookdown_0.29 zlibbioc_1.44.0 ## [21] scales_1.2.1 jpeg_0.1-9 ## [25] ggplot2_3.3.6 cachem_1.0.6 ## [27][37] string_4.1 interp_1.1-3 ## [39] munsell_0.5.0 DelayedArray_0.24.0 ## [41] compiler_4.2.1 jquerylib_0.1.4 ## [43] rlang_1.0.6 grid_4.2.1 ## [45] RCurl_1.98-1.9 htmlwidgets_1.5.4 ## [47] bitops_1.0-7 rmarkdown_2.17 ## [45] gtable_0.3.1 codetools_0.2-18 ## [51] DBI_1.1.3 R6_2.5.1 ## [55] ## [53] knitr_1. 1.40 dplyr_1.0.10 ## [55]fastmap_1.1.0 utf8_1.2.2 ## [57] stringi_1.7.8 parallel_4.2.1 ## [59] Rcpp_1.0.9 vctrs_0.5.0 ## [61] png_0.1-7 tidyselect_1.2.0 ## [63] xfun_0.34

3.运行工作流

3.1在一台机器中交互式作业提交

为了运行工作流,runWF函数将执行工作流容器中存储的所有步骤。执行将在一台机器上进行,而无需提交到计算机集群的队列系统。

sal <- runWF(sal)

3.2集群上的并行化

另外,通过使用集群的多个计算节点并行处理许多文件,可以大大加快计算速度,其中调度/队列系统用于负载平衡。

资源对象下定义的独立并行集群进程的数目Njobs元素。下面的示例将使用每个4个CPU内核并行运行18个进程。如果集群上的可用资源允许同时运行所有18个进程,那么所示的示例提交将总共使用72个CPU内核。

请注意,runWF可以用于大多数排队系统,因为它是基于实用程序batchtools包,它支持使用模板文件(* .tmpl)用于定义不同调度器的运行参数。要运行下面的代码,需要同时拥有conffile(见.batchtools.conf.R样品在这里)和a模板文件(见* .tmpl样品在这里)用于系统上可用的排队。下面的示例使用了该示例conffile而且模板该包提供的Slurm调度器的文件。

可以在生成步骤时添加资源,也可以稍后添加这些资源,如下面的示例所示addresource功能:

资源<- list(conffile=".batchtools.conf. conf. "R”、模板= " batchtools.slurm。tmpl", Njobs=18, walltime=120, ## minutes ntasks=1, ncpus=4, memory=1024, ## Mb partition = "short") sal <- addResources(sal, c("hisat2_mapping"), resources = resources) sal <- runWF(sal)

3.3可视化工作流

systemPipeR方法可以可视化工作流实例plotWF函数。

plotWF(sal, rstudio = TRUE)

3.4检查工作流状态

要查看工作流的摘要,我们可以使用:

萨尔statusWF (sal)

3.5访问日志报表

systemPipeR在一个中心位置编译所有工作流执行日志,使其更容易检查任何标准输出(stdout)或标准错误(stderr)用于工作流或R代码标准输出中使用的任何命令行工具。

sal <- renderLogs(sal)

3.6会话信息

这是用于呈现该报告的会话信息。的HTML报表可以访问工作流运行的会话信息renderLogs

sessionInfo ()
## R版本4.2.1(2022-06-23)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.5 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils ##[6]数据集方法基础## ##其他附加包:# # # # [1] systemPipeRdata_2.2.0 systemPipeR_2.4.0 [3] ShortRead_1.56.0 GenomicAlignments_1.34.0 # # [5] SummarizedExperiment_1.28.0 Biobase_2.58.0 # # [7] MatrixGenerics_1.10.0 matrixStats_0.62.0 # # [9] BiocParallel_1.32.0 Rsamtools_2.14.0 # # [11] Biostrings_2.66.0 XVector_0.38.0 # # [13] GenomicRanges_1.50.0 GenomeInfoDb_1.34.0 # # [15] IRanges_2.32.0 S4Vectors_0.36.0 # # [17] BiocGenerics_0.44.0 BiocStyle_2.26.0 # # # #通过加载一个名称空间(而不是附加):## [5] BiocManager_1.30.19 latticeextr_0.6 -30 ## [9] yaml_2.3.6 pillar_1.8.1 ## [11] lattice_0.20-45 glue_1.6.2 ## [13] digest_0.6.30 RColorBrewer_1.1-3 ## [15] colorspace_2.0-3 htmltools_0.5.3 ## [17] Matrix_1.5-1 pkgconfig_2.0.3 ## [23] bookdown_0.29 zlibbioc_1.44.0 ## [21] scales_1.2.1 jpeg_0.1-9 ## [25] ggplot2_3.3.6 cachem_1.0.6 ## [27][37] string_4.1 interp_1.1-3 ## [39] munsell_0.5.0 DelayedArray_0.24.0 ## [41] compiler_4.2.1 jquerylib_0.1.4 ## [43] rlang_1.0.6 grid_4.2.1 ## [45] RCurl_1.98-1.9 htmlwidgets_1.5.4 ## [47] bitops_1.0-7 rmarkdown_2.17 ## [45] gtable_0.3.1 codetools_0.2-18 ## [51] DBI_1.1.3 R6_2.5.1 ## [55] ## [53] knitr_1. 1.40 dplyr_1.0.10 ## [55]fastmap_1.1.0 utf8_1.2.2 ## [57] stringi_1.7.8 parallel_4.2.1 ## [59] Rcpp_1.0.9 vctrs_0.5.0 ## [61] png_0.1-7 tidyselect_1.2.0 ## [63] xfun_0.34

4资金

该项目由美国国立卫生研究院(NIH)和美国国家科学基金会(NSF)资助。

参考文献

博尔杰,安东尼·M,马克·洛塞,比约恩·乌萨德尔,2014。Trimmomatic:用于Illumina序列数据的灵活修剪器生物信息学30(15): 2114-20。

H·贝克曼,泰勒·W,托马斯·格克,2016。“systemPipeR: NGS工作流和报告生成环境。”BMC生物信息学17(1): 388。https://doi.org/10.1186/s12859-016-1241-0

李,H, R德宾,2009。“快速和准确的短读对齐与Burrows-Wheeler变换。”生物信息学25(14): 1754-60。https://doi.org/10.1093/bioinformatics/btp324

李恒,2013。用BWA-MEM校准序列读取,克隆序列和组装ContigsarXiv [Q-bio。GN)3月。http://arxiv.org/abs/1303.3997