草庐IT

SyRI:从全基因组组装中找到基因组重排和局部序列差异

wo_monic 2023-10-09 原文

基因组差异从单核苷酸差异到复杂的结构变异。当前的方法通常能准确地注释从SNP到大插入缺失的序列差异,但无法揭示结构重排的全部复杂性,包括倒置,易位和重复,其中位置,方向或拷贝数高度相似的序列会发生变化。在这里,我们介绍了SyRI,这是一种用于染色体级程序集的成对全基因组比较工具。SyRI首先找到重排的区域,然后搜索序列中的差异,区别在于它们位于同位或重排的区域。这种区别很重要,因为重排区域与同同区域相比继承的方式有所不同。

文献资料:
Goel, M., Sun, H., Jiao, WB. et al. SyRI: finding genomic rearrangements and local sequence differences from whole-genome assemblies. Genome Biol 20, 277 (2019). https://doi.org/10.1186/s13059-019-1911-0
来源://mp.weixin.qq.com/s?__biz=MzUzMTEwODk0Ng==&mid=2247497455&idx=1&sn=989d626fe105967e592b12a6677f3cf3&chksm=fa4533d2cd32bac4f0ba6646ac74968cb72658bd1cd19bec3434d25723ad195f6bb2a0f8f61f&scene=132#wechat_redirect
SyRI githubs

SYRI的安装

pip install Cython numpy scipy pandas python-igraph psutil pysam matplotlib

从GitHub下载syri的最新版

python3 setup.py install

syri参数解析:
-F T,B,P,S 设置输入文件格式,Table,Bam,PAF,Sam

使用plotsr可视化找到的结构变异

安装plotsr

conda install -c bioconda plotsr
或者是pip安装依赖后,下载压缩包,使用

python3 setup.py install 

使用plotsr

安装完成后plotsr -h即可显示帮助文件

6个人类的10条染色体的结构变异信息

上图是6个人类的10条染色体的结构变异信息。
plotsr可以接受SYRI的输出的结果作为输入。
局部放大基因组结构变异

上图中a是放大了chr8:1–13 000 000之间的区域。这样可以更加清晰的看出倒位。
plotsr 论文
plotsr github

minimap2比对

# Align genomes
minimap2 -ax asm5 -t 4 --eqx A.fa B.fa \
 | samtools sort -O BAM - > A_B.bam
samtools index A_B.bam
minimap2 -ax asm5 -t 4 --eqx B.fa C.fa \
 | samtools sort -O BAM - > B_C.bam
samtools index B_C.bam
minimap2 -ax asm5 -t 4 --eqx C.fa D.fa \
 | samtools sort -O BAM - > C_D.bam
samtools index C_D.bam

SYRI鉴定结构变异

# Running syri for finding structural rearrangements between A and B
syri -c A_B.bam -r A.fa -q B.fa -F B --prefix A_B &
# Running syri for finding structural rearrangements between B and C
syri -c B_C.bam -r B.fa -q C.fa -F B --prefix B_C &
# Running syri for finding structural rearrangements between C and D
syri -c C_D.bam -r C.fa -q D.fa -F B --prefix C_D &

使用plotsr来可视化

plotsr \
    --sr A_Bsyri.out \
    --sr B_Csyri.out \
    --sr C_Dsyri.out \
    --genomes genomes.txt \
    -o output_plot.png

输出格式支持:pdf,svg,png

注释的结构变异类型的有效值:SYN、INV、TRA、INVTR、DUP、INVDP。

SYN :Syntenic 共线性
INV :Inversion 倒位
TRA :Translocation 易位
INVTR: Inverted translocation 倒位易位
DUP:Duplication 复制
INVDP:Inverted duplication 倒位复制

plotsr的参数:

