利用3D-DNA流程组装基因组

article/2025/9/11 20:59:32

利用3D-DNA流程组装基因组

使用二代数据或三代数据得到contig后,下一步就是将contig提升到染色体水平。有很多策略可以做到这一点,比如说遗传图谱,BioNano(看运气), HiC, 参考近源物种。

如果利用HiC进行准染色体水平,那么目前常见的组装软件有下面几个

  • HiRise: 2015年后的GitHub就不再更新
  • LACHESIS: 发表在NBT,2017年后不再更新
  • SALSA: 发表在BMC genomics, 仍在更新中
  • 3D-DNA: 发表在science,仍在更新中
  • ALLHiC: 发表在Nature Plants, 用于解决植物多倍体组装问题

对于二倍体物种而言,目前3D-DNA应该是组装效果最好的一个软件。

工作流程

使用3D-DNA做基因组组装的整体流程如下图,分别为组装,Juicer分析Hi-C数据,3D-DNA进行scaffolding,使用JBAT对组装结果进行手工纠正,最终得到准染色体水平的基因组。

总体流程

基因组组装可以是二代测序方法,也可以是三代测序组装方法,总之会得到contig。

Juicer的工作流程见下图,输入原始的fastq文件,处理得到中间文件.hic, 之后对.hic文件用于下游分析,包括

  • Arrowhead: 寻找存在关联的区域
  • HiCCUPS: 分析局部富集peaks
  • MotifFinder: 用于锚定peaks
  • Persons: 计算观测/期望的皮尔森相关系数矩阵
  • Eigenvector: 确定分隔

juicer工作流程

之后Juicer的输出结果给3D-DNA,分析流程见下图。3D-DNA先根据Hi-C数据分析contig中的misjoin,对其进行纠错。之后通过四步,分别是Polish, Split, Seal和Merge, 得到最终的基因组序列

3d-dna流程

软件安装

在安装之前,确保服务器上有了下面这些依赖软件工具

  • LastZ(仅在杂合基因组的二倍体模式下使用)
  • Java >= 1.7
  • GNU Awk >= 4.02
  • GNU coreutils sort > 8.11
  • Python >= 2.7
  • scipy, numpy, matplotlib
  • GNU Parallel >=20150322 (不必要,但是强力推荐)
  • bwa

我们需要安装两个软件,一个是3D-DNA,另一个是juicer。

CPU版本的juicer安装

mkdir -p ~/opt/biosoft/
cd ~/opt/biosoft
git clone https://github.com/theaidenlab/juicer.git
cd juicer
ln -s CPU scripts
cd scripts/common
wget https://hicfiles.tc4ga.com/public/juicer/juicer_tools.1.9.9_jcuda.0.8.jar
ln -s juicer_tools.1.9.9_jcuda.0.8.jar  juicer_tools.jar

然后用~/opt/biosoft/juicer/scripts/juicer.sh -h检查是否有帮助信息输出

3D-DNA安装也很容易,只需要从Github上将内容克隆到本地即可

cd ~/opt/biosoft
git clone https://github.com/theaidenlab/3d-dna.git

sh ~/opt/biosoft/3d-dna/run-asm-pipeline.sh -h查看是否有帮助文档输出。

参数详解

以CPU版本的为例,juicer.sh的参数如下

Usage: juicer.sh [-g genomeID] [-d topDir] [-s site] [-a about] [-R end][-S stage] [-p chrom.sizes path] [-y restriction site file][-z reference genome file] [-D Juicer scripts directory][-b ligation] [-t threads] [-r] [-h] [-f] [-j]

参数说明

  • -g: 定义一个物种名
  • -s: 酶切类型, HindIII(AAGCTAGCTT), MboI(GATCGATC) , DpnII(GATCGATC), NcoI(CCATGCATGG)
  • -z : 参考基因组文件
  • -y: 限制性酶切位点可能出现位置文件
  • -p: 染色体大小文件
  • -C: 将原来的文件进行拆分,必须是4的倍数,默认是90000000, 即22.5M reads
  • -S: 和任务重运行有关,从中途的某一步开始,"merge", "dedup", "final", "postproc" 或 "early"
  • -D: juicer的目录,我们安装在~/opt/biosoft/,所以设置为~/opt/biosoft/juicer
  • -a: 实验的描述说明,可以不用设置
  • -t: 线程数

juicer.sh还有AWS, LSF, PBS, SLURM版本,由于我的服务器是单主机,无法进行测试讲解。

