From 17e047dbbfac75cbeb0cec11248cc89cf294445b Mon Sep 17 00:00:00 2001 From: james94 <james94@mi.fu-berlin.de> Date: Wed, 10 Mar 2021 20:26:26 +0100 Subject: [PATCH] to get running on HPC --- envs/genomescope.yaml | 6 + envs/merylMerq.yaml | 7 +- programs/merqury-1.1/LICENSE | 19 ++ programs/merqury-1.1/README.md | 191 ++++++++++++++++++ .../_submit_build.sh | 6 +- .../_submit_build_10x.sh | 2 +- .../_submit_hapmers.sh | 0 .../_submit_merqury.sh | 0 .../_submit_split.sh | 0 .../best_k.sh | 0 .../build/concat_splits.sh | 0 .../build/count.sh | 0 .../build/count_10x.sh | 20 +- .../build/diff.sh | 0 .../build/filt.sh | 0 .../build/intersect.sh | 0 .../build/split.sh | 5 +- .../build/split_10x.sh | 10 +- .../build/union_sum.sh | 10 - programs/merqury-1.1/eval/asm_multiplicity.sh | 33 +++ .../eval/bedCalcN50.jar | Bin .../merqury-1.1/eval/false_duplications.sh | 21 ++ .../eval/kmerHistToPloidyDepth.jar | Bin programs/merqury-1.1/eval/per_seq_qv.sh | 43 ++++ .../eval/qv.sh | 8 +- .../merqury-1.1/eval/read_multiplicity.sh | 31 +++ .../eval/spectra-cn.sh | 19 +- .../example/README.txt | 0 .../example/inherited_hapmers.fl.png | Bin .../example/inherited_hapmers.ln.png | Bin .../example/inherited_hapmers.st.png | Bin .../triocanu_clr.100_20000.col.block.N.png | Bin ...riocanu_clr.100_20000.col.continuity.N.png | Bin .../triocanu_clr.100_20000.cvi.block.N.png | Bin ...riocanu_clr.100_20000.cvi.continuity.N.png | Bin .../triocanu_clr.10_20000.col.block.N.png | Bin ...triocanu_clr.10_20000.col.continuity.N.png | Bin .../triocanu_clr.10_20000.cvi.block.N.png | Bin ...triocanu_clr.10_20000.cvi.continuity.N.png | Bin ...anu_clr.col.10_20000.phased_block.blob.png | Bin .../example/triocanu_clr.col.block.N.png | Bin ...canu_clr.col.col0.hapmer.spectra-cn.fl.png | Bin ...canu_clr.col.col0.hapmer.spectra-cn.ln.png | Bin ...canu_clr.col.col0.hapmer.spectra-cn.st.png | Bin .../example/triocanu_clr.col.continuity.N.png | Bin ...canu_clr.col.cvi0.hapmer.spectra-cn.fl.png | Bin ...canu_clr.col.cvi0.hapmer.spectra-cn.ln.png | Bin ...canu_clr.col.cvi0.hapmer.spectra-cn.st.png | Bin .../triocanu_clr.col.spectra-cn.fl.png | Bin .../triocanu_clr.col.spectra-cn.ln.png | Bin .../triocanu_clr.col.spectra-cn.st.png | Bin ...anu_clr.cvi.10_20000.phased_block.blob.png | Bin .../example/triocanu_clr.cvi.block.N.png | Bin ...canu_clr.cvi.col0.hapmer.spectra-cn.fl.png | Bin ...canu_clr.cvi.col0.hapmer.spectra-cn.ln.png | Bin ...canu_clr.cvi.col0.hapmer.spectra-cn.st.png | Bin .../example/triocanu_clr.cvi.continuity.N.png | Bin ...canu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png | Bin ...canu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png | Bin ...canu_clr.cvi.cvi0.hapmer.spectra-cn.st.png | Bin .../triocanu_clr.cvi.spectra-cn.fl.png | Bin .../triocanu_clr.cvi.spectra-cn.ln.png | Bin .../triocanu_clr.cvi.spectra-cn.st.png | Bin .../example/triocanu_clr.hapmers.blob.png | Bin .../example/triocanu_clr.spectra-asm.fl.png | Bin .../example/triocanu_clr.spectra-asm.ln.png | Bin .../example/triocanu_clr.spectra-asm.st.png | Bin .../example/triocanu_clr.spectra-cn.fl.png | Bin .../example/triocanu_clr.spectra-cn.ln.png | Bin .../example/triocanu_clr.spectra-cn.st.png | Bin .../merqury-mash.sh | 10 +- .../merqury.sh | 0 .../plot/plot_blob.R | 0 .../plot/plot_block_N.R | 0 .../plot/plot_spectra_asm.R | 0 .../plot/plot_spectra_cn.R | 0 .../trio/bedMerToPhaseBlock.jar | Bin .../trio/block_n_stats.sh | 2 +- .../trio/exclude_reads.sh | 0 .../trio/fastaGetGaps.jar | Bin .../trio/hap_blob.sh | 0 .../trio/hapmers.sh | 8 +- .../merqury-1.1/trio/hapmers_to_bigwig.sh | 38 ++++ .../trio/phase_block.sh | 0 .../trio/phase_block/IO/Rwrapper.java | 0 .../IO/basic/BufferedFileReader.java | 0 .../trio/phase_block/IO/basic/FileMaker.java | 0 .../trio/phase_block/IO/basic/FileReader.java | 0 .../trio/phase_block/IO/basic/Format.java | 0 .../trio/phase_block/IO/basic/IOUtil.java | 0 .../trio/phase_block/IO/basic/RegExp.java | 0 .../trio/phase_block/IO/basic/Wrapper.java | 0 .../trio/phase_block/MerToPhaseBlock.java | 0 .../trio/phase_block/README.md | 0 .../trio/phase_block/bed/util/Bed.java | 0 .../trio/phase_block/bed/util/Region.java | 0 .../trio/phase_block/build_jar.sh | 0 .../trio/phase_block/genome/Chromosome.java | 0 .../genome/ChromosomeComparator.java | 0 .../trio/phase_block/genome/util/Util.java | 0 .../trio/spectra-hap.sh | 0 .../trio/switch_error.sh | 0 programs/merqury-1.1/util/bed_to_bigwig.sh | 39 ++++ programs/merqury-1.1/util/merylDumpToWig.jar | Bin 0 -> 17892 bytes .../util/util.sh | 0 programs/merqury_June2020/.DS_Store | Bin 6148 -> 0 bytes programs/meryl-1.0/.DS_Store | Bin 6148 -> 0 bytes 107 files changed, 485 insertions(+), 43 deletions(-) create mode 100644 envs/genomescope.yaml create mode 100644 programs/merqury-1.1/LICENSE create mode 100644 programs/merqury-1.1/README.md rename programs/{merqury_June2020 => merqury-1.1}/_submit_build.sh (96%) rename programs/{merqury_June2020 => merqury-1.1}/_submit_build_10x.sh (98%) rename programs/{merqury_June2020 => merqury-1.1}/_submit_hapmers.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/_submit_merqury.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/_submit_split.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/best_k.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/concat_splits.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/count.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/count_10x.sh (74%) rename programs/{merqury_June2020 => merqury-1.1}/build/diff.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/filt.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/intersect.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/build/split.sh (91%) rename programs/{merqury_June2020 => merqury-1.1}/build/split_10x.sh (87%) rename programs/{merqury_June2020 => merqury-1.1}/build/union_sum.sh (90%) create mode 100755 programs/merqury-1.1/eval/asm_multiplicity.sh rename programs/{merqury_June2020 => merqury-1.1}/eval/bedCalcN50.jar (100%) create mode 100755 programs/merqury-1.1/eval/false_duplications.sh rename programs/{merqury_June2020 => merqury-1.1}/eval/kmerHistToPloidyDepth.jar (100%) create mode 100755 programs/merqury-1.1/eval/per_seq_qv.sh rename programs/{merqury_June2020 => merqury-1.1}/eval/qv.sh (87%) create mode 100755 programs/merqury-1.1/eval/read_multiplicity.sh rename programs/{merqury_June2020 => merqury-1.1}/eval/spectra-cn.sh (92%) rename programs/{merqury_June2020 => merqury-1.1}/example/README.txt (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/inherited_hapmers.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/inherited_hapmers.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/inherited_hapmers.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.100_20000.col.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.100_20000.col.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.100_20000.cvi.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.100_20000.cvi.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.10_20000.col.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.10_20000.col.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.10_20000.cvi.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.10_20000.cvi.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.10_20000.phased_block.blob.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.col0.hapmer.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.col0.hapmer.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.col0.hapmer.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.col.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.10_20000.phased_block.blob.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.block.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.continuity.N.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.cvi.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.hapmers.blob.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-asm.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-asm.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-asm.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-cn.fl.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-cn.ln.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/example/triocanu_clr.spectra-cn.st.png (100%) rename programs/{merqury_June2020 => merqury-1.1}/merqury-mash.sh (81%) rename programs/{merqury_June2020 => merqury-1.1}/merqury.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/plot/plot_blob.R (100%) rename programs/{merqury_June2020 => merqury-1.1}/plot/plot_block_N.R (100%) rename programs/{merqury_June2020 => merqury-1.1}/plot/plot_spectra_asm.R (100%) rename programs/{merqury_June2020 => merqury-1.1}/plot/plot_spectra_cn.R (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/bedMerToPhaseBlock.jar (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/block_n_stats.sh (96%) rename programs/{merqury_June2020 => merqury-1.1}/trio/exclude_reads.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/fastaGetGaps.jar (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/hap_blob.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/hapmers.sh (97%) create mode 100755 programs/merqury-1.1/trio/hapmers_to_bigwig.sh rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/Rwrapper.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/BufferedFileReader.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/FileMaker.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/FileReader.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/Format.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/IOUtil.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/RegExp.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/IO/basic/Wrapper.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/MerToPhaseBlock.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/README.md (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/bed/util/Bed.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/bed/util/Region.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/build_jar.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/genome/Chromosome.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/genome/ChromosomeComparator.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/phase_block/genome/util/Util.java (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/spectra-hap.sh (100%) rename programs/{merqury_June2020 => merqury-1.1}/trio/switch_error.sh (100%) create mode 100755 programs/merqury-1.1/util/bed_to_bigwig.sh create mode 100644 programs/merqury-1.1/util/merylDumpToWig.jar rename programs/{merqury_June2020 => merqury-1.1}/util/util.sh (100%) delete mode 100644 programs/merqury_June2020/.DS_Store delete mode 100644 programs/meryl-1.0/.DS_Store diff --git a/envs/genomescope.yaml b/envs/genomescope.yaml new file mode 100644 index 0000000..e852490 --- /dev/null +++ b/envs/genomescope.yaml @@ -0,0 +1,6 @@ +channels: + - bioconda + - conda-forge +dependencies: + - genomescope2=2.0 + - python=3.9.2 diff --git a/envs/merylMerq.yaml b/envs/merylMerq.yaml index a7d2a4e..96c6aed 100644 --- a/envs/merylMerq.yaml +++ b/envs/merylMerq.yaml @@ -1,15 +1,12 @@ channels: - - bioconda - conda-forge - - r + - bioconda dependencies: - igvtools - openjdk=11.0.8 - - r=3 + - r-base=3.6.3 - r-ggplot2 - r-argparse - r-scales - - genomescope2=2.0 - samtools - bedtools - - python=3.9.2 diff --git a/programs/merqury-1.1/LICENSE b/programs/merqury-1.1/LICENSE new file mode 100644 index 0000000..1696843 --- /dev/null +++ b/programs/merqury-1.1/LICENSE @@ -0,0 +1,19 @@ + + PUBLIC DOMAIN NOTICE + + This software is "United States Government Work" under the terms of the United + States Copyright Act. It was written as part of the authors' official duties + for the United States Government and thus cannot be copyrighted. This software + is freely available to the public for use without a copyright + notice. Restrictions cannot be placed on its present or future use. + + Although all reasonable efforts have been taken to ensure the accuracy and + reliability of the software and associated data, the National Human Genome + Research Institute (NHGRI), National Institutes of Health (NIH) and the + U.S. Government do not and cannot warrant the performance or results that may + be obtained by using this software or data. NHGRI, NIH and the U.S. Government + disclaim all warranties as to performance, merchantability or fitness for any + particular purpose. + + Please cite the authors in any work or product based on this material. + diff --git a/programs/merqury-1.1/README.md b/programs/merqury-1.1/README.md new file mode 100644 index 0000000..4808a8c --- /dev/null +++ b/programs/merqury-1.1/README.md @@ -0,0 +1,191 @@ +# Merqury + +## Evaluate genome assemblies with k-mers and more + +Often, genome assembly projects have illumina whole genome sequencing reads available for the assembled individual. +The k-mer spectrum of this read set can be used for independently evaluating assembly quality without the need of a high quality reference. +Merqury provides a set of tools for this purpose. + +## Dependency +* gcc 4.8 or higher +* meryl +* Java run time environment (JRE) +* R with argparse, ggplot2, and scales (tested on R 3.6.1) +* bedtools +* samtools +* igvtools + +## Installation + +### Get a working meryl in your PATH +Download meryl release: https://github.com/marbl/meryl/releases/tag/v1.0 + +If the binary doesn't work, download the source and compile: +```shell +cd meryl/src +make -j 24 +export PATH=/path/to/meryl/…/bin:$PATH +``` +See if we get help message for `meryl`. + +### Add a path variable MERQURY +```shell +git clone https://github.com/marbl/merqury.git +cd merqury +export MERQURY=$PWD +``` +Add the “export” part to your environment (~/.bash_profile or ~/.profile). +Add installation dir paths for `bedtools`, `samtools` and `igvtools` to your enviroenment. +`source` it. + + +## Run + +* !! Merqury assumes all meryl dbs (dirs) are named with `.meryl`. !! + +On a single machine: +``` +ln -s $MERQURY/merqury.sh # Link merqury +./merqury.sh <read-db.meryl> [<mat.meryl> <pat.meryl>] <asm1.fasta> [asm2.fasta] <out> + +Usage: merqury.sh <read-db.meryl> [<mat.meryl> <pat.meryl>] <asm1.fasta> [asm2.fasta] <out> + <read-db.meryl> : k-mer counts of the read set + <mat.meryl> : k-mer counts of the maternal haplotype (ex. mat.only.meryl or mat.hapmer.meryl) + <pat.meryl> : k-mer counts of the paternal haplotype (ex. pat.only.meryl or pat.hapmer.meryl) + <asm1.fasta> : Assembly fasta file (ex. pri.fasta, hap1.fasta or maternal.fasta) + [asm2.fasta] : Additional fasta file (ex. alt.fasta, hap2.fasta or paternal.fasta) + *asm1.meryl and asm2.meryl will be generated. Avoid using the same names as the hap-mer dbs + <out> : Output prefix +``` +`< >` : required +`[ ]` : optional + +## Example + +Below is showing examples how to run Merqury using the prebuilt meryl dbs on a. thaliana F1 hybrid. +The fasta files are the trio-binned assemblies from [Koren et al](https://doi.org/10.1038/nbt.4277). + +```shell +### Download assemblies ### +wget https://gembox.cbcb.umd.edu/triobinning/athal_COL.fasta +wget https://gembox.cbcb.umd.edu/triobinning/athal_CVI.fasta + +### Download prebuilt meryl dbs ### +# read.meryl of the F1 hybrid between COL-0 and CVI-0 +wget https://obj.umiacs.umd.edu/marbl_publications/merqury/athal/a_thal.k18.meryl.tar.gz +# hap-mers for COL-0 haplotype +wget https://obj.umiacs.umd.edu/marbl_publications/merqury/athal/a_thal.col0.hapmer.meryl.tar.gz +# hap-mers for CVI-0 haplotype +wget https://obj.umiacs.umd.edu/marbl_publications/merqury/athal/a_thal.cvi0.hapmer.meryl.tar.gz + +# Untar +for gz in *.tar.gz +do + tar -zxf $gz +done + +# Run merqury +$MERQURY/merqury.sh F1.k18.meryl col0.hapmer.meryl cvi0.hapmer.meryl athal_COL.fasta athal_CVI.fasta test +``` + + +### 1. I have one assembly (pseudo-haplotype or mixed-haplotype) +```shell +# I don't have the hap-mers +$MERQURY/merqury.sh read-db.meryl asm1.fasta out_prefix +# Using the example above +$MERQURY/merqury.sh F1.k18.meryl athal_COL.fasta test-1 + +# I have the hap-mers +$MERQURY/merqury.sh read-db.meryl mat.meryl pat.meryl asm1.fasta out_prefix +# Using the example above +$MERQURY/merqury.sh F1.k18.meryl col0.hapmer.meryl cvi0.hapmer.meryl athal_COL.fasta test-1 +``` + +### 2. I have two assemblies (diploid) +```shell +# I don't have the hap-mers +$MERQURY/merqury.sh read-db.meryl asm1.fasta asm2.fasta out_prefix +# Using the example above +$MERQURY/merqury.sh F1.k18.meryl athal_COL.fasta athal_CVI.fasta test-2 + +# I have the hap-mers +$MERQURY/merqury.sh read-db.meryl mat.meryl pat.meryl asm1.fasta asm2.fasta out_prefix +# Using the example above +$MERQURY/merqury.sh F1.k18.meryl col0.hapmer.meryl cvi0.hapmer.meryl athal_COL.fasta athal_CVI.fasta test-2 +``` + +* Note there is no need to run merqury per-assemblies. Give two fasta files, Merqury generates stats for each and combined. + + + +### How to parallelize +Merqury starts with `eval/spectra_cn.sh`. +When hap-mers are provided, merqury runs modules under `trio/` in addition to `eval/spectra_cn.sh`. + + +The following can run at the same time. Modules with dependency are followed by arrows (->). +* `eval/spectra_cn.sh` -> `trio/spectra_hap.sh` +* `trio/hap_blob.sh` +* `trio/phase_block.sh` per assembly -> `trio/block_n_stats.sh` + + +Meryl, the k-mer counter inside, uses the maximum cpus available. +Set `OMP_NUM_THREADS=24` for example to use 24 threads. + +On slurm environment, simply run: +``` +ln -s $MERQURY/_submit_merqury.sh # Link merqury +./_submit_merqury.sh <read-db.meryl> [<mat.meryl> <pat.meryl>] <asm1.fasta> [asm2.fasta] <out> +``` +Change the `sbatch` to match your environment. (ex. partition) + + +## Outputs from each modules +* `eval/spectra_cn.sh`: k-mer completeness, qv, spectra-cn and spectra-asm plots, asm-only `.bed` and `.tdf` for tracking errors +* `eval/qv.sh`: just get the qv stats and quit. +* `trio/spectra_hap.sh`: hap-mer level spectra-cn plots, hap-mer completeness +* `trio/hap_blob.sh`: blob plots of the hap-mers in each contg/scaffold +* `trio/phase_block.sh`: phase block statistics, phase block N* plots, hap-mer tracks (`.bed` and `.tdf` files) +* `trio/block_n_stats.sh`: continuity plots (phase block N* or NG* plots, phase block vs. contig/scaffold plots) +* `trio/switch_error.sh`: this is run part of `phase_blck.sh`, however can be re-run with desired short-range switch parameters. Run `trio/block_n_stats.sh` along with it to get the associated plots. + +## Tips for helps +Run each script without any parameters if not sure what to do. +For example, `./trio/switch_error.sh` will give a help message and quit. + +Following wiki pages have more detailed examples. + +## 1. Prepare meryl dbs ([details](https://github.com/marbl/merqury/wiki/1.-Prepare-meryl-dbs)) +1. Get the right k size +2. Build k-mer dbs with meryl +3. Build hap-mers for trios + +## 2. Overall assembly evaluation ([details](https://github.com/marbl/merqury/wiki/2.-Overall-k-mer-evaluation)) +1. Reference free QV estimate +2. k-mer completeness (recovery rate) +3. Spectra copy number analysis +4. Track error bases in the assembly + +## 3. Phasing assessment with hap-mers ([details](https://github.com/marbl/merqury/wiki/3.-Phasing-assessment-with-hap-mers)) +1. Inherited hap-mer plots +2. Hap-mer blob plots +3. Hap-mer completeness (recovery rate) +4. Spectra copy number analysis per hap-mers +5. Phased block statistics and switch error rates +6. Track each haplotype block in the assembly + +## Available pre-built meryl dbs +Meryl dbs from Illumina WGS and hapmers are available [here](https://obj.umiacs.umd.edu/marbl_publications/merqury/index.html) for +* A. thaliana COL-0 x CVI-0 F1 +* NA12878 (HG001) +* HG002 + +## Citing merqury + +Please use the following [preprint](https://www.biorxiv.org/content/10.1101/2020.03.15.992941v1) to cite Merqury: + +Arang Rhie, Brian P. Walenz, Sergey Koren, Adam M. Phillippy, Merqury: reference-free quality and phasing assessment for genome assemblies, bioRxiv (2020). doi: https://doi.org/10.1101/2020.03.15.992941 + + + diff --git a/programs/merqury_June2020/_submit_build.sh b/programs/merqury-1.1/_submit_build.sh similarity index 96% rename from programs/merqury_June2020/_submit_build.sh rename to programs/merqury-1.1/_submit_build.sh index 988e26d..e44a8b8 100755 --- a/programs/merqury_June2020/_submit_build.sh +++ b/programs/merqury-1.1/_submit_build.sh @@ -45,11 +45,11 @@ for i in $(seq 1 $LEN) do fq=`sed -n ${i}p $input_fofn` GB=`du -k $fq | awk '{printf "%.0f", $1/1024/1024}'` - if [[ $GB -lt 12 ]]; then - echo "$fq is $GB, less than 12GB. Skip splitting." + if [[ $GB -lt 15 ]]; then + echo "$fq is $GB, less than 15GB. Skip splitting." echo $fq >> $input_fofn.$i else - echo "$fq is $GB, over 12GB. Will split and run meryl in parallel." + echo "$fq is $GB, over 15GB. Will split and run meryl in parallel." echo "Split files will be in $input_fofn.$i" args="$input_fofn" split_arrs="$split_arrs$i," diff --git a/programs/merqury_June2020/_submit_build_10x.sh b/programs/merqury-1.1/_submit_build_10x.sh similarity index 98% rename from programs/merqury_June2020/_submit_build_10x.sh rename to programs/merqury-1.1/_submit_build_10x.sh index 6c424db..c1c9c42 100755 --- a/programs/merqury_June2020/_submit_build_10x.sh +++ b/programs/merqury-1.1/_submit_build_10x.sh @@ -1,6 +1,6 @@ #!/bin/bash -build=/srv/public/users/tomas/programs/merqury/build +build=$MERQURY/build if [ -z $1 ]; then echo "Usage: ./_submit_build.sh <k-size> <R1.fofn> <R2.fofn> <out_prefix> [mem=T]" diff --git a/programs/merqury_June2020/_submit_hapmers.sh b/programs/merqury-1.1/_submit_hapmers.sh similarity index 100% rename from programs/merqury_June2020/_submit_hapmers.sh rename to programs/merqury-1.1/_submit_hapmers.sh diff --git a/programs/merqury_June2020/_submit_merqury.sh b/programs/merqury-1.1/_submit_merqury.sh similarity index 100% rename from programs/merqury_June2020/_submit_merqury.sh rename to programs/merqury-1.1/_submit_merqury.sh diff --git a/programs/merqury_June2020/_submit_split.sh b/programs/merqury-1.1/_submit_split.sh similarity index 100% rename from programs/merqury_June2020/_submit_split.sh rename to programs/merqury-1.1/_submit_split.sh diff --git a/programs/merqury_June2020/best_k.sh b/programs/merqury-1.1/best_k.sh similarity index 100% rename from programs/merqury_June2020/best_k.sh rename to programs/merqury-1.1/best_k.sh diff --git a/programs/merqury_June2020/build/concat_splits.sh b/programs/merqury-1.1/build/concat_splits.sh similarity index 100% rename from programs/merqury_June2020/build/concat_splits.sh rename to programs/merqury-1.1/build/concat_splits.sh diff --git a/programs/merqury_June2020/build/count.sh b/programs/merqury-1.1/build/count.sh similarity index 100% rename from programs/merqury_June2020/build/count.sh rename to programs/merqury-1.1/build/count.sh diff --git a/programs/merqury_June2020/build/count_10x.sh b/programs/merqury-1.1/build/count_10x.sh similarity index 74% rename from programs/merqury_June2020/build/count_10x.sh rename to programs/merqury-1.1/build/count_10x.sh index 8ec5736..1f5e226 100755 --- a/programs/merqury_June2020/build/count_10x.sh +++ b/programs/merqury-1.1/build/count_10x.sh @@ -28,9 +28,19 @@ else line_num=$SLURM_ARRAY_TASK_ID fi -# Note: Provide memory in Gb unit. SLURM provides $SLURM_MEM_PER_NODE in Mb. -# Give extra 4Gb to avoid 'Bus Error' form running out of memory. -mem=$(((SLURM_MEM_PER_NODE/1024)-4)) +if [[ ! -z $SLURM_CPUS_PER_TASK ]]; then + cpus="threads=$SLURM_CPUS_PER_TASK" +fi + +# If SLURM_MEM_PER_NODE exist; give extra 4Gb +# otherwise, let meryl determine +if [[ ! -z $SLURM_MEM_PER_NODE ]]; then + # Note: Provide memory in Gb unit. SLURM provides $SLURM_MEM_PER_NODE in Mb. + # Give extra 4Gb to avoid 'Bus Error' form running out of memory. + mem=$(((SLURM_MEM_PER_NODE/1024)-4)) + mem="memory=$mem" +fi + line_num=$(((offset * 1000) + $line_num)) # Read in the input path @@ -45,9 +55,9 @@ output=$name.$k.$line_num.meryl if [ ! -d $output ]; then # Run meryl count: Collect k-mer frequencies echo " - zcat $input | awk '{if (NR%2==1) {print $1} else {print substr($1,24)}}' | meryl k=$k threads=$SLURM_CPUS_PER_TASK memory=$mem count output $output - + zcat $input | awk '{if (NR%2==1) {print $1} else {print substr($1,24)}}' | meryl k=$k $cpus $mem count output $output - " - zcat $input | awk '{if (NR%2==1) {print $1} else {print substr($1,24)}}' | meryl k=$k threads=$SLURM_CPUS_PER_TASK memory=$mem count output $output - + zcat $input | awk '{if (NR%2==1) {print $1} else {print substr($1,24)}}' | meryl k=$k $cpus $mem count output $output - else echo "$output dir already exist. Nothing to do with $name." fi diff --git a/programs/merqury_June2020/build/diff.sh b/programs/merqury-1.1/build/diff.sh similarity index 100% rename from programs/merqury_June2020/build/diff.sh rename to programs/merqury-1.1/build/diff.sh diff --git a/programs/merqury_June2020/build/filt.sh b/programs/merqury-1.1/build/filt.sh similarity index 100% rename from programs/merqury_June2020/build/filt.sh rename to programs/merqury-1.1/build/filt.sh diff --git a/programs/merqury_June2020/build/intersect.sh b/programs/merqury-1.1/build/intersect.sh similarity index 100% rename from programs/merqury_June2020/build/intersect.sh rename to programs/merqury-1.1/build/intersect.sh diff --git a/programs/merqury_June2020/build/split.sh b/programs/merqury-1.1/build/split.sh similarity index 91% rename from programs/merqury_June2020/build/split.sh rename to programs/merqury-1.1/build/split.sh index 40e3980..9dca150 100755 --- a/programs/merqury_June2020/build/split.sh +++ b/programs/merqury-1.1/build/split.sh @@ -3,7 +3,7 @@ echo "Usage: ./split.sh <input.fofn> [LINE_NUM]" echo -e "\t<input.fofn>: fastq.gz files we want to split by every 300 million lines." echo -e "\t<input.fofn>.LINE_NUM will be generated." -echo -e "\t\tUse it for building meryl dbs" +echo -e "\t\tUse it for building meryl dbs. pigz will use maximum of 8 processes by default." echo FOFN=$1 @@ -25,6 +25,9 @@ if [ -z $tid ]; then fi cpus=$SLURM_CPUS_PER_TASK +if [[ -z $cpus ]]; then + cpus=8 +fi fq=`sed -n ${tid}p $FOFN` fq_prefix=`echo $fq | sed 's/.fastq.gz$//g' | sed 's/.fq.gz$//g' | sed 's/.fastq$//g' | sed 's/.fq$//g'` diff --git a/programs/merqury_June2020/build/split_10x.sh b/programs/merqury-1.1/build/split_10x.sh similarity index 87% rename from programs/merqury_June2020/build/split_10x.sh rename to programs/merqury-1.1/build/split_10x.sh index 6654096..e125233 100755 --- a/programs/merqury_June2020/build/split_10x.sh +++ b/programs/merqury-1.1/build/split_10x.sh @@ -3,7 +3,7 @@ echo "Usage: ./split_10x.sh <input.fofn> [LINE_NUM]" echo -e "\t<input.fofn>: 10XG fastq R1.gz files to split per 300 million lines." echo -e "\t<input.fofn>.LINE_NUM will be generated." -echo -e "\t\tUse it for building meryl dbs" +echo -e "\t\tUse it for building meryl dbs. pigz will use maximum of 8 processes by default." echo FOFN=$1 @@ -12,7 +12,7 @@ if [ -z $FOFN ]; then exit -1 fi -tid=300000000 # slurm environment variable for job arrays +tid=$SLURM_ARRAY_TASK_ID # slurm environment variable for job arrays LINE_NUM=$2 if [ -z $tid ]; then @@ -24,11 +24,13 @@ if [ -z $tid ]; then exit -1 fi -cpus=20 +cpus=$SLURM_CPUS_PER_TASK +if [[ -z $cpus ]]; then + cpus=8 +fi fq=`sed -n ${tid}p $FOFN` fq_prefix=`echo $fq | sed 's/.fastq.gz$//g' | sed 's/.fq.gz$//g' | sed 's/.fastq$//g' | sed 's/.fq$//g'` -echo $fq_prefix fq_prefix=`basename $fq_prefix` mkdir -p split diff --git a/programs/merqury_June2020/build/union_sum.sh b/programs/merqury-1.1/build/union_sum.sh similarity index 90% rename from programs/merqury_June2020/build/union_sum.sh rename to programs/merqury-1.1/build/union_sum.sh index dc21905..a01c15e 100755 --- a/programs/merqury_June2020/build/union_sum.sh +++ b/programs/merqury-1.1/build/union_sum.sh @@ -16,8 +16,6 @@ output_prefix=$3.k$k LEN=`wc -l $input_fofn | awk '{print $1}'` NUM_DBS_TO_JOIN=100 # Join every $NUM_DBS_TO_JOIN as intermediates, then merge at the end JOIN_IDX=0 -CPU=$SLURM_CPUS_PER_TASK -MEM=$SLURM_MEM_PER_NODE echo "Set ulimit: ulimit -Sn 32000" ulimit -Sn 32000 @@ -44,8 +42,6 @@ do if [ ! -d $output ]; then echo " meryl \ - threads=$CPU \ - memory=$((MEM/1024)) \ k=$k \ union-sum \ output $output \ @@ -53,8 +49,6 @@ do " meryl \ - threads=$CPU \ - memory=$((MEM/1024)) \ k=$k \ union-sum \ output $output \ @@ -97,8 +91,6 @@ echo "union-sum of $output_prefix.[ 1 - $JOIN_IDX ] :" if [ ! -d $output_prefix ]; then echo " meryl \ - threads=$CPU \ - memory=$((MEM/1024)) \ k=$k \ union-sum \ output $output_prefix.meryl \ @@ -106,8 +98,6 @@ if [ ! -d $output_prefix ]; then " meryl \ - threads=$CPU \ - memory=$((MEM/1024)) \ k=$k \ union-sum \ output $output_prefix.meryl \ diff --git a/programs/merqury-1.1/eval/asm_multiplicity.sh b/programs/merqury-1.1/eval/asm_multiplicity.sh new file mode 100755 index 0000000..51ed3ec --- /dev/null +++ b/programs/merqury-1.1/eval/asm_multiplicity.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +if [[ "$#" -lt 3 ]]; then + echo "Usage: ./asm_multiplicity.sh <asm.fasta> <asm.meryl> <out>" + echo -e "\t<asm.fasta>: assembly fasta file" + echo -e "\t<asm.meryl>: assembly meryl dir" + echo -e "\t<out>: output file prefix. <out>.copies.wig and <out>.asm_multiplicity.bigWig will be generated." + exit 0 +fi + +asm_fa=$1 +asm=$2 +out=$3 + +# Requirements: samtools, ucsc kent utils +module load samtools +module load ucsc/396 + +if [[ ! -e $asm_fa ]]; then + samtools faidx $asm_fa +fi + + +echo " +# Collect copy numbers in assembly" +meryl-lookup -dump -memory 12 -sequence $asm_fa -mers $asm | awk '$4=="T"' | java -jar -Xmx1g $MERQURY/util/merylDumpToWig.jar - > $out.copies.wig + +echo " +# Convert to bigwig" +wigToBigWig $out.copies.wig $asm_fa.fai $out.asm_multiplicity.bigWig + +echo "Done!" + diff --git a/programs/merqury_June2020/eval/bedCalcN50.jar b/programs/merqury-1.1/eval/bedCalcN50.jar similarity index 100% rename from programs/merqury_June2020/eval/bedCalcN50.jar rename to programs/merqury-1.1/eval/bedCalcN50.jar diff --git a/programs/merqury-1.1/eval/false_duplications.sh b/programs/merqury-1.1/eval/false_duplications.sh new file mode 100755 index 0000000..ed7bf0a --- /dev/null +++ b/programs/merqury-1.1/eval/false_duplications.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [[ -z $1 ]]; then + echo "Usage: ./false_duplications.sh <name.asm.spectra-cn.hist>" + echo "Get the number of additional k-mers found in an assembly in the single and two copy k-mer peaks from the reads" + echo -e "<name.asm.spectra-cn.hist>: spectra-cn.hist generated with Merqury for a pseudo-haplotype or mixed haplotype assembly" + exit 0 +fi + +hist=$1 + +cutoff=`cat $hist | awk '$1==1 {print $2"\t"$3}' | awk -v max=0 'max<$2 {max=$2; mult=$1 } END {printf "%.0f\n", mult*(1.5)}'` +one_cp=`awk -v cutoff=$cutoff '$1==1 && $2<cutoff {sum+=$NF} END {print sum}' $hist` +two_cp=`awk -v cutoff=$cutoff '$1==2 && $2<cutoff {sum+=$NF} END {print sum}' $hist` +thr_cp=`awk -v cutoff=$cutoff '$1==3 && $2<cutoff {sum+=$NF} END {print sum}' $hist` +fou_cp=`awk -v cutoff=$cutoff '$1==4 && $2<cutoff {sum+=$NF} END {print sum}' $hist` +mor_cp=`awk -v cutoff=$cutoff '$1==">4" && $2<cutoff {sum+=$NF} END {print sum}' $hist` +DUPS_TOTAL=`echo "$one_cp $two_cp $thr_cp $fou_cp $mor_cp" | awk '{dup=$2+$3+$4+$5; all=dup+$1} END {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"dup"\t"all"\t"(100*dup/all)}'` +echo -e "hist\tcutoff\t1\t2\t3\t4\t>4\tdup(>1)\tall\tdup%" +echo -e "$hist\t$cutoff\t$DUPS_TOTAL" + diff --git a/programs/merqury_June2020/eval/kmerHistToPloidyDepth.jar b/programs/merqury-1.1/eval/kmerHistToPloidyDepth.jar similarity index 100% rename from programs/merqury_June2020/eval/kmerHistToPloidyDepth.jar rename to programs/merqury-1.1/eval/kmerHistToPloidyDepth.jar diff --git a/programs/merqury-1.1/eval/per_seq_qv.sh b/programs/merqury-1.1/eval/per_seq_qv.sh new file mode 100755 index 0000000..9f0125d --- /dev/null +++ b/programs/merqury-1.1/eval/per_seq_qv.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +if [[ "$#" -lt 3 ]]; then + echo "Usage: ./per_seq_qv.sh seq.fasta read.meryl out" + echo "" + echo "Get QV per seqIDs in seq.fasta" + echo -e "seq.fasta:\tassembly, multi-fasta file" + echo -e "read.meryl:\tk-mer counts of read set" + echo -e "out:\toutput prefix" + echo + echo "Output will be generated as out.qv" + echo "Arang Rhie, 2020-06-15. arrhie@gmail.com" + echo + exit 0 +fi + +seq=$1 # asm.fasta +read=$2 # read.meryl +name=$3 # output prefix + +k=`meryl print $read | head -n 2 | tail -n 1 | awk '{print length($1)}'` +echo "Detected k-mer size $k" +echo + +seq_name=`echo $seq | sed 's/.fasta$//g' | sed 's/.fa$//g'` + + +if [[ ! -e $seq_name.0.meryl ]]; then + + if [[ ! -e $seq_name.meryl ]]; then + echo "# No $seq_name.meryl found. Counting ${k}-mers..." + meryl count k=$k output $seq_name.meryl $seq + echo + fi + echo "# Collect k-mers found in $seq_name only" + meryl difference $seq_name.meryl $read output $seq_name.0.meryl + echo +fi + +echo "QV per sequences" +meryl-lookup -existence -sequence $seq -mers $seq_name.0.meryl/ | \ + awk -v k=$k '{print $1"\t"$NF"\t"$(NF-2)"\t"(-10*log(1-(1-$NF/$(NF-2))^(1/k))/log(10))"\t"(1-(1-$NF/$(NF-2))^(1/k))}' > $name.qv + diff --git a/programs/merqury_June2020/eval/qv.sh b/programs/merqury-1.1/eval/qv.sh similarity index 87% rename from programs/merqury_June2020/eval/qv.sh rename to programs/merqury-1.1/eval/qv.sh index bc37f00..c5ccdaf 100755 --- a/programs/merqury_June2020/eval/qv.sh +++ b/programs/merqury-1.1/eval/qv.sh @@ -50,6 +50,9 @@ do QV=`echo "$ASM_ONLY $TOTAL" | awk -v k=$k '{print (-10*log(1-(1-$1/$2)^(1/k))/log(10))}'` echo -e "$asm\t$ASM_ONLY\t$TOTAL\t$QV\t$ERROR" >> $name.qv echo + + meryl-lookup -existence -sequence $asm_fa -mers $asm.0.meryl/ | \ + awk -v k=$k '{print $1"\t"$NF"\t"$(NF-2)"\t"(-10*log(1-(1-$NF/$(NF-2))^(1/k))/log(10))"\t"(1-(1-$NF/$(NF-2))^(1/k))}' > $name.$asm.qv done if [[ "$asm2_fa" == "" ]]; then @@ -62,8 +65,8 @@ asm2=`echo $asm2_fa | sed 's/.fasta.gz//g' | sed 's/.fa.gz//g' | sed 's/.fasta// asm="both" -meryl union output $asm.meryl $asm1.meryl $asm2.meryl -meryl union output $asm.0.meryl $asm1.0.meryl $asm2.0.meryl +meryl union-sum output $asm.meryl $asm1.meryl $asm2.meryl +meryl union-sum output $asm.0.meryl $asm1.0.meryl $asm2.0.meryl echo "# QV statistics for $asm" ASM_ONLY=`meryl statistics $asm.0.meryl | head -n4 | tail -n1 | awk '{print $2}'` @@ -75,3 +78,4 @@ echo rm -r $asm1.0.meryl $asm1.meryl $asm2.0.meryl $asm2.meryl $asm.0.meryl $asm.meryl echo "Done!" + diff --git a/programs/merqury-1.1/eval/read_multiplicity.sh b/programs/merqury-1.1/eval/read_multiplicity.sh new file mode 100755 index 0000000..062add8 --- /dev/null +++ b/programs/merqury-1.1/eval/read_multiplicity.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +if [[ "$#" -lt 3 ]]; then + echo "Usage: ./read_multiplicity.sh <asm.fasta> <read.meryl> <out>" + echo -e "\t<asm.fasta>: assembly fasta file" + echo -e "\t<read.meryl>: k-mer counts of the reads" + echo -e "\t<out>: output file prefix. <out>.read.wig and <out>.read_multiplicity.bigWig will be generated." + exit 0 +fi + +asm_fa=$1 +read=$2 +out=$3 +asm=`echo $asm_fa | sed 's/.gz$//g' | sed 's/.fasta$//g' | sed 's/.fa$//g'` + +module load samtools +module load ucsc/396 + +if [[ ! -e $asm_fa.fai ]]; then + samtools faidx $asm_fa +fi + +echo " +# Collect k-mer multiplicity in reads" +# Adjust memory accordingly +meryl-lookup -dump -memory 68 -sequence $asm_fa -mers $read | awk '$4=="T"' | java -jar -Xmx1g $MERQURY/util/merylDumpToWig.jar - > $out.read.wig + +echo " +# Convert to bigwig" +wigToBigWig $out.read.wig $asm_fa.fai $out.read_multiplicity.bigwig + diff --git a/programs/merqury_June2020/eval/spectra-cn.sh b/programs/merqury-1.1/eval/spectra-cn.sh similarity index 92% rename from programs/merqury_June2020/eval/spectra-cn.sh rename to programs/merqury-1.1/eval/spectra-cn.sh index 0338699..f528c47 100755 --- a/programs/merqury_June2020/eval/spectra-cn.sh +++ b/programs/merqury-1.1/eval/spectra-cn.sh @@ -115,8 +115,8 @@ do echo "# Plot $hist" echo "\ - $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only" - $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only + Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.$asm.spectra-cn -z $hist_asm_only" + Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.$asm.spectra-cn -z $hist_asm_only echo echo "# QV statistics" @@ -127,6 +127,11 @@ do echo -e "$asm\t$ASM_ONLY\t$TOTAL\t$QV\t$ERROR" >> $name.qv echo + echo "# Per seq QV statistics" + meryl-lookup -existence -sequence $asm_fa -mers $asm.0.meryl/ | \ + awk -v k=$k '{print $1"\t"$NF"\t"$(NF-2)"\t"(-10*log(1-(1-$NF/$(NF-2))^(1/k))/log(10))"\t"(1-(1-$NF/$(NF-2))^(1/k))}' > $name.$asm.qv + echo + echo "# k-mer completeness (recoveray rate) with solid k-mers for $asm with > $filt counts" meryl intersect output $asm.solid.meryl $asm.meryl $read_solid TOTAL=`meryl statistics $read_solid | head -n3 | tail -n1 | awk '{print $2}'` @@ -177,8 +182,8 @@ if [[ "$asm2_fa" = "" ]]; then echo "# Plot $hist" echo "\ - $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only" - $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only + Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only" + Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only echo echo "# Clean up" @@ -265,8 +270,8 @@ echo echo "# Plot $hist" echo "\ -$MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only" -$MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only +Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only" +Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-cn -z $hist_asm_only echo echo "# QV" @@ -317,7 +322,7 @@ else fi echo "Plot $hist" -$MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only +Rscript $MERQURY/plot/plot_spectra_cn.R -f $hist -o $name.spectra-asm -z $hist_asm_dist_only echo echo "Clean up" diff --git a/programs/merqury_June2020/example/README.txt b/programs/merqury-1.1/example/README.txt similarity index 100% rename from programs/merqury_June2020/example/README.txt rename to programs/merqury-1.1/example/README.txt diff --git a/programs/merqury_June2020/example/inherited_hapmers.fl.png b/programs/merqury-1.1/example/inherited_hapmers.fl.png similarity index 100% rename from programs/merqury_June2020/example/inherited_hapmers.fl.png rename to programs/merqury-1.1/example/inherited_hapmers.fl.png diff --git a/programs/merqury_June2020/example/inherited_hapmers.ln.png b/programs/merqury-1.1/example/inherited_hapmers.ln.png similarity index 100% rename from programs/merqury_June2020/example/inherited_hapmers.ln.png rename to programs/merqury-1.1/example/inherited_hapmers.ln.png diff --git a/programs/merqury_June2020/example/inherited_hapmers.st.png b/programs/merqury-1.1/example/inherited_hapmers.st.png similarity index 100% rename from programs/merqury_June2020/example/inherited_hapmers.st.png rename to programs/merqury-1.1/example/inherited_hapmers.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.100_20000.col.block.N.png b/programs/merqury-1.1/example/triocanu_clr.100_20000.col.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.100_20000.col.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.100_20000.col.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.100_20000.col.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.100_20000.col.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.100_20000.col.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.100_20000.col.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.100_20000.cvi.block.N.png b/programs/merqury-1.1/example/triocanu_clr.100_20000.cvi.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.100_20000.cvi.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.100_20000.cvi.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.100_20000.cvi.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.100_20000.cvi.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.100_20000.cvi.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.100_20000.cvi.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.10_20000.col.block.N.png b/programs/merqury-1.1/example/triocanu_clr.10_20000.col.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.10_20000.col.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.10_20000.col.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.10_20000.col.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.10_20000.col.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.10_20000.col.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.10_20000.col.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.10_20000.cvi.block.N.png b/programs/merqury-1.1/example/triocanu_clr.10_20000.cvi.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.10_20000.cvi.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.10_20000.cvi.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.10_20000.cvi.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.10_20000.cvi.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.10_20000.cvi.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.10_20000.cvi.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.10_20000.phased_block.blob.png b/programs/merqury-1.1/example/triocanu_clr.col.10_20000.phased_block.blob.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.10_20000.phased_block.blob.png rename to programs/merqury-1.1/example/triocanu_clr.col.10_20000.phased_block.blob.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.block.N.png b/programs/merqury-1.1/example/triocanu_clr.col.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.col.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.col0.hapmer.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.col.col0.hapmer.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.col.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.col.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.col.cvi0.hapmer.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.col.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.col.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.10_20000.phased_block.blob.png b/programs/merqury-1.1/example/triocanu_clr.cvi.10_20000.phased_block.blob.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.10_20000.phased_block.blob.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.10_20000.phased_block.blob.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.block.N.png b/programs/merqury-1.1/example/triocanu_clr.cvi.block.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.block.N.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.block.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.col0.hapmer.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.continuity.N.png b/programs/merqury-1.1/example/triocanu_clr.cvi.continuity.N.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.continuity.N.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.continuity.N.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.cvi0.hapmer.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.cvi.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.cvi.spectra-cn.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.hapmers.blob.png b/programs/merqury-1.1/example/triocanu_clr.hapmers.blob.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.hapmers.blob.png rename to programs/merqury-1.1/example/triocanu_clr.hapmers.blob.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-asm.fl.png b/programs/merqury-1.1/example/triocanu_clr.spectra-asm.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-asm.fl.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-asm.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-asm.ln.png b/programs/merqury-1.1/example/triocanu_clr.spectra-asm.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-asm.ln.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-asm.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-asm.st.png b/programs/merqury-1.1/example/triocanu_clr.spectra-asm.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-asm.st.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-asm.st.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-cn.fl.png b/programs/merqury-1.1/example/triocanu_clr.spectra-cn.fl.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-cn.fl.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-cn.fl.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-cn.ln.png b/programs/merqury-1.1/example/triocanu_clr.spectra-cn.ln.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-cn.ln.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-cn.ln.png diff --git a/programs/merqury_June2020/example/triocanu_clr.spectra-cn.st.png b/programs/merqury-1.1/example/triocanu_clr.spectra-cn.st.png similarity index 100% rename from programs/merqury_June2020/example/triocanu_clr.spectra-cn.st.png rename to programs/merqury-1.1/example/triocanu_clr.spectra-cn.st.png diff --git a/programs/merqury_June2020/merqury-mash.sh b/programs/merqury-1.1/merqury-mash.sh similarity index 81% rename from programs/merqury_June2020/merqury-mash.sh rename to programs/merqury-1.1/merqury-mash.sh index d7b4372..8788b46 100755 --- a/programs/merqury_June2020/merqury-mash.sh +++ b/programs/merqury-1.1/merqury-mash.sh @@ -15,7 +15,15 @@ input_fofn=$3 cpus=$4 name=`echo $asm | sed 's/.fasta$//g' | sed 's/.fa$//g' | sed 's/.fasta.gz//g' | sed 's/.fa.gz//g'` -module load mash + +source $MERQURY/util/util.sh + +has_module=$(check_module) +if [[ $has_module -gt 0 ]]; then + echo "No modules available.." +else + module load mash +fi mash sketch -s 1000000 -k $k $asm mash screen -p $cpus $asm.msh `cat $input_fofn | tr '\n' ' '` > $name.msh.idy diff --git a/programs/merqury_June2020/merqury.sh b/programs/merqury-1.1/merqury.sh similarity index 100% rename from programs/merqury_June2020/merqury.sh rename to programs/merqury-1.1/merqury.sh diff --git a/programs/merqury_June2020/plot/plot_blob.R b/programs/merqury-1.1/plot/plot_blob.R similarity index 100% rename from programs/merqury_June2020/plot/plot_blob.R rename to programs/merqury-1.1/plot/plot_blob.R diff --git a/programs/merqury_June2020/plot/plot_block_N.R b/programs/merqury-1.1/plot/plot_block_N.R similarity index 100% rename from programs/merqury_June2020/plot/plot_block_N.R rename to programs/merqury-1.1/plot/plot_block_N.R diff --git a/programs/merqury_June2020/plot/plot_spectra_asm.R b/programs/merqury-1.1/plot/plot_spectra_asm.R similarity index 100% rename from programs/merqury_June2020/plot/plot_spectra_asm.R rename to programs/merqury-1.1/plot/plot_spectra_asm.R diff --git a/programs/merqury_June2020/plot/plot_spectra_cn.R b/programs/merqury-1.1/plot/plot_spectra_cn.R similarity index 100% rename from programs/merqury_June2020/plot/plot_spectra_cn.R rename to programs/merqury-1.1/plot/plot_spectra_cn.R diff --git a/programs/merqury_June2020/trio/bedMerToPhaseBlock.jar b/programs/merqury-1.1/trio/bedMerToPhaseBlock.jar similarity index 100% rename from programs/merqury_June2020/trio/bedMerToPhaseBlock.jar rename to programs/merqury-1.1/trio/bedMerToPhaseBlock.jar diff --git a/programs/merqury_June2020/trio/block_n_stats.sh b/programs/merqury-1.1/trio/block_n_stats.sh similarity index 96% rename from programs/merqury_June2020/trio/block_n_stats.sh rename to programs/merqury-1.1/trio/block_n_stats.sh index ae7eadb..af85ef5 100755 --- a/programs/merqury_June2020/trio/block_n_stats.sh +++ b/programs/merqury-1.1/trio/block_n_stats.sh @@ -65,7 +65,7 @@ do if [[ $num_gaps -gt 0 ]]; then echo "# Found $num_gaps. Generating stats for both scaffolds and contigs." awk -v asm=$asm '{print "scaffold\t"asm"\t"$2}' $asm.fasta.fai | sort -nr -k3 - > $out.$asm.scaff.sizes - awk '{print $1"\t0\t"$2}' $asm.fasta.fai | bedtools subtract -a - -b $asm.gaps.bed | awk '{print "contig\t"asm"\t"($NF-$(NF-1))}' | sort -nr -k3 - > $out.$asm.contig.sizes + awk '{print $1"\t0\t"$2}' $asm.fasta.fai | bedtools subtract -a - -b $asm.gaps.bed | awk -v asm=$asm '{print "contig\t"asm"\t"($NF-$(NF-1))}' | sort -nr -k3 - > $out.$asm.contig.sizes else echo "# No gaps found. This is a contig set." awk -v asm=$asm '{print "contig\t"asm"\t"$2}' $asm.fasta.fai | sort -nr -k3 - > $out.$asm.contig.sizes diff --git a/programs/merqury_June2020/trio/exclude_reads.sh b/programs/merqury-1.1/trio/exclude_reads.sh similarity index 100% rename from programs/merqury_June2020/trio/exclude_reads.sh rename to programs/merqury-1.1/trio/exclude_reads.sh diff --git a/programs/merqury_June2020/trio/fastaGetGaps.jar b/programs/merqury-1.1/trio/fastaGetGaps.jar similarity index 100% rename from programs/merqury_June2020/trio/fastaGetGaps.jar rename to programs/merqury-1.1/trio/fastaGetGaps.jar diff --git a/programs/merqury_June2020/trio/hap_blob.sh b/programs/merqury-1.1/trio/hap_blob.sh similarity index 100% rename from programs/merqury_June2020/trio/hap_blob.sh rename to programs/merqury-1.1/trio/hap_blob.sh diff --git a/programs/merqury_June2020/trio/hapmers.sh b/programs/merqury-1.1/trio/hapmers.sh similarity index 97% rename from programs/merqury_June2020/trio/hapmers.sh rename to programs/merqury-1.1/trio/hapmers.sh index 6e4551c..aeaa48f 100755 --- a/programs/merqury_June2020/trio/hapmers.sh +++ b/programs/merqury-1.1/trio/hapmers.sh @@ -22,9 +22,11 @@ if [[ "$#" -lt 2 ]]; then exit -1 fi -hap1_meryl=$1 -hap2_meryl=$2 -child_meryl=$3 +source $MERQURY/util/util.sh + +hap1_meryl=`link $1` +hap2_meryl=`link $2` +child_meryl=`link $3` hap1=${hap1_meryl%.meryl*} hap2=${hap2_meryl%.meryl*} diff --git a/programs/merqury-1.1/trio/hapmers_to_bigwig.sh b/programs/merqury-1.1/trio/hapmers_to_bigwig.sh new file mode 100755 index 0000000..4b208ac --- /dev/null +++ b/programs/merqury-1.1/trio/hapmers_to_bigwig.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +if [[ -z $1 ]]; then + echo "Usage: ./hapmers_to_bigWig.sh <in.hap.bed> <asm.fai> [convert_pipes]" + echo -e "\t<in.hap.bed>: ex. out.asm.mat.inherited.bed" + echo -e "\t<asm.fai>: generate with samtools faidx" + echo -e "\t[convert_pipes]: convert '|' to '_' in asm seq names by default. Set to F if not wanted." + exit 0 +fi + +bed=$1 +fai=$2 +convert=$3 + +module load bedtools +module load ucsc/396 + +bg=${bed/.bed/.bg} + +if [[ "$convert" = "F" ]]; then + echo "# keep pipes" + sizes=${fai/.fai/.sizes} + cat $fai | cut -f1-2 > $sizes + cat $bed | bedtools genomecov -bg -g $sizes -i - > $bg +else + sizes=${fai/.fai/.sizes} + cat $fai | cut -f1-2 | sed 's/|/_/g' > $sizes + cat $bed | sed 's/|/_/g' | bedtools genomecov -bg -g $sizes -i - > $bg +fi + +sort=${bg/.bg/.srt.bg} +bedSort $bg $sort + +bw=${bed/.bed/.bigwig} +bedGraphToBigWig $sort $sizes $bw + +rm $bg $sort + diff --git a/programs/merqury_June2020/trio/phase_block.sh b/programs/merqury-1.1/trio/phase_block.sh similarity index 100% rename from programs/merqury_June2020/trio/phase_block.sh rename to programs/merqury-1.1/trio/phase_block.sh diff --git a/programs/merqury_June2020/trio/phase_block/IO/Rwrapper.java b/programs/merqury-1.1/trio/phase_block/IO/Rwrapper.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/Rwrapper.java rename to programs/merqury-1.1/trio/phase_block/IO/Rwrapper.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/BufferedFileReader.java b/programs/merqury-1.1/trio/phase_block/IO/basic/BufferedFileReader.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/BufferedFileReader.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/BufferedFileReader.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/FileMaker.java b/programs/merqury-1.1/trio/phase_block/IO/basic/FileMaker.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/FileMaker.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/FileMaker.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/FileReader.java b/programs/merqury-1.1/trio/phase_block/IO/basic/FileReader.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/FileReader.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/FileReader.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/Format.java b/programs/merqury-1.1/trio/phase_block/IO/basic/Format.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/Format.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/Format.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/IOUtil.java b/programs/merqury-1.1/trio/phase_block/IO/basic/IOUtil.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/IOUtil.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/IOUtil.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/RegExp.java b/programs/merqury-1.1/trio/phase_block/IO/basic/RegExp.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/RegExp.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/RegExp.java diff --git a/programs/merqury_June2020/trio/phase_block/IO/basic/Wrapper.java b/programs/merqury-1.1/trio/phase_block/IO/basic/Wrapper.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/IO/basic/Wrapper.java rename to programs/merqury-1.1/trio/phase_block/IO/basic/Wrapper.java diff --git a/programs/merqury_June2020/trio/phase_block/MerToPhaseBlock.java b/programs/merqury-1.1/trio/phase_block/MerToPhaseBlock.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/MerToPhaseBlock.java rename to programs/merqury-1.1/trio/phase_block/MerToPhaseBlock.java diff --git a/programs/merqury_June2020/trio/phase_block/README.md b/programs/merqury-1.1/trio/phase_block/README.md similarity index 100% rename from programs/merqury_June2020/trio/phase_block/README.md rename to programs/merqury-1.1/trio/phase_block/README.md diff --git a/programs/merqury_June2020/trio/phase_block/bed/util/Bed.java b/programs/merqury-1.1/trio/phase_block/bed/util/Bed.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/bed/util/Bed.java rename to programs/merqury-1.1/trio/phase_block/bed/util/Bed.java diff --git a/programs/merqury_June2020/trio/phase_block/bed/util/Region.java b/programs/merqury-1.1/trio/phase_block/bed/util/Region.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/bed/util/Region.java rename to programs/merqury-1.1/trio/phase_block/bed/util/Region.java diff --git a/programs/merqury_June2020/trio/phase_block/build_jar.sh b/programs/merqury-1.1/trio/phase_block/build_jar.sh similarity index 100% rename from programs/merqury_June2020/trio/phase_block/build_jar.sh rename to programs/merqury-1.1/trio/phase_block/build_jar.sh diff --git a/programs/merqury_June2020/trio/phase_block/genome/Chromosome.java b/programs/merqury-1.1/trio/phase_block/genome/Chromosome.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/genome/Chromosome.java rename to programs/merqury-1.1/trio/phase_block/genome/Chromosome.java diff --git a/programs/merqury_June2020/trio/phase_block/genome/ChromosomeComparator.java b/programs/merqury-1.1/trio/phase_block/genome/ChromosomeComparator.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/genome/ChromosomeComparator.java rename to programs/merqury-1.1/trio/phase_block/genome/ChromosomeComparator.java diff --git a/programs/merqury_June2020/trio/phase_block/genome/util/Util.java b/programs/merqury-1.1/trio/phase_block/genome/util/Util.java similarity index 100% rename from programs/merqury_June2020/trio/phase_block/genome/util/Util.java rename to programs/merqury-1.1/trio/phase_block/genome/util/Util.java diff --git a/programs/merqury_June2020/trio/spectra-hap.sh b/programs/merqury-1.1/trio/spectra-hap.sh similarity index 100% rename from programs/merqury_June2020/trio/spectra-hap.sh rename to programs/merqury-1.1/trio/spectra-hap.sh diff --git a/programs/merqury_June2020/trio/switch_error.sh b/programs/merqury-1.1/trio/switch_error.sh similarity index 100% rename from programs/merqury_June2020/trio/switch_error.sh rename to programs/merqury-1.1/trio/switch_error.sh diff --git a/programs/merqury-1.1/util/bed_to_bigwig.sh b/programs/merqury-1.1/util/bed_to_bigwig.sh new file mode 100755 index 0000000..fcc554b --- /dev/null +++ b/programs/merqury-1.1/util/bed_to_bigwig.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +if [[ -z $1 ]]; then + echo "Usage: ./bed_to_bigWig.sh <bed> <asm.fai> <convert_pipes>" + echo -e "\t<bed>: ex. out.asm.mat.inherited.bed" + echo -e "\t<asm.fai>: generate with samtools faidx" + echo -e "\t<convert_pipes>: convert | to _ by default. Set to F if not wanted." + exit 0 +fi + +bed=$1 +fai=$2 +convert=$3 + +module load bedtools +module load ucsc/396 + +bg=${bed/.bed/.bg} + +if [[ "$convert" = "F" ]]; then + echo "# keep pipes" + sizes=${fai/.fai/.sizes} + cat $fai | cut -f1-2 > $sizes + cat $bed | bedtools genomecov -bg -g $sizes -i - > $bg +else + sizes=${fai/.fai/.sizes} + cat $fai | cut -f1-2 | sed 's/|/_/g' > $sizes + cat $bed | sed 's/|/_/g' | bedtools genomecov -bg -g $sizes -i - > $bg +fi + +sort=${bg/.bg/.srt.bg} +bedSort $bg $sort + +bw=${bed/.bed/.bigwig} +bedGraphToBigWig $sort $sizes $bw + +rm $bg $sort + + diff --git a/programs/merqury-1.1/util/merylDumpToWig.jar b/programs/merqury-1.1/util/merylDumpToWig.jar new file mode 100644 index 0000000000000000000000000000000000000000..96b05c7206e38a4a03522e3e6c33d0d8f9543071 GIT binary patch literal 17892 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 F4*)=pAMOAE literal 0 HcmV?d00001 diff --git a/programs/merqury_June2020/util/util.sh b/programs/merqury-1.1/util/util.sh similarity index 100% rename from programs/merqury_June2020/util/util.sh rename to programs/merqury-1.1/util/util.sh diff --git a/programs/merqury_June2020/.DS_Store b/programs/merqury_June2020/.DS_Store deleted file mode 100644 index f30f8f11f1832ec8963d2f01db1c78ff59a93b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmZQzU|@7AO)+F(5MW?n;9!8zEL;p&0Z1N%F(jFwBGMr9z-FYR6es5-<>%)>Wk#vd z5Eu=C!5jjhyvxdv#8AqR$&kZ<l7EqebJ7iilk;;6AU@HnV_;xFlFiL`aY@R_PXd)C z3q{ZUx_bDKBf5$d0xAkJkZqU%vWSHtm7$Cwks$}gc1HeZ3=9l#Ib^$Exi$ZV+KnWS zuo;^?ioJ{qAbZ&vQW+{35*czC3K()2Qc-MoUTMX^z<{O#*$pzaQZP4Qs6w~|w<;9( zxPqL+zyfwhK0^ttaAgDs0LXFq3?(SeV{ku>EQjo{`L`>6!UG4YH#Z;QBy931j$udu zxrT+IgrSHblOZ3)UdBt!V0)o*$o4AluZ1NDxL#y?vB{&@%X9%^Zz)3wD2<{90#p#i zF$@eZ!H$8-Av@;B8!uSwurR>o5rKeB9>p=>3KQg>;ebKu2$W~Jhl6KE{V*B=qai@m z5CD}Apc)ZGJ3!j_3=I$(B*ehTzyR(7FoNo1sLhPvegFeV4x|-CgS3KZkX8mp5DRPu zSSte~0}EIuBe)v^(g*62fM~FG21W+3b_PbU%?u2TV4E2j7$Mpj7$Mpj7@<8BMu>I> zNL9|jzzER}wqukS4S~@RK!gA@ged^3|6LgvaP|Kosz%At5Eu=CVHpC9EH1$=PT)!z zyZ=CSEvPyM_W+^lK(#p|sGf%KK}x`ynIHp-5?~HQ4x|-S?SrdgMg~YtKH3m~h0rKH J8UpkW0RSt4-I@RZ diff --git a/programs/meryl-1.0/.DS_Store b/programs/meryl-1.0/.DS_Store deleted file mode 100644 index cc1ad41252f6ce4314ddfc1ef5f88a2bc6376f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmZQzU|@7AO)+F(5MW?n;9!8zj35RBCIAV8Fop~hRD=~|9@vZu23>|khFpde1~aJK zV5dNC=VtI>$YjW4C}lu)ze!4Qa!yiyeh$bBIF#h18wMxm=N5pJFsA9vVPIgup)xn$ z#U&{xKM54x?W?T6T|Ior5ufT55>yvtAh{xY0?09=cr*k?Ltr!nMnhmU1aO7`BSeOS z8$yqgqaiRF0;3@S4*^j5pa5yxGdMu$1_%w3Vqj!o0Cxcx85me#ni#?T00xj8NGpg2 zX$8?BtqhDH7T651Rt83>Rz`3)1f&ntB>~Z3?F@`yn?ZcAb_PbU%?u2T5bX?%P@7?$ z7e<J721bZ>21c;$FxQRJqaiRF0<aKZhA;#`^}j0v11t+cL`TWd5Eu=C5fK86EH1$= zPT)!zyMIA-EvP<CfJ%evU`TZgs+dt50ZfnqMG2@<P<0Q|3ZlVPF(U&5SnFs*02V@{ K^k@jsKLh}hZ9AI) -- GitLab