输入/输出文件:
--sr SR 结构注释映射 (syri.out) 由 SyRI 输出(默认值:无)
--bp BEDPE 格式的 BP 结构注释映射(默认值:无)
--genomes GENOMES 包含基因组路径的文件(默认值:无)
--markers MARKERS 包含标记路径的文件(bed格式)(默认值:无)
--tracks TRACKS 文件列出要绘制的所有轨道的路径和详细信息(默认值:无)
--chrod CHRORD 包含参考(第一个基因组)染色体 ID 的文件,按照它们要绘制的顺序排列。文件每行需要一个染色体 ID。与 --chr 不兼容(默认值:无)
--chrname CHRNAME 包含要在图中使用的参考(第一个基因组)染色体名称的文件。文件需要是一个 TSV,第一列是染色体 ID,第二列是染色体名称。 (默认:无)
-o O 输出文件名。可接受的格式:pdf、png、svg(默认:plotsr.pdf)

数据过滤:
--itx 使用染色体间绘图模式(实验性)(默认:False)
--chr CHR 选择参考上的特定染色体(第一个基因组)并按给定顺序绘制它们。与 --chrord 不兼容。可以多次使用以选择多个染色体。 (默认:无)
--reg REG 绘制特定区域。用作:GenomeID:ChromosomeID:Start-End。与 --chr 和 -R 不兼容。 (默认:无)
--rtr 使用 --reg 时,绘制同源区域边界内的所有 SR。对于高度缩放的区域,这可能会导致视觉上断开的对齐。 (默认:False)
--nosyn 不绘制同线区域(默认值:False)
--noinv 不绘制反转图(默认值:False)
--notr 不绘制易位区域(默认值:False)
--nodup 不绘制重复区域(默认值:False)
-s S 要绘制的 SR 的最小尺寸(默认值:10000)

图片样式调整:
--cfg CFG 配置文件的路径,其中包含调整绘图的参数。 (默认:无)
-R 如果相邻的同线块没有被 SR 打断,则加入它们。使用它可以减少可视化中的差距。 (默认:False)
-f F 字体大小(默认值:6)
-H H 绘图高度(默认值:无)
-W W 绘图的宽度(默认值:无)
-S S 同源染色体空间 (0.1-0.75)。调整此项可为注释标记/文本和轨道腾出更多空间。 (默认值:0.7)
-d D DPI 用于最终图像(默认值:300)
-b {agg,cairo,pdf,pgf,ps,svg,模板}
要使用的 Matplotlib 后端(默认值:agg)
-v 绘制垂直染色体(默认值:False)

R1

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R1.pdf -W 7 -H 10 -f 8 --cfg base.cfg --markers markers.bed


R1展示了所有的染色体,所有的基因和SNP

R2

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R2.pdf -W 7 -H 10 -f 8 --cfg base.cfg -v --markers markers.bed


R2和R1一样,只是换成竖向排版使用的是-v参数

R3

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R3.pdf -W 7 -H 10 -f 8 --cfg base.cfg --chr Chr1 --chr Chr3 --chr Chr4 --markers markers.bed


R3使用--chr参数来只显示指定的1,3,4染色体

R4

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R4.pdf -W 7 -H 10 -f 8 --cfg base.cfg -v --markers markers.bed --chr Chr1 --chr Chr3 --chr Chr4


R4是R3的竖向排版

R5

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R5.pdf -W 7 -H 10 -f 8 --cfg base.cfg --reg col-0:Chr3:6600000-10000000 --markers markers.bed


R5是只显示col-0的Chr3的区域

R6

plotsr --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.5 -o R6.pdf -W 7 -H 10 -f 8 --cfg base.cfg -v --markers markers.bed --reg col-0:Chr3:6600000-10000000


R6的是R5的竖版

ITX

R7

plotsr --itx --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.7 -o R7.pdf -W 7 -H 10 -f 8 --cfg base.cfg --markers markers.bed


R7是使用染色体间模式

R8

plotsr --itx --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.7 -o R8.pdf -W 7 -H 10 -f 8 --cfg base.cfg -v --markers markers.bed


显示染色体模式,竖版

R9

plotsr --itx --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.7 -o R9.pdf -W 7 -H 10 -f 8 --cfg base.cfg --chr Chr1 --chr Chr3 --chr Chr4 --markers markers.bed


R9显示染色体1,3,4

R10

plotsr --itx --sr col_lersyri.filtered.out --sr ler_cvisyri.filtered.out --sr cvi_erisyri.filtered.out --genomes genomes.txt --tracks tracks.txt -S 0.7 -o R10.pdf -W 7 -H 10 -f 8 --cfg base.cfg -v --markers markers.bed --chr Chr1 --chr Chr3 --chr Chr4


