草庐IT

【块】生信上游-3 fastp

JamesMori 2023-10-14 原文
  • 这一篇只是fastp的官方manual,后面再放实操。

1. 主要功能

  1. 质量检测
  2. 排除质量较差的reads
  3. 剪掉质量低的碱基片段
  4. reads首尾剪切
  5. 校正低质量碱基
  6. polyG、polyX剪切
  7. UMI转化为序列名
  8. 将结果输出为多个文件,方便后续多线程分析
  9. 支持STDIN/STDOUT的管道操作
  10. reads去重
  11. HTML/JSON输出结果,便于展示及下游处理

2. 使用实例

主要区分单末端还是双末端

#单末端
fastp -i in.fq -o out.fq  
#双末端
fastp -i in.R1.fq.gz -I in.R2.fq.gz -o out.R1.fq.gz -O out.R2.fq.gz

贴心给了结果展示样例:

3.下载安装

  1. 可以用conda
conda install -c bioconda fastp
  1. 直接下二进制文件
#最新版本
wget http://opengene.org/fastp/fastp 
chmod a+x ./fastp #权限
#指定版本
wget http://opengene.org/fastp/fastp.0.23.1
mv fastp.0.23.1 fastp
chmod a+x ./fastp
  1. 安装包自己安装
    3.1. libisal搭建
    autoconf, automake, libtools, nasm (>=v2.11.01) and yasm (>=1.2.0) 需要提前准备好
git clone https://github.com/intel/isa-l.git
cd isa-l
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
sudo make install

3.2. libdeflate搭建

git clone https://github.com/ebiggers/libdeflate.git
cd libdeflate
make
sudo make install

3.3 fastp搭建

git clone https://github.com/OpenGene/fastp.git
# build
cd fastp
make
# Install
sudo make install

4. 输入与输出

--stdout
如果是双末端,R1与R2会间隔输出
--stdin
如果stdin的数据源是双末端stdout类似的R1、R2间隔输出,则需--interleaved_in选项
--unpaired1、--unpaired2
储存仅单端序列通过质量筛选的序列(储存通过筛选的)
--failed_out
双末端failed reads会放到一个文件内
--reads_to_process
限制用于质检的reads,以粗略的看一眼整体质量如何。或者只需要质检一部分序列。
--dont_overwrite
保护已有文件,若已有输出文件(read1, read2, json report, html report),则直接报错

5. 过滤reads

5.1. 质量过滤
默认打开的,-Q或--disable_quality_filtering取消
-n或--n_base_limit设置unqualified碱基的限制数目
-q或--qualified_quality_phred设置pred分数,默认>=15
-u或--unqualified_percent_limit设置多少碱基被允许unqualified,默认40%
5.2. 长度过滤
默认打开的,-L或--disable_length_filtering取消
-l或--length_required设置最小碱基数
--length_limit设置最大碱基数,用于小RNA,默认0代表没有限制
5.3. 复杂度过滤
默认关闭的,-y或--low_complexity_filter可以打开
-Y或--complexity_threshold设置在0-100范围内,默认30,意思是至少30%复杂度

  • 复杂度:整体来看下一个碱基与前一个碱基不同程度

6. 接头剪切

6.1. 默认打开,-A或--disable_adapter_trimming可取消
6.2. 单末端:根据前1M个reads估计接头序列
-a或--adapter_sequence指定接头序列,自动检测会取消
6.3. 双末端:
6.3.1. 会根据per-read overlap analysis估计接头序列,不需要手动输入接头序列。
6.3.2. 如果设置了--adapter_sequence和--adapter_sequence_r2,当碱基质量较差时,才会使用指定的序列。同时因为有overlap analysis,所以接头序列预测默认是关闭的,--detect_adapter_for_pe可打开。
6.3.3. 如果设置了接头序列,运行速度会比较慢,但是会更干净
6.3.4. 最常用的接头是Illumina TruSeq adapters. 如果数据来自TruSeq library, 可以设置,--adapter_sequence=AGATCGGAAGAGCACACGTCTGAACTCCAGTCA --adapter_sequence_r2=AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT 6.3.5. 或打开自动检查--detect_adapter_for_pe.
6.3.6. 也可以设置--adapter_fasta提供一个接头序列文件

  • fastp first trims the auto-detected adapter or the adapter sequences given by --adapter_sequence | --adapter_sequence_r2, then trims the adapters given by --adapter_fasta one by one.

7. 碱基剪切

