Docker封装生物信息学甲基化流程

CpG CHG CHH含义
p代表磷酸二酯键,CpG指的是甲基化的C的下游是1个G碱基。H代表除了G碱基之外的其他碱基,即A, C, T中的任意一种,CHG代表甲基化的C下游的2个碱基是H和G, CHH表示甲基化的C下游的两个碱基都是H。
Bismark运行原理:
Bisulfite将序列正负链的C全部转换为T,所以也要将基因组序列进行转换。
基因组正负链转换很特别。
基因组的正链C->T,才能匹配原正链的reads
基因组的负链C->T相当于正链G->A,才能匹配原负链的reads
然后一条序列可以比对一个基因组的位置(即真实的基因组位置)
输出真实的基因组序列即可
bismark_methylation_extractor结果文件
默认情况下,软件会自动根据两个因素生成结果文件

1.甲基化的C的类型

就是前面提到的CpG, CHG, CHH 3种类型

2.比对情况

包括比对到四条链上OT, OB, CTOT, CTOB 4种情况
所以会生成 3 X 4 = 12 个文件,对于链特异性文库来说,会生成3 X 2 = 6 个文件,这6个文件内容是类似的,都是记录了甲基化的C的染色体位置。

在bismark中,将基因组的正链定义为top strand , 简称OT, 负链定义为bottom strand, 简称OB; 亚硫酸氢盐处理后,正负链之间并不是完全的反向互补的,将OT链的反向互补链定义为CTOT, 将OB链的反向互补链定义为CTOB。对于链特异性文库而言,由于插入序列为单链,只需要比对OT和OB两条链即可,大大减少了运算量,所以目前illumina的标准BS-seq protocol构建的文库都是链特异性文库,新版的bismark默认的运行方式也是针对链特异性文库的。

1.流程文件 dna-meth.tar

导入镜像
docker load -i dna-meth.tar

2.未找到流程脚本--已下载

3.缺少基本命令

4.运行pipeline脚本

5.docker中时间与宿主机时间不一致(相差8小时)解决方法

docker cp /etc/localtime ef8f1c5e7533:/etc/localtime

1.环境配置

docker start 5fbb826d9572
docker exec -it 5fbb826d9572 /bin/bash
docker stop 5fbb826d9572

docker commit 5fbb826d9572 dna-meth:v4
docker build -t dna-meth:v4 .
中文格式设置
export LANG="C.UTF-8"
source /etc/profile

2.主要流程

1.参考基因组建立索引
2.数据QC
3.测序比对--bismark调用bowtie2
4.去除重复序列--bismarkDedup
5.统计比对率与去除重复之后的比对率
6.bismark_methylation_extractor 从去除重复的bam文件中提取出甲基化统计信息

1、质控

$fastqc -t $fastqc_threads --outdir Raw_FASTQC $R1.fastq.gz $R2.fastq.gz
java -jar $trimmomatic PE -phred33 -threads $trimmomatic_threads ../$R1.fastq.gz ../$R2.fastq.gz \
    "$R1-paired.fastq" "$R1-unpaired.fastq" "$R2-paired.fastq" "$R2-unpaired.fastq" \
    ILLUMINACLIP:$adapters:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:20 MINLEN:50 AVGQUAL:$base_quality_cutoff \
    2> $sample.trimmomatic.Q$base_quality_cutoff.txt
$fastqc -t $fastqc_threads --outdir Trimmed_FASTQC Trimmed/$R1-paired.fastq Trimmed/$R2-paired.fastq

2、BisMark比对

$bismark_path/bismark -p 4 --non_directional --genome $genome_path --path_to_bowtie2 $bowtie_path --samtools_path $samtools_path -1 $1 -2 $2
# 比对到基因组
$bismark_path/deduplicate_bismark -p --samtools_path $samtools_path --bam $1
# 去重复

3.甲基化分析

$bismark_path/bismark_methylation_extractor  --gzip --buffer_size $buffer_size --genome_folder $genome_path --parallel $parallel_processes $1
$bismark_path/bismark_methylation_extractor  --gzip --buffer_size $buffer_size --genome_folder $genome_path --parallel $parallel_processes --comprehensive $1

$bismark_path/bismark2bedGraph --CX_context -o $2 $1
$bismark_path/bismark_methylation_extractor  --gzip --buffer_size $buffer_size --cytosine_report --genome_folder $genome_path --parallel $parallel_processes $1

4.DMR区域分析

#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)
if (length(args)<3) {
  stop("At least two inputs are needed input file, outFile and config JSON", call.=FALSE)
}

suppressPackageStartupMessages(library(dmrseq))
suppressPackageStartupMessages(library("BiocParallel"))
suppressPackageStartupMessages(library(rjson))
register(MulticoreParam(4))


df = read.table(args[1])

files <- c()
for(file in df$V1){
   files <-c(files,file)
}
in_json = fromJSON(file = args[3], method = "C", unexpected.escape = "error", simplify = TRUE )
outFileName = args[2]
test = read.bismark(files = files,rmZeroCov = TRUE, strandCollapse = FALSE, verbose = TRUE)
#sampleNames<- c('control_R1','control_R2','treat_R1','treat_R2')
sampleNames <- c(strsplit(in_json$samplenames, " ")[[1]])
#cellType<- c('control','control','treat','treat')
cellType<- c(c(strsplit(in_json$CellType, " ")[[1]]))
pData(test)$CellType <- cellType
pData(test)$Replicate <- sampleNames
loci.idx <- which(DelayedMatrixStats::rowSums2(getCoverage(test, type="Cov")==0) == 0)
sample.idx <- which(pData(test)$CellType %in% unique(cellType))
test.filtered <- test[loci.idx, sample.idx]
testCovariate <- "CellType"
regions <- dmrseq(test.filtered,testCovariate=testCovariate)
#regions <- dmrseq(test.filtered, cutoff = 0.05, testCovariate=testCovariate)
out <- as(regions, "data.frame")
write.table(out, file = outFileName , sep="\t", col.names=TRUE, row.names=FALSE, quote=FALSE )

本次流程主要软件已安装,直接测试,后续增加功能--GO与KEGG富集分析。

测试通过后,整理报告模板,docker打包并部署。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342