吊打ChIP-seq的CUT&Tag技术

看到了发表于2020年8月的一个研究,标题是《Efficient chromatin profiling of H3K4me3 modification in cotton using CUT&Tag》,链接是 https://link.springer.com/article/10.1186/s13007-020-00664-8

研究者们做了棉花材料的表观测序,主要是比较最新的技术 cleavage under targets and tagmentation (CUT&Tag)和以前的 chromatin immunoprecipitation with sequencing (ChIP-seq) 技术,结论是 CUT&Tag技术实验流程更快,对peaks的分辨率更高,而且背景噪音更小。

值得一提的是表观测序技术其实非常多:

  • DNase1 footprinting
  • FAIRE-seq (formaldehyde-assisted isolation of regulatory elements sequencing)
  • Sono-seq (sonication of cross-linked chromatin sequencing)
  • MNase-seq (micrococcal nuclease sequencing)
  • ATAC-seq (assay for transposase-accessible chromatin using sequencing)

此次研究,数据量如下:

image-20210413090542343

其中ChIP-seq的CUT&Tag技术的样品都有各自的input,分别是IgG和mock,所以其实需要找peaks信号的是另外的3个样品,它们的交集如下所示:

peaks信号的交集

可以看到, ChIP-seq技术产生了更多在CUT&Tag技术找不到的peaks,这里作者认为是背景噪音。然后在CUT&Tag技术的两个样品,rep1和rep2的peaks一致性非常好。

从后面的韦恩图也可以看出来:

image-20210413090844566

当然,找到了的peaks,金标准是去igv肉眼看看,如下所示:

IGV对peaks进行可视化

数据分析流程是公开的:

image-20210413090930783

可以看到,这个流程基本上跟我五年前的b站视频课程讲解的大差不差啦:

因为课程有点久远,很多软件参数变化了,而且数据库下载方式也有更新,所以附上去年的流程代码给大家:

2020的ATAC-SEQ最新流程

参考 给学徒的ATAC-seq数据实战 :https://www.jianshu.com/p/5bce43a537fd

环境搭建

如果是全新服务器或者全新用户,首先需要安装conda(最适合初学者的软件管理解决方案):

#一路yes下去
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-4.6.14-Linux-x86_64.sh
source ~/.bashrc

然后使用conda安装一些软件或者软件环境,比如下载测序数据文件的aspera软件环境:

conda create -n download -y 
conda activate download 
conda install -y -c hcc aspera-cli 
which ascp 
## 一定要搞清楚你的软件被conda安装在哪
ls -lh ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh

还有ATAC-SEQ数据分析流程的相关软件

## 安装好conda后需要设置镜像。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes

conda create -n atac -y python=2 bwa
conda info --envs
# 可以用search先进行检索
conda search trim_galore
## 保证所有的软件都是安装在 atac 这个环境下面
conda activate atac
conda install -y trim-galore bedtools deeptools homer meme macs2 bowtie bowtie2 sambamba
conda search samtools
conda install -y samtools=1.11

然后构建工作目录架构:

# 注意组织好自己的项目
mkdir -p ~/project/atac/
cd ~/project/atac/
mkdir {sra,raw,clean,align,peaks,motif,qc}
cd raw

取决于个人习惯。

实战数据准备

参考:使用ebi数据库直接下载fastq测序数据 , 需要自行配置好,然后去EBI里面搜索到的 fq.txt 路径文件:

  • 项目地址是
#一次性下载所有的 fastq.gz样本
dsa=$HOME/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh
ls -lh $dsa 
# conda activate download 
# 自己搭建好 download 这个 conda 的小环境哦。
x=_1
y=_2
for id in {73..80} 
do 
 ascp -QT -l 300m -P33001 -i $dsa \
 era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR123/0$id/SRR123031$id/SRR123031$id$x.fastq.gz . 
 ascp -QT -l 300m -P33001 -i $dsa \
 era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR123/0$id/SRR123031$id/SRR123031$id$y.fastq.gz . 