如果你的基因组不是复杂基因组,比如说高杂合,高重复序列,或者Hi-C数据测太少,那么3d-dna的流程更加简单, run-asm-pipeline.sh -h只有四个参数需要改

  • -i|--input: 过滤长度低于给定阈值的contig/scaffold, 默认是15000
  • -r|--round: 基因组中misjoin的纠错轮数,默认是2,当基因组比较准确时,设置为0,然后在JABT中调整会更好
  • -m|--mode: 是否调用merge模块,当且仅当在杂合度比较高的情况下使用,也就是组装的单倍型基因组明显偏大
  • -s|--stage: 从polish, split, seal, merge 或finalize 的某一个阶段开始

但是,一旦基因组复杂起来,那么需要调整的参数就非常多了, run-asm-pipeline.sh --help会输出更多的信息,你需要根据当前结果去确定每个阶段的参数应该如何调整。

最终的输出文件最关键的是下面三类:

  • .fasta: 以FINAL标记的是最终结果
  • .hic: 各个阶段都会有输出结果,用于在JABT中展示
  • .assembly: 各个阶段都会有输出,一共两列,存放contig的组装顺序

分析过程

假如你现在目录下有2个文件夹,reference

  • reference: 存放一个genome.fa, 为组装的contigs
  • fastq: 存放HiC二代双端测序结果,read_R1_fastq.gz, read_R2_fastq.gz

注意,genome.fa中的序列一定得是80个字符分隔的情况,也就是多行FASTA。

增加一个新的基因组

第一步: 为基因组建立BWA索引

cd reference
bwa index genome.fa

第二步: 根据基因组构建创建可能的酶切位点文件

python ~/opt/biosoft/juicer/misc/generate_site_positions.py DpnII genome genome.fa

第三步: 运行如下命令, 获取每条contig的长度

awk 'BEGIN{OFS="\t"}{print $1, $NF}' genome_DpnII.txt > genome.chrom.size
# 返回上级目录
cd ..

运行juicer

保证当前目录下有fastq和reference文件夹,然后运行如下命令,一定要设置-z,-p,-y这三个参数

~/opt/biosoft/juicer/scripts/juicer.sh \-g genome \-s MboI \-z reference/genome.fa \-y reference/genome_DpnII.txt \-p reference/genome.chrom.size \-D ~/opt/biosoft/juicer \-t 40 &> juicer.log &

你可能会好奇为啥这里出现两个酶,DpnII和MboI。这是因为DpnI, DpnII, MboI, Sau3AI, 识别相同的序列,GATC,仅仅是对甲基化敏感度不同。

输出的结果文件都在aligned目录下,其中"merged_nodups.txt"就是下一步3D-DNA的输入文件之一

运行3d-dna

3d-dna的运行也没有多少参数可以调整,如果对组装的信心高,就用-r 0, 否则用默认的-r 2就行了。

~/opt/biosoft/3d-dna/run-asm-pipeline.sh -r 2 reference/genome.fa aligned/merged_nodups.txt &> 3d.log &

然后在Juicer-Tools中对结果进行可视化,对可能的错误进行纠正

最后输出文件中,包含FINAL就是我们需要的结果。

使用juicerbox进行手工纠错

关于juicerbox的用法,我已经将原视频搬运到哔哩哔哩, 见https://www.bilibili.com/video/av65134634

最常见的几种组装错误:

  • misjoin: 切割
  • translocations: 移动
  • inversions: 翻转
  • chromosome boundaries: 确定染色体的边界

这些错误的判断依赖于经验,所以只能靠自己多试试了。

最后输出genome.review.assembly用于下一步的分析

再次运行3d-dna

根据JABT手工纠正的结果, genome.review.assembly, 使用run-asm-pipeline-post-review.sh重新组装基因组。

~/opt/biosoft/3d-dna/run-asm-pipeline-post-review.sh \-r genome.review.assembly genome.fa aligned/merged_nodups.txt &> 3d.log &

个人使用评价

juicer的代码个人感觉不是特别的好,至少以下几个地方都需要改,

  • 临时文件不会去及时删除
  • bwa得到的SAM文件处理方式有待优化,使用BAM能更快的并行计算
  • 参数命令的判断很差,用-z判断字符串是否为0,而不是用-f或-d去判断文件是否存在,这个我已经提了一个issue,希望能改吧
  • Linux的sort支持多线程,但是没看到用
  • 脚本中有些限速步骤的awk代码,不知道什么时候能改成更高效的处理

前两条导致了运行过程中要占用大量的硬盘,所以不准备2T左右的硬盘,很容易出错。第三条是一些报错不会及时停止运算,也不容易排查。估计公司从效率角度出发,应该是写了很多脚本来替换原来的awk脚本了

另外,juicer在多倍体物种上表现很差,建议使用ALLHiC

