分析策略以下三个图来自微信公众号[希研未来 ]。
图片
图片
图片
软件安装常用的这些软件用Conda
或者是mamba
都很好处理,但是metaWRAP
这个软件是真的难安装啊。踩坑多次终于安装上了:
1 mamba create -y --name metawrap-env --channel ursky metawrap-mg=1.3.2
SH
数据配置 CheckM1 2 3 mkcd ~/database/ checkm axel -n 50 ftp:// download.nmdc.cn/tools/m eta/checkm/ checkm_data_2015_01_16.tar.gz tar -xvf checkm_data_2015_01_16.tar.gz
AWK
可以通过运行checkm data setRoot
设置数据库路径。
kraken21 2 3 mkcd ~/database/kraken2 axel -n 50 ftp://download.nmdc.cn/tools/meta/kraken2/k2_pluspf_20230314.tar.gz tar -xvf k2_pluspf_20230314.tar.gz
SH
NCAI-nt1 2 3 mkcd ~/database/ ncbi.nt ~/.aspera/ connect/bin/ ascp -i ~/mambaforge/ envs/tools4bioinf/ etc/asperaweb_id_dsa.openssh --overwrite=diff -QTr -l6000m \ anonftp@ftp.ncbi.nlm.nih.gov:blast/db/ v4/nt_v4.{00..85}.tar.gz ./
AWK
NCBI-taxonomy1 2 3 mkcd ~/database/ncbi.taxonomy axel -n 50 ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz tar -xvf taxdump.tar.gz
SH
宿主基因组通常第一步是去除宿主基因组,需要构建索引,(其他宿主类似),如下:
1 2 3 4 5 6 7 mkcd ~/database/human.genome axel -n 50 http://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz gunzip hg38.fa.gzcat *fa > hg38.farm chr*.fa bmtool -d hg38.fa -o hg38.bitmask srprism mkindex -i hg38.fa -o hg38.srprism -M 100000
SH
为了识别不同的宿主,该软件参数-x
可以指定宿主,如-x rice
,默认的宿主是human
,文件前缀是hg38
.
修改配置文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 vi ~/mambaforge/envs/metawrap-env/bin/config-metawrap mw_path=$(which metawrap) bin_path=${mw_path%/*} SOFT=${bin_path} /metawrap-scripts PIPES=${bin_path} /metawrap-modules KRAKEN2_DB=~/database/kraken2.plus.plantandfungi BMTAGGER_DB=~/database/human.genome BLASTDB=~/database/ncbi.nt TAXDUMP=~/database/ncbi.taxonomy
SH
数据质控如果宿主不是人类,可以使用参数--skip-bmtagger
跳过:
1 metawrap read_qc --skip-bmtagger -1 data/C3_1.R1.raw.fastq -2 data/C3_1.R2.raw.fastq -t 60 -o readqc/C3_1
SH
有多个文件时,批量运行:
1 2 3 4 5 6 7 for F in RAW_READS/*_1.fastq; do R=${F%_*} _2.fastq BASE=${F##*/} SAMPLE=${BASE%_*} metawrap read_qc -1 $F -2 $R -t 1 -o READ_QC/$SAMPLE &done
SH
测试两个文件差不多35G,60线程跑了45分钟左右。
download
宏基因组组装可以单个样品分别组装,也可以将群落所有文件一起组装。如果要全部一起组装,就先把文件合并:
1 2 cat CLEAN_READS/ERR*_1.fastq > CLEAN_READS/ALL_READS_1.fastqcat CLEAN_READS/ERR*_2.fastq > CLEAN_READS/ALL_READS_2.fastq
SH
开始组装:
1 metawrap assembly -1 readqc/C3_1/C3_1.R1.raw_val_1.fq -2 readqc/C3_1/C3_1.R2.raw_val_2.fq -m 100 -t 60 --megahit -o assembly
SH
有两种组装方式可以选择:
megahit
:默认的算法,速度更快。
metaspades
:速度更慢且需要更多的内存,但是结果更准确。
组装完成的结果文件是final_assembly.fasta
,对应的报告文件是assembly_report.html
.
image-20230615172713903
测试两个文件差不多35G,60线程+100G内存跑了3小时20分钟左右。组装大小是108M,一共有67463个contigs.
分类和丰度使用kraken2
的,同时对原始的reads
和组装后的contigs
进行分析,但是目的不一样:
基于reads
:是看样品中哪些群落被检测到了;
基于contigs
:目的是看那些物种比其他的组装得更好,通常不适用contigs
来推断整个群落组成结构。
1 metawrap kraken2 --no-preload -t 60 -s 1000000 -o kraken readqc/C3_1/C3_1.R* assembly/final_assembly.fasta
SH
结果文件:
.kraken
是估计的分类特征表;
.krona
是KronaTools
输出的描述统计信息;
kronagram.html
包含了所有的分类信息。
分箱Bin使用三种算法对组装的结果进行分箱。这一步对文件的后缀貌似非常严格,好像必须是fastq
. 耗时1小时10分钟。
1 metawrap binning -o init.binning -t 60 -a assembly/final_assembly.fasta --metabat2 --maxbin2 --concoct readqc/C3_1/C3_1.R1.raw_val_*fastq
SH
合并分箱结果这一步需要使用CheckM
这个数据库,见数据配置
环节。
1 metawrap bin_refinement -o bin.refinement -t 60 -A init.binning/metabat2_bins -B init.binning/maxbin2_bins -C init.binning/concoct_bins -c 50 -x 10
SH
运行时间差不多3小时。
image-20230615205927716
分箱可视化运行:
1 metawrap blobology -a assembly/final_assembly.fasta -t 60 -o blobology --bins bin.refinement/metawrap_50_10_bins readqc/C3_1/C3_1.R1.raw_val_*fastq
SH
遇到报错:
1 BLAST Database error: Error: Not a valid version 4 database.
SH
解决方法:
1 ln -s /home/xxx/mambaforge/envs/blast+/bin/blastn /home/xxx/mambaforge/envs/metawrap-env/bin/blastn
SH
运行时间差不多10小时。
image-20230616083215326
基因组草图丰度1 metawrap quant_bins -b bin.refinement/metawrap_50_10_bins -o quant.bins -a assembly/final_assembly.fasta readqc/C3_1/C3_1.R1.raw_val_*fastq
SH
耗时1小时。
结果文件存放在bin_abundance_table.tab
这个文件中。
image-20230616110048572
重新组装bins相当于对最佳的bin
再次进行重新组装,只有让bins
质量变得更好的reads
才会被添加到bins
中。这一步是用所有的reads
进行分析的。
1 metawrap reassemble_bins -o bin.reassembly -1 readqc/C3_1/C3_1.R1.raw_val_1.fastq -2 readqc/C3_1/C3_1.R1.raw_val_2.fastq -t 60 -m 100 -c 50 -x 10 -b bin.refinement/metawrap_50_10_bins
SH
耗时30分钟。
reassembly_results
分箱物种丰度耗时1小时13分钟。
1 metawrap classify_bins -b bin.reassembly/reassembled_bins -o bins.classification -t 60
SH
image-20230616134819875
分箱功能注释1 metawrap annotate_bins -o bins.anno -t 60 -b bin.reassembly/reassembled_bins
SH
遇到报错:
1 Please rename your contigs or use --centre XXX to generate clean contig names.
SH
原因是bin
中的序列名称超过20个字符了,因此需要修改序列名称。解决方法(见Prokka官网 ):
image-20230616135359463
写了个python
代码解决这个问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import sys fasta_file = sys.argv[1 ] out_file = sys.argv[2 ] index_file = sys.argv[3 ] i = 0 with open (fasta_file, "r" ) as f, open (out_file, "w" ) as out, open (index_file, "w" ) as index: for line in f: if line.startswith(">" ): i += 1 out.write(">seq{0}\n" .format (i)) old_id = line.replace(">" ,"" ) new_id = ">seq" + str (i) index.write(str (new_id) + "\t" + old_id) else : out.write(line) print ("Done." )
PYTHON
1 python3 ~/scripts/rename.fasta.id.py reassembled_bins/bin.1.orig.fa renamed.bins/bin1.fa bin1.id.txt
SHELL
重新运行注释代码:
1 metawrap annotate_bins -o bins.anno -t 60 -b bin.reassembly/renamed.bins
SH
运行很快,基本上就是一分钟左右。
image-20230616143508827
image-20230616143634334
既然拿到了gff
文件,那么就可以计算不同基因在不同样品的中丰度了。
image-20230616143807921
既然拿到了蛋白序列,那就可以用eggNOG-mapper
进行功能注释了(参考博客 ):
1 python3 ~/software/eggNOgmapper/emapper.py -i bin_translated_genes/bin1.faa --output eggnog -m diamond --cpu 60
PYTHON
image-20230616150504533
基本上需要的信息都有了。
实战 数据质控image-20230616152806322
1 for F in 0.data/*_1.fastq; do R=${F%_*} _2.fastq; BASE=${F##*/} ; SAMPLE=${BASE%_*} ; metawrap read_qc --skip-bmtagger -1 $F -2 $R -t 70 -o 1.read.qc/$SAMPLE & done
SH
将质控后的数据移动到新的文件中:
1 2 3 4 5 6 mkdir -p 2.clean.reads/allfor i in 1.read.qc/*; do b=${i#*/} mv ${i} /final_pure_reads_1.fastq 2.clean.reads/${b} _1.fastqmv ${i} /final_pure_reads_2.fastq 2.clean.reads/${b} _2.fastqdone
SH
宏基因组组装将F
和R
分别合并后再进行组装。
1 2 cat 2.clean.reads/*_1.fastq > 2.clean.reads/all/all_reads_1.fastqcat 2.clean.reads/*_2.fastq > 2.clean.reads/all/all_reads_2.fastq
SH
1 nohup metawrap assembly -1 2.clean.reads/all/all_reads_1.fastq -2 2.clean.reads/all/all_reads_2.fastq -m 100 -t 60 --megahit -o 3.assembly &
SH
kraken2注释1 nohup metawrap kraken2 -o 4.kraken2 -s 1000000 2.clean.reads/*.fastq 3.assembly/final_assembly.fasta &
SH
分箱1 metawrap binning -o 5.init.binning -t 60 -a 3.assembly/final_assembly.fasta --metabat2 --maxbin2 --concoct 2.clean.reads/*.fastq
SH
合并分箱结果1 nohup metawrap bin_refinement -o 6.bin.refinement -t 60 -A 5.init.binning/metabat2_bins -B 5.init.binning/maxbin2_bins -C 5.init.binning/concoct_bins -c 50 -x 10 &
SH
分箱结果可视化1 nohup metawrap blobology -a 3.assembly/final_assembly.fasta -t 60 -o 7.blobology --bins 6.bin.refinement/metawrap_50_10_bins 2.clean.reads/*fastq &
SH
分箱丰度1 nohup metawrap quant_bins -b 6.bin.refinement/metawrap_50_10_bins -o 8.quant.bins -a 3.assembly/final_assembly.fasta 2.clean.reads/*fastq &
SH
再次分箱1 nohup metawrap reassemble_bins -o 9.bin.reassembly -1 2.clean.reads/all/all_reads_1.fastq -2 2.clean.reads/all/all_reads_2.fastq -t 60 -m 100 -c 50 -x 10 -b 6.bin.refinement/metawrap_50_10_bins &
SH
分箱物种丰度1 metawrap classify_bins -b 9.bin.reassembly/reassembled_bins -o 10.bins.classification -t 60
SH
分箱功能注释1 2 3 4 5 mkdir 9.bin.reassembly/renamed.binsmkdir 9.bin.reassembly/renamed.bins.idfor i in 9.bin.reassembly/reassembled_bins/*; do python3 ~/scripts/rename.fasta.id.py ${i} 9.bin.reassembly/renamed.bins/${i##*/} 9.bin.reassembly/renamed.bins.id/${i##*/} .id.txt; done nohup metawrap annotate_bins -o 11.bins.anno -t 60 -b 9.bin.reassembly/renamed.bins &
SH
eggNOG-mapper注释1 2 mkdir 12.eggNOG-mapperfor i in 11.bins.anno/bin_translated_genes/*; do python3 ~/software/eggNOgmapper/emapper.py -m diamond --cpu 60 -i 11.bins.anno/bin_translated_genes/${i##*/} --output 12.eggNOG-mapper/${i##*/} .eggnogmapper.txt; done
SH
所有脚本1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 for F in 0.data/*_1.fastq; do R=${F%_*} _2.fastq; BASE=${F##*/} ; SAMPLE=${BASE%_*} ; metawrap read_qc --skip-bmtagger -1 $F -2 $R -t 70 -o 1.read.qc/$SAMPLE & done mkdir -p 2.clean.reads/allfor i in 1.read.qc/*; do b=${i#*/} mv ${i} /final_pure_reads_1.fastq 2.clean.reads/${b} _1.fastqmv ${i} /final_pure_reads_2.fastq 2.clean.reads/${b} _2.fastqdone cat 2.clean.reads/*_1.fastq > 2.clean.reads/all/all_reads_1.fastqcat 2.clean.reads/*_2.fastq > 2.clean.reads/all/all_reads_2.fastq metawrap assembly -1 2.clean.reads/all/all_reads_1.fastq -2 2.clean.reads/all/all_reads_2.fastq -m 100 -t 60 --megahit -o 3.assembly metawrap kraken2 -o 4.kraken2 -s 1000000 2.clean.reads/*.fastq 3.assembly/final_assembly.fasta & metawrap binning -o 5.init.binning -t 60 -a 3.assembly/final_assembly.fasta --metabat2 --maxbin2 --concoct 2.clean.reads/*.fastq metawrap bin_refinement -o 6.bin.refinement -t 60 -A 5.init.binning/metabat2_bins -B 5.init.binning/maxbin2_bins -C 5.init.binning/concoct_bins -c 50 -x 10 metawrap blobology -a 3.assembly/final_assembly.fasta -t 60 -o 7.blobology --bins 6.bin.refinement/metawrap_50_10_bins 2.clean.reads/*fastq metawrap quant_bins -b 6.bin.refinement/metawrap_50_10_bins -o 8.quant.bins -a 3.assembly/final_assembly.fasta 2.clean.reads/*fastq metawrap reassemble_bins -o 9.bin.reassembly -1 2.clean.reads/all/all_reads_1.fastq -2 2.clean.reads/all/all_reads_2.fastq -t 60 -m 100 -c 50 -x 10 -b 6.bin.refinement/metawrap_50_10_bins metawrap classify_bins -b 9.bin.reassembly/reassembled_bins -o 10.bins.classification -t 60 mkdir 9.bin.reassembly/renamed.binsmkdir 9.bin.reassembly/renamed.bins.idfor i in 9.bin.reassembly/reassembled_bins/*; do python3 ~/scripts/rename.fasta.id.py ${i} 9.bin.reassembly/renamed.bins/${i##*/} 9.bin.reassembly/renamed.bins.id/${i##*/} .id.txt; done metawrap annotate_bins -o 11.bins.anno -t 60 -b 9.bin.reassembly/renamed.binsmkdir 12.eggNOG-mapperfor i in 11.bins.anno/bin_translated_genes/*; do python3 ~/software/eggNOgmapper/emapper.py -m diamond --cpu 60 -i 11.bins.anno/bin_translated_genes/${i##*/} --output 12.eggNOG-mapper/${i##*/} .eggnogmapper.txt; done
SH