R10只显示指定的染色体同时竖版

col_lersyri.filtered.out是syri的输出结果,格式如下

Chr1    1       1084    -       -       -       -       -       NOTAL1  -       NOTAL   -
Chr1    1085    1771083 -       -       Chr1    1       1773924 SYN1    -       SYN     -
Chr1    1085    158550  -       -       Chr1    1       157500  SYNAL1  SYN1    SYNAL   -
Chr1    158551  158596  -       -       Chr1    157501  157556  HDR1    SYN1    HDR     -
Chr1    158597  270144  -       -       Chr1    157557  269099  SYNAL2  SYN1    SYNAL   -
Chr1    270145  270250  -       -       Chr1    269100  269178  HDR2    SYN1    HDR     -
Chr1    270251  587468  -       -       Chr1    269179  585993  SYNAL3  SYN1    SYNAL   -

genomes.txt 格式如下:控制主图的线条颜色和宽度

##ft    =   File type (fa:fasta/cl:chromosome_length, default = fa. cl files are fasters)
##lc    =       line colour
##lw    =       line width
#file   name    tags
TAIR10_Filtered.chrlen  col-0   ft:cl;lw:1.5
ler.chrlen      ler     ft:cl;lw:1.5
cvi.chrlen      cvi     ft:cl;lw:1.5
eri.chrlen      eri     ft:cl;lw:1.5

tracks.txt是控制使用的文件,里面可以指定gff或bed文件,

##ft = File type (bed/bedgraph/gff, default = bed)
##bw = bin width (default=100000)
##nc = name colour
##ns = name size
##nf = name font
##nm = name margin      # Additional margin between name and track. Fraction between [0,1]
##lc = line colour
##lw = line width
##bc = background colour
##ba = background alpha
#file   name    tags
TAIR10_GFF3_genes.gff   Genes   ft:gff;bw:10000;nc:black;ns:8;nf:Arial;lc:blue;lw:4;bc:lightblue;ba:0.5;nm:0.05
1001genomes.snps.sorted.bed     SNPs    bw:10000;nc:black;ns:8;nf:Arial;lc:sienna;lw:1;bc:peachpuff;ba:0.5
Giraut2011_centromeres.bed      Centromeres     bw:10000;nc:black;ns:8;nf:Arial;lc:olive;lw:1;bc:palegreen;ba:0.5

head TAIR10_GFF3_genes.gff格式如下:主要是显示基因密度

Chr1    TAIR10  chromosome      1       30427671        .       .       .       ID=Chr1;Name=Chr1
Chr1    TAIR10  gene    3631    5899    .       +       .       ID=AT1G01010;Note=protein_coding_gene;Name=AT1G01010
Chr1    TAIR10  mRNA    3631    5899    .       +       .       ID=AT1G01010.1;Parent=AT1G01010;Name=AT1G01010.1;Index=1
Chr1    TAIR10  protein 3760    5630    .       +       .       ID=AT1G01010.1-Protein;Name=AT1G01010.1;Derives_from=AT1G01010.1
Chr1    TAIR10  exon    3631    3913    .       +       .       Parent=AT1G01010.1
Chr1    TAIR10  five_prime_UTR  3631    3759    .       +       .       Parent=AT1G01010.1
Chr1    TAIR10  CDS     3760    3913    .       +       0       Parent=AT1G01010.1,AT1G01010.1-Protein;

head 1001genomes.snps.sorted.bed格式如下

Chr1    54      55      C       T
Chr1    55      56      T       A
Chr1    62      63      T       C
Chr1    72      73      C       A
Chr1    74      75      T       A
Chr1    79      80      G       T
Chr1    82      83      T       C
Chr1    82      83      T       A
Chr1    87      88      A       T

head Giraut2011_centromeres.bed格式如下

Chr1    13655620        15981659
Chr2    2300148 5706797
Chr3    11453352        15264347
Chr4    1609393 5078092
Chr5    10783157        13187261

同样,你可以自由的在tracks.txt里添加或删除行,来显示更多或更少的种类的信息。例如可以加上indel的信息,加上重复序列信息等,只要格式是bed,前三列是染色体,start,end使用tab分割符合即可。
cat markers.bed内容如下,用于控制显示在染色体的指定位置的marker信息