done

把上面的代码存为代码文件: download.sh ,然后使用下面的命令放在后台下载即可:

conda activate download 
nohup bash download.sh &

得到的文件如下:

1.2G 10月 9 22:07 SRR12303173_1.fastq.gz
1.2G 10月 9 22:12 SRR12303173_2.fastq.gz
1.1G 10月 9 22:17 SRR12303174_1.fastq.gz
1.2G 10月 9 22:24 SRR12303175_1.fastq.gz
1.3G 10月 9 22:30 SRR12303175_2.fastq.gz
1.1G 10月 10 09:54 SRR12303176_1.fastq.gz
1.1G 10月 10 09:56 SRR12303176_2.fastq.gz
1.4G 10月 10 10:02 SRR12303177_1.fastq.gz
1.4G 10月 10 10:05 SRR12303177_2.fastq.gz
1.2G 10月 10 10:09 SRR12303178_1.fastq.gz
1.2G 10月 10 10:13 SRR12303178_2.fastq.gz
1.2G 10月 10 10:18 SRR12303179_1.fastq.gz
1.2G 10月 10 10:21 SRR12303179_2.fastq.gz
1.3G 10月 10 10:26 SRR12303180_1.fastq.gz
1.3G 10月 10 10:35 SRR12303180_2.fastq.gz

可以看到,aspera下载的时候,中间11个小时任务终止了,是我自己重新跑了aspera下载,续起来了的。而且如果你仔细看会发现 SRR12303174这个样品只有R1的fq文件缺失了R2,也是需要重新单独下载。

conda activate download 
dsa=$HOME/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh
id=74;y=_2
ascp -QT -l 300m -P33001 -i $dsa \
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR123/0$id/SRR123031$id/SRR123031$id$y.fastq.gz . 
## SRR12303174_2.fastq.gz 100% 1094MB 87.3Mb/s 01:27
## Completed: 1120670K bytes transferred in 87 seconds
## (104410K bits/sec), in 1 file.
## 全部文件下载完毕后,使用下面的命令检查一下fq.gz文件是否完整
gzip -t *gz

只有项目的fq数据全部准备而且确认无误后才能进行下一步!

测序数据的质量控制

这里选择trim_galore软件,自动批量运行:

mkdir -p ~/project/atac/
cd ~/project/atac/
conda activate atac
trim_galore --help
for id in {73..80} 
do 
 nohup trim_galore -q 25 --phred33 --length 35 -e 0.1 --stringency 4 --paired \
 -o clean raw/SRR123031$id*.fastq.gz & 
done

得到的文件如下:

 828M 10月 10 17:00 clean/SRR12303173_1_val_1.fq.gz
 836M 10月 10 17:00 clean/SRR12303173_2_val_2.fq.gz
 797M 10月 10 18:09 clean/SRR12303174_1_val_1.fq.gz
 808M 10月 10 18:09 clean/SRR12303174_2_val_2.fq.gz
 900M 10月 10 17:03 clean/SRR12303175_1_val_1.fq.gz
 917M 10月 10 17:03 clean/SRR12303175_2_val_2.fq.gz
 787M 10月 10 16:58 clean/SRR12303176_1_val_1.fq.gz
 794M 10月 10 16:58 clean/SRR12303176_2_val_2.fq.gz
 992M 10月 10 17:13 clean/SRR12303177_1_val_1.fq.gz
1006M 10月 10 17:13 clean/SRR12303177_2_val_2.fq.gz
 845M 10月 10 17:01 clean/SRR12303178_1_val_1.fq.gz
 855M 10月 10 17:01 clean/SRR12303178_2_val_2.fq.gz
 840M 10月 10 17:01 clean/SRR12303179_1_val_1.fq.gz
 847M 10月 10 17:01 clean/SRR12303179_2_val_2.fq.gz
 945M 10月 10 17:06 clean/SRR12303180_1_val_1.fq.gz
 963M 10月 10 17:06 clean/SRR12303180_2_val_2.fq.gz

