入门Hifiasm?这一篇就够了

Hifiasm 使用教程

介绍

Hifiasm 是一个快速的单倍型解析 de novo 组装软件,最初设计用于 PacBio HiFi 读取。其最新版本可以通过利用超长的 Oxford Nanopore 读取支持端粒到端粒的组装。Hifiasm 可以生成单样本端粒到端粒的组装,结合了 HiFi、超长和 Hi-C 读取,可以说是最好的组装软件之一。对于 trio-binning 组装来说,它是最好的单倍型解析组装软件之一,适用于父本短读取。对于人类基因组来说,hifiasm 可以在一天内完成端粒到端粒的组装。

安装

# 安装 hifiasm (需要有g++和zlib)
git clone https://github.com/chhylp123/hifiasm
cd hifiasm && make

# 用conda安装
conda install -c bioconda hifiasm

# 直接使用集群module
module load hifiasm/0.19.9

# 用测试数据运行 (用-f0来处理较小的数据集)
wget https://github.com/chhylp123/hifiasm/releases/download/v0.7/chr11-2M.fa.gz
./hifiasm -o test -t4 -f0 chr11-2M.fa.gz 2> test.log
awk '/^S/{print ">"$2;print $3}' test.bp.p_ctg.gfa > test.p_ctg.fa  # 在FASTA获得主要的contigs



软件参数

$ hifiasm
Usage: hifiasm [options] <in_1.fq> <in_2.fq> <...>
Options:
  Input/Output:
    -o STR       prefix of output files [hifiasm.asm]
    -i           ignore saved read correction and overlaps
    -t INT       number of threads [1]
    -z INT       length of adapters that should be removed [0]
    --version    show version number
  Overlap/Error correction:
    -k INT       k-mer length (must be <64) [51]
    -w INT       minimizer window size [51]
    -f INT       number of bits for bloom filter; 0 to disable [37]
    -D FLOAT     drop k-mers occurring >FLOAT*coverage times [5.0]
    -N INT       consider up to max(-D*coverage,-N) overlaps for each oriented read [100]
    -r INT       round of correction [3]
  Assembly:
    -a INT       round of assembly cleaning [4]
    -m INT       pop bubbles of <INT in size in contig graphs [10000000]
    -p INT       pop bubbles of <INT in size in unitig graphs [0]
    -n INT       remove tip unitigs composed of <=INT reads [3]
    -x FLOAT     max overlap drop ratio [0.8]
    -y FLOAT     min overlap drop ratio [0.2]
    -u           disable post join contigs step which may improve N50
    --lowQ       INT
                 output contig regions with >=INT% inconsistency in BED format; 0 to disable [70]
    --b-cov      INT
                 break contigs at positions with <INT-fold coverage; work with '--m-rate'; 0 to disable [0]
    --h-cov      INT
                 break contigs at positions with >INT-fold coverage; work with '--m-rate'; -1 to disable [-1]
    --m-rate     FLOAT
                 break contigs at positions with <=FLOAT*coverage exact overlaps;
                 only work with '--b-cov' or '--h-cov'[0.75]
    --primary    output a primary assembly and an alternate assembly
  Trio-partition:
    -1 FILE      hap1/paternal k-mer dump generated by "yak count" []
    -2 FILE      hap2/maternal k-mer dump generated by "yak count" []
    -c INT       lower bound of the binned k-mer's frequency [2]
    -d INT       upper bound of the binned k-mer's frequency [5]
    -3 FILE      list of hap1/paternal read names []
    -4 FILE      list of hap2/maternal read names []
    --t-occ      INT
                 force remove unitigs with >INT unexpected haplotype-specific reads;
                 ignore graph topology; [60]
  Purge-dups:
    -l INT       purge level. 0: no purging; 1: light; 2/3: aggressive [0 for trio; 3 for unzip]
    -s FLOAT     similarity threshold for duplicate haplotigs [0.75 for -l1/-l2, 0.55 for -l3]
    -O INT       min number of overlapped reads for duplicate haplotigs [1]
    --purge-cov  INT
                 coverage upper bound of Purge-dups [auto]
    --n-hap      INT
                 number of haplotypes [2]
  Hi-C-partition:
    --h1 FILEs   file names of Hi-C R1  [r1_1.fq,r1_2.fq,...]
    --h2 FILEs   file names of Hi-C R2  [r2_1.fq,r2_2.fq,...]
    --seed INT   RNG seed [11]
    --n-weight   INT
                 rounds of reweighting Hi-C links [3]
    --n-perturb  INT
                 rounds of perturbation [10000]
    --f-perturb  FLOAT
                 fraction to flip for perturbation [0.1]