参考资料

  • https://github.com/theaidenlab/3d-dna
  • https://github.com/aidenlab/juicer
  • http://aidenlab.org/assembly/manual_180322.pdf
  • https://www.neb.com/faqs/0001/01/01/what-s-the-difference-between-dpni-dpnii-mboi-and-sau3ai

假如你不小心设置了错误的-p参数,也不是特别的要紧,因为之后在最后阶段(final) 才会遇到了下面这个报错

Could not find chromosome sizes file for: reference/genome.chrom.size
***! Can't find inter.hic in aligned/inter_30.hic
***! Error! Either inter.hic or inter_30.hic were not created
Either inter.hic or inter_30.hic were not created. Check aligned for results

即便遇到了这个报错也不要紧,因为inter.hic 和 inter_30.hic在3d-dna流程中用不到,所以不需要解决。

如果需要解决的话,有两个解决方案,一种重新运行命令,只不过多加一个参数-S final, 就会跳过之前的比对,合并和去重步骤,直接到后面STATISTICS环节。但是这样依旧会有一些不必要的计算工作,所以另一种方法就是运行原脚本必要的代码

juiceDir=~/opt/biosoft/juicer
outputdir=aligned
genomePath=reference/genome.chrom.size
site_file=reference/genome_DpnII.txt
ligation=GATCGATC
# output is inter.hic
${juiceDir}/scripts/common/juicer_tools pre -f $site_file -s $outputdir/inter.txt -g $outputdir/inter_hists.m -q 1 $outputdir/merged_nodups.txt $outputdir/inter.hic $genomePath 
# output is inter_30.txt
${juiceDir}/scripts/common/statistics.pl -s $site_file -l $ligation -o $outputdir/inter_30.txt -q 30 $outputdir/merged_nodups.txt
# output is inter_30.hic
${juiceDir}/scripts/common/juicer_tools pre -f $site_file -s $outputdir/inter_30.txt -g $outputdir/inter_30_hists.m -q 30 $outputdir/merged_nodups.txt $outputdir/inter_30.hic $genomePath

http://chatgpt.dhexx.cn/article/B4ZJJNvG.shtml

相关文章

Hic-pro的结果文件转化为.hic文件,在juicebox中实现可视化

hic数据经过Hic-pro处理后,会生成allvalidpairs文件,这是所有有效配对的文件。一般想要可视化的话,比较复杂。这时我们就可以把它转化为.hic文件,放到juicebox中就很好的可视化。 juicer中的pre命令是用来做这个事情的。只要你的…

Java-juc

1. 进程和线程 进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个基本单位。例如:打开一个 .exe文件就是一个进程、打开360安全软件就是一个进程 线程 线程是进程的一个实体,是进…

Junit

Junit单元测试 简介:本文主要讲解,如何使用Eclipse,进行单元测试。 1.准备工作:搭建实验环境(EclipseJunitAnt) Eclipse:http://www.eclipse.org/ JUnit:http://www.junit.org/ Ant&#x…

juicer使用案例

代码结构&#xff1a; 编写main.html&#xff1a;引入方式可从bootcdn直接copy script标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…

juicer

UPDATE: juicer-0.3.1-dev published github.com. 让我们从一段代码说起&#xff0c;假设有一段这样的JSON数据&#xff1a; var json{name:"流火",blog:"ued.taobao.org" };我们需要根据这段JSON生成这样的HTML代码&#xff1a; 流火 (blog: ued.taoba…

Juicer软件的安装详解

欢迎关注”生信修炼手册”! 软件安装是生物信息实战中最基础的技能之一&#xff0c;只有确保软件安装无误&#xff0c;后续使用起来才会得心应手&#xff0c;不会有很多的bug。juicer软件提供了Hi-C数据一键化分析的pipeline, 这样高度的封装使得用户操作起来更加简便&#xff…

Juicer实战详解

欢迎关注”生信修炼手册”! Juicer软件的运行是非常简单的&#xff0c;只需要设置几个参数就可以了&#xff0c;本文利用官网的小的测试测试数据集来展示该软件的基本用法。 1. 下载测试数据 从以下链接下载测试数据集 https://github.com/aidenlab/juicer/wiki/Running-Juicer…

Juicer: 辅助基因组组装

Juicer: 辅助基因组组装 Juicer 导读 本文主要对处理HiC数据的Juicer程序进行一个简短的介绍&#xff0c;并展示如何利用Juicer进行基因组组装中染色体挂载的第一步。 1. 介绍 算法介绍 Juicer[1] 是一款能够提供一键式分析Loop-Resolution的程序。 特点 只需一次单击&#xff…

如何同步数据库数据

