cutadapt去除adapter序列

2020-05-08 16:37:53 浏览数 (2)

欢迎关注”生信修炼手册”!

对于NGS数据分析而言,第一步都是进行质量控制,质量控制包括去除adapter序列,去除低质量序列等内容。在文库构建阶段,为了能够上机测序,会在插入片段两端添加adapter序列。当测序读长超过了插入片段长度时,就会读取到adapter序列。

adapter序列是人为引入的序列,而我们之关心插入片段的测序结果,所以首先要做的就是去除adapter序列。在去除adapter序列时,需要考虑以下两个因素

  1. 由于测序错误率的原因,测序得到的adapter序列会和原本的adapter序列存在几个碱基的误差,所以去除adapter序列时必须允许碱基的错配
  2. 由于插入片段的长度在一定范围内变化,而adpter序列出现在两端的位置,所以测序读到的adapter序列可能只是原本adapter的部分序列

cutadapt 是一款对NGS数据进行质量过滤的软件,无论是5’端adapter,还是3’端adapter, 都可以有效的去除,同时也可以过滤低质量,去除长度太短的序列。

这个软件采用python开发,安装方便,代码如下

代码语言:javascript复制
pip install cutadapt
1. 去除3’端引物序列

对于3’端序列,可能存在以下情况

绿色部分为adapter序列,灰色部分为软件会去除掉的序列,可以看到,无论是只读取到部分adapter序列还是完整的adapter序列,软件都能够有效的去除3’端adapter序列。

用法如下

代码语言:javascript复制
cutadapt -a AACCGGTT -o output.fastq input.fastq

针对目前主流的双端测序数据,adapter序列都是出现在3’端,R1序列的3’端可能出现3’adapter 序列,R2端序列的3’端会出现5’端adpter的反向互补序列,示意如下

需要注意的是,无论是R1端还是R2端,其5’端都不会出现adapter,因为测序反应是直接从插入片段开始的。对于双端数据,只需要分别对R1和R2序列去除3’端adapter序列就可以了。

2. 去除5’端adapter序列

cutadapt 软件也支持去除5’端adapter序列,虽然测序反应中不会出现5’adapter, 但是这里adapter的概念可以延伸一下,比如PCR引物序列。在某些测序策略中,首选需要用PCR反应扩增出目的片段,然后在建库。如果想要去除插入片段5’端的PCR引物,这个用法就派上了用场。

对于5’端序列,可能存在以下情况

绿色部分为adapter序列,灰色部分为软件会去除掉的序列,前两种格式和,无论是只读取到部分adapter序列还是完整的adapter序列,软件都能够有效的去除5’端adapter序列。

用法如下

代码语言:javascript复制
cutadapt -g AACCGGTT -o output.fastq input.fastq

在查找adapter序列时,cutadapt还提供了Anchored模式,在该模式下,必须查找到完整的adapter序列后,才会进行切除工作。

3’端Anchored模式写法如下

代码语言:javascript复制
cutadapt -a AACCGGTT$ -o output.fastq input.fastq

5’端Anchored模式写法如下

代码语言:javascript复制
cutadapt -g ^AACCGGTT -o output.fastq input.fastq

cutadapt在查找adapter时, 有以下两种默认行为

1. 默认允许错配和插入缺失

假设adapter 序列是ADAPTER, 此时对于以下3种情况

代码语言:javascript复制
ADABTER    有一个错配,
ADAPTR      有一个缺失
ADAPPTER  有一个插入

cutadapt 都认为是adapter序列,然后进行去除。可以采用-e参数 指定错配的比例, 默认-e 为0.1, 比如adapter序列长度为21,允许的错配数为 21 * 0.1 = 2.1, 然后直接向下取整后为2, 所以允许的错配数为2;可以采用-no-indels参数来禁止插入和缺失。

2. 默认允许部分匹配

cutadapt默认允许部分匹配,比如 adapter 序列为ADAPTER, 测序得到的序列为ATCGATGCTADCGAGCGC,在序列中间位置的AD是adapter 序列的一部分, 此时会把AD以及之后的序列全部剪切掉,这种情况属于错误的判别。为了防止此类错误判别的出现,cutadapt 默认必须至少有3个碱基匹配时才会认为是adapter 序列,然后进行切除, 这个阈值可以通过 --overlap 参数来指定。

cutdadapt还支持根据质量进行过滤,用法如下

代码语言:javascript复制
cutadapt -q 10 -o output.fastq input.fastq

低质量序列通常出现在reads的3’端,上述写法表示对3’端低质量碱基进行过滤,质量的阈值为10,具体计算过程如下,假设一段序列质量编码为

代码语言:javascript复制
42, 40, 26, 27, 8, 7, 11, 4, 2, 3

质量过滤的阈值-q为10,则首先减去10

代码语言:javascript复制
32, 30, 16, 17, -2, -3, 1, -6, -8, -7

然后从从末端开始累加,得到如下数值

代码语言:javascript复制
(70), (38), 8, -8, -25, -23, -20, -21, -15, -7

-25 最小,所以保留-25 之前的碱基, 即保留前4位碱基,后续碱基认为是低质量碱基,直接切除掉。

cutadapt 也可以根据长度对序列进行过滤,-m参数指定序列的最小长度,低于该长度的序列会被过滤掉,-M参数指定序列的最大长度,大于该长度的序列会被过滤掉。

更多的用法可以参考官方的文档。

·end·

—如果喜欢,快分享给你的朋友们吧—

0 人点赞