【2.3】Guppy识别碱基

目前,绝大部分的生物信息分析是从原始测序的fastq格式文件开始的。而nanopore可以保存为fast5格式,MinKNOW软件是可以直接进行basecalling输出fastq格式文件的。但是这个过程比较耗时,如果使用MiniION,是很难在笔记本电脑上进行实时的basecalling的。可以将测序完成的fast5文件传输到更大的计算设备上进行处理。

Basecalling

将原始测序文件转换为碱基序列的过程basecalling,也就是将base call出来,生动形象。一代测序是对峰图进行处理,二代测序是将激发出的荧光照片进行处理,nanopore是将变化的电流值转换为碱基。我们前面测序原理部分介绍过,由于每次是检测几个碱基共同的信号值,因此,碱基识别这个过程比较复杂。因此,官方碱基识别的工具经常更新,目前正在使用的是guppy工具,在它前面还有albacore,后面可能还有flappie,中间可能还有其他的。这就是因为这个领域还有很大的提高空间,也是研究的一大方向。还有很多第三方的工具,比如poretools,nanopolish等。不过这个工作还是推荐官方的工具吧,毕竟,机器是人家生产的,更了解一些。而且nanopore的碱基识别还与使用的芯片有关,因为DNA测序每秒过450bp左右碱基,而RNA测序每秒过70bp左右碱基,这在识别算法上是完全不同的。

guppy介绍

Guppy是Oxford Nanopore提供的碱基识别软件,是一款基于命令行的工具包,目前MinKNOW软件中内置了该工具,后面如果有更好的工具,guppy就将被打入冷宫,目前被拍在沙滩上的albacore就是guppy未来的宿命。guppy也可以单独安装,不过软件目前只能购买仪器的注册用户才能下载到(小气,应该像人家10X genomics学习下),当然,不买仪器一般也用不到。

guppy主要包括三大功能:

  1. 碱基识别. 这是它的主要功能,Guppy使用神经网络算法(RNN)将电信号数据解读为DNA或RNA的五个标准碱基,即腺嘌呤,鸟嘌呤,胞咳淀,胸腺咳淀和尿密淀。
  2. 拆分条码数据. 如果建库时添加了barcode条形码,那么在序列开端和尾端均有Oxford Nanopore Technologies提供的条形码序列,Guppy数据拆分功能基于识别出的碱基序列。这个原理类似于illumina basecalling中的index拆分。
  3. 比对. 将测序数据与参考序列进行比对,其实这个是调用minimap2做的,而且选项参数都是内置的,无法调整,所以,这个功能还是不要使用了,一个软件还是把自己该做的事情做好。
  4. 甲基化修饰位点检测. 如果某个碱基发生了甲基化修饰,那么在碱基识别过程中就会表现出一些异常信息,这些离群信息有可能就是潜在的甲基化修饰位点,guppy目前也可以进行碱基修饰的检测,不过这个需要学习集,不同物种需要单独的学习集,目前只试验了大肠杆菌,人等模式生物,如果有需要可以尝试进行检测。

一、安装

cd /data/software

## centos7的安装
wget https://mirror.oxfordnanoportal.com/software/analysis/ont-guppy-cpu-3.1.5-1.el7.x86_64.rpm
sudo yum install ont-guppy-cpu-3.1.5-1.el7.x86_64.rpm


## centos8的安装
wget -c https://mirror.oxfordnanoportal.com/software/analysis/ont-guppy_6.0.1_linux64.tar.gz
tar xf ont-guppy_6.0.1_linux64.tar.gz ; 
export PATH=/data/software/ont-guppy/bin:$PATH

guppy_basecaller --help

安装完成之后,会有bin,data,lib三个文件夹。

因为是通过apt-install自动安装的,所有一开始一直没有找到这个目录在哪儿,然后直到后来想了一个办法就是说先从/usr/bin该目录下直接查找guppy,找到之后再通过链接的地址索引到guppy的安装路径地址,这个方法还是蛮实用的

(base) [sam@c01 software]$ which guppy_aligner
/bin/guppy_aligner
(base) [sam@c01 software]$ ll /bin/guppy_aligner
lrwxrwxrwx 1 root root 32 Aug  8 15:08 /bin/guppy_aligner -> /opt/ont/guppy/bin/guppy_aligner
(base) [sam@c01 software]$ ll /opt/ont/guppy/
total 4
drwxr-xr-x 2 root root  242 Aug  8 15:07 bin
drwxr-xr-x 3 root root 4096 Aug  8 15:08 data
drwxr-xr-x 2 root root  107 Aug  8 15:08 lib

目录比较重要,我们这次的安装是通过yum安装的,其默认的安装数据存放位置在/opt/ont/guppy/dat这个目录,这个目录的路径地址比较重要,后面在做分析的时候还会用到

bin中就是应用程序,包括以下内容:

(base) [sam@c01 software]$ ll /opt/ont/guppy/bin/
total 50572
-rwxr-xr-x 1 root root  2110032 May 17  2019 guppy_aligner
-rwxr-xr-x 1 root root  2465360 May 17  2019 guppy_barcoder
-rwxr-xr-x 1 root root 16265176 May 17  2019 guppy_basecaller
-rwxr-xr-x 1 root root 15675352 May 17  2019 guppy_basecaller_1d2
-rwxr-xr-x 1 root root 15007704 May 17  2019 guppy_basecall_server
-rw-r--r-- 1 root root   196187 Sep 24  2018 Nanopore Community TCs 09 September 2016.pdf
-rw-r--r-- 1 root root    58144 Apr 12  2019 THIRD_PARTY_LICENSES

