From c8545f861a765f2a7a0424dab1ab1ccd90a1231e Mon Sep 17 00:00:00 2001 From: Ghanshyamchandra74 Date: Mon, 18 Jul 2022 01:18:26 +0530 Subject: [PATCH] added bash scripts --- LICENSE.txt | 48 + Makefile | 4 +- NEWS.md | 306 ------ README.md | 186 +--- data/CHM13Y/eval2roc.pl | 33 + data/CHM13Y/roc.gp | 25 + data/CHM13Y_10H/eval2roc.pl | 33 + data/CHM13Y_10H/roc.gp | 26 + data/CHM13Y_95H/eval2roc.pl | 33 + data/CHM13Y_95H/roc.gp | 26 + data/Linear_run.sh | 7 + data/evaluate.sh | 25 + data/generate_graphs.sh | 113 ++ data/get_deps.sh | 48 + data/get_genomes.sh | 5 + data/graph_run.sh | 17 + data/reproduce.sh | 15 + data/simulated_reads.sh | 33 + doc/example1.png | Bin 73581 -> 0 bytes doc/example2.png | Bin 108251 -> 0 bytes doc/examples.graffle | Bin 28587 -> 0 bytes main.c | 20 +- minigraph.h | 2 +- tex/Makefile | 13 - tex/minigraph.bib | 676 ------------ tex/minigraph.tex | 986 ------------------ tex/plots/CHM13-f1-90.bb.anno.gp | 42 - tex/plots/CHM13-f1-90.bb.anno.tbl | 13 - .../CHM13-f1-90.bb.mini-inter-none.win.gp | 269 ----- .../CHM13-f1-90.bb.mini-inter-none.win.sh | 7 - tex/plots/CHM13v1.cen.bed | 23 - tex/plots/CHM13v1.size | 23 - tex/plots/anno2tbl.js | 40 - tex/plots/bedutils.js | 367 ------- tex/plots/chr-plot.js | 130 --- tex/plots/gen-anno.mak | 24 - 36 files changed, 521 insertions(+), 3097 deletions(-) delete mode 100644 NEWS.md create mode 100644 data/CHM13Y/eval2roc.pl create mode 100644 data/CHM13Y/roc.gp create mode 100644 data/CHM13Y_10H/eval2roc.pl create mode 100644 data/CHM13Y_10H/roc.gp create mode 100644 data/CHM13Y_95H/eval2roc.pl create mode 100644 data/CHM13Y_95H/roc.gp create mode 100644 data/Linear_run.sh create mode 100644 data/evaluate.sh create mode 100644 data/generate_graphs.sh create mode 100644 data/get_deps.sh create mode 100644 data/get_genomes.sh create mode 100644 data/graph_run.sh create mode 100644 data/reproduce.sh create mode 100644 data/simulated_reads.sh delete mode 100644 doc/example1.png delete mode 100644 doc/example2.png delete mode 100644 doc/examples.graffle delete mode 100644 tex/Makefile delete mode 100644 tex/minigraph.bib delete mode 100644 tex/minigraph.tex delete mode 100644 tex/plots/CHM13-f1-90.bb.anno.gp delete mode 100644 tex/plots/CHM13-f1-90.bb.anno.tbl delete mode 100644 tex/plots/CHM13-f1-90.bb.mini-inter-none.win.gp delete mode 100644 tex/plots/CHM13-f1-90.bb.mini-inter-none.win.sh delete mode 100644 tex/plots/CHM13v1.cen.bed delete mode 100644 tex/plots/CHM13v1.size delete mode 100755 tex/plots/anno2tbl.js delete mode 100755 tex/plots/bedutils.js delete mode 100755 tex/plots/chr-plot.js delete mode 100644 tex/plots/gen-anno.mak diff --git a/LICENSE.txt b/LICENSE.txt index d7ac24e..ebcd175 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,3 +1,22 @@ +This software constitutes a joint work and the contributions of individual +authors are subject to different licenses. Contributions and licenses are +listed in the applicable source files, with specific details on each +individual contribution captured in the revision control system. + +-- +For all code, except as indicated otherwise: + +PUBLIC DOMAIN NOTICE + +This software is freely available to the public for use +without a copyright notice. Restrictions cannot be placed on its present or +future use. + +-- +For minigraph: + +URL: https://lh3.github.io/minigraph + The MIT License Copyright (c) 2019- Dana-Farber Cancer Institute @@ -21,3 +40,32 @@ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-- +For Boost: + +URL: https://boost.org + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile index 3d0d6cd..ee2aa19 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ OBJS= kalloc.o kthread.o algo.o sys.o gfa-base.o gfa-io.o gfa-aug.o gfa-bbl.o g sketch.o misc.o bseq.o options.o shortk.o miniwfa.o \ index.o lchain.o gchain1.o galign.o gcmisc.o map-algo.o cal_cov.o \ format.o gmap.o ggsimple.o ggen.o asm-call.o graphUtils.o -PROG= minigraph +PROG= minichain LIBS= -lz -lpthread -lm -fopenmp ifneq ($(asan),) @@ -21,7 +21,7 @@ endif all:$(PROG) -minigraph:$(OBJS) main.o +minichain:$(OBJS) main.o $(CXX) $(CPPFLAGS) $^ -o $@ $(LIBS) clean: diff --git a/NEWS.md b/NEWS.md deleted file mode 100644 index 3c59465..0000000 --- a/NEWS.md +++ /dev/null @@ -1,306 +0,0 @@ -Release 0.19-r551 (12 June 2022) --------------------------------- - -This release fixes a segmental fault if minigraph is compiled with certain -compiler-libc combinations. This is apparently caused by memcpy(0,0,0). -Minigraph is otherwise identical v0.18. - -(12 June 2022, r551) - - - -Release 0.18-r538 (9 May 2022) ------------------------------- - -This release uses heuristics to speed up base alignment in long divergent -regions. The heuristics does not guarantee optimal alignment but it reliably -produces alignment close to the optimal except in centromeres where the -algorithmically optimal alignment may not represent true evolution in biology. -The new version is 10-700% faster than v0.17 depending on input data and -parameters in use. - -(9 May 2022, r538) - - - -Release 0.17-r524 (29 April 2022) ---------------------------------- - -This release adds base alignment to minigraph. It represents the first major -improvement to minigraph. Specifically, this release attempts to connect linear -chains with the graph wavefront alignemnt algorithm (GWFA) and produces the -final alignment with miniwfa under the 2-piece gap penalty. Graph generation -also considers base alignment. This gives more accurate graph alignment and -generally simpler graph topology. Note that minigraph still focuses on -structural variations and does not generate base-level graphs. To endusers, -minigraph remains similar feature wise. - -Notable changes: - - * New feature: option `-c` for base alignment and graph generation. In the - alignment mode, the option adds the `cg:Z` CIGAR tag like minimap2. Graph - generation still works without `-c` but applying this option is generally - recommended now. - -It should be noted that the base alignment is currently slow for species of -high diversity. This will be addressed in the next couple of releases. - -(29 April 2022, r524) - - - -Release 0.16-r436 (21 February 2022) ------------------------------------- - -Notable changes: - - * Improvement: 2-level chaining. This is a feature backported from minimap2. - It speeds up graph generation for human graphs. - - * Improvement: break a chain at poorly aligned regions, another recent - minimap2 feature. - - * Added the script for generating figures in the minigraph paper. - -(21 February 2022, r436) - - - -Release 0.15-r426 (21 March 2021) ---------------------------------- - -Fixed a bug in bubble identification around inversions. This version should be -used together with the latest gfatools for consistency. - -(21 March 2021, r426) - - - -Release 0.14-r415 (19 December 2020) ------------------------------------- - -Notable changes: - - * Added the `--call` option to find the allele/walk in each bubble. - - * Reduced the default minimum variant length (option `-L`) from 100 to 50 for - the consistency with the SV community. - -(19 December 2020, r415) - - - -Release 0.13-r397 (3 December 2020) ------------------------------------ - -Notable change: - - * Fixed incorrect anchors in linear chains. In older versions, a linear chain - may contain two anchors with identical reference or query coordinates. - -(3 December 2020, r397) - - - -Release 0.12-r389 (26 October 2020) ------------------------------------ - -Notable changes: - - * Improve alignments towards ends of graph segments. If there is an SV close to - the ends but not at the ends, older versions may produce an excessively - large bubble including high-identity matches. - - * Heuristically accelerates alignment in complex subgraphs by skipping - many unnecessary sequence-aware graph traversals. This speeds up graph - generation for CHM13 by three folds without obviously affecting accuracy. - - * Added option --inv to optionally disable inversions. Graph traversal is hard - with inversions. - - * Fixed the bug that prevents large -K. - - * Apply option -K4g to the asm preset. - - * Added option --write-mz to output the positions of minimizer anchors. - -(26 October 2020, r389) - - - -Release 0.11-r371 (13 September 2020) -------------------------------------- - -Notable changes: - - * Added option --max-rmq-size to limit the max RMQ size, which is set 100k by - default. This heuristic reduces the long running time for aligning long - centromeric sequences. The accuracy might be affected in rare cases. - - * Cap the max k-mer occurrence to 250 by default. For maize genomes, the - current heuristic may choose an occurrence cutoff larger than 1000. This - makes minigraph too slow to be practical. - - * Added option -S to output more detailed information about linear chains. - - * Added option -D to ignore diagonal minimizer anchors. This is useful to - mapping a sequence against itself. - -(13 September 2020, r371) - - - -Release 0.10-r356 (14 February 2020) ------------------------------------- - -Notable changes: - - * Older releases miss a small fraction of INDELs involving repeats. This - release fixes this issue. - - * Added the "stableGaf" command to mgutils.js to convert unstable GAF (e.g. by - GraphAligner) to stable GAF. - -(14 February 2020, r356) - - - -Release 0.9-r343 (31 December 2019) ------------------------------------ - -Notable changes: - - * RMQ based linear chaining. The chaining accuracy should be higher for large - events. The speed remains similar. - - * Use ksw2 to check the sequence divergence of events to be inserted. - - * Treat inversions as special events. Don't insert them as long substitutions. - -(31 December 2019, r343) - - - -Release 0.8-r316 (11 December 2019) ------------------------------------ - -This release reduces suboptimal chains caused by the chaining heuristics. It -generates slightly simpler human graphs. - -(11 December 2019, r316) - - - -Release 0.7-r310 (21 November 2019) ------------------------------------ - -Notable changes: - - * Increased the default maximum INDEL/event length from 10kb to 100kb for - assembly mapping and graph generation. - - * Decreased the default minimum INDEL/event length from 250bp to 100bp. - - * Accelerated graph mapping by pre-filtering isolated anchors and disconnected - linear chains. This triples the performance when long gaps are desired. - -Due to the change of default parameters, this release generates graphs -different from the previous versions. - -(21 November 2019, r310) - - - -Release 0.6-r302 (17 November 2019) ------------------------------------ - -Notable changes: - - * Assign weight to seeds based on their repetitiveness. This helps chaining in - repetitive regions a little bit. - - * For short-read mapping, prefer the reference path if the alternate path is - not much better. - -Major changes may be coming in the next release. - -(17 November 2019, r302) - - - -Release 0.5-r285 (8 September 2019) ------------------------------------ - -Notable changes: - - * Fixed a bug that leads to wrong mapping positions in GAF. - - * Fixed two bugs related to graph chaining. - - * Added option `-j` to set expected sequence divergence and to adjust other - chaining parameters accordingly. - - * Increased the k-mer thresholds for fast divergence estimate. This improves - the alignment around low-complexity regions. - - * Tuned the default parameters to add highly divergent events only. - - * Warn about duplicated sequence names in graph construction (#3). - -This version generates graphs different from the previous versions. The mapping -accuracy is improved due to the bug fixes and parameter tuning. - -(8 September 2019, r285) - - - -Release 0.4-r267 (22 August 2019) ---------------------------------- - -Notable changes: - - * Support paired-end mapping for short reads. - - * Remap and calculate coverage (see the new --cov option in the manpage). - - * Fixed multiple edges in the generated graphs. The v0.3 14-genome graph - contains one multiple edge. - - * Use dynamic minimizer occurrence cutoff. For human data, the dynamic cutoff - is around 137, higher than the default cutoff 100 used in earlier versions. - As a result, graph generations will become a little slower. - -Due to the last two changes, graphs generated with this version are different -from the previous versions. - -(22 August 2019, r267) - - - -Release 0.3-r243 (7 August 2019) --------------------------------- - -This release generates graphs with SR tags on L-lines. The topology of the -graph is identical to the one generated with v0.2. - -(7 August 2019, r243) - - - -Release 0.2-r235 (19 July 2019) -------------------------------- - -This release fixes multiple minor bugs. It also considers k-mer matches and -improves the accuracy of graph chaining. Nonetheless, the old chaining -algorithm, albeit simple, works quite well. The improvement is marginal. - -(19 July 2019, r235) - - - -Release 0.1-r191 (6 July 2019) ------------------------------- - -Initial proof-of-concept release. - -(6 July 2019, r191) diff --git a/README.md b/README.md index 8eab3df..8810567 100644 --- a/README.md +++ b/README.md @@ -1,201 +1,57 @@ -[![Build Status](https://travis-ci.org/lh3/minigraph.svg?branch=master)](https://travis-ci.org/lh3/minigraph) ## Getting Started ```sh -git clone https://github.com/lh3/minigraph -cd minigraph && make -# Map sequence to sequence, similar to minimap2 without base alignment -./minigraph test/MT-human.fa test/MT-orangA.fa > out.paf +git clone https://github.com/gsc74/minichain +cd minichain && make # Map sequence to graph -./minigraph test/MT.gfa test/MT-orangA.fa > out.gaf -# Incremental graph generation (-l10k necessary for this toy example) -./minigraph -cxggs -l10k test/MT.gfa test/MT-chimp.fa test/MT-orangA.fa > out.gfa -# Call per-sample path in each bubble/variation (-c not needed for this) -./minigraph -xasm -l10k --call test/MT.gfa test/MT-orangA.fa > orangA.call.bed - -# The lossy FASTA representation (requring https://github.com/lh3/gfatools) -gfatools gfa2fa -s out.gfa > out.fa -# Extract localized structural variations -gfatools bubble out.gfa > SV.bed +./minichain -cx lr test/MT.gfa test/MT-orangA.fa > out.gaf ``` ## Table of Contents - - - [Getting Started](#started) - [Introduction](#intro) - [Users' Guide](#uguide) - [Installation](#install) - [Sequence-to-graph mapping](#map) - - [Graph generation](#ggen) - - [Calling structural variations](#callsv) - - [Prebuilt graphs](#prebuilt) - - [Algorithm overview](#algo) - [Limitations](#limit) ## Introduction -Minigraph is a sequence-to-graph mapper and graph constructor. For graph -generation, it aligns a query sequence against a sequence graph and -incrementally augments an existing graph with long query subsequences diverged -from the graph. The figure on the right briefly explains the procedure. - -Minigraph borrows ideas and code from [minimap2][minimap2]. It is fairly -efficient and can construct a graph from 90 human assemblies in a couple of -days using 24 CPU cores. Older versions of minigraph was unable to produce -base alignment. The latest version can. **Please add option `-c` for graph -generation** as it generally improves the quality of graphs. +Minichain is a sequence-to-graph mapper with base-level alignment support. ## Users' Guide ### Installation -To install minigraph, type `make` in the source code directory. The only -non-standard dependency is [zlib][zlib]. For better performance, it is -recommended to compile with recent compliers. - -### Sequence-to-graph mapping - -To map sequences against a graph, you should prepare the graph in the [GFA -format][gfa1], or preferrably the [rGFA format][rgfa]. If you don't have -a graph, you can generate a graph from multiple samples (see the [Graph -generation section](#ggen) below). The typical command line for mapping is -```sh -minigraph -cx lr graph.gfa query.fa > out.gaf -``` -You may choose the right preset option `-x` according to input. Minigraph -output mappings in the [GAF format][gaf], which is a strict superset of the -[PAF format][paf]. The only visual difference between GAF and PAF is that the -6th column in GAF may encode a graph path like -`>MT_human:0-4001Graph generation - -The following command-line generates a graph in rGFA: -```sh -minigraph -cxggs -t16 ref.fa sample1.fa sample2.fa > out.gfa -``` -which is equivalent to -```sh -minigraph -cxggs -t16 ref.fa sample1.fa > sample1.gfa -minigraph -cxggs -t16 sample1.gfa sample2.fa > out.gfa -``` -File `ref.fa` is typically the reference genome (e.g. GRCh38 for human). -It can also be replaced by a graph in rGFA. Minigraph assumes `sample1.fa` to -be the whole-genome assembly of an individual. This is an important assumption: -minigraph only considers 1-to-1 orthogonal regions between the graph and the -individual FASTA. If you use raw reads or put multiple individual genomes in -one file, minigraph will filter out most alignments as they cover the input -graph multiple times. - -The output rGFA can be converted to a FASTA file with [gfatools][gfatools]: -```sh -gfatools gfa2fa -s graph.gfa > out.stable.fa -``` -The output `out.stable.fa` will always include the initial reference `ref.fa` -and may additionally add new segments diverged from the initial reference. - -### Calling structural variations +### Dependencies +1) [gcc9][gcc9] or later version +2) [zlib][zlib] +3) [Boost][boost] +4) [Open MPI][openmpi] -A minigraph graph is composed of chains of bubbles with the reference as the -backbone. Each *bubble* represents a structural variation. It can be -multi-allelic if there are multiple paths through the bubble. You can extract -these bubbles with -```sh -gfatools bubble graph.gfa > var.bed -``` -The output is a BED-like file. The first three columns give the position of a -bubble/variation and the rest of columns are: -* (4) \# GFA segments in the bubble including the source and the sink of the bubble -* (5) \# all possible paths through the bubble (not all paths present in input samples) -* (6) 1 if the bubble involves an inversion; 0 otherwise -* (7) length of the shortest path (i.e. allele) through the bubble -* (8) length of the longest path/allele through the bubble -* (9-11) please ignore -* (12) list of segments in the bubble; first for the source and last for the sink -* (13) sequence of the shortest path (`*` if zero length) -* (14) sequence of the longest path (NB: it may not be present in the input samples) -Given an assembly, you can find the path/allele of this assembly in each bubble with +### Sequence-to-graph mapping +Minichain can be used for sequence-to-sequence mapping as well as sequence-to-graph mapping, with base level alignment support. ```sh -minigraph -cxasm --call graph.gfa sample-asm.fa > sample.bed +# Map sequence to sequence +./minichain -t32 -cx lr test/MT-human.fa test/MT-orangA.fa -y1 > out.paf +# Map sequence to graph +./minichain -t32 -cx lr test/MT.gfa test/MT-orangA.fa > out.gaf ``` -On each line in the BED-like output, the last colon separated field gives the -alignment path through the bubble, the path length in the graph, the mapping -strand of sample contig, the contig name, the approximate contig start and -contig end. The number of lines in the file is the same as the number of lines -in the output of `gfatools bubble`. You can use the `paste` Unix command to -piece multiple samples together. - -### Prebuilt graphs - -Prebuilt human graphs in the rGFA format can be found [at Zenodo][human-zenodo]. - -### Algorithm overview - - - -In the following, minigraph command line options have a dash ahead and are -highlighted in bold. The description may help to tune minigraph parameters. - -1. Read all reference bases, extract (**-k**,**-w**)-minimizers and index them - in a hash table. - -2. Read **-K** [=*500M*] query bases in the mapping mode, or read all query - bases in the graph construction mode. For each query sequence, do step 3 - through 5: - -3. Find colinear minimizer chains using the [minimap2][minimap2] algorithm, - assuming segments in the graph are disconnected. These are called *linear - chains*. - -4. Perform another round of chaining, taking each linear chain as an anchor. - For a pair of linear chains, minigraph tries to connect them by doing graph - wavefront alignment algorithm (GWFA). If minigraph fails to find an - alignment within an edit distance threshold, it will find up to 15 shortest - paths between the two linear chains and chooses the path of length closest - to the distance on the query sequence. Chains found at this step are called - *graph chains*. - -5. Identify primary chains and estimate mapping quality with a method similar - to the one used in minimap2. Perform base alignment. - -6. In the graph construction mode, collect all mappings longer than **-d** - [=*10k*] and keep their query and graph segment intervals in two lists, - respectively. - -7. For each mapping longer than **-l** [=*100k*], finds poorly aligned regions. - A region is filtered if it overlaps two or more intervals collected at step - 6. - -8. Insert the remaining poorly aligned regions into the input graph. This - constructs a new graph. ## Limitations -* A complex minigraph subgraph is often suboptimal and may vary with the order - of input samples. It may not represent the evolution history - or the functional relevance at the locus. Please *do not overinterpret* - complex subgraphs. If you are interested in a particular subgraph, it is - recommended to extract the input contig subsequences involved in the subgraph - with the `--call` option and manually curated the results. - -* Minigraph needs to find strong colinear chains first. For a graph consisting - of many short segments (e.g. one generated from rare SNPs in large - populations), minigraph will fail to map query sequences. - -* The base alignment in the current version of minigraph is slow for species of - high diversity. +* Current version(v1.0) only supports acyclic [rGFA][rgfa] and [GFA][gfa1] for sequence-to-graph mapping. +* Graph Generation is not supported. +[spack]: https://spack.io/ [zlib]: http://zlib.net/ +[gcc9]: http://zlib.net/ +[openmpi]: https://www.open-mpi.org/ +[boost]: https://boost.org/ [minimap2]: https://github.com/lh3/minimap2 [rgfa]: https://github.com/lh3/gfatools/blob/master/doc/rGFA.md [gfa1]: https://github.com/GFA-spec/GFA-spec/blob/master/GFA1.md diff --git a/data/CHM13Y/eval2roc.pl b/data/CHM13Y/eval2roc.pl new file mode 100644 index 0000000..e5bf7ee --- /dev/null +++ b/data/CHM13Y/eval2roc.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Getopt::Std; + +my %opts = (n=>153955, s=>100); +getopts('n:', \%opts); + +my $pseudo = .5; +my $tot = $pseudo; +my $err = $pseudo; +my $tot_last_out = -$opts{s}; +my $state = 0; +my $mapq = 0; +while (<>) { + chomp; + if (/^Q\t(\d+)\t(\d+)\t(\d+)/) { + $tot += $2; + $err += $3; + if ($tot - $tot_last_out >= $opts{s}) { + print join("\t", $1, $err/$tot, $tot / $opts{n}), "\n"; + $tot_last_out = $tot; + $state = 0; + } else { + $state = 1; + $mapq = $1; + } + } +} +if ($state) { + print join("\t", $mapq, $err/$tot, $tot / $opts{n}), "\n"; +} diff --git a/data/CHM13Y/roc.gp b/data/CHM13Y/roc.gp new file mode 100644 index 0000000..df786bc --- /dev/null +++ b/data/CHM13Y/roc.gp @@ -0,0 +1,25 @@ +set t po eps enh co so "Helvetica,26" + +set style line 1 lt 1 pt 1 lc rgb "#e41a1c" lw 2; +set style line 2 lt 1 pt 2 lc rgb "#377eb8" lw 2; +set style line 3 lt 1 pt 3 lc rgb "#4daf4a" lw 2; +set style line 4 lt 1 pt 4 lc rgb "#984ea3" lw 2; +set style line 5 lt 1 pt 6 lc rgb "#ff7f00" lw 2; +set style line 6 lt 1 pt 8 lc rgb "#f781bf" lw 2; + +set out "roc-color.eps" + +set pointsize 2.0 + +set xlab "Error rate of mapped PacBio reads" +set ylab "Fraction of mapped reads" off +1.8 +set ytics 0.02 +set yran [0.9:1.02] + +set log x +set format x "10^{%L}" +set key bot right +plot "<./eval2roc.pl minimap2.eval" u 2:3 t "minimap2" w lp ls 1, \ + "<./eval2roc.pl minigraph.eval" u 2:3 t "minigraph" w lp ls 2, \ + "<./eval2roc.pl minichain.eval" u 2:3 t "minichain" w lp ls 3 +unset label diff --git a/data/CHM13Y_10H/eval2roc.pl b/data/CHM13Y_10H/eval2roc.pl new file mode 100644 index 0000000..e5bf7ee --- /dev/null +++ b/data/CHM13Y_10H/eval2roc.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Getopt::Std; + +my %opts = (n=>153955, s=>100); +getopts('n:', \%opts); + +my $pseudo = .5; +my $tot = $pseudo; +my $err = $pseudo; +my $tot_last_out = -$opts{s}; +my $state = 0; +my $mapq = 0; +while (<>) { + chomp; + if (/^Q\t(\d+)\t(\d+)\t(\d+)/) { + $tot += $2; + $err += $3; + if ($tot - $tot_last_out >= $opts{s}) { + print join("\t", $1, $err/$tot, $tot / $opts{n}), "\n"; + $tot_last_out = $tot; + $state = 0; + } else { + $state = 1; + $mapq = $1; + } + } +} +if ($state) { + print join("\t", $mapq, $err/$tot, $tot / $opts{n}), "\n"; +} diff --git a/data/CHM13Y_10H/roc.gp b/data/CHM13Y_10H/roc.gp new file mode 100644 index 0000000..eb4b5c9 --- /dev/null +++ b/data/CHM13Y_10H/roc.gp @@ -0,0 +1,26 @@ +set t po eps enh co so "Helvetica,26" + +set style line 1 lt 1 pt 1 lc rgb "#e41a1c" lw 2; +set style line 2 lt 1 pt 2 lc rgb "#377eb8" lw 2; +set style line 3 lt 1 pt 3 lc rgb "#4daf4a" lw 2; +set style line 4 lt 1 pt 4 lc rgb "#984ea3" lw 2; +set style line 5 lt 1 pt 6 lc rgb "#ff7f00" lw 2; +set style line 6 lt 1 pt 8 lc rgb "#f781bf" lw 2; + +set out "roc-color.eps" + +set pointsize 2.0 + +set xlab "Error rate of mapped PacBio reads" +set ylab "Fraction of mapped reads" off +1.8 +set ytics 0.02 +set yran [0.9:1.02] + +set log x +set format x "10^{%L}" +set key bot right +plot "<./eval2roc.pl minichain_10H.eval" u 2:3 t "minichain" w lp ls 1, \ + "<./eval2roc.pl minigraph_10H.eval" u 2:3 t "minigraph" w lp ls 2, \ + "<./eval2roc.pl GraphAligner_10H.eval" u 2:3 t "GraphAligner" w lp ls 3, \ + "<./eval2roc.pl GraphChainer_10H.eval" u 2:3 t "GraphChainer" w lp ls 4 +unset label diff --git a/data/CHM13Y_95H/eval2roc.pl b/data/CHM13Y_95H/eval2roc.pl new file mode 100644 index 0000000..e5bf7ee --- /dev/null +++ b/data/CHM13Y_95H/eval2roc.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Getopt::Std; + +my %opts = (n=>153955, s=>100); +getopts('n:', \%opts); + +my $pseudo = .5; +my $tot = $pseudo; +my $err = $pseudo; +my $tot_last_out = -$opts{s}; +my $state = 0; +my $mapq = 0; +while (<>) { + chomp; + if (/^Q\t(\d+)\t(\d+)\t(\d+)/) { + $tot += $2; + $err += $3; + if ($tot - $tot_last_out >= $opts{s}) { + print join("\t", $1, $err/$tot, $tot / $opts{n}), "\n"; + $tot_last_out = $tot; + $state = 0; + } else { + $state = 1; + $mapq = $1; + } + } +} +if ($state) { + print join("\t", $mapq, $err/$tot, $tot / $opts{n}), "\n"; +} diff --git a/data/CHM13Y_95H/roc.gp b/data/CHM13Y_95H/roc.gp new file mode 100644 index 0000000..560d477 --- /dev/null +++ b/data/CHM13Y_95H/roc.gp @@ -0,0 +1,26 @@ +set t po eps enh co so "Helvetica,26" + +set style line 1 lt 1 pt 1 lc rgb "#e41a1c" lw 2; +set style line 2 lt 1 pt 2 lc rgb "#377eb8" lw 2; +set style line 3 lt 1 pt 3 lc rgb "#4daf4a" lw 2; +set style line 4 lt 1 pt 4 lc rgb "#984ea3" lw 2; +set style line 5 lt 1 pt 6 lc rgb "#ff7f00" lw 2; +set style line 6 lt 1 pt 8 lc rgb "#f781bf" lw 2; + +set out "roc-color.eps" + +set pointsize 2.0 + +set xlab "Error rate of mapped PacBio reads" +set ylab "Fraction of mapped reads" off +1.8 +set ytics 0.02 +set yran [0.9:1.02] + +set log x +set format x "10^{%L}" +set key bot right +plot "<./eval2roc.pl minichain_95H.eval" u 2:3 t "minichain" w lp ls 1, \ + "<./eval2roc.pl minigraph_95H.eval" u 2:3 t "minigraph" w lp ls 2, \ + "<./eval2roc.pl GraphAligner_95H.eval" u 2:3 t "GraphAligner" w lp ls 3, \ + "<./eval2roc.pl GraphChainer_95H.eval" u 2:3 t "GraphChainer" w lp ls 4 +unset label diff --git a/data/Linear_run.sh b/data/Linear_run.sh new file mode 100644 index 0000000..113822d --- /dev/null +++ b/data/Linear_run.sh @@ -0,0 +1,7 @@ +echo "Mapping reads with minimap2..." +./minimap2/minimap2 -t32 -cx map-pb CHM13Y.fa Reads/CHM13Y_reads_5%.fa > Results/minimap2/CHM13Y_L_5%.gaf +echo "Mapping reads with minigraph..." +./minigraph/minigraph -t32 -cx lr CHM13Y.fa Reads/CHM13_reads_5%.fa > Results/minigraph/CHM13Y_L_5%.gaf +echo "Mapping reads with minichain..." +../minichain -t32 -cx lr CHM13Y.fa Reads/CHM13_reads_5%.fa -y1 > Results/minichain/CHM13Y_L_5%.gaf +echo "Mapping reads to Linear CHM13Y genome." \ No newline at end of file diff --git a/data/evaluate.sh b/data/evaluate.sh new file mode 100644 index 0000000..646aeab --- /dev/null +++ b/data/evaluate.sh @@ -0,0 +1,25 @@ +conda activate minichain_data +echo "Evaluating results for graphs..." +./k8 paftools.js mapeval Results/GraphChainer/CHM13Y_95H_5%_stable.gaf > CHM13Y_95H/GraphChainer_95H.eval +./k8 paftools.js mapeval Results/GraphChainer/CHM13Y_10H_5%_stable.gaf > CHM13Y_10H/GraphChainer_10H.eval + +./k8 paftools.js mapeval Results/GraphAligner/CHM13Y_95H_5%_stable.gaf > CHM13Y_95H/GraphAligner_95H.eval +./k8 paftools.js mapeval Results/GraphAligner/CHM13Y_10H_5%_stable.gaf > CHM13Y_10H/GraphAligner_10H.eval + +./k8 paftools.js mapeval Results/minigraph/CHM13Y_95H_5%.gaf > CHM13Y_95H/minigraph_95H.eval +./k8 paftools.js mapeval Results/minigraph/CHM13Y_10H_5%.gaf > CHM13Y_10H/minigraph_10H.eval + +./k8 paftools.js mapeval Results/minichain/CHM13Y_95H_5%.gaf > CHM13Y_95H/minichain_95H.eval +./k8 paftools.js mapeval Results/minichain/CHM13Y_10H_5%.gaf > CHM13Y_10H/minichain_10H.eval + +echo "Evaluating results for linear genome..." +./k8 paftools.js mapeval Results/minigraph/CHM13Y_L_5%.gaf > CHM13Y/minigraph.eval +./k8 paftools.js mapeval Results/minichain/CHM13Y_L_5%.gaf > CHM13Y/minichain.eval +./k8 paftools.js mapeval Results/minimap2/CHM13Y_L_5%.gaf > CHM13Y/minimap2.eval + +gnuplot CHM13Y_95H/roc.gp +convert -density 1200 CHM13Y_95H/roc-color.eps -resize 1920x1080 95H.jpg +gnuplot CHM13Y_10H/roc.gp +convert -density 1200 CHM13Y_10H/roc-color.eps -resize 1920x1080 10H.jpg +gnuplot CHM13Y/roc.gp +convert -density 1200 CHM13Y/roc-color.eps -resize 1920x1080 Linear.jpg \ No newline at end of file diff --git a/data/generate_graphs.sh b/data/generate_graphs.sh new file mode 100644 index 0000000..63572e1 --- /dev/null +++ b/data/generate_graphs.sh @@ -0,0 +1,113 @@ +echo " Generating 10H graph ..." +./minigraph/minigraph -t32 --inv=off -cxggs \ +CHM13Y.fa \ +HG002.1.fa \ +HG002.2.fa \ +HG00438.1.fa \ +HG00438.2.fa \ +HG005.1.fa \ +HG005.2.fa \ +HG00621.1.fa \ +HG00621.2.fa \ +HG00673.1.fa > CHM13Y_10H.gfa +echo " Generated 10H graph" + +echo " Generating 95H graph" +./minigraph/minigraph -t32 --inv=off -cxggs \ +CHM13Y.fa \ +HG002.1.fa \ +HG002.2.fa \ +HG00438.1.fa \ +HG00438.2.fa \ +HG005.1.fa \ +HG005.2.fa \ +HG00621.1.fa \ +HG00621.2.fa \ +HG00673.1.fa \ +HG00673.2.fa \ +HG00733.1.fa \ +HG00733.2.fa \ +HG00735.1.fa \ +HG00735.2.fa \ +HG00741.1.fa \ +HG00741.2.fa \ +HG01071.1.fa \ +HG01071.2.fa \ +HG01106.1.fa \ +HG01106.2.fa \ +HG01109.1.fa \ +HG01109.2.fa \ +HG01123.1.fa \ +HG01123.2.fa \ +HG01175.1.fa \ +HG01175.2.fa \ +HG01243.1.fa \ +HG01243.2.fa \ +HG01258.1.fa \ +HG01258.2.fa \ +HG01358.1.fa \ +HG01358.2.fa \ +HG01361.1.fa \ +HG01361.2.fa \ +HG01891.1.fa \ +HG01891.2.fa \ +HG01928.1.fa \ +HG01928.2.fa \ +HG01952.1.fa \ +HG01952.2.fa \ +HG01978.1.fa \ +HG01978.2.fa \ +HG02055.1.fa \ +HG02055.2.fa \ +HG02080.1.fa \ +HG02080.2.fa \ +HG02109.1.fa \ +HG02109.2.fa \ +HG02145.1.fa \ +HG02145.2.fa \ +HG02148.1.fa \ +HG02148.2.fa \ +HG02257.1.fa \ +HG02257.2.fa \ +HG02486.1.fa \ +HG02486.2.fa \ +HG02559.1.fa \ +HG02559.2.fa \ +HG02572.1.fa \ +HG02572.2.fa \ +HG02622.1.fa \ +HG02622.2.fa \ +HG02630.1.fa \ +HG02630.2.fa \ +HG02717.1.fa \ +HG02717.2.fa \ +HG02723.1.fa \ +HG02723.2.fa \ +HG02818.1.fa \ +HG02818.2.fa \ +HG02886.1.fa \ +HG02886.2.fa \ +HG03098.1.fa \ +HG03098.2.fa \ +HG03453.1.fa \ +HG03453.2.fa \ +HG03486.1.fa \ +HG03486.2.fa \ +HG03492.1.fa \ +HG03492.2.fa \ +HG03516.1.fa \ +HG03516.2.fa \ +HG03540.1.fa \ +HG03540.2.fa \ +HG03579.1.fa \ +HG03579.2.fa \ +NA18906.1.fa \ +NA18906.2.fa \ +NA19240.1.fa \ +NA19240.2.fa \ +NA20129.1.fa \ +NA20129.2.fa \ +NA21309.1.fa \ +NA21309.2.fa > CHM13Y_95H.gfa +echo " Generated 95H graph" +echo "Generated 10H graph and 95H graph" \ No newline at end of file diff --git a/data/get_deps.sh b/data/get_deps.sh new file mode 100644 index 0000000..b50c122 --- /dev/null +++ b/data/get_deps.sh @@ -0,0 +1,48 @@ +echo "Getting agc, pbsim2, imagemagick and samtools with conda..." +conda create -n minichain_data +conda activate minichain_data +conda install -y -c bioconda agc pbsim2 samtools +conda install -y -c conda-forge imagemagick gnuplot +conda deactivate + +echo "Getting k8 ..." +curl -L https://github.com/attractivechaos/k8/releases/download/v0.2.4/k8-0.2.4.tar.bz2 | tar -jxf - +cp k8-0.2.4/k8-`uname -s` k8 + +echo "Getting Minigraph ..." +git clone https://github.com/lh3/minigraph +cd minigraph && make +cd .. + +echo "Getting Minimap2 ..." +git clone https://github.com/lh3/minimap2 +cd minimap2 && make +cd .. + +echo "Getting paftools.js and mgutils.js ..." +cp minigraph/misc/mgutils.js mgutils.js +cp minimap2/misc/paftools.js paftools.js + +echo "Getting GraphAligner..." +git clone https://github.com/maickrau/GraphAligner.git +cd GraphAligner +git submodule update --init --recursive +conda env create -f CondaEnvironment_linux.yml +conda activate GraphAligner +make -j32 +conda deactivate +cd .. + +echo "Getting GraphChainer..." +git clone https://github.com/algbio/GraphChainer.git +git submodule update --init --recursive +conda env create -f CondaEnvironment.yml +conda activate GraphChainer +make -j32 +conda deactivate +cd .. + +echo "Getting P6C4.model ..." +wget "https://github.com/yukiteruono/pbsim2/blob/master/data/P6C4.model" + +echo "Installed dependencies." diff --git a/data/get_genomes.sh b/data/get_genomes.sh new file mode 100644 index 0000000..47cb377 --- /dev/null +++ b/data/get_genomes.sh @@ -0,0 +1,5 @@ +conda activate minichain_data +echo "Downloading Genomes..." +wget "curl -o HPRC-yr1.agc https://zenodo.org/record/5826274/files/HPRC-yr1.agc?download=1" +echo "Extracting Genomes..." +agc getcol -o . HPRC-yr1.agc \ No newline at end of file diff --git a/data/graph_run.sh b/data/graph_run.sh new file mode 100644 index 0000000..e23c934 --- /dev/null +++ b/data/graph_run.sh @@ -0,0 +1,17 @@ +echo "Mapping reads with minigraph..." +./minigraph/minigraph -t32 -cx lr CHM13Y_95H.gfa Reads/CHM13_reads_5%.fa > Results/minigraph/CHM13Y_95H_5%.gaf +./minigraph/minigraph -t32 -cx lr CHM13Y_10H.gfa Reads/CHM13_reads_5%.fa > Results/minigraph/CHM13Y_10H_5%.gaf +echo "Mapping reads with minichain..." +../minichain -t32 -cx lr CHM13Y_95H.gfa Reads/CHM13_reads_5%.fa > Results/minichain/CHM13Y_95H_5%.gaf +../minichain -t32 -cx lr CHM13Y_10H.gfa Reads/CHM13_reads_5%.fa> Results/minichain/CHM13Y_10H_5%.gaf +echo "Mapping reads with GraphAligner..." +/usr/bin/time -v ./bin/GraphAligner -t32 -x vg -g CHM13Y_95H.gfa -f Reads/CHM13_reads_5%.fa -a Results/GraphAligner/CHM13Y_95H_5%.gaf +/usr/bin/time -v ./bin/GraphAligner -t32 -x vg -g CHM13Y_10H.gfa -f Reads/CHM13_reads_5%.fa -a Results/GraphAligner/CHM13Y_10H_5%.gaf +./k8 mgutils.js stableGaf CHM13Y_10H.gfa Results/GraphAligner/CHM13Y_10H_5%.gaf > Results/GraphAligner/CHM13Y_10H_5%_stable.gaf +./k8 mgutils.js stableGaf CHM13Y_95H.gfa Results/GraphAligner/CHM13Y_95H_5%.gaf > Results/GraphAligner/CHM13Y_95H_5%_stable.gaf +echo "Mapping reads with GraphChainer..." +/usr/bin/time -v ./bin/GraphChainer -t32 -g CHM13Y_95H.gfa -f Reads/CHM13_reads_5%.fa -a Results/GraphChainer/CHM13Y_95H_5%.gaf +/usr/bin/time -v ./bin/GraphChainer -t32 -g CHM13Y_10H.gfa -f Reads/CHM13_reads_5%.fa -a Results/GraphChainer/CHM13Y_10H_5%.gaf +./k8 mgutils.js stableGaf CHM13Y_10H.gfa Results/GraphChainer/CHM13Y_10H_5%.gaf > Results/GraphChainer/CHM13Y_10H_5%_stable.gaf +./k8 mgutils.js stableGaf CHM13Y_95H.gfa Results/GraphChainer/CHM13Y_95H_5%.gaf > Results/GraphChainer/CHM13Y_95H_5%_stable.gaf +echo "Mapped reads to graphs" \ No newline at end of file diff --git a/data/reproduce.sh b/data/reproduce.sh new file mode 100644 index 0000000..6c75050 --- /dev/null +++ b/data/reproduce.sh @@ -0,0 +1,15 @@ +echo "Getting dependencies..." +sh get_deps.sh +echo "Downloading genomes..." +sh get_genomes.sh +echo "Simulating Reads..." +sh simulated_reads.sh +echo "Generating graphs..." +sh generate_graphs.sh +echo "Mapping reads to linear CHM13Y reference..." +sh Linear_run.sh +echo "Mapping reads to graphs..." +sh graph_run.sh +echo "Evaluating results..." +sh evaluate.sh +echo "Results reproduced!" \ No newline at end of file diff --git a/data/simulated_reads.sh b/data/simulated_reads.sh new file mode 100644 index 0000000..e816dbd --- /dev/null +++ b/data/simulated_reads.sh @@ -0,0 +1,33 @@ +conda activate minichain_data + +echo "Extracting reads..." +for i in $(seq 1 1 22) +do + echo "Extracting chr$i ..." + samtools faidx CHM13Y.fa chr$i > Ref/chr$i.fasta +done +samtools faidx CHM13Y.fa chrX > Ref/chr23.fasta +samtools faidx CHM13Y.fa chrY > Ref/chr24.fasta + + +echo "Simulating reads..." +for i in $(seq 1 1 24) +do + echo "Simulating reads for chr$i ... " + pbsim --depth 0.5 --length-min 10000 --length-mean 10000 --length-max 10000 --accuracy-mean 0.95 --accuracy-max 0.95 --accuracy-min 0.95 --hmm_model P6C4.model Ref/chr$i.fasta --prefix Ref/chr_ + mv Ref/chr__0001.maf Ref/chr$i.maf + rm -rf Ref/chr_* + echo "Simulated reads for chr$i" +done +echo "Finished simulating reads for CHM13Y with 5% error rate" + +echo "Embedding metadata to reads..." +for i in $(seq 1 1 24) +do + ./k8 paftools.js pbsim2fq Ref/chr$i.fasta.fai Ref/chr$i.maf > Reads/read_chr$i.fa + echo "Processed chr$i" +done +cat Reads/read_* > Reads/CHM13Y_reads_5%.fa +echo "Finished embedding metadata to reads with "pbsim2fq"" + + diff --git a/doc/example1.png b/doc/example1.png deleted file mode 100644 index f03b2bfced79d2c357e7e98e6f4cea8de98c606e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73581 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%0DMgA#Kg3VRuX{^vqKR&j*6*l3Qn-2E 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
dzkP&CL)|ZpaWYbwFOG$%`_Ly%zJ&dN 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 R;IRMz002ovPDHLkV1m#Sf)@Y) diff --git a/doc/example2.png b/doc/example2.png deleted file mode 100644 index d2484b7a69784e1542c4cf38ca0ac4efa90b19af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108251 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 diff --git a/main.c b/main.c index 14e7882..a9c1cdd 100644 --- a/main.c +++ b/main.c @@ -252,13 +252,13 @@ int main(int argc, char *argv[]) fprintf(fp_help, " -p FLOAT min secondary-to-primary score ratio [%g]\n", opt.pri_ratio); fprintf(fp_help, " -N INT retain at most INT secondary mappings [%d]\n", opt.best_n); fprintf(fp_help, " -D skip self diagonal matches\n"); - fprintf(fp_help, " Graph generation:\n"); - fprintf(fp_help, " --ggen perform incremental graph generation\n"); - fprintf(fp_help, " -q INT min mapping quality [%d]\n", gpt.min_mapq); - fprintf(fp_help, " -l NUM min alignment length [%d]\n", gpt.min_map_len); - fprintf(fp_help, " -d NUM min alignment length for depth calculation [%d]\n", gpt.min_depth_len); - fprintf(fp_help, " -L INT min variant length [%d]\n", gpt.min_var_len); - fprintf(fp_help, " --call call the graph path in each bubble and output BED\n"); + // fprintf(fp_help, " Graph generation:\n"); + // fprintf(fp_help, " --ggen perform incremental graph generation\n"); + // fprintf(fp_help, " -q INT min mapping quality [%d]\n", gpt.min_mapq); + // fprintf(fp_help, " -l NUM min alignment length [%d]\n", gpt.min_map_len); + // fprintf(fp_help, " -d NUM min alignment length for depth calculation [%d]\n", gpt.min_depth_len); + // fprintf(fp_help, " -L INT min variant length [%d]\n", gpt.min_var_len); + // fprintf(fp_help, " --call call the graph path in each bubble and output BED\n"); fprintf(fp_help, " Input/output:\n"); fprintf(fp_help, " -t INT number of threads [%d]\n", n_threads); fprintf(fp_help, " -s float scale factor [%f]\n", scale_factor); @@ -271,9 +271,9 @@ int main(int argc, char *argv[]) fprintf(fp_help, " Preset:\n"); fprintf(fp_help, " -x STR preset []\n"); fprintf(fp_help, " - lr: noisy long read mapping (the default)\n"); - fprintf(fp_help, " - asm: asm-to-ref mapping\n"); - fprintf(fp_help, " - sr: short reads\n"); - fprintf(fp_help, " - ggs: incremental graph generation\n"); + // fprintf(fp_help, " - asm: asm-to-ref mapping\n"); + // fprintf(fp_help, " - sr: short reads\n"); + // fprintf(fp_help, " - ggs: incremental graph generation\n"); return fp_help == stdout? 0 : 1; } diff --git a/minigraph.h b/minigraph.h index ffbe28a..ba4787a 100644 --- a/minigraph.h +++ b/minigraph.h @@ -4,7 +4,7 @@ #include #include "gfa.h" -#define MG_VERSION "0.19-r551" +#define MG_VERSION "Minichain : 1.0, Minigraph : 0.19-r551" // "0.19-r551" #define MG_M_SPLICE 0x10 #define MG_M_SR 0x20 diff --git a/tex/Makefile b/tex/Makefile deleted file mode 100644 index 5a3f842..0000000 --- a/tex/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -all:minigraph.pdf - -minigraph.bbl:minigraph.bib minigraph.tex - pdflatex minigraph; bibtex minigraph - -minigraph.pdf:minigraph.tex minigraph.bbl - pdflatex minigraph; pdflatex minigraph - -lite:minigraph.tex - pdflatex minigraph - -clean: - rm -f minigraph.bbl minigraph.log minigraph.aux diff --git a/tex/minigraph.bib b/tex/minigraph.bib deleted file mode 100644 index a9b9b69..0000000 --- a/tex/minigraph.bib +++ /dev/null @@ -1,676 +0,0 @@ -@article{Schneider:2017aa, - Author = {Schneider, Valerie A and Graves-Lindsay, Tina and Howe, Kerstin and Bouk, Nathan and Chen, Hsiu-Chuan and Kitts, Paul A and Murphy, Terence D and Pruitt, Kim D and Thibaud-Nissen, Fran{\c c}oise and Albracht, Derek and Fulton, Robert S and Kremitzki, Milinn and Magrini, Vincent and Markovic, Chris and McGrath, Sean and Steinberg, Karyn Meltz and Auger, Kate and Chow, William and Collins, Joanna and Harden, Glenn and Hubbard, Timothy and Pelan, Sarah and Simpson, Jared T and Threadgold, Glen and Torrance, James and Wood, Jonathan M and Clarke, Laura and Koren, Sergey and Boitano, Matthew and Peluso, Paul and Li, Heng and Chin, Chen-Shan and Phillippy, Adam M and Durbin, Richard and Wilson, Richard K and Flicek, Paul and Eichler, Evan E and Church, Deanna M}, - Journal = {Genome Res}, - Month = {May}, - Number = {5}, - Doi = {10.1101/gr.213611.116}, - Pages = {849-864}, - Title = {Evaluation of {GRCh38} and de novo haploid genome assemblies demonstrates the enduring quality of the reference assembly}, - Volume = {27}, - Year = {2017}} - -@article{Li:2018aa, - Author = {Li, Heng and Bloom, Jonathan M and Farjoun, Yossi and Fleharty, Mark and Gauthier, Laura and Neale, Benjamin and MacArthur, Daniel}, - Journal = {Nat Methods}, - Month = {Aug}, - Number = {8}, - Pages = {595-597}, - Title = {A synthetic-diploid benchmark for accurate variant-calling evaluation}, - Volume = {15}, - Doi = {10.1038/s41592-018-0054-7}, - Year = {2018}} - -@article{Huddleston:2017aa, - Author = {Huddleston, John and Chaisson, Mark J P and Steinberg, Karyn Meltz and Warren, Wes and Hoekzema, Kendra and Gordon, David and Graves-Lindsay, Tina A and Munson, Katherine M and Kronenberg, Zev N and Vives, Laura and Peluso, Paul and Boitano, Matthew and Chin, Chen-Shin and Korlach, Jonas and Wilson, Richard K and Eichler, Evan E}, - Journal = {Genome Res}, - Month = {May}, - Number = {5}, - Pages = {677-685}, - Title = {Discovery and genotyping of structural variation from long-read haploid genome sequence data}, - Volume = {27}, - Doi = {10.1101/gr.214007.116}, - Year = {2017}} - -@article{Eichler_2010, - Author = {Eichler, Evan E. and Flint, Jonathan and Gibson, Greg and Kong, Augustine and Leal, Suzanne M. and Moore, Jason H. and Nadeau, Joseph H.}, - Journal = {Nature Reviews Genetics}, - Month = {Jun}, - Number = {6}, - Pages = {446--450}, - Doi = {10.1038/nrg2809}, - Title = {Missing heritability and strategies for finding the underlying causes of complex disease}, - Volume = {11}, - Year = {2010}} - -@article{Wenger_2019, - Author = {Wenger, Aaron M. and Peluso, Paul and Rowell, William J. and Chang, Pi-Chuan and Hall, Richard J. and Concepcion, Gregory T. and Ebler, Jana and Fungtammasan, Arkarachai and Kolesnikov, Alexey and Olson, Nathan D. and et al.}, - Doi = {10.1038/s41587-019-0217-9}, - Issn = {1546-1696}, - Journal = {Nature Biotechnology}, - Month = {Aug}, - Number = {10}, - Pages = {1155--1162}, - Publisher = {Springer Science and Business Media LLC}, - Title = {Accurate circular consensus long-read sequencing improves variant detection and assembly of a human genome}, - Volume = {37}, - Year = {2019}} - -@article{Audano:2019aa, - Author = {Audano, Peter A and Sulovari, Arvis and Graves-Lindsay, Tina A and Cantsilieris, Stuart and Sorensen, Melanie and Welch, AnneMarie E and Dougherty, Max L and Nelson, Bradley J and Shah, Ankeeta and Dutcher, Susan K and Warren, Wesley C and Magrini, Vincent and McGrath, Sean D and Li, Yang I and Wilson, Richard K and Eichler, Evan E}, - Journal = {Cell}, - Month = {Jan}, - Number = {3}, - Pages = {663-675.e19}, - Doi = {10.1016/j.cell.2018.12.019}, - Title = {Characterizing the Major Structural Variant Alleles of the Human Genome}, - Volume = {176}, - Year = {2019}} - -@article{Boucher_2019, - Author = {Boucher, Christina and Gagie, Travis and Kuhnle, Alan and Langmead, Ben and Manzini, Giovanni and Mun, Taher}, - Journal = {Algorithms for Molecular Biology}, - Month = {May}, - Number = {1}, - Title = {Prefix-free parsing for building big {BWTs}}, - Volume = {14}, - Doi = {10.1186/s13015-019-0148-5}, - Year = {2019}} - -@article{Makinen:2010aa, - Author = {M{\"a}kinen, Veli and Navarro, Gonzalo and Sir{\'e}n, Jouni and V{\"a}lim{\"a}ki, Niko}, - Journal = {J Comput Biol}, - Month = {Mar}, - Number = {3}, - Pages = {281-308}, - Doi = {10.1089/cmb.2009.0169}, - Title = {Storage and retrieval of highly repetitive sequence collections}, - Volume = {17}, - Year = {2010}} - -@article{Liu_2016, - Author = {Liu, Bo and Zhu, Dixian and Wang, Yadong}, - Journal = {Bioinformatics}, - Month = {Jun}, - Number = {12}, - Pages = {i174--i182}, - Doi = {10.1093/bioinformatics/btw266}, - Title = {{deBWT}: parallel construction of {Burrows}--{Wheeler} {Transform} for large collection of genomes with de Bruijn-branch encoding}, - Volume = {32}, - Year = {2016}} - -@article{NA2016159, - Author = {Joong Chae Na and Hyunjoon Kim and Heejin Park and Thierry Lecroq and Martine L{\'e}onard and Laurent Mouchard and Kunsoo Park}, - Journal = {Theoretical Computer Science}, - Pages = {159 - 170}, - Title = {{FM-index} of alignment: A compressed index for similar strings}, - Doi = {10.1016/j.tcs.2015.08.008}, - Volume = {638}, - Year = {2016}} - -@article{cpgc:2016aa, - Author = {{Computational Pan-Genomics Consortium}}, - Journal = {Brief Bioinform}, - Month = {Oct}, - Number = {1}, - Pages = {118--135}, - Doi = {10.1093/bib/bbw089}, - Title = {Computational pan-genomics: status, promises and challenges}, - Volume = {19}, - Year = {2016}} - -@article{Vernikos:2015aa, - Author = {Vernikos, George and Medini, Duccio and Riley, David R and Tettelin, Herv{\'e}}, - Journal = {Curr Opin Microbiol}, - Month = {Feb}, - Pages = {148-54}, - Title = {Ten years of pan-genome analyses}, - Doi = {10.1016/j.mib.2014.11.016}, - Volume = {23}, - Year = {2015}} - -@article{Liu:2016ac, - Author = {Liu, Bo and Guo, Hongzhe and Brudno, Michael and Wang, Yadong}, - Journal = {Bioinformatics}, - Month = {Nov}, - Number = {21}, - Pages = {3224-3232}, - Title = {{deBGA}: read alignment with {de Bruijn} graph-based seed and extension}, - Doi = {10.1093/bioinformatics/btw371}, - Volume = {32}, - Year = {2016}} - -@article{Marcus:2014xy, - Author = {Marcus, Shoshana and Lee, Hayan and Schatz, Michael C}, - Journal = {Bioinformatics}, - Month = {Dec}, - Number = {24}, - Pages = {3476-83}, - Title = {{SplitMEM}: a graphical algorithm for pan-genome analysis with suffix skips}, - Doi = {10.1093/bioinformatics/btu756}, - Volume = {30}, - Year = {2014}} - -@article{Baier_2015, - Author = {Baier, Uwe and Beller, Timo and Ohlebusch, Enno}, - Journal = {Bioinformatics}, - Month = {Oct}, - Number = {4}, - Pages = {497--504}, - Doi = {10.1093/bioinformatics/btv603}, - Title = {Graphical pan-genome analysis with compressed suffix trees and the {Burrows}--{Wheeler} transform}, - Volume = {32}, - Year = {2015}} - -@article{Beller:2016ab, - Author = {Beller, Timo and Ohlebusch, Enno}, - Journal = {Algorithms Mol Biol}, - Pages = {20}, - Title = {A representation of a compressed {de Bruijn} graph for pan-genome analysis that enables search}, - Volume = {11}, - Doi = {10.1186/s13015-016-0083-7}, - Year = {2016}} - -@article{Minkin_2016, - Author = {Minkin, Ilia and Pham, Son and Medvedev, Paul}, - Journal = {Bioinformatics}, - Number = {24}, - Pages = {4024-4032}, - Title = {{TwoPaCo}: an efficient algorithm to build the compacted de {Bruijn} graph from many complete genomes}, - Doi = {10.1093/bioinformatics/btw609}, - Volume = {33}, - Year = {2017}} - -@article{Chikhi_2016, - Author = {Chikhi, Rayan and Limasset, Antoine and Medvedev, Paul}, - Journal = {Bioinformatics}, - Month = {Jun}, - Number = {12}, - Pages = {i201--i208}, - Title = {Compacting de {Bruijn} graphs from sequencing data quickly and in low memory}, - Volume = {32}, - Doi = {10.1093/bioinformatics/btw279}, - Year = {2016}} - -@article{Chikhi:2015aa, - Author = {Chikhi, Rayan and Limasset, Antoine and Jackman, Shaun and Simpson, Jared T and Medvedev, Paul}, - Journal = {J Comput Biol}, - Month = {May}, - Number = {5}, - Pages = {336-52}, - Title = {On the representation of de Bruijn graphs}, - Doi = {10.1089/cmb.2014.0160}, - Volume = {22}, - Year = {2015}} - -@article{Dilthey_2015, - Author = {Dilthey, Alexander and Cox, Charles and Iqbal, Zamin and Nelson, Matthew R and McVean, Gil}, - Journal = {Nature Genetics}, - Month = {Apr}, - Number = {6}, - Pages = {682--688}, - Title = {Improved genome inference in the {MHC} using a population reference graph}, - Doi = {10.1038/ng.3257}, - Volume = {47}, - Year = {2015}} - -@article{Eggertsson:2017aa, - Author = {Eggertsson, Hannes P and Jonsson, Hakon and Kristmundsdottir, Snaedis and Hjartarson, Eirikur and Kehr, Birte and Masson, Gisli and Zink, Florian and Hjorleifsson, Kristjan E and Jonasdottir, Aslaug and Jonasdottir, Adalbjorg and Jonsdottir, Ingileif and Gudbjartsson, Daniel F and Melsted, Pall and Stefansson, Kari and Halldorsson, Bjarni V}, - Journal = {Nat Genet}, - Month = {Nov}, - Number = {11}, - Pages = {1654-1660}, - Title = {Graphtyper enables population-scale genotyping using pangenome graphs}, - Volume = {49}, - Doi = {10.1038/ng.3964}, - Year = {2017}} - -@article{Rakocevic_2019, - Author = {Rakocevic, Goran and Semenyuk, Vladimir and Lee, Wan-Ping and Spencer, James and Browning, John and Johnson, Ivan J. and Arsenijevic, Vladan and Nadj, Jelena and Ghose, Kaushik and Suciu, Maria C. and et al.}, - Journal = {Nature Genetics}, - Month = {Jan}, - Number = {2}, - Pages = {354--362}, - Title = {Fast and accurate genomic analyses using genome graphs}, - Volume = {51}, - Doi = {10.1038/s41588-018-0316-4}, - Year = {2019}} - -@article{Garrison:2018aa, - Author = {Garrison, Erik and Sir{\'e}n, Jouni and Novak, Adam M and Hickey, Glenn and Eizenga, Jordan M and Dawson, Eric T and Jones, William and Garg, Shilpa and Markello, Charles and Lin, Michael F and Paten, Benedict and Durbin, Richard}, - Journal = {Nat Biotechnol}, - Month = {Oct}, - Number = {9}, - Pages = {875-879}, - Title = {Variation graph toolkit improves read mapping by representing genetic variation in the reference}, - Doi = {10.1038/nbt.4227}, - Volume = {36}, - Year = {2018}} - -@article{Sibbesen:2018aa, - Author = {Sibbesen, Jonas Andreas and Maretty, Lasse and {Danish Pan-Genome Consortium} and Krogh, Anders}, - Journal = {Nat Genet}, - Month = {Jul}, - Number = {7}, - Pages = {1054-1059}, - Title = {Accurate genotyping across variant classes and lengths using variant graphs}, - Volume = {50}, - Doi = {10.1038/s41588-018-0145-5}, - Year = {2018}} - -@article{Li:2016aa, - Author = {Li, Heng}, - Journal = {Bioinformatics}, - Month = {Jul}, - Number = {14}, - Pages = {2103-10}, - Title = {Minimap and miniasm: fast mapping and de novo assembly for noisy long sequences}, - Doi = {10.1093/bioinformatics/btw152}, - Volume = {32}, - Year = {2016}} - -@article{Rautiainen810812, - Author = {Rautiainen, Mikko and Marschall, Tobias}, - Journal = {bioRxiv}, - Title = {{GraphAligner}: Rapid and Versatile Sequence-to-Graph Alignment}, - Doi = {10.1101/810812}, - year = {2019}} - -@article{Li:2018ab, - Author = {Li, Heng}, - Journal = {Bioinformatics}, - Month = {Sep}, - Number = {18}, - Pages = {3094-3100}, - Title = {Minimap2: pairwise alignment for nucleotide sequences}, - Volume = {34}, - Doi = {10.1093/bioinformatics/bty191}, - Year = {2018}} - -@article{Ono:2013aa, - Author = {Ono, Yukiteru and Asai, Kiyoshi and Hamada, Michiaki}, - Journal = {Bioinformatics}, - Month = {Jan}, - Number = {1}, - Pages = {119-21}, - Title = {{PBSIM}: {PacBio} reads simulator--toward accurate genome assembly}, - Volume = {29}, - Doi = {10.1093/bioinformatics/bts649}, - Year = {2013}} - -@article{Garg810341, - Author = {Garg, Shilpa and Fungtammasan, Arkarachai and Carroll, Andrew and Chou, Mike and Schmitt, Anthony and Zhou, Xiang and Mac, Stephen and Peluso, Paul and Hatas, Emily and Ghurye, Jay and Maguire, Jared and Mahmoud, Medhat and Cheng, Haoyu and Heller, David and Zook, Justin M. and Moemke, Tobias and Marschall, Tobias and Sedlazeck, Fritz J. and Aach, John and Chin, Chen-Shan and Church, George M. and Li, Heng}, - Journal = {bioRxiv}, - Title = {Efficient chromosome-scale haplotype-resolved assembly of human genomes}, - Doi = {10.1101/810341}, - Year = {2019}} - -@article{Robinson:2011aa, - Author = {Robinson, James T and Thorvaldsd{\'o}ttir, Helga and Winckler, Wendy and Guttman, Mitchell and Lander, Eric S and Getz, Gad and Mesirov, Jill P}, - Journal = {Nat Biotechnol}, - Month = {Jan}, - Number = {1}, - Pages = {24-6}, - Title = {Integrative genomics viewer}, - Volume = {29}, - Doi = {10.1038/nbt.1754}, - Year = {2011}} - -@article{Mathews:2003aa, - Author = {Mathews, Lauren M and Chi, Susan Y and Greenberg, Noam and Ovchinnikov, Igor and Swergold, Gary D}, - Journal = {Am J Hum Genet}, - Month = {Mar}, - Number = {3}, - Pages = {739-48}, - Doi = {10.1086/368275}, - Title = {Large differences between {LINE-1} amplification rates in the human and chimpanzee lineages}, - Volume = {72}, - Year = {2003}} - -@article{Biederstedt:2018aa, - Author = {Biederstedt, Evan and Oliver, Jeffrey C and Hansen, Nancy F and Jajoo, Aarti and Dunn, Nathan and Olson, Andrew and Busby, Ben and Dilthey, Alexander T}, - Journal = {F1000Res}, - Pages = {1391}, - Title = {{NovoGraph}: Human genome graph construction from multiple long-read de novo assemblies}, - Volume = {7}, - Doi = {10.12688/f1000research.15895.2}, - Year = {2018}} - -@inproceedings{DBLP:conf/wabi/AbouelhodaO03, - Author = {Mohamed Ibrahim Abouelhoda and Enno Ohlebusch}, - Booktitle = {Algorithms in Bioinformatics, Third International Workshop, {WABI} 2003, Budapest, Hungary, September 15-20, 2003, Proceedings}, - Crossref = {DBLP:conf/wabi/2003}, - Pages = {1--16}, - Doi = {10.1007/978-3-540-39763-2\_1}, - Title = {A Local Chaining Algorithm and Its Applications in Comparative Genomics}, - Year = {2003}} - -@proceedings{DBLP:conf/wabi/2003, - Editor = {Gary Benson and Roderic D. M. Page}, - Publisher = {Springer}, - Title = {Algorithms in Bioinformatics, Third International Workshop, {WABI} 2003, Budapest, Hungary, September 15-20, 2003, Proceedings}, - Volume = {2812}, - Year = {2003}} - -@article{Otto:2011aa, - Author = {Otto, Christian and Hoffmann, Steve and Gorodkin, Jan and Stadler, Peter F}, - Journal = {Algorithms Mol Biol}, - Month = {Mar}, - Pages = {4}, - Title = {Fast local fragment chaining using sum-of-pair gap costs}, - Volume = {6}, - Doi = {10.1186/1748-7188-6-4}, - Year = {2011}} - -@article{Depristo:2011vn, - Author = {Depristo, Mark A and Banks, Eric and Poplin, Ryan and Garimella, Kiran V and Maguire, Jared R and Hartl, Christopher and Philippakis, Anthony A and Del Angel, Guillermo and Rivas, Manuel A and Hanna, Matt and McKenna, Aaron and Fennell, Tim J and Kernytsky, Andrew M and Sivachenko, Andrey Y and Cibulskis, Kristian and Gabriel, Stacey B and Altshuler, David and Daly, Mark J}, - Journal = {Nat Genet}, - Month = {May}, - Number = {5}, - Pages = {491-8}, - Title = {A framework for variation discovery and genotyping using next-generation DNA sequencing data}, - Volume = {43}, - Doi = {10.1038/ng.806}, - Year = {2011}} - -@article{Li:2013aa, - Author = {Li, Heng}, - Journal = {arXiv:1303.3997}, - Title = {Aligning sequence reads, clone sequences and assembly contigs with {BWA-MEM}}, - Year = {2013}} - -@article{Amemiya:2019aa, - Author = {Amemiya, Haley M and Kundaje, Anshul and Boyle, Alan P}, - Journal = {Sci Rep}, - Month = {Jun}, - Number = {1}, - Pages = {9354}, - Title = {The {ENCODE} Blacklist: Identification of Problematic Regions of the Genome}, - Volume = {9}, - Doi = {10.1038/s41598-019-45839-z}, - Year = {2019}} - -@inproceedings{DBLP:conf/ismb/RuzzoT99, - Author = {Walter L. Ruzzo and Martin Tompa}, - Booktitle = {Proceedings of the Seventh International Conference on Intelligent Systems for Molecular Biology, August 6-10, 1999, Heidelberg, Germany}, - Crossref = {DBLP:conf/ismb/1999}, - Pages = {234--241}, - Title = {A Linear Time Algorithm for Finding All Maximal Scoring Subsequences}, - Year = {1999}} - -@proceedings{DBLP:conf/ismb/1999, - Editor = {Thomas Lengauer and Reinhard Schneider and Peer Bork and Douglas L. Brutlag and Janice I. Glasgow and Hans{-}Werner Mewes and Ralf Zimmer}, - Publisher = {{AAAI}}, - Title = {Proceedings of the Seventh International Conference on Intelligent Systems for Molecular Biology, August 6-10, 1999, Heidelberg, Germany}, - Year = {1999}} - -@article{Suzuki:2018aa, - Author = {Suzuki, Hajime and Kasahara, Masahiro}, - Journal = {BMC Bioinformatics}, - Month = {Feb}, - Number = {Suppl 1}, - Pages = {45}, - Title = {Introducing difference recurrence relations for faster semi-global alignment of long sequences}, - Volume = {19}, - Doi = {10.1186/s12859-018-2014-8}, - Year = {2018}} - -@article{Morgulis:2006aa, - Author = {Morgulis, Aleksandr and Gertz, E Michael and Sch{\"a}ffer, Alejandro A and Agarwala, Richa}, - Journal = {J Comput Biol}, - Month = {Jun}, - Number = {5}, - Pages = {1028-40}, - Title = {A fast and symmetric DUST implementation to mask low-complexity DNA sequences}, - Volume = {13}, - Doi = {10.1089/cmb.2006.13.1028}, - Year = {2006}} - -@article{Tarailo-Graovac:2009aa, - Author = {Tarailo-Graovac, Maja and Chen, Nansheng}, - Journal = {Curr Protoc Bioinformatics}, - Month = {Mar}, - Pages = {Unit 4.10}, - Title = {Using RepeatMasker to identify repetitive elements in genomic sequences}, - Volume = {Chapter 4}, - Year = {2009}} - -@article{Iqbal:2012aa, - Author = {Iqbal, Zamin and Caccamo, Mario and Turner, Isaac and Flicek, Paul and McVean, Gil}, - Journal = {Nat Genet}, - Month = {Jan}, - Number = {2}, - Pages = {226-32}, - Title = {De novo assembly and genotyping of variants using colored de Bruijn graphs}, - Volume = {44}, - Doi = {10.1038/ng.1028}, - Year = {2012}} - -@article{Holley695338, - Author = {Holley, Guillaume and Melsted, P{\'a}ll}, - Journal = {bioRxiv}, - Title = {Bifrost {\textendash} Highly parallel construction and indexing of colored and compacted de Bruijn graphs}, - Doi = {10.1101/695338}, - Year = {2019}} - -@article{Lee_2002, - Author = {Lee, C. and Grasso, C. and Sharlow, M. F.}, - Journal = {Bioinformatics}, - Month = {Mar}, - Number = {3}, - Doi = {10.1093/bioinformatics/18.3.452}, - Pages = {452--464}, - Title = {Multiple sequence alignment using partial order graphs}, - Volume = {18}, - Year = {2002}} - -@article{Hickey_2020, - Author = {Hickey, Glenn and Heller, David and Monlong, Jean and Sibbesen, Jonas A. and Sir{\'e}n, Jouni and Eizenga, Jordan and Dawson, Eric T. and Garrison, Erik and Novak, Adam M. and Paten, Benedict}, - Journal = {Genome Biology}, - Month = {Feb}, - Number = {1}, - Title = {Genotyping structural variants in pangenome graphs using the vg toolkit}, - Volume = {21}, - Doi = {10.1186/s13059-020-1941-7}, - Year = {2020}} - -@article{Eggertsson_2019, - Author = {Eggertsson, Hannes P. and Kristmundsdottir, Snaedis and Beyter, Doruk and Jonsson, Hakon and Skuladottir, Astros and Hardarson, Marteinn T. and Gudbjartsson, Daniel F. and Stefansson, Kari and Halldorsson, Bjarni V. and Melsted, Pall}, - Journal = {Nature Communications}, - Month = {Nov}, - Number = {1}, - Title = {GraphTyper2 enables population-scale genotyping of structural variation using pangenome graphs}, - Volume = {10}, - Doi = {10.1038/s41467-019-13341-9}, - Year = {2019}} - -@article{Chen_2019, - Author = {Chen, Sai and Krusche, Peter and Dolzhenko, Egor and Sherman, Rachel M. and Petrovski, Roman and Schlesinger, Felix and Kirsche, Melanie and Bentley, David R. and Schatz, Michael C. and Sedlazeck, Fritz J. and et al.}, - Journal = {Genome Biology}, - Month = {Dec}, - Number = {1}, - Title = {Paragraph: a graph-based structural variant genotyper for short-read sequence data}, - Volume = {20}, - Doi = {10.1186/s13059-019-1909-7}, - year = {2019}} - -@article{10.12688/f1000research.19630.1, - Author = {Llamas, B and Narzisi, G and Schneider, V and Audano, PA and Biederstedt, E and Blauvelt, L and Bradbury, P and Chang, X and Chin, CS and Fungtammasan, A and Clarke, WE and Cleary, A and Ebler, J and Eizenga, J and Sibbesen, JA and Markello, CJ and Garrison, E and Garg, S and Hickey, G and Lazo, GR and Lin, MF and Mahmoud, M and Marschall, T and Minkin, I and Monlong, J and Musunuri, RL and Sagayaradj, S and Novak, AM and Rautiainen, M and Regier, A and Sedlazeck, FJ and Siren, J and Souilmi, Y and Wagner, J and Wrightsman, T and Yokoyama, TT and Zeng, Q and Zook, JM and Paten, B and Busby, B}, - Journal = {F1000Research}, - Number = {1751}, - Title = {A strategy for building and using a human reference pangenome [version 1; peer review: 1 approved, 1 approved with reservations]}, - Volume = {8}, - Doi = {10.12688/f1000research.19630.1}, - Year = {2019}} - -@article{Dilthey_2019, - Author = {Dilthey, Alexander T and Mentzer, Alexander J and Carapito, Raphael and Cutland, Clare and Cereb, Nezih and Madhi, Shabir A and Rhie, Arang and Koren, Sergey and Bahram, Seiamak and McVean, Gil and et al.}, - Journal = {Bioinformatics}, - Month = {Apr}, - Number = {21}, - Pages = {4394--4396}, - Title = {{HLA*LA--HLA} typing from linearly projected graph alignments}, - Volume = {35}, - Doi = {10.1093/bioinformatics/btz235}, - Year = {2019}} - -@article{Danecek:2011qy, - Author = {Danecek, Petr and Auton, Adam and Abecasis, Goncalo and Albers, Cornelis A and Banks, Eric and DePristo, Mark A and Handsaker, Robert E and Lunter, Gerton and Marth, Gabor T and Sherry, Stephen T and McVean, Gilean and Durbin, Richard and {1000 Genomes Project Analysis Group}}, - Journal = {Bioinformatics}, - Month = {Aug}, - Number = {15}, - Pages = {2156-8}, - Title = {The variant call format and VCFtools}, - Volume = {27}, - Doi = {10.1093/bioinformatics/btr330}, - Year = {2011}} - -@article{Pritt_2018, - Author = {Pritt, Jacob and Chen, Nae-Chyun and Langmead, Ben}, - Journal = {Genome Biology}, - Month = {Dec}, - Number = {1}, - Title = {FORGe: prioritizing variants for graph genomes}, - Volume = {19}, - Doi = {10.1186/s13059-018-1595-x}, - Year = {2018}} - -@article{Pevzner:2001vn, - Author = {Pevzner, P A and Tang, H and Waterman, M S}, - Journal = {Proc Natl Acad Sci U S A}, - Month = {Aug}, - Number = {17}, - Pages = {9748-53}, - Title = {An Eulerian path approach to DNA fragment assembly}, - Volume = {98}, - Doi = {10.1073/pnas.171285098}, - Year = {2001}} - -@article{Muggli_2019, - Author = {Muggli, Martin D and Alipanahi, Bahar and Boucher, Christina}, - Journal = {Bioinformatics}, - Month = {Jul}, - Number = {14}, - Pages = {i51--i60}, - Title = {Building large updatable colored de Bruijn graphs via merging}, - Doi = {10.1093/bioinformatics/btz350}, - Volume = {35}, - Year = {2019}} - -@article{Gnerre:2011ys, - Author = {Gnerre, Sante and Maccallum, Iain and Przybylski, Dariusz and Ribeiro, Filipe J and Burton, Joshua N and Walker, Bruce J and Sharpe, Ted and Hall, Giles and Shea, Terrance P and Sykes, Sean and Berlin, Aaron M and Aird, Daniel and Costello, Maura and Daza, Riza and Williams, Louise and Nicol, Robert and Gnirke, Andreas and Nusbaum, Chad and Lander, Eric S and Jaffe, David B}, - Journal = {Proc Natl Acad Sci U S A}, - Month = {Jan}, - Number = {4}, - Pages = {1513-8}, - Title = {High-quality draft assemblies of mammalian genomes from massively parallel sequence data}, - Volume = {108}, - Doi = {10.1073/pnas.1017351108}, - Year = {2011}} - -@article{Sir_n_2019, - Author = {Sir{\'e}n, Jouni and Garrison, Erik and Novak, Adam M and Paten, Benedict and Durbin, Richard}, - Journal = {Bioinformatics}, - Month = {Jul}, - Title = {Haplotype-aware graph indexes}, - Doi = {10.1093/bioinformatics/btz575}, - Year = {2019}} - -@article{Almodaresi:2018aa, - Author = {Almodaresi, Fatemeh and Sarkar, Hirak and Srivastava, Avi and Patro, Rob}, - Journal = {Bioinformatics}, - Month = {Jul}, - Number = {13}, - Pages = {i169-i177}, - Title = {A space and time-efficient index for the compacted colored de Bruijn graph}, - Volume = {34}, - Doi = {10.1093/bioinformatics/bty292}, - Year = {2018}} - -@inproceedings{almodaresi_et_al:LIPIcs:2017:7657, - Address = {Dagstuhl, Germany}, - Author = {Fatemeh Almodaresi and Prashant Pandey and Rob Patro}, - Booktitle = {17th International Workshop on Algorithms in Bioinformatics (WABI 2017)}, - Editor = {Russell Schwartz and Knut Reinert}, - Pages = {18:1--18:15}, - Publisher = {Schloss Dagstuhl--Leibniz-Zentrum fuer Informatik}, - Series = {Leibniz International Proceedings in Informatics (LIPIcs)}, - Title = {{Rainbowfish: A Succinct Colored de Bruijn Graph Representation}}, - Volume = {88}, - Doi = {10.4230/LIPIcs.WABI.2017.18}, - Year = {2017}} - -@article{Jain_2020, - Author = {Jain, Chirag and Zhang, Haowen and Gao, Yu and Aluru, Srinivas}, - Journal = {Journal of Computational Biology}, - Month = {Apr}, - Number = {4}, - Pages = {640--654}, - Title = {On the Complexity of Sequence-to-Graph Alignment}, - Volume = {27}, - Year = {2020}} - -@inproceedings{DBLP:conf/ipps/JainMZDA19, - Author = {Chirag Jain and Sanchit Misra and Haowen Zhang and Alexander T. Dilthey and Srinivas Aluru}, - Booktitle = {2019 {IEEE} International Parallel and Distributed Processing Symposium, {IPDPS} 2019, Rio de Janeiro, Brazil, May 20-24, 2019}, - Pages = {451--461}, - Publisher = {{IEEE}}, - Title = {Accelerating Sequence Alignment to Graphs}, - Year = {2019}} - -@article{Rautiainen_2019, - Author = {Rautiainen, Mikko and M{\"a}kinen, Veli and Marschall, Tobias}, - Journal = {Bioinformatics}, - Month = {Mar}, - Number = {19}, - Pages = {3599--3607}, - Title = {Bit-parallel sequence-to-graph alignment}, - Volume = {35}, - Year = {2019}} - -@article{Antipov:2016aa, - Author = {Antipov, Dmitry and Korobeynikov, Anton and McLean, Jeffrey S and Pevzner, Pavel A}, - Journal = {Bioinformatics}, - Month = {04}, - Number = {7}, - Pages = {1009-15}, - Title = {hybridSPAdes: an algorithm for hybrid assembly of short and long reads}, - Volume = {32}, - Year = {2016}} - -@article{Li_minigraph:2020aa, - Author = {Li, Heng}, - Doi = {10.5281/zenodo.4016798}, - Title = {Minigraph: a sequence-to-graph mapper and pangenome graph generator}, - Year = {2020}} - -@article{Seo:2016aa, - Author = {Seo, Jeong-Sun and Rhie, Arang and Kim, Junsoo and Lee, Sangjin and Sohn, Min-Hwan and Kim, Chang-Uk and Hastie, Alex and Cao, Han and Yun, Ji-Young and Kim, Jihye and Kuk, Junho and Park, Gun Hwa and Kim, Juhyeok and Ryu, Hanna and Kim, Jongbum and Roh, Mira and Baek, Jeonghun and Hunkapiller, Michael W and Korlach, Jonas and Shin, Jong-Yeon and Kim, Changhoon}, - Journal = {Nature}, - Month = {Oct}, - Number = {7624}, - Pages = {243-247}, - Title = {De novo assembly and phasing of a Korean human genome}, - Volume = {538}, - Doi = {10.1038/nature20098}, - Year = {2016}} - -@article{Kronenberg:2018aa, - Author = {Kronenberg, Zev N and Fiddes, Ian T and Gordon, David and Murali, Shwetha and Cantsilieris, Stuart and Meyerson, Olivia S and Underwood, Jason G and Nelson, Bradley J and Chaisson, Mark J P and Dougherty, Max L and Munson, Katherine M and Hastie, Alex R and Diekhans, Mark and Hormozdiari, Fereydoun and Lorusso, Nicola and Hoekzema, Kendra and Qiu, Ruolan and Clark, Karen and Raja, Archana and Welch, AnneMarie E and Sorensen, Melanie and Baker, Carl and Fulton, Robert S and Armstrong, Joel and Graves-Lindsay, Tina A and Denli, Ahmet M and Hoppe, Emma R and Hsieh, PingHsun and Hill, Christopher M and Pang, Andy Wing Chun and Lee, Joyce and Lam, Ernest T and Dutcher, Susan K and Gage, Fred H and Warren, Wesley C and Shendure, Jay and Haussler, David and Schneider, Valerie A and Cao, Han and Ventura, Mario and Wilson, Richard K and Paten, Benedict and Pollen, Alex and Eichler, Evan E}, - Journal = {Science}, - Month = {06}, - Number = {6393}, - Title = {High-resolution comparative analysis of great ape genomes}, - Volume = {360}, - Doi = {10.1126/science.aar6343}, - Year = {2018}} - -@article{Gordon:2016kq, - Author = {Gordon, David and Huddleston, John and Chaisson, Mark J P and Hill, Christopher M and Kronenberg, Zev N and Munson, Katherine M and Malig, Maika and Raja, Archana and Fiddes, Ian and Hillier, LaDeana W and Dunn, Christopher and Baker, Carl and Armstrong, Joel and Diekhans, Mark and Paten, Benedict and Shendure, Jay and Wilson, Richard K and Haussler, David and Chin, Chen-Shan and Eichler, Evan E}, - Journal = {Science}, - Month = {Apr}, - Number = {6281}, - Pages = {aae0344}, - Title = {Long-read sequence assembly of the gorilla genome}, - Volume = {352}, - Doi = {10.1126/science.aae0344}, - Year = {2016}} diff --git a/tex/minigraph.tex b/tex/minigraph.tex deleted file mode 100644 index 900658f..0000000 --- a/tex/minigraph.tex +++ /dev/null @@ -1,986 +0,0 @@ -%% BioMed_Central_Tex_Template_v1.06 - -\documentclass[twocolumn]{bmcart} - -%%% Load packages -\usepackage{amsthm,amsmath} -\RequirePackage{hyperref} -\usepackage[utf8]{inputenc} %unicode support - -\usepackage{graphicx} -%\def\includegraphic{} -%\def\includegraphics{} - -%%% Put your definitions there: -\startlocaldefs -\endlocaldefs - - -%%% Begin ... -\begin{document} - -%%% Start of article front matter -\begin{frontmatter} - -\begin{fmbox} -\dochead{Method} - -\title{The design and construction of reference pangenome graphs with minigraph} - -\author[ - addressref={aff1,aff2}, % id's of addresses, e.g. {aff1,aff2} - corref={aff1}, % id of corresponding address, if any - email={hli@ds.dfci.harvard.edu} % email address -]{\inits{HL}\fnm{Heng} \snm{Li}} -\author[ - addressref={aff1,aff2}, -]{\inits{XF}\fnm{Xiaowen} \snm{Feng}} -\author[ - addressref={aff2}, -]{\inits{CC}\fnm{Chong} \snm{Chu}} - -\address[id=aff1]{% % unique id - \orgname{Department of Data Sciences, Dana-Farber Cancer Institute}, % university, etc - \city{Boston, MA 02215}, % city - \cny{USA} % country -} -\address[id=aff2]{% - \orgname{Department of Biomedical Informatics, Harvard Medical School}, - \city{Boston, MA 02215}, - \cny{USA} -} - -\begin{abstractbox} - -\begin{abstract} % abstract -The recent advances in sequencing technologies enable the assembly of -individual genomes to the quality of the reference genome. How to integrate -multiple genomes from the same species and make the integrated representation -accessible to biologists remains an open challenge. Here, we propose a -graph-based data model and associated formats to represent multiple genomes -while preserving the coordinate of the linear reference genome. We implement -our ideas in the minigraph toolkit and demonstrate that we can efficiently -construct a pangenome graph and compactly encode tens of thousands of -structural variants missing from the current reference genome. -\end{abstract} - -\begin{keyword} -\kwd{bioinformatics} -\kwd{genomics} -\kwd{pangenome} -\end{keyword} - -\end{abstractbox} - -\end{fmbox} - -\end{frontmatter} - -%% -\section*{Background} - -The human reference genome is a fundamental resource for human genetics and -biomedical research. The primary sequences of the reference genome -GRCh38~\cite{Schneider:2017aa} are a mosaic of haplotypes with each haplotype segment derived -from a single human individual. They cannot represent the genetic diversity in -human populations and as a result, each individual may carry thousands of large -germline variants absent from the reference genome~\cite{Huddleston:2017aa}. -Some of these variants are likely associated with phenotype~\cite{Eichler_2010} -but are often missed or misinterpreted when we map sequence data to GRCh38, in -particular with short reads~\cite{Li:2018aa}. This under-representation of -genetic diversity may become a limiting factor in our understanding of genetic -variations. - -Meanwhile, the advances in long-read sequencing technologies make it possible -to assemble a human individual to a quality comparable to -GRCh38~\cite{Schneider:2017aa,Wenger_2019}. There are already a dozen of -high-quality human assemblies available in GenBank~\cite{Audano:2019aa}. -Properly integrating these genomes into a reference \emph{pangenome}, which -refers to a collection of genomes~\cite{cpgc:2016aa}, would potentially address -the issues with a single linear reference. - -A straightforward way to represent a pangenome is to store unaligned genomes -in a full-text index that compresses redundancies in sequences identical -between individuals~\cite{Makinen:2010aa,Liu_2016,Boucher_2019}. We may -retrieve individual genomes from the index, inspect the k-mer spectrum and test -the presence of k-mers using standard techniques. In principle, it is also -possible to apply canonical read alignment algorithms to map sequences to -the collection, but in practice, the redundant hits to multiple genomes will -confuse downstream mapping-based analyses~\cite{NA2016159}. It is not clear how -to resolve these multiple mappings. - -The other class of methods encodes multiple genomes into a sequence graph, -usually by collapsing identical or similar sequences between genomes onto a -single representative sequence. The results in a \emph{pangenome graph}. A -pangenome graph is a powerful tool to identify core genome, the part of a -genome or gene set that is shared across the majority of the strains or related species -in a clade~\cite{Vernikos:2015aa}. A common way to construct a basic pangenome -graph is to generate a compacted de Bruijn graph -(cDBG)~\cite{Marcus:2014xy,Baier_2015,Beller:2016ab,Chikhi:2015aa,Minkin_2016,Chikhi_2016,almodaresi_et_al:LIPIcs:2017:7657} -from a set of genomes. Basic cDBG does not keep sample information. -\cite{Iqbal:2012aa} proposed colored cDBG with each color represents a sample -or a population. Colored cDBG can be constructed -efficiently~\cite{Muggli_2019,Holley695338}. However, a colored cDBG discards -the chromosomal coordinate and thus disallows the mapping of genomic features. -It often includes connections absent from the input genomes and thus encodes -sequences more than the input. A colored cDBG cannot serve as a -\emph{reference} pangenome graph, either. deBGA~\cite{Liu:2016ac} addresses -the issue by labeling each unitig with its possibly multiple locations in the -input genome(s). Pufferfish~\cite{Almodaresi:2018aa} further reduces its space -requirement. Nonetheless, given hundreds of human genomes, there will be many -more vertices in the graph and most vertices are associated with hundreds of -labels. Whether deBGA and pufferfish can scale to such datasets remains an open -question. GBWT~\cite{Sir_n_2019} provides another practical solution to storage -and indexing, but no existing tools can practically construct a cDBG for many -human genomes in the GBWT representation. - -In addition to cDBG, we can derive a reference pangenome -graph from a single linear multi-sequence alignment (MSA)~\cite{Dilthey_2015,Dilthey_2019}. -It has been used for HLA typing but is not applicable to whole chromosomes when -they cannot be included in a single linear MSA. The third and possibly the most -popular approach to reference graph generation is to call variants from other -sources and then incorporate these variants, often in the VCF format~\cite{Danecek:2011qy}, into -the reference genome as alternative -paths~\cite{Eggertsson:2017aa,Rakocevic_2019,Sibbesen:2018aa,Biederstedt:2018aa,Eggertsson_2019}. -However, because VCF does not define coordinates on insertions, this approach -cannot properly encode variations on long insertions and is therefore limited -to simple variations. There are no satisfactory solutions to the construction -of reference pangenome graphs. - -In this article, we introduce the reference Graphical Fragment Assembly (rGFA) -format to model reference pangenome graphs. We propose and demonstrate an -incremental procedure to construct graphs under this model. The resulting -graphs encode structural variations (SVs) of length 100bp or longer without haplotype -information. Our implementation, minigraph~\cite{Li_minigraph:2020aa} -(\href{https://github.com/lh3/minigraph}{https://github.com/lh3/minigraph}), -can construct a pangenome graph from twenty human assemblies in three hours. - -\section*{Results} - -We will first describe a data model for reference pangenome graphs, which -establishes the foundation of this article. We will then present a new -sequence-to-graph mapper, minigraph, and show how this mapper incrementally -constructs a pangenome graph. We will demonstrate the utility of pangenome -graphs with a human graph generated from twenty human haplotypes and a primate -graph generated from four species. - -\subsection*{Modeling reference pangenome graphs} - -\subsubsection*{Sequence graphs} - -There are several equivalent ways to define a sequence graph. In this article, -a \emph{sequence graph} $G(V,E)$ is a bidirected graph. Each vertex $v\in V$ is -associated with a DNA sequence; each edge $e\in E$ has two directions, one for -each endpoint, which leads to four types of edges: forward-forward, -reverse-forward, forward-reverse and reverse-reverse. The directions on an edge -dictate how a sequence is spelled from a walk/path in the graph. Common -assembly graphs, such as the overlap graph, string graph and de Bruijn graph -can all be formulated as sequence graphs. - -\begin{figure}[t] -\includegraphics[width=.47\textwidth]{Fig1} -\caption{\csentence{Example rGFA and GAF formats.} {\bf (a)} Example rGFA - format. rGFA-specific tags include SN, name of the stable sequence from which - the vertex is derived; SO, offset on the stable sequence; SR, rank: 0 if the - vertex or edge is on the linear reference; $>$0 for non-reference. {\bf (b)} - Corresponding sequence graph. Each thick arrow represents an oriented DNA - sequence. {\bf (c)} Example GAF format, using the segment coordinate, for - reads ``${\tt GTGGCT}$'' and ``${\tt CGTTTCC}$'' mapped to the graph. {\bf - (d)} Equivalent GAF format using the stable coordinate.}\label{fig:rgfa} -\end{figure} - -The Graphical Fragment Assembly (GFA) format~\cite{Li:2016aa} describes -sequence graphs. The core of GFA is defined by the following grammar: - -{\footnotesize -\begin{verbatim} - - <- ( | )+ - <- `S' - <- `L' [+-] [+-] - -\end{verbatim}} - -{\flushleft -A line starting with letter ``${\tt S}$'' corresponds to a vertex and a line -starting with ``${\tt L}$'' corresponds -to a bidirected edge. In a de Bruijn graph, we often attach sequences to edges -instead of vertices~\cite{Pevzner:2001vn,Gnerre:2011ys}. To avoid the confusion, in this -article, we also call a vertex as a \emph{segment} and call an edge as a -\emph{link}, following the GFA terminology. Fig.~\ref{fig:rgfa}a shows an -example GFA that encodes Fig.~\ref{fig:rgfa}b. -} - -A sequence graph in the GFA format natively defines a \emph{segment coordinate} -system where each base in the graph is uniquely indexed by a -2-tuple $({\rm segId},{\rm segOffset})$. For example, in -Fig~\ref{fig:rgfa}a, the base at position $({\rm s2},2)$ is ``{\tt G}''. -A major problem with this coordinate is that it is decoupled from linear -annotations and is sensitive to graph transformations. For example, if we split -a segment into two connected segments, the set of sequences spelled from the graph -remains the same, but the segment coordinates will be changed. Due to the -instability of segment coordinate, a basic sequence graph is inadequate for a -reference graph. - -\subsubsection*{Reference pangenome graphs} - -We propose the reference GFA (rGFA) format to encode reference pangenome graphs. -rGFA is an extension to GFA with three additional tags that indicate the origin -of a segment from linear genomes (Fig.~\ref{fig:rgfa}a). This simple addition -gives us a unique stable coordinate system as an extension to the linear -reference coordinate (e.g. GRCh38). We can pinpoint a position such as -``{\sf chr1:9}'' in the graph and map existing annotations onto the graph. We can -also report a path or walk in the stable coordinate. For example, path -``{\sf s1$\to$s2$\to$s3}'' unambiguously corresponds to ``{\sf -chr1:0-5$\to$chr1:5-8$\to$chr1:8-12}'' or simply ``{\sf chr1:0-12}'' if we -merge adjacent coordinate; similarly, ``{\sf s1$\to$s2$\to$s5$\to$s6}'' -corresponds to ``{\sf chr1:0-8$\to$foo:8-16}''. We will formally describe the -path format when introducing the GAF format in the next section. - -In rGFA, each segment is associated with one origin. This apparently trivial -requirement in fact imposes a strong restriction on the types of graphs rGFA -can encode: it forbids the collapse of different regions from one sequence, -which would often happen in a cDBG. We consider this restriction an -advantage of rGFA because it requires the graph to have a ``linear'' flavor -intuitively and simplifies the data structure to store the graph. - -For simplicity, rGFA disallows overlaps between edges and forbids multiple -edges (more than one edges between the same pair of vertices). These two -restrictions help to avoid ambiguity and reduce the complexity in -implementation. They are not strictly necessary in theory. - -\subsubsection*{The Graphical mApping Format (GAF)} - -\begin{table}[tb] -\caption{The Graphical mApping Format (GAF)}\label{tab:gaf} -\begin{tabular}{rcp{6cm}} -\hline -Col & Type & Description \\ \hline -1 & string & Query sequence name \\ -2 & int & Query sequence length \\ -3 & int & Query start coordinate (0-based; closed) \\ -4 & int & Query end coordinate (0-based; open) \\ -5 & char & Strand relative to col. 6 \\ -6 & string & Graph path matching regular expression \texttt{/([><][\char94\char92s><]+(:\char92d+-\char92d+)?)+\char124([\char94\char92s><]+)/}\\ -7 & int & Path sequence length \\ -8 & int & Path start coordinate \\ -9 & int & Path end coordinate \\ -10 & int & Number of matching bases in the mapping \\ -11 & int & Number of bases, including gaps, in the mapping \\ -12 & int & Mapping quality (0--255 with 255 for missing) \\ \hline -\end{tabular} -\end{table} - -As there are no text formats for sequence-to-graph alignment, we propose a new -Graphical mApping Format (GAF) by extending the Pairwise mApping Format -(PAF)~\cite{Li:2016aa}. GAF is TAB-delimited with each column defined in -Table~\ref{tab:gaf}. Column 6 encodes a path on the graph. It follows the -formal grammar below: - -{\footnotesize -\begin{verbatim} - - <- | + - <- (`>' | `<') ( | ) - <- `:' `-' - -\end{verbatim}} - -{\flushleft -In this grammar, {\tt } is a segment identifier on an S-line in rGFA; -{\tt } is a stable sequence name at the {\tt SN} tag on the -corresponding S-line. Column 6 can be either a path in the segment coordinate -(Fig.~\ref{fig:rgfa}c) or an equivalent path in the stable coordinate -(Fig.~\ref{fig:rgfa}d). We can merge adjacent stable coordinates if the two -segments are originated from the same stable sequence and the end offset of the -first segment is equal to the start offset of the second segment. For example, -``{\tt >chr1:0-5>chr1:5-8}'' can be simplified to ``{\tt >chr1:0-8}''. -Furthermore, if a path in column 6 is derived from one reference sequence, we -recommend to replace it with the entire reference path on the forward -orientation (e.g. see ``read1'' in Fig.~\ref{fig:rgfa}d). With this convention, -a GAF line is reduced to PAF for a sequence mapped to a reference sequence. -Similar to PAF, GAF also allows optional tags in the SAM-like format. Base -alignment is kept at the {\tt cg} tag.} - -Minigraph produces GAF in both the segment and the stable coordinate. -GraphAligner~\cite{Rautiainen810812} produces GAF in the segment coordinate -only, which can be converted to the stable coordinate. - -\begin{figure}[t] -\includegraphics[width=.47\textwidth]{Fig2} -\caption{\csentence{Minigraph algorithms.} {\bf (a)} Diagram of the minigraph - mapping algorithm. Minigraph seeds alignments with minimizers, finds good - enough linear chains, connects them in the graph and seeks the most weighted - path as a graph chain. {\bf (b)} Diagram of incremental graph construction. A - graph is iteratively constructed by mapping each assembly to an existing - graph and augmenting the graph with long poorly mapped sequences in the - assembly.}\label{fig:mg} -\end{figure} - -\subsection*{Sequence-to-graph mapping} - -Our incremental graph construction algorithm relies on genome-to-graph -alignment (Fig.~\ref{fig:mg}b). As existing sequence-to-graph -aligners~\cite{Rautiainen810812,Garrison:2018aa} do not work with -chromosome-long query sequences, we adapted minimap2~\cite{Li:2018ab} for our -purpose and implemented minigraph (Fig.~\ref{fig:mg}a). Briefly, minigraph uses -a minimap2-like algorithm to find local hits to segments in the graph, ignoring -the graph topology. It then chains these local hits if they are connected on -the graph, possibly through cycles. This gives the approximate mapping locations. Minigraph does not -perform base-level alignment. This is because the graph we construct encodes -SVs and rarely contains paths similar at the base level. The best mapping is -often clear without base alignment. - -\begin{table}[b] -\caption{Performance of sequence-to-graph mapping}\label{tab:mgvga} -\begin{tabular}{lrr} -\hline -& minigraph & GraphAligner \\ -\hline -Indexing time (wall-clock sec) & 100 & 589 \\ -Mapping time (wall-clock sec) & 79 & 140 \\ -Peak RAM (GB) & 19.5 & 27.2 \\ -Percent unmapped reads & 0.5\% & 0\% \\ -Percent wrong mappings & 1.7\% & 4.6\% \\ -\hline -\end{tabular} -\end{table} - -To evaluate the accuracy of minigraph mapping, we simulated PacBio reads from -GRCh38 with PBSIM~\cite{Ono:2013aa} and mapped them to the graph we constructed -in the next section. Table~\ref{tab:mgvga} compares the performance of -minigraph and GraphAligner~\cite{Rautiainen810812} v1.0.10 on 68,857 simulated -reads mapped over 8 CPU threads. {\color{black} The N50 read length is 15kb. -9,862 reads are mapped across two or more segments by GraphAligner. Note that -both minigraph and GraphAligner ignore the stable coordinates during mapping. -All segments, originated either from GRCh38 or from individual genomes, are -treated equally. To this end, while we simulated reads from GRCh38, we are also -evaluating how well mappers work with complex SVs present in any input -samples.} - -On this dataset, minigraph -is faster than GraphAligner and uses less memory, partly because minigraph does -not perform base alignment. -As is shown in Table~\ref{tab:mgvga}, minigraph is more accurate than -GraphAligner. This is counter-intuitive given that GraphAligner does base -alignment. Close inspection reveals that most mismapped reads by minigraph are -mapped to the correct genomic loci but wrong graph paths. On the contrary, most -mismapped reads by GraphAligner are mapped to wrong genomic loci. This suggests -minigraph is better at finding approximate mapping locations but GraphAligner -is better at disambiguating similar graph paths. Combining the strength of -both could lead to a better graph mapper. We do plan to implement base-level -alignment in minigraph in future. - -We have also tried vg v1.21.0~\cite{Garrison:2018aa}. It indexed the same graph in 14.7 wall-clock -hours and mapped the simulated reads in 1.8 hours over 8 threads, tens of times -slower than minigraph and GraphAligner. However, no reads are mapped in the -output. We have not been able to make vg work with our data. - -\subsection*{Generating pangenome graphs} - -Fig.~\ref{fig:mg}b shows how minigraph constructs a pangenome graph (see -Methods for details). This procedure is similar to multiple sequence alignment -via partial order graph~\cite{Lee_2002} except that minigraph works with cyclic -graphs and ignores small variants. Minigraph only considers SVs of -100bp--100kb in length and ignores SVs in alignments shorter than 100kb. -For each input assembly, it filters out regions covered by two or more primary -alignments longer than 20kb in the assembly. This filter avoids paralogous -regions in a sample and guarantees that graphs generated by minigraph can be -modeled by rGFA. - -As a sanity check, we compared minigraph to dipcall -(\href{https://github.com/lh3/dipcall}{https://github.com/lh3/dipcall}) on -calling SVs 100bp or longer from a synthetic diploid sample composed of CHM1 -and CHM13~\cite{Li:2018aa}. Given two SV callsets $A$ and $B$, we say a call in -$A$ is \emph{missed} in callset $B$ if there are no calls in $B$ within 1000bp -from the call in $A$. With this criterion, 2.7\% of 14,792 SVs called by -dipcall are missed by minigraph; 6.0\% of 14,932 minigraph SVs are missed by -dipcall. We manually inspected tens of differences in -IGV~\cite{Robinson:2011aa} and identified two causes. First, an INDEL longer -than 100bp called by one caller may be split into two shorter INDELs by the -other caller. There are often more than one smaller SVs around a missed SV -call. Second, dipcall skips regions involving high density of SNPs or involving -both long insertions and long deletions, but minigraph connects these events -and calls SVs in such regions. It tends to call more SVs. Overall, we believe -minigraph and dipcall found similar sets of SVs. - -\begin{table}[tb] -\caption{Assemblies used for graph construction}\label{tab:asm} -\begin{tabular}{llll} -\hline -Name & Species & Population & Accession/Source \\ \hline -CHM1 & Human & N/A & GCA\_001297185.1 \\ -CHM13 & Human & N/A & GCA\_000983455.1 \\ -NA12878 & Human & European & \cite{Garg810341}, phased \\ -NA24385 & Human & Jewish & \cite{Garg810341}, phased \\ -PGP1 & Human & N/A & \cite{Garg810341}, phased \\ -NA19240 & Human & African & GCA\_001524155.4 \\ -HG00514 & Human & East Asian & GCA\_002180035.3 \\ -HG01352 & Human & American & GCA\_002209525.2 \\ -NA19434 & Human & African & GCA\_002872155.1 \\ -HG02818 & Human & African & GCA\_003574075.1 \\ -HG03486 & Human & African & GCA\_003086635.1 \\ -HG03807 & Human & South Asian& GCA\_003601015.1 \\ -HG00733 & Human & American & GCA\_002208065.1 \\ -HG02059 & Human & East Asian & GCA\_003070785.1 \\ -HG00268 & Human & European & GCA\_008065235.1 \\ -HG04217 & Human & South Asian& GCA\_007821485.1 \\ -AK1 & Human & East Asian & GCA\_001750385.1 \\ -Clint & Chimpanzee & & GCA\_002880755.3 \\ -Susie & Gorilla & & GCA\_900006655.3 \\ -Kamilah & Gorilla & & GCA\_008122165.1 \\ -Susie & Orangutan & & GCA\_002880775.3 \\ -\hline -\end{tabular} -\end{table} - -\begin{figure*}[htbp] -\includegraphics[width=.95\textwidth]{Fig3} -\caption{\csentence{Characteristics of the human and the great ape graphs.} {\bf - (a)} Human variations stratified by repeat class and by the number of - alleles of each variation. The repeat annotation was obtained from the - longest allele of each variation. VNTR: variable-number tandem repeat, a - tandem repeat with the unit motif length $\ge$7bp. STR: short random repeat, - a tandem repeat with the unit motif length $\le$6bp. LCR: low-complexity - regions. Mixed-inter.: a variation involving $\ge$2 types of interspersed - repeats. {\bf (b)} Great ape variations stratified by repeat class and by the - number of alleles. {\bf (c)} Human biallelic variations stratified by repeat - class and by insertion to/deletion from GRCh38. Both alleles are required to - be covered in all assemblies. {\bf (d)} Human-specific biallelic variations - stratified by repeat class and by insertion to/deletion from GRCh38. Red bars - correspond to insertions to the human lineage. {\bf (e)} Distribution of - different types of human variations along chromosomes. {\bf (f)} Boxplot of - the longest allele length in each repeat class. Outliers are omitted for the - clarity of the figure.}\label{fig:anno} -\end{figure*} - -\subsection*{A human pangenome graph} - -Starting with GRCh38, we constructed a human pangenome graph from 20 human -haplotypes or haplotype-collapsed assemblies (Table~\ref{tab:asm}). It took -minigraph 2.7 wall-clock hours over 24 CPU threads to generate this graph. The -peak memory is 98.1GB. The resulting graph consists of 148,618 segments and -214,995 links. It contains 37,332 variations, where a \emph{variation} -denotes a minimal subgraph that has a single source and a single sink with both -segments coming from GRCh38. A path through the bubble between the source and -and the sink represents an \emph{allele}. - -Variations in the human graph are enriched with Alus and VNTRs -(Fig.~\ref{fig:anno}a). While interspersed repeats are about evenly distributed -along chromosomes except in the pseudoautosomal regions (Fig.~\ref{fig:anno}e), -VNTRs are enriched towards telomeres~\cite{Audano:2019aa}. It is worth noting -the density of minisatellites is also higher in subtelomeres. If we normalize -the density of VNTRs in the pangenome graph by the density of minisatellites in -GRCh38, the enrichment of VNTRs towards telomeres is still visible but becomes -less prominent. At the same time, repeat-less variations are also enriched -towards the ends of chromosomes (green areas in Fig.~\ref{fig:anno}e), -suggesting subtelomeres tend to harbor SVs anyway. We also -identified 85 processed pseudogenes among these variations. - -\begin{figure} -\includegraphics[width=.46\textwidth]{igv-edit.png} -\caption{\csentence{IGV screenshot of a region enriched with long insertions.} - Numbers on wide purple bars indicate insertion lengths. CLR: PacBio noisy - continuous long reads. HiFi: PacBio high-fidelity reads.}\label{fig:igv} -\end{figure} - -Another noticeable feature of VNTRs is that over half of VNTR variations are -multiallelic (Fig.~\ref{fig:anno}a). Fig.~\ref{fig:igv} shows a multi-allelic -region composed of VNTRs. We can see many insertions of different lengths. The -two different NA12878 assemblies also disagree with each other, which we often -see around other VNTR loci in NA12878 as well. We have not inspected raw reads -in this particular example, but we tend to believe the disagreement is caused -by local misassemblies rather than somatic mutations. In addition, due to the -multiallelic nature of such VNTRs, the two haplotypes in a human individual are -often different. Assemblies mixing the two haplotypes (aka collapsed -assemblies) may have more troubles in these regions. Multiallelic VNTRs are -hard to assemble correctly. - -Multiallelic VNTRs are also hard to align and to call. In Fig.~\ref{fig:igv}, -the insertion positions are often different, which could be caused by a few -mutations or sequencing errors. A naive alignment-based SV caller would call a -dozen of low-frequency insertions in this region, which does not reflect these -correlated events. Without base-level alignment, minigraph may -have more troubles with obtaining the optimal alignment in these complex VNTR -regions. Improved data quality, assembly algorithms and graph mapping -algorithms are required to investigate VNTR regions in detail. - -\subsection*{A great ape pangenome graph} - -We also constructed a great ape pangenome graph from GRCh38, one chimpanzee, -two gorillas and one orangutan (Table~\ref{tab:asm}). This graph contains -206,452 variations, over four times more than the human graph. About half of -variations are originated from orangutan, the species most distant from human. - -In the great ape graph, the L1-to-Alu ratio is close to 1:1, much higher than -the ratio in the human graph (Fig.~\ref{fig:anno}b vs Fig.~\ref{fig:anno}a). -This is perhaps correlated with the elevated L1 activity in great -apes~\cite{Mathews:2003aa}. Of retrotransposon-related variations specific to -the human lineage, the overwhelming majority are insertions -(Fig.~\ref{fig:anno}d), which is expected as transpositions lead to insertions -only. Most human-specific Alu deletions are incomplete and involve ancient Alu -subfamilies. They are likely genomic deletions that happen to hit Alus. In -contrast, the majority of ``partial-repeats'' are deletions from the human -lineage. Two thirds of autosomal insertions in this category are segmental -duplications in GRCh38. In all, minigraph is an efficient tool to study closely -related species. - -\subsection*{Blacklist regions from human pangenome graphs} - -The human pangenome graph effectively encodes SVs $\ge$100bp -in 20 genomes. These large-scale variations could be a frequent source of -technical artifacts in variant calling with short reads. To test this -hypothesis, we compared short-read SNP calls with vs without regions around SVs -in the pangenome graph. - -We constructed a human pangenome graph excluding CHM1 and CHM13, the two -samples used in the SynDip benchmark~\cite{Li:2018aa}, and generated regions -around variations (see Methods), which we call as \emph{blacklist regions}, -following the rationale in~\cite{Amemiya:2019aa}. Blacklist regions is totaled -29.2Mb in length, intersecting 0.7\% of confident regions in -SynDip~\cite{Li:2018aa}; 0.7\% of truth SNPs are contained in blacklist regions --- true SNPs are not enriched in blacklist regions. - -We mapped short reads used in~\cite{Li:2018aa} with minimap2 and called -variants with GATK v4.1.2~\cite{Depristo:2011vn}. This callset -contains 32,879 false positive SNPs, 21\% of which fall in blacklist regions -- -false SNP calls are highly enriched in this $<$1\% region of human genome. This -confirms a noticeable fraction of false SNP calls using short reads are -resulted from misalignment involving SVs. - -\section*{Discussion} - -Based on the GFA assembly format~\cite{Li:2016aa}, we proposed the rGFA format, -which defines a data model for reference pangenome graphs at the same time. -rGFA takes a linear reference genome as the backbone and maintains the -conceptual ``linearity'' of input genomes. - -rGFA is not the only pangenome graph model. Vg~\cite{Garrison:2018aa} -encodes a stable sequence with a path through the sequence graph~\cite{10.12688/f1000research.19630.1}. A segment -in the graph may occur on multiple paths, or occur multiple times on one path -if there are cycles in the graph. This way, vg allows different regions in one -chromosome collapsed to one segment. We call such a graph as a collapsed graph. rGFA -cannot encode a collapsed graph. The vg model is thus more general. - -In our view, however, the reference pangenome graph should not be a collapsed -graph. In a collapsed graph, the definition of orthology is not clear because -multiple sequences from the same sample may go through the same segment. -Without the concept of orthology, we cannot define variations, either. In -addition, due to the one-to-many relationship between segments and the -reference genome, it is intricate to derive the stable coordinate of a path in -a collapsed graph. For example, suppose segment {\sf s1} corresponds to two -regions {\sf chr1:100-200} and {\sf chr1:500-600}. To convert a path {\sf -s2$\to$s1$\to$s3} to the stable coordinate, we have to inspect adjacent -segments to tell which {\sf s1} corresponds to; this becomes more challenging -when {\sf s2} and {\sf s3} represent multiple regions in the reference genome. -In contrast, rGFA inherently forbids a collapsed graph and avoids the potential -issues above. This makes rGFA simpler than vg's path model and easier to work -with. - -To demonstrate practical applications of rGFA, we developed minigraph to -incrementally generate pangenome graphs. It can generate a graph from 20 -genomes in three hours and can scale to hundreds of genomes in future. A -limitation of minigraph is that it does not perform base alignment and may be -confused by similar paths in the graph. {\color{black} Unfortunately, base-level -sequence-to-graph alignment is not a fully solved problem. Partial-order graph -alignment~\cite{Lee_2002} and PaSGAL~\cite{DBLP:conf/ipps/JainMZDA19} only work -with directed acyclic graphs (DAGs). Vg~\cite{Garrison:2018aa} uses a heuristic -to unroll cycles but it is expotential in time in the worst case and for DAGs, -its exact mode is tens of times slower than PaSGAL. Antipov et -al~\cite{Antipov:2016aa} proved that alignment against cyclic graphs can be -done in polynomial time. GraphAligner~\cite{Rautiainen810812} implements a -fast quadratic algorithm for computing edit distance~\cite{Rautiainen_2019}. -However, edit distance based alignment disallows long INDELs and is often -inadequate for accurate variant calling. Jain et al~\cite{Jain_2020} recently -proposed a quadratic algorithm for alignment with affine gap penalty but the -authors focused on the theoretical analysis only. To the best of our knowledge, -no tools can efficiently perform sequence-to-graph alignment under affine gap -cost. We plan to learn from the existing algorithms and implement fast base -alignment in minigraph in future. This may take significant effort.} - -Another limitation of minigraph is -that it is unable to align sequences against a graph encoding all small variants. -Such a graph will be composed of millions of short segments. Not -indexing minimizers across segments, minigraph will fail to seed the initial -linear chains. This limitation can only be resolved by completely changing the -minigraph mapping algorithm. Nonetheless, small variants are easier to -analyze with the standard methods. Incorporating these variants unnecessarily -enlarges the graph, complicates implementations, increases the rate of false -mappings~\cite{Pritt_2018} and reduces the performance of common tasks. There -is also no known algorithm that can construct such a complex graph for hundreds -of human genomes. - -Minigraph does not keep track of the sample information as of now. To address -this issue, we are considering to implement colored rGFA, similar to colored de -Bruijn graphs~\cite{Iqbal:2012aa}. In a colored rGFA, a color represents one -sample. Each segment or link is associated with one or multiple colors, -indicating the sources of the segment or the link. Colors can be stored in an -rGFA tag or in a separate segment/link-by-sample binary -matrix~\cite{Holley695338}. The matrix representation may be more compact given -a large number of samples. - -We have shown minigraph can be a fast and powerful research tool to summarize -SVs at the population scale and to study the evolution of closely related -species. A more practical question is how a reference pangenome graph may -influence routine data analysis. Here is our limited view. - -We think a critical role a reference graph plays is that it extends the -coordinate system of a linear reference genome. This allows us to annotate -variations in highly diverse regions such as the human HLA and KIR regions. The -existing pipelines largely ignore these variations because most of them cannot -be encoded in the primary assembly of GRCh38. - -The extended graph coordinate system further helps to consistently represent -complex SVs. Given multiple samples, the current practice is to call SVs from -individual samples and then merge them. Two subtly different SVs, especially -long insertions, may be called at two distinct locations and treated as -separate events. With the minigraph procedure, the two SVs are likely to -be aligned together as long as they are similar to each other and are -sufficiently different from the reference allele. To some extent, minigraph is -performing multiple sequence alignment with partial order -alignment~\cite{Lee_2002}. This procedure is more robust to different -representations of the same SV than naive merging. When we refer to a SNP, we often use its -chromosomal coordinate such as ``chr1:12345''. We rarely do so for SVs because -their positions are sensitive to alignment and SV callers. The more consistent -SV representation implied by a pangenome graph will help to alleviate the issue -and subsequently facilitate the genotyping of -SVs~\cite{Hickey_2020,Eggertsson_2019,Chen_2019}. - -While we believe a reference pangenome graph will make complex variations more -accessible by geneticists and biologists, we suspect a great majority of -biomedical researchers will still rely on a linear reference genome due to the -conceptual simplicity of linear genomes and the mature tool chains developed in -decades. Many analyses such as SNP calling in well behaved regions do not -benefit much from a pangenome representation, either. Nonetheless, a pangenome -reference still helps applications based on linear references. With a graph -reference, we may blacklist regions enriched with SVs that lead to small variant -calling errors. We may potentially generate ``decoy'' sequences that are -missing from the primary assembly to attract falsely mapped reads away. We may -perform read alignment against a graph, project the alignment to the linear -coordinate and finish the rest of analyses in the linear space. We anticipate a -pangenome reference to supplement the linear reference, not to replace it. - -\section*{Conclusions} - -Complex human sequence variations are like genomic dark matter: they are -pervasive in our genomes but are often opaque to the assay with the existing -tools. We envision a pangenome graph reference will become an effective -means to the study of these complex variations. We proposed a data model (rGFA), -designed formats (rGFA and GAF) and developed companion tools (minigraph and -gfatools) to demonstrate the feasibility of our vision. Our work is still -preliminary but it is likely to set a starting point to the development of the -next-generation graph-based tools, which may ultimately help us to understand -our genomes better. - -\section*{Methods} - -\subsection*{The minigraph mapping algorithm} - -\subsubsection*{Seeding and linear chaining} -Similar to minimap2, minigraph uses minimizers on segments as seeds. It also -applies a similar chaining algorithm but with different scoring and with a new -heuristic to speed up chaining over long distances. For the completeness of -this article, we will describe part of the minimap2 chaining algorithm here. - -\paragraph*{Minimap2-like chaining} -Formally, an \emph{anchor} is a 3-tuple $(x,y,w)$, representing a closed -interval $[x-w+1,x]$ on a segment in the reference graph matching an interval -$[y-w+1,y]$ on the query. Given a list of anchors sorted by $x$, let $f(i)$ be -the maximal chaining score up to the $i$-th anchor in the list. $f(i)$ can be -computed by: -\begin{equation}\label{eq:dp} -f(i)=\max\big\{\max_{i>j\ge1}\{f(j)+\alpha(j,i)-\beta(j,i)\},w_i\big\} -\end{equation} -where $\alpha(j,i)=\min\big\{\min\{y_i-y_j,x_i-x_j\},w_i\big\}$ is -the number of matching bases between anchor $i$ and $j$. -$\beta(j,i)$ is the gap penalty. Let $g_{ji}=|(y_i-y_j)-(x_i-x_j)|$ -be the gap length and $d_{ji}=\min\{y_i-y_j,x_i-x_j\}$ be the smaller distance -between the two anchors. Minigraph uses the following gap cost: -$$ -\beta(j,i)=\left\{\begin{array}{ll} -\infty & (g_{ji}>G) \\ -c_1\cdot g_{ji} + c_2\cdot d_{ji} + \log_2{g_{ji}} & (0j\ge1$}\\ \text{$x_i-G\le x_j\le x_i-w_i$}\\ \text{$y_i-G\le y_j\le y_i-w_i$}}}\big\{f'(j)+w_j-\beta'(j,i)\big\} -\end{equation} -We can find the optimal $f'(i)$ in $O(n\log n)$ time with -RMQ~\cite{DBLP:conf/wabi/AbouelhodaO03,Otto:2011aa}. To see that, define -$$h'(j)=f'(j)+w_j+c_1(y_j+x_j)$$ -The following condition -$$f'(j)+w_j-\beta'(j,i)>f'(k)+w_k-\beta'(k,i)$$ -is equivalent to $h'(j)>h'(k)$, independent of $i$. If we maintain ${\rm -RMQ}_i$ as the binary tree that keeps $\{(y_j,-h'(j)):j3 alleles' ls 2 - -set out "CHM13-f1-90.bb.anno.len.eps" - -set ylab "Sum of length on reference (Mbp)" off +0.0,0 -set key top left -plot \ - "3 alleles' ls 2 diff --git a/tex/plots/CHM13-f1-90.bb.anno.tbl b/tex/plots/CHM13-f1-90.bb.anno.tbl deleted file mode 100644 index a718520..0000000 --- a/tex/plots/CHM13-f1-90.bb.anno.tbl +++ /dev/null @@ -1,13 +0,0 @@ -01_Alu Alu 14298 221 89 4354652 126178 114295 -02_L1 L1 3947 143 96 7536426 703699 642792 -03_SVA SVA 1021 399 704 1240723 328180 995325 -04_ERV ERV 1656 115 127 1009356 204523 1036717 -05_Mixed-MEI Mixed-MEI 2088 251 137 4625357 1690752 2230499 -10_Satellite Satellite 3619 747 1109 4148105 3066920 45077097 -11_VNTR VNTR 5852 4010 8866 737321 838607 11642589 -12_STR STR 4449 2178 910 392351 252638 879580 -13_Other-LCR Other-LCR 3882 791 682 388838 159218 2049820 -20_Mixed-repeat Mixed-repeat 848 185 336 2145808 1171839 7487870 -21_Partial-repeat Partial-repeat 5240 613 760 13853718 6197517 26833676 -30_Non-rep-uniq Non-rep-uniq 9175 501 130 788608 73912 43045 -31_Non-rep-dup Non-rep-dup 878 177 333 441803 74941 1231962 diff --git a/tex/plots/CHM13-f1-90.bb.mini-inter-none.win.gp b/tex/plots/CHM13-f1-90.bb.mini-inter-none.win.gp deleted file mode 100644 index c1ff8e2..0000000 --- a/tex/plots/CHM13-f1-90.bb.mini-inter-none.win.gp +++ /dev/null @@ -1,269 +0,0 @@ -set t po eps co so enh "Helvetica,18" -set out "chr-plot.eps" -set size 2,1.52 -set multiplot layout 23,1 -set lmargin screen 0.095 -set border 0; unset xtics; unset ytics; set bmargin 0; set tmargin 0.02; set rmargin 0.02 -set style line 1 lc rgb "#377eb8" lw 1 -set style line 2 lc rgb "#e41a1c" lw 1 -set style line 3 lc rgb "#4daf4a" lw 1 -set yran [0:164] - -set style fill solid 0.8 - -set origin 0,1.4447826086956521 -set xran [0:248.387497] -set size 2,0.06521739130434782 -set style rect fc lt -1 fs solid 0.15 noborder -unset obj; unset label -set obj rect from 116.796216, graph 0 to 147.241828, graph 1 -set label "chr1" at screen 0.01, graph 0.5 -set key at screen 1.95,1.32 -plot \ - " CHM13-f1-90.bb.mini-win -gzip -dc CHM13-f1-90.bb.anno.gz | awk '$12~/inter|SINE|LINE|SVA|DNA|ERV/' | ./bedutils.js window -l CHM13v1.size -w500000 -s100000 -c /dev/stdin > CHM13-f1-90.bb.inter-win -gzip -dc CHM13-f1-90.bb.anno.gz | awk '$12~/none|partial|self/' | ./bedutils.js window -l CHM13v1.size -w500000 -s100000 -c /dev/stdin > CHM13-f1-90.bb.none-win - -paste CHM13-f1-90.bb.mini-win CHM13-f1-90.bb.inter-win CHM13-f1-90.bb.none-win | awk '$1~/^chr([0-9]+|X)$/' | cut -f1-3,6,9 > CHM13-f1-90.bb.mini-inter-none.win - -./chr-plot.js -n3 CHM13v1.cen.bed CHM13-f1-90.bb.mini-inter-none.win|gnuplot diff --git a/tex/plots/CHM13v1.cen.bed b/tex/plots/CHM13v1.cen.bed deleted file mode 100644 index 1147173..0000000 --- a/tex/plots/CHM13v1.cen.bed +++ /dev/null @@ -1,23 +0,0 @@ -chr1 116796216 147241828 248387497 -chr2 85991672 99673016 242696747 -chr3 85805192 101415517 201106605 -chr4 44705247 59870604 193575430 -chr5 42077197 54596619 182045437 -chr6 53286920 66058622 172126870 -chr7 55414368 68714496 160567423 -chr8 39243541 51325076 146259322 -chr9 39952789 81694033 150617274 -chr10 34633784 46664580 134758122 -chr11 46061948 59413485 135127772 -chr12 29620490 42202482 133324781 -chr13 0 23171058 114240146 -chr14 0 17765925 101219177 -chr15 0 23279251 100338308 -chr16 30848291 57219476 96330493 -chr17 18892710 32487230 84277185 -chr18 10965698 25933550 80542536 -chr19 19655572 34768168 61707359 -chr20 21383653 37969531 66210247 -chr21 0 17078862 45827691 -chr22 0 20739833 51353906 -chrX 52820107 65927026 154259625 diff --git a/tex/plots/CHM13v1.size b/tex/plots/CHM13v1.size deleted file mode 100644 index a736083..0000000 --- a/tex/plots/CHM13v1.size +++ /dev/null @@ -1,23 +0,0 @@ -chr1 248387497 -chr2 242696747 -chr3 201106605 -chr4 193575430 -chr5 182045437 -chr6 172126870 -chr7 160567423 -chr8 146259322 -chr9 150617274 -chr10 134758122 -chr11 135127772 -chr12 133324781 -chr13 114240146 -chr14 101219177 -chr15 100338308 -chr16 96330493 -chr17 84277185 -chr18 80542536 -chr19 61707359 -chr20 66210247 -chr21 45827691 -chr22 51353906 -chrX 154259625 diff --git a/tex/plots/anno2tbl.js b/tex/plots/anno2tbl.js deleted file mode 100755 index bbb6a85..0000000 --- a/tex/plots/anno2tbl.js +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env k8 - -var buf = new Bytes(); -var file = arguments.length == 0? new File() : new File(arguments[0]); - -var h = {}; -while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - for (var i = 1; i <= 7; ++i) t[i] = parseInt(t[i]); - if (t[5]) continue; - if (t[11] == "gap") continue; - if (/chrUn|_random/.test(t[0])) continue; - var na = t[4] < 4? t[4] : 4; - var type = null; - if (t[11] == "mini") type = "11_VNTR"; - else if (t[11] == "micro") type = "12_STR"; - else if (t[11] == "micro" || t[11] == "lcr") type = "13_Other-LCR"; - else if (t[11] == "LINE/L1") type = "02_L1"; - else if (t[11] == "SINE/Alu") type = "01_Alu"; - else if (t[11] == "Retroposon/SVA") type = "03_SVA"; - else if (t[11] == "LTR/ERV") type = "04_ERV"; - else if (t[11] == "inter" || /^(DNA|LINE|SINE|LTR)/.test(t[11])) type = "05_Mixed-MEI"; - else if (/^Satellite/.test(t[11]) || t[11] == "alpha" || t[11] == "hsat2/3") type = "10_Satellite"; - else if (t[11] == "self") type = "31_Non-rep-dup"; - else if (t[11] == "none") type = "30_Non-rep-uniq"; - else if (t[11] == "mixed") type = "20_Mixed-repeat"; - else type = "21_Partial-repeat"; - var key = type; - if (h[key] == null) h[key] = [0, null, 0, 0, 0, 0, 0, 0]; - ++h[key][na]; - h[key][na+3] += t[7]; -} - -file.close(); -buf.destroy(); - -for (var key in h) { - var label = key.replace(/^[0-9]+_/, ""); - print(key, label, h[key][2], h[key][3], h[key][4], h[key][5], h[key][6], h[key][7]); -} diff --git a/tex/plots/bedutils.js b/tex/plots/bedutils.js deleted file mode 100755 index cc055c7..0000000 --- a/tex/plots/bedutils.js +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env k8 - -/***************************** - ***** Library functions ***** - *****************************/ - -/******************************* - * Command line option parsing * - *******************************/ - -var getopt = function(args, ostr) { - var oli; // option letter list index - if (typeof(getopt.place) == 'undefined') - getopt.ind = 0, getopt.arg = null, getopt.place = -1; - if (getopt.place == -1) { // update scanning pointer - if (getopt.ind >= args.length || args[getopt.ind].charAt(getopt.place = 0) != '-') { - getopt.place = -1; - return null; - } - if (getopt.place + 1 < args[getopt.ind].length && args[getopt.ind].charAt(++getopt.place) == '-') { // found "--" - ++getopt.ind; - getopt.place = -1; - return null; - } - } - var optopt = args[getopt.ind].charAt(getopt.place++); // character checked for validity - if (optopt == ':' || (oli = ostr.indexOf(optopt)) < 0) { - if (optopt == '-') return null; // if the user didn't specify '-' as an option, assume it means null. - if (getopt.place < 0) ++getopt.ind; - return '?'; - } - if (oli+1 >= ostr.length || ostr.charAt(++oli) != ':') { // don't need argument - getopt.arg = null; - if (getopt.place < 0 || getopt.place >= args[getopt.ind].length) ++getopt.ind, getopt.place = -1; - } else { // need an argument - if (getopt.place >= 0 && getopt.place < args[getopt.ind].length) - getopt.arg = args[getopt.ind].substr(getopt.place); - else if (args.length <= ++getopt.ind) { // no arg - getopt.place = -1; - if (ostr.length > 0 && ostr.charAt(0) == ':') return ':'; - return '?'; - } else getopt.arg = args[getopt.ind]; // white space - getopt.place = -1; - ++getopt.ind; - } - return optopt; -} - -/*************** - * BED overlap * - ***************/ - -function it_index(a) { - if (a.length == 0) return -1; - a.sort(function(x, y) { return x[0] - y[0] }); - var last, last_i; - for (var i = 0; i < a.length; i += 2) last = a[i][2] = a[i][1], last_i = i; - for (var k = 1; 1<>k&1? last_i - (1<<(k-1)) : last_i + (1<<(k-1)); - if (last_i < a.length) last = last > a[last_i][2]? last : a[last_i][2]; - } - return k - 1; -} - -function it_overlap(a, st, en) { - var h, stack = [], b = []; - for (h = 0; 1<> h << h, i1 = i0 + (1<<(h+1)) - 1; - if (i1 >= a.length) i1 = a.length; - for (var i = i0; i < i1; ++i) - if (a[i][0] < en && st < a[i][1]) - b.push(i); - } else if (w == 0) { // if left child not processed - stack.push([x, h, 1]); - var y = x - (1<<(h-1)); - if (y >= a.length || a[y][2] > st) - stack.push([y, h - 1, 0]); - } else if (x < a.length && a[x][0] < en) { - if (st < a[x][1]) b.push(x); - stack.push([x + (1<<(h-1)), h - 1, 0]); - } - } - return b; -} - -/****************************** - ***** Command-line tools ***** - ******************************/ - -function bed_sum(args) -{ - var buf = new Bytes(); - var file = args.length == 0 || args[0] == '-'? new File() : new File(args[0]); - var s = 0; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 3); - if (t.length < 3) continue; - s += parseInt(t[2]) - parseInt(t[1]); - } - file.close(); - buf.destroy(); - print(s); - return 0; -} - -function bed_sum2nd(args) -{ - var buf = new Bytes(); - var file = args.length == 0 || args[0] == '-'? new File() : new File(args[0]); - var s = 0; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 2); - s += parseInt(t[1]); - } - file.close(); - buf.destroy(); - print(s); - return 0; -} - -function bed_merge(args) -{ - var buf = new Bytes(); - var file = args.length > 0? new File(args[0]) : new File(); - var ctg = null, st, en; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 3); - var s = parseInt(t[1]); - var e = parseInt(t[2]); - if (ctg != t[0] || s > en) { // no overlap - if (ctg != null) print(ctg, st, en); - ctg = t[0], st = s, en = e; - } else if (s < st) throw Error("ERROR: input is not sorted by coordinate"); - else en = en > e? en : e; - } - if (ctg != null) print(ctg, st, en); - file.close(); - buf.destroy(); - return 0; -} - -function bed_sum1(args) -{ - var buf = new Bytes(); - var file = args.length == 0 || args[0] == '-'? new File() : new File(args[0]); - var ctg = null, st = 0, en = 0, sum = 0; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 3); - var s = parseInt(t[1]); - var e = parseInt(t[2]); - if (ctg != t[0] || s > en) { // no overlap - sum += en - st; - if (ctg != null && ctg != t[0]) { - print(ctg, sum); - sum = 0; - } - ctg = t[0], st = s, en = e; - } else if (s < st) throw Error("ERROR: input is not sorted by coordinate"); - else en = en > e? en : e; - } - if (ctg != null) { - sum += en - st; - print(ctg, sum); - } - file.close(); - buf.destroy(); - return 0; -} - -function bed_gdist(args) -{ - if (args.length == 0) { - print("Usage: bedutils.js gdist <3-col-gmap.txt> "); - exit(1); - } - var file, buf = new Bytes(); - - var gmap = {}; - file = new File(args[0]); - var last_pos = 0, last_ctg = null, last_v = 0.0; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - var pos = parseInt(t[1]); - var v = parseFloat(t[2]); - if (last_ctg != t[0] && last_ctg != null) { - gmap[last_ctg].push([last_pos, 0x7fffffff, -1, last_v]); - last_pos = 0, last_v = 0.0; - } - if (gmap[t[0]] == null) gmap[t[0]] = []; - if (last_pos == pos) throw Error("Zero-length interval"); - gmap[t[0]].push([last_pos, pos, -1, last_v]); - last_pos = pos, last_ctg = t[0], last_v = v; - } - if (last_ctg != null) - gmap[last_ctg].push([last_pos, 0x7fffffff, -1, last_v]); - file.close(); - - for (var ctg in gmap) it_index(gmap[ctg]); - - file = args.length >= 2? new File(args[1]) : new File(); - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - var st = parseInt(t[1]), en = parseInt(t[2]); - var v, g = gmap[t[0]]; - if (g == null) v = -1; - else if (st == en) v = 0; - else { - var as = it_overlap(g, st, st + 1); - var ae = it_overlap(g, en - 1, en); - if (as.length != 1 || ae.length != 1) - throw Error("Bug!"); - var is = as[0], ie = ae[0]; - var xs = g[is][3] + (is == g.length - 1? 0 : (g[is+1][3] - g[is][3]) / (g[is][1] - g[is][0]) * (st - g[is][0])); - var xe = g[ie][3] + (ie == g.length - 1? 0 : (g[ie+1][3] - g[ie][3]) / (g[ie][1] - g[ie][0]) * (en - g[ie][0])); - v = 1e6 * (xe - xs) / (en - st); - } - v = v <= 0? v : v.toFixed(15); - print(t[0], t[1], t[2], v); - } - file.close(); - buf.destroy(); -} - -function bed_window(args) -{ - var c, win_size = 1000000, skip = 500000, cnt_only = false, fn_len = null; - while ((c = getopt(args, "w:s:cl:")) != null) { - if (c == 'w') win_size = parseInt(getopt.arg); - else if (c == 's') skip = parseInt(getopt.arg); - else if (c == 'c') cnt_only = true; - else if (c == 'l') fn_len = getopt.arg; - } - - var lens = {}, file, buf = new Bytes(); - if (fn_len) { - file = new File(fn_len); - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - if (t.length < 2) continue; - lens[t[0]] = parseInt(t[1]); - } - file.close(); - } - file = getopt.ind < args.length? new File(args[getopt.ind]) : new File(); - var bed = {}, ctgs = []; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - if (bed[t[0]] == null) { bed[t[0]] = []; ctgs.push(t[0]); } - bed[t[0]].push([parseInt(t[1]), parseInt(t[2]), -1]); - } - file.close(); - buf.destroy(); - - for (var ct = 0; ct < ctgs.length; ++ct) { - var ctg = ctgs[ct]; - it_index(bed[ctg]); - var a = bed[ctg]; - var max = 0; - for (var i = 0; i < a.length; ++i) - max = max > a[i][1]? max : a[i][1]; - if (lens[ctg] > 0 && max < lens[ctg]) max = lens[ctg]; - for (var x = 0; x < max; x += skip) { - var st = x - (win_size>>1), en = x + (win_size>>1); - if (st < 0) st = 0; - if (en > max) en = max; - var sum = 0, b = it_overlap(a, st, en); - if (cnt_only) { - sum = b.length; - } else { - for (var i = 0; i < b.length; ++i) { - var c = a[b[i]]; - var s = st > c[0]? st : c[0]; - var e = en < c[1]? en : c[1]; - sum += e - s; - } - } - print(ctg, x, sum/(en-st)*1e6); - } - } -} - -function bed_cov(args) -{ - if (args.length < 2) { - warn("Usage: bedutils.js cov "); - exit(1); - } - var file, buf = new Bytes(); - - file = new File(args[0]); - var bed = {}; - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 3); - if (bed[t[0]] == null) bed[t[0]] = []; - bed[t[0]].push([parseInt(t[1]), parseInt(t[2])]); - } - for (var ctg in bed) it_index(bed[ctg]); - file.close(); - - file = new File(args[1]); - while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t", 3); - if (bed[t[0]] == null) { - print(t[0], t[1], t[2], 0, 0); - } else { - var st0 = parseInt(t[1]), en0 = parseInt(t[2]); - var b = bed[t[0]]; - var a = it_overlap(b, st0, en0); - var cov_st = 0, cov_en = 0, cov = 0; - for (var i = 0; i < a.length; ++i) { - var st1 = b[a[i]][0] > st0? b[a[i]][0] : st0; - var en1 = b[a[i]][1] < en0? b[a[i]][1] : en0; - if (st1 > cov_en) { - cov += cov_en - cov_st; - cov_st = st1, cov_en = en1; - } else cov_en = cov_en > en1? cov_en : en1; - } - cov += cov_en - cov_st; - print(t[0], t[1], t[2], a.length, cov); - } - } - file.close(); - - buf.destroy(); -} - -function main(args) -{ - if (args.length == 0) { - print("Usage: bedutils.js [arguments]"); - print("Commands:"); - print(" sum sum of BED regions (deprecated by bedtk)"); - print(" sum1 sum of BED regions for each contig"); - print(" sum2nd sum of the 2nd column"); - print(" merge merge overlapping regions in *sorted* BED (deprecated)"); - print(" cov breadth of coverage (deprecated by bedtk)"); - print(" gdist genetic distance from 3-col genetic map"); - print(" window window-based counting"); - exit(1); - } - - var cmd = args.shift(); - if (cmd == 'sum') bed_sum(args); - else if (cmd == 'sum2nd') bed_sum2nd(args); - else if (cmd == 'sum1') bed_sum1(args); - else if (cmd == 'merge') bed_merge(args); - else if (cmd == 'cov') bed_cov(args); - else if (cmd == 'gdist') bed_gdist(args); - else if (cmd == 'window') bed_window(args); - else throw Error("unrecognized command: " + cmd); -} - -main(arguments); diff --git a/tex/plots/chr-plot.js b/tex/plots/chr-plot.js deleted file mode 100755 index cee19b8..0000000 --- a/tex/plots/chr-plot.js +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env k8 - -var getopt = function(args, ostr) { - var oli; // option letter list index - if (typeof(getopt.place) == 'undefined') - getopt.ind = 0, getopt.arg = null, getopt.place = -1; - if (getopt.place == -1) { // update scanning pointer - if (getopt.ind >= args.length || args[getopt.ind].charAt(getopt.place = 0) != '-') { - getopt.place = -1; - return null; - } - if (getopt.place + 1 < args[getopt.ind].length && args[getopt.ind].charAt(++getopt.place) == '-') { // found "--" - ++getopt.ind; - getopt.place = -1; - return null; - } - } - var optopt = args[getopt.ind].charAt(getopt.place++); // character checked for validity - if (optopt == ':' || (oli = ostr.indexOf(optopt)) < 0) { - if (optopt == '-') return null; // if the user didn't specify '-' as an option, assume it means null. - if (getopt.place < 0) ++getopt.ind; - return '?'; - } - if (oli+1 >= ostr.length || ostr.charAt(++oli) != ':') { // don't need argument - getopt.arg = null; - if (getopt.place < 0 || getopt.place >= args[getopt.ind].length) ++getopt.ind, getopt.place = -1; - } else { // need an argument - if (getopt.place >= 0 && getopt.place < args[getopt.ind].length) - getopt.arg = args[getopt.ind].substr(getopt.place); - else if (args.length <= ++getopt.ind) { // no arg - getopt.place = -1; - if (ostr.length > 0 && ostr.charAt(0) == ':') return ':'; - return '?'; - } else getopt.arg = args[getopt.ind]; // white space - getopt.place = -1; - ++getopt.ind; - } - return optopt; -} - -var c, width = 2, height = 1.5, y_max0 = null, y_min0 = null, fn_out = "chr-plot.eps", n = 1, fsize = 14; -while ((c = getopt(arguments, "w:h:x:i:o:n:f:")) != null) { - if (c == 'h') height = parseFloat(getopt.arg); - else if (c == 'n') n = parseInt(getopt.arg); - else if (c == 'w') width = parseFloat(getopt.arg); - else if (c == 'x') y_max0 = parseFloat(getopt.arg); - else if (c == 'i') y_min0 = parseFloat(getopt.arg); - else if (c == 'o') fn_out = getopt.arg; - else if (c == 'f') fsize = parseInt(getopt.arg); -} - -if (arguments.length - getopt.ind < 2) { - print("Usage: chr-plot.js [options] "); - print("Options:"); - print(" -n INT number of data points [" + n + "]"); - print(" -w FLOAT width of the plot [" + width + "]"); - print(" -h FLOAT height of the plot [" + height + "]"); - print(" -x FLOAT max y value [auto]"); - print(" -i FLOAT min y value [auto]"); - print(" -o FILE output file name [chr-plot.eps]"); - exit(1); -} - -var file, buf = new Bytes(); - -var chr_list = [], chr = {}, cen = [], max_len = 0; -file = new File(arguments[getopt.ind]); -while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - var len = parseInt(t[3]); - chr_list.push(t[0]); - cen.push([parseInt(t[1]), parseInt(t[2])]); - chr[t[0]] = len; - max_len = max_len > len? max_len : len; -} -file.close(); - -var y_max = -1e300, y_min = 1e300; -file = new File(arguments[getopt.ind+1]); -while (file.readline(buf) >= 0) { - var t = buf.toString().split("\t"); - if (chr[t[0]] == null) continue; - var y = parseFloat(t[2]); - y_max = y_max > y? y_max : y; - y_min = y_min < y? y_min : y; -} -file.close(); -if (y_max0 != null) y_max = y_max0; -if (y_min0 != null) y_min = y_min0; - -buf.destroy(); - -print('set t po eps co so enh "Helvetica,' + fsize + '"'); -print('set out "' + fn_out + '"'); -print('set size ' + width + ',' + (height + 0.02)); -print('set multiplot layout ' + chr_list.length + ',1'); -print('set lmargin screen ' + (fsize/2 * 0.01 + 0.005).toFixed(3)); -print('set border 0; unset xtics; unset ytics; set bmargin 0; set tmargin 0.02; set rmargin 0.02'); -print('set style line 1 lc rgb "#377eb8" lw 1'); -print('set style line 2 lc rgb "#e41a1c" lw 1'); -print('set style line 3 lc rgb "#4daf4a" lw 1'); -//print('set style fill transparent solid 0.5 noborder'); -print('set yran [' + y_min + ':' + y_max + ']'); -print(''); -var h = height / chr_list.length; -for (var i = 0; i < chr_list.length; ++i) { - var len = chr[chr_list[i]]; - print('set origin 0,' + (height - (i + 1) * h + 0.01)); - print('set xran [0:' + len * 1e-6 + ']'); - print('set size ' + (width*len/max_len) + ',' + h); - print('set style rect fc lt -1 fs solid 0.15 noborder'); - print('unset obj; unset label'); - print('set obj rect from ' + cen[i][0]*1e-6 + ', graph 0 to ' + cen[i][1]*1e-6 + ', graph 1'); - print('set label "' + chr_list[i] + '" at screen 0.01, graph 0.5'); - print('plot \\'); - for (var j = 0; j < n; ++j) { - var st, en, endl = j == n - 1? '' : ', \\'; - if (j > 0) { - st = en = ''; - for (var k = 0; k < j; ++k) { - st += '+$' + (k + 3); - en += '+$' + (k + 3); - } - en += '+$' + (j + 3); - st = st.replace(/^\+/, "(") + ")"; - en = en.replace(/^\+/, "(") + ")"; - } else st = '(0)', en = '($3)'; - print(' " $@ - -$(prefix).gap:$(prefix).fa - seqtk gap $< > $@ - -$(prefix).brnn.gz:$(prefix).fa - ~/dna-nn/dna-brnn -Ai ~/dna-nn/attcc-alpha.knm -t16 $< | htsbox bgzip > $@ - -$(prefix).etrf.gz:$(prefix).fa - ~/src/etrf/etrf $< | htsbox bgzip > $@ - -$(prefix).sdust.gz:$(prefix).fa - ~/minimap2/sdust $< | htsbox bgzip > $@ - -CHM13-f1-90.bb.paf.gz:CHM13-f1-90.bb.fa - minimap2 -cxasm20 -r2k --cs -t16 ~/ref/CHM13v1Y.fa $< 2> CHM13-f1-90.bb.paf.log | gzip > $@ - -GRCh38-f1-90.bb.paf.gz:GRCh38-f1-90.bb.fa - minimap2 -cxasm20 -r2k --cs -t16 ~/ref/hs38.fa $< 2> GRCh38-f1-90.bb.paf.log | gzip > $@