格式转换

# bam --> fasta
samtools view *.bam | awk '{print ">"$1"\n"$10}' > fasta

#补充一下其他格式的转换
## sam ---> fasta
cat *.sam | awk '{print ">"$1"\n"$10}' > *.fasta
## fasta ---> sam
bowtie2 -1 *_1.fa -2 *_2.fa -p 16 -x prefix -S *.sam
## sam --> bam
# -@:线程 -b:输出格式为BAM -S:自动检测输入格式 -o:输出文件
samtools view -@ 16 -b -S final.sam -o final.bam
## bam --> sam
samtools view *.bam -O SAM > *.sam

用途

# 组装近交/同源基因组(-l0 禁用重复清除功能)
hifiasm -o CHM13.asm -t 32 -l0 CHM13-HiFi.fa.gz 2> CHM13.asm.log

# 利用内置的重复清除功能组装杂合基因组
hifiasm -o HG002.asm -t 32 HG002-file1.fq.gz HG002-file2.fq.gz

# 用两个FASTQ文件中的成对端短reads进行 Hi-C 相位分析
hifiasm -o HG002.asm --h1 read1.fq.gz --h2 read2.fq.gz HG002-HiFi.fq.gz

# 双亲二代测序组件 (需要文件 https://github.com/lh3/yak)
yak count -b37 -t16 -o pat.yak <(cat pat_1.fq.gz pat_2.fq.gz) <(cat pat_1.fq.gz pat_2.fq.gz)
yak count -b37 -t16 -o mat.yak <(cat mat_1.fq.gz mat_2.fq.gz) <(cat mat_1.fq.gz mat_2.fq.gz)
hifiasm -o HG002.asm -t 32 -1 pat.yak -2 mat.yak HG002-HiFi.fa.gz

# 使用 HiFi、超长(ont)和 Hi-C reads进行端粒到端粒的单倍体组装
hifiasm -o HG002.asm --h1 read1.fq.gz --h2 read2.fq.gz --ul ul.fq.gz HG002-HiFi.fq.gz

注意事项

  1. no need polish
  2. 无需合并多个输入文件
  3. 绝大多数二倍体基因组,只需要组装2n中的n,所以参数一般给 -l 2 -n 4

只有Hifi数据

  • 无需额外的数据类型组装 HiFi reads
hifiasm -o NA12878.asm -t 32 NA12878.fq.gz#其中NA12878.fq.gz提供输入reads,-t设置使用中的CPU数,-o输出文件的前缀名

# no need haplotype
hifiasm --primary -o NA12878.asm -t 32 NA12878.fq.gz

# -l:0:没有对组装去冗余,组装结果包括全部组装出来的contig,可能包含多个单倍体基因组;2/3:会对组装出来的基因组进行去冗余,对于二倍体,得到的结果基本上是全基因组一半的大小
# -n: 一般给3或者4,默认3,表示组装的contig中,unitigs支持大于3或4才保留,该参数会将支持度比较低的contig去掉

使用ONT数据

  • Hifiasm 可以集成超长 ONT 读取来生成端粒到端粒的组装:
# only ONT
hifiasm -o NA12878.asm -t32 --ul ul.fq.gz HiFi-reads.fq.gz

# + Hi-C
hifiasm -o NA12878.asm -t32 --ul ul.fq.gz --h1 read1.fq.gz --h2 read2.fq.gz HiFi-reads.fq.gz

# + parental
hifiasm -o NA12878.asm -t32 --ul ul.fq.gz -1 pat.yak -2 mat.yak HiFi-reads.fq.gz

使用trio binning组件

  • 当有父本的短读取可用时,hifiasm 还可以通过 trio binning 生成一对单倍型解析的组装。要进行这样的组装,您首先需要使用 yak 对 k-mer 进行计数,然后再进行组装。
yak count -k31 -b37 -t16 -o pat.yak paternal.fq.gz
yak count -k31 -b37 -t16 -o mat.yak maternal.fq.gz