data目录也比较重要,里面包含了每一种芯片类型对应的配置文件,需要记住这个位置,软件运行时需要。其中的barcoding目录也比较重要,在使用guppy对数据进行barcode拆分时需要指定使用哪种barcode类型。

二、使用

2.1 利用guppy进行碱基识别

输入原始测序文件,fast5格式,放到单独一个目录下,然后选择正确的芯片类型配置文件,这个过程很重要,MinKNOW集成时软件会自动识别。输出fastq格式文件,也可以选择输出新的fast5文件,这个fast5里面包含了碱基部分,最后是一些统计文件。

guppy_basecaller -i /home/qianwj/project/ONT/testfast5 -c /opt/ont/guppy/data/dna_r9.4.1_450bps_fast.cfg -s /home/qianwj/project/ONT/output/ --num_callers 4

常用选项参数:

-i 输入文件夹
-s 输出文件夹
--config 配置文件
-r 递归处理
--flowcell 芯片类型(FLO-MIN106/FLO-MIN107)
--fast5_out 指定输入fast5格式文件路径
--num_callers 并行处理,每个num产生一个fastq文件
--cpu_threads_per_caller 2 cpu线程数
--compress_fastq 输出压缩格式
-q 每个文件最大条数,0代表单独一个文件,给一个很大的值,都放在一起。
--num_callers的数值跟生成的fastq文件数目一样

输出结果文件:

  1. FASTQ文件
  2. 测序总结文档(Sequencing_summary.txt),这个文件很重要,里面包含了每条序列的统计信息,质量值信息的,后面可以利用这个文件进行绘图。
  3. 遥测信息文件(Sequence telemetry.js),包含测序过程中的温度/电压/纳米孔状态等信息
  4. Guppy碱基识别软件日志(guppy_basecaller_1og-2019-._-。*.log)

最后的输出文件中包含fail和pass两个结果文件夹,我们最后只用pass序列,不用管fail和pass之间的比例。

然后对于basecalling过程中的时候需要给一个配置文件,这个配置文件主要是看芯片版本,对于我们的实验来讲,450bps是默认的,然后fast是快速模式,basecalling出来的Q值也是最低,hac是我们最常用的高准确率模式,然后sup是超高准确率模式

然后又重新用hac模式进行basecalling

guppy_basecaller -i ~/project/ONT/testfast5 -c /opt/ont/guppy/data/dna_r9.4.1_450bps_hac.cfg -s ~/project/ONT/output_hac/ --num_callers 4

最后输出的结果显示

call出来的pass的序列更多,所以建议一般进行basecalling的时候尽量选择hac模式,虽然花的时间也相对更长一些

一般默认的basecalling是使用的CPU模式

如果需要加快速度,需要指定为GPU模式,速度会快很多

guppy_basecaller -i /home/qianwj/project/ONT/lab_data -c /opt/ont/guppy/data/dna_r9.4.1_450bps_sup.cfg -s /home/qianwj/project/ONT/basecalling_gpu_sup/ -x "cuda:0" > guppy_4_gpu_sup.log

2.2 对于需要进行barcode拆分的数据来说

guppy_basecaller -i ~/project/raw_data/multi-sample211216/no_sample/20211216_1525_MC-110961_FAQ24388_26559c62/fast5 -c /opt/ont/guppy/data/dna_r9.4.1_450bps_sup.cfg -s ~/project/ONT/2021_12_16_multi_sample_basecalling_gpu_sup -r --num_callers 4 -x "cuda:0" --barcode_kits EXP-NBD104 > guppy_triming.log

但是不建议在basecalling的时候同时还进行着拆分

一般是先basecallling然后再进行拆分

guppy_basecaller -i ~/project/raw_data/multi-sample211216/no_sample/20211216_1525_MC-110961_FAQ24388_26559c62/fast5 -c /opt/ont/guppy/data/dna_r9.4.1_450bps_sup.cfg -s ~/project/ONT/multi_sample_basecalling_gpu_sup -r --num_callers 4 -x "cuda:0" > guppy_triming.log

然后再对basecalling出来的fastq文件进行

guppy_barcoder -i ~/project/ONT/multi_sample_basecalling_gpu_sup/pass/ -o ~/project/ONT/multi_sample_basecalling_gpu_sup/barcode/ --barcode_kits EXP-NBD104

2.3 利用guppy检测碱基修饰位点

这里面最终的过程就是替换配置文件,在目录下找到dna_r9.4.1_450bps_modbases_dam-dcm-cpg_hac.cfg这个文件,加到–config后面,这样就可以边进行碱基识别,边检测甲基化位点了。nanopore测序无需对DNA进行任何处理,例如使用重亚硫酸盐,重亚硫酸盐使DNA中未发生甲基化的胞嘧啶脱氨基转变成尿嘧啶,而甲基化的胞嘧啶保持不变。因为使用电信号,可以直接保留这些信息,后面技术成熟了,那么就太方便了,对于肿瘤的液体活检可能带来革命性的改变。

guppy_basecaller -config dna_r9.4.1_450bps_modbases_dam-dcm-cpg _hac.cfgl-fast5 ou -i fast5_files/ -s guppy_mod -r  --num_callers 1 --cpu_threads_per_caller 8

输出文件:

  1. 普通的FASTQ文件,和普通模式产生的FASTQ相同。FASTQ也会被内置在FAST5文件中。
  2. FAST5输出文件中所含附件表格提供了对应FASTQ中该碱基发生甲基化修饰的偶然性。信息可由Oxford Nanopore Technologies提供的工具进行提取和分析。

三、我的案例

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn