导入标准修剪命令Read修饰Read过滤双末端Read修剪
导入
cutadapt,顾名思义,就是去除测序Read中所混杂的测序接头(adapter,二代测序中的测序接头)。
二代测序需要经过建库的步骤,然而建库时如果片段太短,那么在测序时,测序Read就会混入adapter序列,为了去除adapter的影响,就需要cutadapt进行数据修剪(trim)。
基础用法
cutadapt -a AACCGGTT -o output.fastq input.fastq-a
代表在Read 3‘端进行adapter序列的搜索,如果有则减去(默认至少有3个碱基重复),后接相应的测序adapter序列;
-o
修剪后的输出文件为output.fastq;
input.fastq
输入文件(测序文件)。
支持的文件格式
fasta(
.fasta
,.fa
,.fna
)fastq(
.fastq
,.fq
)fasta或fastq的压缩形式(
.gz
,.bz
,.xz
)
cutadapt会自动从相应的拓展名识别相应的文件格式,尤其值得说明的是,它同样支持压缩格式,gz
格式是全python版本都支持的,但是bz
与xz
则需要python3.3以后版本才支持。
标准输入输出
除了可以使用-o
参数来设置输出文件外,也可以使用Linux下的标准输出流来完成,例如:
cutadapt -a AACCGGTT input.fastq > output.fastq
此命令就等同于基础用法里面的那一条命令(见上述)。
不使用-o
的一个重要的区别就是完成adapter修剪后的报告文件会定向到标准错误流,此时可以将其重定向到一个文件中,例如:
cutadapt -a AACCGGTT input.fastq > output.fastq 2> report.txt
本条命令和上一条命令效果一样,会在Read的3'端进行序列为AACCGGT
的adapter序列搜索并将其修剪,不同的是本次的修剪报告会导入到report.txt
文件中。
cutadapt是支持管线命令
|
的。
标准修剪命令
cutadapt支持多种修剪方法,除下表所述语法外,还支持双端修剪(-b
)以及联合接头修剪(-a adapter1...adapter2
)。
3’、5‘的接头混杂示意如下:
其中anchored 3‘或5’的adapter修剪的anchored意义为仅出现在5‘开头或3’末尾的adapter。
几个例子
3‘adapter修剪
使用MYSEQUENCE代表测序的样品片段,ADAPTER代表接头片段。
输入Read为:
MYSEQUEN
MYSEQUENCEADAP
MYSEQUENCEADAPTER
MYSEQUENCEADAPTERSOMETHINGELSE
使用-a ADAPTER
将会输出以下结果:
MYSEQUEN
MYSEQUENCE
MYSEQUENCE
MYSEQUENCE
默认至少3个碱基相同即代表存在adapter序列,也就是说,对于本例而言ADAPTER、ADAP、ADA都会被识别为adapter序列,都会被修剪。
5'adapter修剪
5'adapter修剪使用的场合较少,一般是由于adapter降解导致5’端混杂了adapter片段。
ADAPTERMYSEQUENCE
DAPTERMYSEQUENCE
TERMYSEQUENCE
SOMETHINGADAPTERMYSEQUENCE
使用 -g ADAPTER
以上Read都将会输出以下结果:
MYSEQUENCE
anchored 5'修剪
ADAPTERMYSEQUENCE
MYSEQUENCEADAPTESOMETHING
使用-g ^adapter
,将会得出以下结果:
MYSEQUENCE
MYSEQUENCEADAPTESOMETHING
注意:第二个序列并没有被修剪为SOMETHING,因为ADAPTER出现在序列中间,而不是5‘端开头。
此外,BADAPTERMYSEQUENCE
也会被修剪为MYSEQUENCE
,原因是开头的B
会被看做插入,这种情况叫做错误容许(error-tolerance),默认是1%的错误容许,可以使用-e
来调整相应的错误容许大小。如果不需要错误容许机制生效,可以使用--no-indels
来关闭它。
anchored 3’修剪
MYSEQUENCEADAP
MYSEQUENCEADAPTER
MYSEQUENCEADAPTERSOMETHINGELSE
使用-a ADAPTER$
将会得到以下结果:
MYSEQUENCEADAP
MYSEQUENCE
MYSEQUENCEADAPTERSOMETHINGELSE
注意:第一个序列需要重点注意,在使用锚定3‘修剪时,ADAP并没有被认定为adapter序列。应该PTER、TER才会被识别为adapter序列。
单个Read多个adapter
如果一条Read中同时出现了多个adapter,那么不论是5’修剪还是3‘修剪,都以最左边出现的adapter为准。
Read修饰
cutadapt不只是可以进行Read的adapter修剪,它也可以对Read进行不同的修饰( modify):
切去特定数目碱基
使用--cut
或-u
参数可以切去特定数目的碱基,例如:
cutadapt -u 5 -o trimmed.fastq reads.fastq
可以切去reads.fastq中最左边的5碱基,输出文件名为trimmed.fastq。
若要移除最右边的5个碱基,可以使用-u -5
参数。
质量修剪
测序文件fastq是有每个碱基的测序质量分值的,cutadapt可以根据特定的质量cutoff值去除相应的碱基,比如:
cutadapt -q 10 -o output.fastq input.fastq
对3’端以10为cutoff值进行修剪。
如果需要对5‘端进行质量修剪,可以如下方式进行:
cutadapt -q 15,0 -o output.fastq input.fastq
代表对5’端以15为cutoff值进行修剪。
cutadapt使用的质量修剪算法和比对软件BWA是一样的。具体的质量修剪算法就不再叙述了,详细的可以看cutadapt的官方说明文档(http://cutadapt.readthedocs.org/en/stable/guide.html)里的“Modifying reads”中的“Quality trimming algorithm”部分。
裁短Read至特定长度
可以使用--length
或-l
将Read裁短至特定长度,例如:
cutadapt -l 10 input.fastq > output.fastq
将所有Read从3‘开始裁短至10个碱基。
在一条cutadapt语句中,如果以上adapter修剪和Read修饰同时存在,它们操作的顺序为:
无条件切除(
--cut
)质量修剪(
-q
)adapter修剪(
-a,-g
)Read裁短(
--length
)
Read过滤
默认情况下,cutadapt在做完adapter修剪和Read修饰之后,会将全部Read结果输出到输出文件或标准输出流。但是如果有特定的Read过滤(filter)的需要,那么cutadapt也是支持的,它的Read过滤选项如下:
-m N
丢弃少于N个碱基的Read;-M N
丢弃多于N个碱基的Read;--too-short-output FILE
少于N个碱基的Read不再丢弃,而是输出文件FILE中;--too-long-output FILE
多于N个碱基的Read不再丢弃,而是输出文件FILE中;--untrimmed-output FILE
将没有adapter修剪的Read输出到文件FILE,而不再是正常的输出文件或标准输出流中;--discard-trimmed
将搜索到adapter的Read丢弃;--discard-untrimmed
将没有搜索到adapter的Read丢弃;
--too-short-output
和--too-long-output
是首先进行处理的语法,也就是说假如同时存在--too-long-output FILE1
和--untrimmed-output FILE2
,一个Read因为太长而被输出到FILE1中,那么不论它是否经过了adapter修剪,都不再会出现在FILE2。
双末端Read修剪
cutadapt同样可以双端测序的测序文件进行配对修剪,测序文件分别为reads.1.fastq和reads.2.fastq
,而相应的adapter表示为ADAPTER_FWD
(FWD:forward reads)与ADAPTER_REV
(REV:reverse reads)。基础语法为:
cutadapt -a ADAPTER_FWD -A ADAPTER_REV -o out.1.fastq -p out.2.fastq reads.1.fastq reads.2.fastq
其中-a
,-o
同单末端Read文件中的含义是一样的,分别是3’端adapter修剪与输出文件名。
-A
同-a
的语义是一样,但是作用于第二链(reverse reads)。按照大小写区分forward reads和reverse reads的参数还有-b
,-g
,-u
,语法意义保持不变,小写代表作用于forward reads,大写代表作用于reverse reads。
-p
代后接reverse reads的输出文件名。
当使用-p
参数时,cutadapt会测试相应的两个文件是不是合适的配对,假如两个文件的Read数目不相同或者两个文件的文件名不匹配,那么将会报错。在cutadapt中,/1
与/2
将会被忽略,也即是说以下两个文件名并不匹配:
@my_read/1;1
@my_read/2;1
参考资料:
cutadapt官方说明文档:http://cutadapt.readthedocs.org/en/stable/guide.html
还有更多文章,请移步公众号阅读
如果你生信基本技能已经入门,需要提高自己,请关注上面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。
如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。