这个过滤还是有点狠的,之前1.3G现在都小于1G了。实际上可以走fastqc+multiqc的质控看过滤前后的具体情况。

数据比对到参考基因组

1、mm10小鼠参考基因组的下载

#下载
mkdir -p ~/project/atac/ref
cd ~/project/atac/ref 
nohup wget http://hgdownload.soe.ucsc.edu/goldenPath/mm10/bigZips/mm10.fa.gz &
#解压
gunzip mm10.fa.gz

2、bowtie2-build构建参考基因组索引文件

这一步会生成6个索引文件,这一步耗时比较常。也可以自行下载对应的参考基因组索引。

conda activate atac
nohup bowtie2-build mm10.fa mm10 1>log 2>&1 &

得到的文件如下:

848M 10月 10 17:20 mm10.1.bt2
633M 10月 10 17:20 mm10.2.bt2
6.0K 10月 10 16:36 mm10.3.bt2
633M 10月 10 16:36 mm10.4.bt2
2.6G 1月 23 2020 mm10.fa
848M 10月 10 18:05 mm10.rev.1.bt2
633M 10月 10 18:05 mm10.rev.2.bt2

3、bowtie2进行批量比对

首先制作配置文件:

cd ~/project/atac/align

ls $HOME/project/atac/clean/*_1.fq.gz > 1
ls $HOME/project/atac/clean/*_2.fq.gz > 2
ls $HOME/project/atac/clean/*_2.fq.gz |cut -d"/" -f 7|cut -d"_" -f 1 > 0
paste 0 1 2 > config.clean ## 供mapping使用的配置文件

然后创建含有如下内容的脚本(aligh.sh):

## 相对目录需要理解
bowtie2_index=$HOME/project/atac/ref/mm10
## 一定要搞清楚自己的bowtie2软件安装在哪里,以及自己的索引文件在什么地方!!!
#source activate atac 
cat config.clean |while read id;
do echo $id
arr=($id)
fq2=${arr[2]}
fq1=${arr[1]}
sample=${arr[0]}
## 比对过程15分钟一个样本
bowtie2 -p 5 --very-sensitive -X 2000 -x $bowtie2_index -1 $fq1 -2 $fq2 |samtools sort -O bam -@ 5 -o - > ${sample}.raw.bam 
samtools index ${sample}.raw.bam 
bedtools bamtobed -i ${sample}.raw.bam > ${sample}.raw.bed
samtools flagstat ${sample}.raw.bam > ${sample}.raw.stat
# https://github.com/biod/sambamba/issues/177
sambamba markdup --overflow-list-size 600000 --tmpdir='./' -r ${sample}.raw.bam ${sample}.rmdup.bam
samtools index ${sample}.rmdup.bam

## ref:https://www.biostars.org/p/170294/ 
## Calculate %mtDNA:
mtReads=$(samtools idxstats ${sample}.rmdup.bam | grep 'chrM' | cut -f 3)
totalReads=$(samtools idxstats ${sample}.rmdup.bam | awk '{SUM += $3} END {print SUM}')
echo '==> mtDNA Content:' $(bc <<< "scale=2;100*$mtReads/$totalReads")'%'

samtools flagstat ${sample}.rmdup.bam > ${sample}.rmdup.stat
samtools view -h -f 2 -q 30 ${sample}.rmdup.bam |grep -v chrM |samtools sort -O bam -@ 5 -o - > ${sample}.last.bam
samtools index ${sample}.last.bam 
samtools flagstat ${sample}.last.bam > ${sample}.last.stat 
bedtools bamtobed -i ${sample}.last.bam > ${sample}.bed
done

提交脚本的代码是:

conda activate atac
nohup bash aligh.sh 1>log 2>&1 &

全部运行完毕后输出非常多文件。

首先看bam文件,如下:

1.1G 10月 11 15:49 SRR12303173.last.bam
1.8G 10月 10 23:01 SRR12303173.raw.bam
1.3G 10月 11 15:48 SRR12303173.rmdup.bam
823M 10月 11 16:00 SRR12303174.last.bam
1.7G 10月 11 00:24 SRR12303174.raw.bam
976M 10月 11 15:59 SRR12303174.rmdup.bam
1.4G 10月 11 16:11 SRR12303175.last.bam
2.2G 10月 11 02:26 SRR12303175.raw.bam
1.6G 10月 11 16:09 SRR12303175.rmdup.bam
1.2G 10月 11 16:23 SRR12303176.last.bam
1.8G 10月 11 03:52 SRR12303176.raw.bam
1.4G 10月 11 16:21 SRR12303176.rmdup.bam
1.8G 10月 11 16:37 SRR12303177.last.bam
2.5G 10月 11 06:16 SRR12303177.raw.bam
2.1G 10月 11 16:35 SRR12303177.rmdup.bam
1.2G 10月 11 16:50 SRR12303178.last.bam
1.9G 10月 11 07:53 SRR12303178.raw.bam
1.4G 10月 11 16:48 SRR12303178.rmdup.bam
1.2G 10月 11 17:02 SRR12303179.last.bam
1.9G 10月 11 09:35 SRR12303179.raw.bam
1.4G 10月 11 17:00 SRR12303179.rmdup.bam
1.7G 10月 11 17:16 SRR12303180.last.bam
2.4G 10月 11 11:51 SRR12303180.raw.bam
1.9G 10月 11 17:14 SRR12303180.rmdup.bam

每个样品分别会输出3个bam文件,测序数据比对的bam,以及去除PCR重复后的bam,以及去除线粒体reads后的bam文件。

查看log日志,发现这些样本的线粒体含量是:

==> mtDNA Content: 1.81%
==> mtDNA Content: 3.72%
==> mtDNA Content: 1.88%
==> mtDNA Content: 1.98%
==> mtDNA Content: 2.16%
==> mtDNA Content: 3.78%
==> mtDNA Content: 2.11%
==> mtDNA Content: 2.17%

因为我们是首先去除PCR重复然后计算线粒体含量,其实是不准确的。

比对后的bam文件的统计

测序文库复杂度的检验

一个简单的含有awk脚本的shell脚本,代码如下:

ls *.last.bam|while read id; 
do 
 bedtools bamtobed -bedpe -i $id | \
 awk 'BEGIN{OFS="\t"}{print $1,$2,$4,$6,$9,$10}' | sort | uniq -c | \
 awk 'BEGIN{mt=0;m0=0;m1=0;m2=0} ($1==1){m1=m1+1} ($1==2){m2=m2+1} {m0=m0+1} {mt=mt+$1} END{m1_m2=-1.0; if(m2>0) m1_m2=m1/m2;printf "%d\t%d\t%d\t%d\t%f\t%f\t%f\n",mt,m0,m1,m2,m0/mt,m1/m0,m1_m2}' > ${id%%.*}.nodup.pbc.qc;
done

脚本制作好了后命名为:

conda activate atac
nohup bash stat_qc.sh &

Library complexity measures计算结果如下,…nodup.pbc.qc文件格式为:

TotalReadPairs
DistinctReadPairs
OneReadPair
TwoReadPairs
NRF=Distinct/Total
PBC1=OnePair/Distinct
PBC2=OnePair/TwoPair

针对NRF、PBC1、PBC2这几个指标,ENCODE官网提供了标准.

计算结果显示NRF、PBC1、PBC2的值都非常完美,说明我们进行过滤和PCR去重的bam文件质量上没有问题,可以用于后续的分析。

Comments are closed.