##mt = bin width (default=100000)
##mc = name colour
##ms = name size
##tt = name font
##tc = line colour
##ts = line width
##tf = background colour
##tp = background colour
#chr    start   end genome_id   tags
Chr3    4035330 4035331 eri     mt:v;mc:black;ms:3;tt:Inversion 1;tp:0.02;ts:8;tf:Arial;tc:black
Chr4    2322547 2322548 ler     mt:^;mc:black;ms:3;tt:Inversion 2;tp:-0.07;ts:8;tf:Arial;tc:black
Chr3    8792851 8792852 col-0   mt:.;mc:red;ms:10;tt:Notal aligned;tp:0.02;ts:8;tf:Arial;tc:black

cat base.cfg基本不用修改,用于绘图的边距控制

## COLOURS and transparency for alignments (syntenic, inverted, translocated, and duplicated)
syncol:#CCCCCC
invcol:#FFA500
tracol:#9ACD32
dupcol:#00BBFF
alpha:0.8
## Margins and dimensions:
chrmar:0.1              ## Adjusts the gap between chromosomes and tracks. Higher values leads to more gap
exmar:0.1               ## Extra margin at the top and bottom of plot area
## LEGEND
legend:T                ## To plot legend use T, use F to not plot legend
genlegcol:-1            ## Number of columns for genome legend, set -1 for automatic setup
bbox:0,1.01,0.5,0.3             ## [Left edge, bottom edge, width, height]
bbox_v:0,1.1,0.5,0.3    ## For vertical chromosomes (using -v option)
bboxmar:0.5             ## Margin between genome and annotation legends

有关SyRI:从全基因组组装中找到基因组重排和局部序列差异的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  3. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

  4. ruby - 如何找到调用当前方法的方法 - 2

    如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====

  5. ruby - 在 Ruby 中比较序列 - 2

    假设我必须(小型到中型)阵列:tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]如何确定tokens是否以相同的顺序包含template的所有条目?(请注意,在上面的示例中,应忽略第一个“ccc”,从而由于最后一个“ccc”而导致匹配。) 最佳答案 这适用于您的示例数据。tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]po

  6. python - 帮我找到合适的 ruby​​/python 解析器生成器 - 2

    我使用的第一个解析器生成器是Parse::RecDescent,它的指南/教程很棒,但它最有用的功能是它的调试工具,特别是tracing功能(通过将$RD_TRACE设置为1来激活)。我正在寻找可以帮助您调试其规则的解析器生成器。问题是,它必须用python或ruby​​编写,并且具有详细模式/跟踪模式或非常有用的调试技术。有人知道这样的解析器生成器吗?编辑:当我说调试时,我并不是指调试python或ruby​​。我指的是调试解析器生成器,查看它在每一步都在做什么,查看它正在读取的每个字符,它试图匹配的规则。希望你明白这一点。赏金编辑:要赢得赏金,请展示一个解析器生成器框架,并说明它的

  7. ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader - 2

    首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟

  8. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  9. ruby - :variable and @variable 之间的差异 - 2

    作为RubyonRails新手,我明白“@”和“:”引用有不同的含义。我看到了thispost在SO中,其中描述了一些差异。@表示实例变量(例如@my_selection):表示别名(例如:my_selection)我遇到了一个情况,我有一个标准的MVC页面,类似于我的网络应用程序中的所有其他表单/页面。html.erb片段route.rb片段resources:my_selections当我尝试访问此页面时,出现此错误:NoMethodErrorinselections#createShowingC:/somedir/myapp/app/views/my_selections/ind

  10. ruby-on-rails - 通过 has_many 找到 Rails :through - 2

    我正在寻找一种方法来通过关联查询基于has_many中的子项的模型。我有3个模型:classConversation我需要找到参与者匹配一组ID的对话。这是我目前拥有的(不工作):Conversation.includes(:participants).where(participants:params[:participants]) 最佳答案 听起来你只是想要对话,如果是这样你可以加入。Conversation.joins(:participants).where(:users=>{:id=>params[:participant

随机推荐