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 )