--------------------1. BSseeker2----------------
安装BSseeker2
git clone git://github.com/BSSeeker/BSseeker2.git
1.1 构建针对BS-seq的index
1.BS-seeker2与Bismark的基本策略相似,都是将基因组和测序数据看作"三碱基"再进行比对;在序列的比对过程中调用bowtie或者bowtie2。
2.和bowtie/bowtie2相似,BS-Seeker2也需要首先建立一个index。但要注意的是,BS-Seeker2不能直接使用bowtie的index,而是需要创建特定的index。
3.BS-Seeker2针对WGBS和RRBS设计了不同的创建index的策略。
bs_seeker2-build.py \
-f genome.fa \
--aligner=bowtie2 \
-r \ # 加-r为构建rrbs索引,不加-r为构建WGBS索引
-d index_dir # -d参数为指定存放index的文件夹路径,不加-d index默认存放在/BSseeker2-master/bs_utils/reference_genomes/文件夹下
1.2 序列比对
1.测序数据一般较大,建议切割成小块进行比对,以提高比对效率。
先将质控后的双端测序的fastq.gz格式数据分成各个小块,
zcat test_clean.1.fastq.gz | split -l 16000000 - test.1_
zcat test_clean.2.fastq.gz | split -l 16000000 - test.2_
gzip test.*
2.比对时,BS-seeker2支持多种格式文件,输入文件可以为fastq、fasta、qseq或者纯序列格式及其gzip压缩文件。
bs_seeker2-align.py \
-1 test.1_aa.gz \ # 输入切割后的左端测序文件
-2 test.2_aa.gz \ # 输入切割后的右端测序文件
-g genome.fa \ # 输入参考基因组序列
--aligner=bowtie2 \
--bt2-p 12 \ # 设置程序运行线程数
--bt2--end-to-end \ # 全局比对
--bt2--very-sensitive \
--bt2--dovetail \
--temp_dir=`pwd` \
-d index_dir \ # 输入存放index的文件夹路径。如果在建立索引时未设置-d,则此处不需加-d
-m 1 \ # 允许错配的碱基数,1代表只允许1个mismatch。
--XSteve \
-o test_aa.bam
1.3 合并bam文件并根据染色体分离bam文件
samtools merge test_merge.bam `ls *.bam`
samtools sort test_merge.bam -o test_sort.bam
1.去除bam中的重复
java -jar /usr/local/bin/picard.jar MarkDuplicates \
I=test_sort.bam \
O=test_filter.bam \
M=duplicate_stats.txt \
REMOVE_DUPLICATES=true \
AS=true
2.bam文件中标签XS:i:1代表BS-Seeker2利用CH位点的甲基化信息判断出亚硫酸盐转化失败的reads,将带有该信息的行舍弃
samtools view -h test_filter.bam | grep -v 'XS:i:1' | samtools view -bS - > test_filter_rmXS.bam
samtools index test_filter_rmXS.bam
3.根据染色体分离出每条染色体的bam文件
for i in chr{1..5};do samtools view test_filter_rmXS.bam ${i} -h | samtools view -bS - > test_${i}.bam; done
1.4 Call methylation
1.可同时并行每条染色体call methylation
bs_seeker2-call_methylation.py \
-i test_chr1A.bam \
-o test_chr1A \
-d index_dir \ # 输入存放index的文件夹路径。
--rm-overlap \ # 确保双端测序reads重合的区域只被计算一次
--sorted # 代表读入的文件是已经经过排序的,可节省计算时间
--------------------2. CGmaptools----------------
安装CGmaptools
git clone git://github.com/guoweilong/cgmaptools.git
2.1 CGmaptools用法
1.将bam格式转换为CGmap格式
cgmaptools convert bam2cgmap -b AA_chr1.bam -g ara.fa --rmOverlap -o AA &
2.将ATCGmap转换为ATCGbz
cgmaptools convert atcgmap2atcgbz -c AA_chr1.ATCGmap.gz -b AA.ATCGbz
3.将CGmap转换为CGbz
cgmaptools convert cgmap2cgbz -c AA_chr1.CGmap.gz -b AA.CGbz
4.选取两个不同CGmap文件中的交集
cgmaptools intersect -1 AA_chr1.CGmap.gz -2 BB_chr1.CGmap.gz -o AA_BB.intersect.gz
-C 指定选取类型(CG\CHG\CHH)
5.合并两个ATCGmap或CGmap文件
cgmaptools merge2 atcgmap -1 AA_chr1.ATCGmap.gz -2 BB_chr1.ATCGmap.gz | gzip > AA_BB.merge.ATCGmap.gz
cgmaptools merge2 cgmap -1 AA_chr1.CGmap.gz -2 BB_chr1.CGmap.gz | gzip > AA_BB.merge.CGmap.gz
6.将多个CGmap的甲基化水平信息整合到一个文件
zcat AA_chr1.CGmap.gz BB_chr1.CGmap.gz | gawk '$8>=1' | cut -f1,3 | sort -u | cgmaptools sort -c 1 -p 2 > index
cgmaptools mergelist tomatrix -i index -f AA_chr1.CGmap.gz,BB_chr1.CGmap.gz -t AA,BB -c 1 -C 100 -o AA_BB.matrix.gz
-f 输入需要整合的CGmap文件,以","隔开
-t 输入对应文件的名称
-c 最小覆盖度
-C 最大覆盖度
7.根据染色体分离CGmap文件
cgmaptools split -i AA_chr1.CGmap.gz -p AA -s CGmap.gz
-p 输出文件名
-s 输出文件名后缀
8.输出目标区域的甲基化信息
awk 'BEGIN{OFS="\t";print 1,113000,124000,"+"}' > region.bed
zcat AA_chr1.CGmap.gz | cgmaptools select region -r region.bed > AA_region.CGmap
-R 反向选取,输出除输入文件中以外区域的甲基化信息
此步骤CGmap.gz需解压缩
9.输出目标位点的甲基化信息
gawk 'NR%100==50' index > site
cgmaptools select site -f AA_chr1.CGmap.gz -i site -o AA_site.CGmap.gz
-r 反向选取,输出除输入文件中以外位点的甲基化信息
10.Call SNP
cgmaptools snv -i AA_chr1.ATCGmap.gz -m bayes -v AA.vcf -o AA.snv --bayes-dynamicP
cgmaptools snv -i AA_chr1.ATCGmap.gz -m AA -o AA.snv
11.计算两个CGmap的差异甲基化位点(DMS)
cgmaptools dms -i AA_BB.intersect.gz -m 4 -M 100 -o AA_BB.DMS.gz -t fisher
-m 最小覆盖度
-M 最大覆盖度
-t 检验方法(fisher/chisq)
12.计算两个CGmap的差异甲基化区域(DMR)
cgmaptools dmr -i AA_BB.intersect.gz -c 1 -C 100 -o AA_BB.DMR.gz
-c 最小覆盖度
-C 最大覆盖度
13.Allele-Specific Methylation
gawk '{if(/^#/){print}else{print $0;}}' AA.vcf > AA1.vcf
cgmaptools asm -r ara.fa -b AA_chr1.bam -l AA1.vcf > AA1.asm
14.查看某一区域平均甲基化水平
zcat AA_chr1.CGmap.gz | cgmaptools mbed -b region.bed -c 1 -C 100
-c 最小覆盖度
-C 最大覆盖度
15.滑窗统计DNA甲基化水平(mbin)
cgmaptools mbin -i AA_chr1.CGmap.gz -B 50000 -c 1 -f png -t AA -p AA > mbin.AA.data
-B 滑窗大小
-c 最小覆盖度
-C 指定统计的DNA甲基化类型(CG/CHG/CHH)
-f 生成文件类型(png/pdf)
-t 图片的标题
-p 图片的名称
16.滑窗统计多个样本DNA甲基化水平(mmbin)
cgmaptools mmbin -l AA_chr1.CGmap.gz,BB_chr1.CGmap.gz -c 1 -B 2000 | \
gawk '{printf("%s:%s-%s", $1, $2, $3); for(i=4;i<=NF;i++){printf("\t%s", $i);} printf("\n");}' > mmbin
cgmaptools heatmap -i mmbin -c -o cluster.pdf -f pdf
-l 输入需要统计的CGmap文件,以","隔开
-c 最小覆盖度
-B 滑窗大小
17.将多个区域中的每个区域均分成多个片段,统计每个片段内的DNA甲基化水平(可用于统计基因上的DNA甲基化分布情况)
for CHR in 1 2 3 4 5; do (for P in 1 2 3 4 5; do echo | \
gawk -vC=$CHR -vP=$P -vOFS="\t" '{print C, P*10000, P*10000+1000, "+";}' ; done) ; done | \
cgmaptools bed2fragreg -n 5 -F 500,500,500,500,500 -T 500,500,500,500,500 > fragreg.bed
-n 将目标区域均分成n个片段
-F 在目标区域上游选取500,500,500,500,500片段
-T 在目标区域下游选取500,500,500,500,500片段
gunzip -c AA_chr1.CGmap.gz | cgmaptools mfg -r fragreg.bed -c 1 > AA.mfg
-c 最小覆盖度
-x 指定统计的DNA甲基化类型(CG/CHG/CHH)
18.统计CGmap文件中全部的DNA甲基化水平(mstat)
cgmaptools mstat -i AA_chr1.CGmap.gz -c 1 -f png -p AA -t AA > AA.mstat.data
-c 最小覆盖度
-f 生成文件类型(png/pdf)
-t 图片的标题
-p 图片的名称
19.计算目标区域DNA平均甲基化水平
cgmaptools mtr -i AA_chr1.CGmap.gz -r region.bed -o AA.mtr.gz
20.画某一区域的甲基化分布情况图(lollipop)
cgmaptools lollipop -i test.matrix.CG.gz -a test.refFlat -f pdf -c 1 -o test.pdf