第一步 打开mysql的客户端 这里使用navicat&#xff0c;连接数据库&#xff0c;等到navicat主页面&#xff0c;双击需要操作的数据库连接 第二步 登录到数据库主页面后&#xff0c;点击左侧的数据库链接&#xff0c;打开数据库&#xff0c;可以看到可以操作的所有数据库 第三…

Logstash数据同步

Logstash 是 Elastic 技术栈中的一个技术&#xff0c;它是一个数据采集引擎&#xff0c;可以从数据库采集数据到 ES 中。可以通过设置 自增 ID 主键 或 更新时间 来控制数据的自动同步&#xff1a; 自增 ID 主键&#xff1a;Logstatsh 会有定时任务&#xff0c;如果发现有主键…

数据同步-数据库间的双向同步

当业务侧需要MongoDB降配、活动数据迁移时都需要应用切换数据库实例进行发版&#xff0c;发版过程中需最大程度保证新旧数据库数据一致&#xff0c;这就涉及到了一种同步技术-数据双向同步。在同步过程中遇到了一些可能会产生问题或引发思考的点&#xff0c;希望利用这篇文档进…

什么是数据实时同步,为什么数据实时同步很重要

随着云成为前所未有的数据供应渠道&#xff0c;数据准确性、一致性和隐私性的重要性与日俱增。看似轻微的数据错误或故障可能会产生重大负面影响。但是&#xff0c;​对数据进行排序并将其与现有​&#xff0c;然后定期解析数据实时同步&#xff0c;同时保持数据完整性&#xf…

数据同步工具的研究(实时)

数据同步工具的研究&#xff08;实时同步&#xff09;&#xff1a; FlinkCDC、Canal、Maxwell、Debezium ——2023年01月17日 ——Yahui Di 1. 常用CDC方案比较 2. FlinkCDC FlinkCDC的简介&#xff1a; Flink CDC 连接器是 Apache Flink 的一组源连接器&#xff0c;使用变…

聊聊数据同步

一、简述 数据同步&#xff0c;这是一个很宽泛的概念&#xff0c;在互联网或者传统软件公司&#xff0c;一定会遇到数据同步的场景。数据同步一般会遇到的问题诸如同步时延、数据一致性、性能低、强依赖于中间件、失败后无法补偿等。本文笔者试图简要总结下常见的数据同步场景&…

大数据的数据同步方式

一、全量覆盖 不需要分区&#xff0c;同步时直接覆盖插入。适用于数据不会有任何新增和变化的情况。比如地区、时间、性别等维度数据&#xff0c;不会变更或变更不影响业务&#xff0c;可以只保留最新值 二、仅新增同步 每天新增一个日期分区&#xff0c;同步并存储当天的新…

DataLink 数据同步平台

文章目录 一、数据同步平台概述核心能力工作原理详细流程 二、快速接入部署中间件程序配置创建数据库表启动应用注意事项 三、扩展&#xff1a;四种 CDC 方案比较优劣 一、数据同步平台 在项目开发中&#xff0c;经常需要将数据库数据同步到 ES、Redis 等其他平台&#xff0c;通…

数据同步之全量同步与增量同步

一、什么是数据同步 业务数据是数据仓库的重要数据来源&#xff0c;我们需要每日定时从业务数据库中抽取数据&#xff0c;传输到数据仓库中&#xff0c;之后再对数据进行分析统计。 为保证统计结果的正确性&#xff0c;需要保证数据仓库中的数据与业务数据库是同步的&#xff0…

你了解数据同步吗?

1.写在前面 本篇博客参考《操作系统实战 45 讲》 上篇博客主要介绍的是程序放在什么地方&#xff0c;开发操作系统要了解的最核心的硬件——CPU、MMU、Cache、内存&#xff0c;知道了它们的工作原理。在程序运行中&#xff0c;它们起到了至关重要的作用。 在开发我们自己的操…

数据库同步有哪些方式?【怎么保障目标和源数据一致性】

文章目录 摘要一、几种主流的数据库同步方式二、架构及工作原理三、全量同步和实时增量同步机制四、源和目标五、举例&#xff1a;Oracle 数据实时同步到 Elasticsearch六、目标和源数据一致性七、异构数据类型转换八、总结 摘要 数据库同步有3大难题&#xff1a; 1是如何保障…

数据技术篇之数据同步

第3章 数据同步 1.数据同步基础 直连同步 &#xff08;1&#xff09;什么是直连同步&#xff1f;直连同步是指通过定义好的规范接口 API 和基于动态链接库的方式直接连接业务库&#xff0c;如 ODBC/JDBC 等规定了统 一规范的标准接口&#xff0c;不同的数据库基于这套标准接口…