hifiasm -o NA12878.asm -t 32 -1 pat.yak -2 mat.yak NA12878.fq.gz

也可以通过merqury来确定 k-mer的大小

使用HI-C数据

  • 利用成对的端到端 Hi-C reads 生成一对单倍型解析的组装。
hifiasm -o NA12878.asm -t 32 --h1 read1.fq.gz --h2 read2.fq.gz HiFi-reads.fq.gz
# --h1 --h2 HiC 数据
# -t 线程数
# -o 输出文件前缀

结果

hifiasm 输出结果有哪些?

一般来说,用hifiasm组装基因组,纯合材料用- l0,非纯系材料,参数-l3,分出两个单倍型,是默认参数,所以默认可以不设置。
两个模式大体输出结果如下图:

image.png

可以看出来,区别在于前者多输出了一个a_ctg而后者则多输出了hap1.p_ctghap2.p_ctg
逻辑上,看过文献应该比较容易理解

image.png

理解共同的输出文件

r_utg

r 代表 raw,也就是最初组装出来的原始结果。其中 utg 表示 unitig,或理解为初步组装且没有拆分气泡或者冲突的结果。

image.png

p_utg

p 代表 primary,基本上是在 raw 的基础上去除掉一些覆盖率低的连接(或叫气泡)。看起来简洁了不少,其实是少了 60000 条边(当然图太大,看不太出区别....不过确实是小了四分之一)

image.png

或许高杂合材料里面,覆盖率低的区域,也可能是另一个单倍型区域?用于后续HiC挂载,可能也要考虑进去。在 p_utg 和 p_ctg 上的选择,或需要考量

p_ctg

p 代表 primary,ctg 代表了拆分结果。

image.png

逻辑上 p_ctg 包含了全部单倍型结果(含 hap1 和 hap2)。事实上,这个文件在l0l3的表现不相同,可以从文件大小看出区别。个人感觉,l0下 p_ctg 约等于 canu 软件的组装结果;而l3模式下,p_ctg 比较接近于主要的一套单倍型结果,大体是hap1hap2中表现最好的每个contig的hap的组合。

a_ctg

a 代表 alternative,大体是拆分出来 p_ctg 之后剩下的就放在 alternative。

hap1/hap2 ctg

亦即两个单倍型的拆分结果。

假如有 HiC 数据

结果类似。phased的效果会好很多。

对于三重组装,hifiasm会生成以下文件:

prefix.r_utg.gfa(Haplotype-resolved raw unitig graph in GFA format):保存了所有的单倍型信息。
prefix.hap1.p_ctg.gfa(Phased paternal/haplotype1 contig graph):保留了阶段性父系/单倍型1组装。
prefix.hap2.p_ctg.gfa(Phased maternal/haplotype2 contig graph):保留了阶段性母系/单倍型2组装。

  • 获取组装结果
# get fasta
awk '/^S/{print ">"$2;print $3}' test.p_ctg.gfa > test.p_ctg.fa

参考

1.Cheng, H., Concepcion, G.T., Feng, X., Zhang, H., Li H. (2021) Haplotype-resolved de novo assembly using phased assembly graphs with hifiasm. Nat Methods, 18:170-175. https://doi.org/10.1038/s41592-020-01056-5

2.Cheng, H., Jarvis, E.D., Fedrigo, O., Koepfli, K.P., Urban, L., Gemmell, N.J., Li, H. (2022) Haplotype-resolved assembly of diploid genomes without parental data. Nature Biotechnology, 40:1332–1335. https://doi.org/10.1038/s41587-022-01261-x

3.使用hifiasm组装hifi基因组的方法介绍 作者:生信技术 http://t.csdnimg.cn/UBXEm

4.基因组装 | hifiasm 输出结果文件细究 作者:生信石头基因组装 | hifiasm 输出结果文件细究 - 简书 (jianshu.com)

5.单倍体组装工具Hifiasm简介及基本运行命令(一) 作者:吕强强学生信单倍体组装工具Hifiasm简介及基本运行命令(一) - 简书 (jianshu.com)

6.基因组组装:Hifiasm 使用教程 作者:科学冷冻工厂 基因组组装:Hifiasm 使用教程-腾讯云开发者社区-腾讯云 (tencent.com)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容