7.1. -5或--cut_front从5端开始滑动检查,去除质量低于cut_front_mean_quality的碱基之前的序列或停止,cut_front_window_size设置滑动窗口大小;如果窗口大小是1,等同于Trimmomatic的 LEADING方法。
7.2. -3或--cut_tail从3端开始滑动检查,去除质量低于cut_tail_mean_quality的碱基之后的序列或停止,cut_tail_window_size设置滑动窗口大小;如果窗口大小是1,等同于Trimmomatic的 TRAILING方法。
7.3. -r或--cut_right,从5端到3端,如果遇到异常窗口,则丢弃右侧所有序列并停止。cut_right_window_size设置滑动窗口大小,cut_right_mean_quality设置质量要求。比较接近Trimmomatic的SLIDINGWINDOW方法。
7.4 用了--cut_right,就没必要用--cut_tail,因为--cut_right效果足够强;如果--cut_front和--cut_right联用,--cut_front应该会生效。
7.5. --cut_front和--cut_tail会影响reads去重
7.6. -W,--cut_window_size和-M,--cut_mean_quality

8. 碱基校正

overlap analysis可以用来校正
默认是关闭的,-c或--correction可打开,三个参数:overlap_len_require (default 30),overlap_diff_limit (default 5),overlap_diff_limit_percent (default 20%)。

9. 首尾剪切

头尾序列质量比较差,可以去掉几次测序
9.1. -t 1或 -trim_tail1=1可剪切掉所有reads最后一次测序
9.2. -f,--trim_front1 和 -t,--trim_tail1
9.3. -F,--trim_front2 和-T,--trim_tail2
9.4. -b, --max_len1 和 -B, --max_len2最大化reads长度(具体效果不清楚)

10. polyG、polyX剪切

10.1. polyG剪切对NextSeq/NovaSeq data是默认打开的,-g 或--trim_poly_g可打开,-G 或 --disable_trim_poly_g可取消,--poly_g_min_len设置最小长度,默认10
10.2. polyX剪切默认关闭,-x or --trim_poly_x可打开。poly_x_min_len可设置最小长度,默认10

11. UMI

将umi转到reads名

12. 输出多个文件

方便多线程分析
文件名:--out1 或 --out2
文件前缀:-d 或 --split_prefix_digits
举例:--split_prefix_digits=4, --out1=out.fq, --split=3, then the output files will be 0001.out.fq,0002.out.fq,0003.out.fq
-s 或 --split,根据文件数分
-S 或 --split_by_lines,根据文件行数分

13. overrepresented sequence analysis

-P or --overrepresentation_sampling
举例:if you set -P 100, only 1/100 reads will be used for counting, and if you set -P 1, all reads will be used but it will be extremely slow.

14. 融合双末端reads

15. reads去重

默认会计算重复率,--dont_eval_duplication可关闭,原理是哈希,--dup_calc_accuracy可提高精确度,等级在1-6,越高越慢。
-D 或 --dedup可去重,设置这个后,--dont_eval_duplication无效,dup_calc_accuracy默认是3级。

16. 其他

-w:线程

有关【块】生信上游-3 fastp的更多相关文章

  1. ruby-on-rails - connect() 到 unix :/var/run/unicorn. 连接到上游时 sock 失败(111:连接被拒绝) - 2

    我遵循ruby​​onrails一个应用程序点击部署。数据库做得很好,即使我检查Rails控制台一切正常017/02/2615:34:17[error]18564#0:*31connect()tounix:/var/run/unicorn.sockfailed(111:Connectionrefused)whileconnectingtoupstream,client:121.52.156.57,server:_,request:"GET/HTTP/1.1",upstream:"http://unix:/var/run/unicorn.sock:/",host:"188.166.157

  2. windows - 如何从上游分支 merge ? - 2

    这是我的git设置(我们在公司网络中使用Git+AtlassianStash):upstream:masterorigin(myforkof'upstream'):masterbranch1(branchofmaster,withafewcommitsontopofit)clone(local;cloneof'origin'):masterbranch1(aheadof'origin:branch1'by1commit)我想做的事情:我想mergeupstream:master->clone:branch1。我知道此merge会发生冲突(因为我更改了我的branch1中的文件,其他人已

  3. javascript - FCM - 下游消息和上游消息之间的区别 - 2

    我一直在研究与来自FCMMessenger的Web推送通知相关的Material。当我遇到下游消息和上游消息时,显然HTTP服务器只允许下游消息,而XMPP服务器允许上游消息。我无法理解下游和上游消息之间的区别,并且FCM上没有很好地解释细节。我试图在网上搜索,但我没有运气。请帮助我,因为我是编码新手。 最佳答案 通俗地说,下游消息传递是指您从应用服务器向客户端应用发送推送通知。但是,对于FCM的情况,您可以在没有AppServer的情况下发送下游消息,或者通过使用FirebaseConsole发送通常的curl请求。.虽然上游消息

  4. php - 从上游读取响应头时如何修复上游发送的头太大? - 2

    我的日志中有这个错误:上游从上游读取响应头时发送了太大的头我试着添加proxy_buffer_size128k;proxy_buffers4256k;proxy_busy_buffers_size256k;到我的nginx.confhttpblock但没有工作我也试过添加fastcgi_buffer_size128k;fastcgi_buffers4256k;fastcgi_busy_buffers_size256k;到我的conf文件,但我找不到任何location~.php${所以我想知道如何克服这个错误?添加fastcgi_buffer_size128k;fastcgi_buff

  5. php - 502 Bad Gateway : nginx, php5-fpm,175/209 connect() 连接到上游时失败(111:连接被拒绝) - 2

    在装有nginx和php5-fpm的DebianJessie机器上运行shopware5,我们经常遇到502BadGateway。这主要发生在后端,当较长的操作像缩略图创建一样工作时,即使这是在单个ajax请求的小块中完成的。具有64GBRAM和16核的已用服务器完全处于休眠状态,因为它上面没有实际流量。我们目前将其用作暂存系统,除非我们已修复所有此类错误。错误日志:然后在nginx-error日志中可以找到以下几行:[error]20524#0:*175connect()failed(111:Connectionrefused)whileconnectingtoupstream,cl

  6. traefik网关的https上游配置 - 2

    traefikv2https上游upstream边缘EdgeGateway博客园---【前言】--- k4t国产k8s。qq群号:722528388为了给【国产k8s】选几款网关,我盯上了欧洲人开发的老牌网关traefik。因为没有中文网站和社区支持,自己研究很费劲。我把经验总结下来,给大家使用。 ---【正文】------【特色&优缺点】---*支持win中使用。这很好,很方便。*支持http,https,发送api。*支持etcd,redis,云存储等作为存储数据面。*支持watch目录。*动态配置文件名支持中文。扩展名支持yaml,toml。只需要把某个路由扩展名改成.txt,即代表删除

  7. java - GCM CCS 服务器实现未接收上游消息 - 2

    我已经为Android应用程序和Web服务器之间的双向消息实现了新的GCMCCS。下游消息(网络设备)完美运行。不幸的是,服务器上没有收到上游消息(设备网络)。它们似乎是在客户端发送的(请参阅下面的Android应用程序日志消息),但服务器没有收到任何内容。D/GCM﹕GcmServicestartIntent{act=com.google.android.gcm.intent.SENDflg=0x10pkg=com.google.android.gmscmp=com.google.android.gms/.gcm.GcmService(hasextras)}com.google.an

  8. java - JGit - 推送分支并添加上游(-u 选项) - 2

    在JGit中,我搜索了一种推送分支并添加上游引用(跟踪)的方法。它是选项-u或--set-upstream进入pushcommand.我在PushCommand类中没有看到允许执行此操作的方法。拜托,你能告诉我我该怎么做吗?PushCommandpushCommand=git.push().setRemote(remoteAlias).setRefSpecs(spec); 最佳答案 JGitPushCommand不提供此功能(目前),但您可以像--set-upstream那样修改存储库配置。如果您将远程别名传递给setRemote(

  9. android - 不同移动设备屏幕上游戏的纵横比 - 2

    我正在不同平台上制作游戏,我需要在根据不同设备屏幕尺寸重新缩放游戏时保持固定的纵横比...1)所以有许多不同的屏幕尺寸,因为有许多不同的android、ios和黑莓设备。是否有所有这些的建议纵横比,通用纵横比?2)否则,这些设备中的每一个是否具有不同的屏幕分辨率(即540X480、1024X720等)?这是否意味着我必须只定位固定数量的移动设备(即5个),并从数学上找到每个移动设备屏幕分辨率的宽高比?3)是否有更优化的方法来执行上述操作?非常感谢! 最佳答案 在处理游戏屏幕尺寸时,您通常希望有一个固定的屏幕比例(取决于游戏类型),而

  10. 我失业了?| ChatGPT生信分析初体验 - 2

    最近ChatGPT火的一塌糊涂,作为在生物医学和计算机科学领域夹缝求生的边缘摇摆人,也来蹭一波热度。ChatGPT是一个预训练的语言模型,由OpenAI训练。它可以用来生成自然语言文本,并且可以进行对话。它基于Transformer架构,可以捕捉到语言之间的复杂关系。它可以用来开发聊天机器人、语音助手、评论生成系统等。下面我就从我比较擅长的组学生信、数据可视化以及机器学习三个方面测试一下。生信分析问一下RNAseq分析流程流程很对就是没有代码,看看能不能给我们写个代码~完了,感觉要失业了。用了好多python脚本,看一下有没有代码。虽然没有代码,但是他给出了一个python进行RPKM标准化的

随机推荐