diff --git a/CHANGELOG.md b/CHANGELOG.md index c3f22e96..16d0eaed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,9 @@ - `salmon/salmon_index`: Create a salmon index for the transcriptome to use Salmon in the mapping-based mode (PR #24). - `salmon/salmon_quant`: Transcript quantification from RNA-seq data (PR #24). +* `samtools`: + - `samtools/idxstats`: Reports alignment summary statistics for a SAM/BAM/CRAM file (PR #32). + ## MAJOR CHANGES ## MINOR CHANGES diff --git a/src/samtools/idxstats/config.vsh.yaml b/src/samtools/idxstats/config.vsh.yaml new file mode 100644 index 00000000..daab15be --- /dev/null +++ b/src/samtools/idxstats/config.vsh.yaml @@ -0,0 +1,52 @@ +name: samtools_idxstats +namespace: samtools +description: Reports alignment summary statistics for a BAM file +keywords: [stats, mapping, counts, chromosome, bam, sam, cram] +links: + homepage: https://www.htslib.org/ + documentation: https://www.htslib.org/doc/samtools-idxstats.html + repository: https://github.com/samtools/samtools.git +references: + doi: 10.1093/bioinformatics/btp352, 10.1093/gigascience/giab008 +license: MIT/Expat + +argument_groups: + - name: Inputs + arguments: + - name: "--bam" + type: file + description: BAM input file. + - name: "--bai" + type: file + description: BAM index file. + - name: "--fasta" + type: file + description: Reference file the CRAM was created with (optional). + - name: Outputs + arguments: + - name: "--output" + type: file + description: | + File containing samtools stats output in tab-delimited format. + required: true + must_exist: false + example: output.idxstats + +resources: + - type: bash_script + path: script.sh +test_resources: + - type: bash_script + path: test.sh + - type: file + path: test_data +engines: + - type: docker + image: quay.io/biocontainers/samtools:1.3.1--h9071d68_10 + setup: + - type: docker + run: | + echo "$(samtools --version 2>&1)" > /var/software_versions.txt +runners: +- type: executable +- type: nextflow \ No newline at end of file diff --git a/src/samtools/idxstats/help.txt b/src/samtools/idxstats/help.txt new file mode 100644 index 00000000..c0fb5947 --- /dev/null +++ b/src/samtools/idxstats/help.txt @@ -0,0 +1,5 @@ +``` +samtools idxstats +``` + +Usage: samtools idxstats \ No newline at end of file diff --git a/src/samtools/idxstats/script.sh b/src/samtools/idxstats/script.sh new file mode 100644 index 00000000..9f8d4af4 --- /dev/null +++ b/src/samtools/idxstats/script.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +## VIASH START +## VIASH END + +set -e + +samtools idxstats "$par_bam" > "$par_output" \ No newline at end of file diff --git a/src/samtools/idxstats/test.sh b/src/samtools/idxstats/test.sh new file mode 100644 index 00000000..b66577e7 --- /dev/null +++ b/src/samtools/idxstats/test.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +test_dir="${meta_resources_dir}test_data" +echo ">>> Testing $meta_functionality_name" + +"$meta_executable" \ + --bam "$test_dir/a.sorted.bam" \ + --bai "$test_dir/a.sorted.bam.bai" \ + --output "$test_dir/a.sorted.idxstats" + +echo "$test_dir/a.sorted.idxstats" + +echo ">>> Checking whether output exists" +[ ! -f "$test_dir/a.sorted.idxstats" ] && echo "File 'a.sorted.idxstats' does not exist!" && exit 1 + +echo ">>> Checking whether output is non-empty" +[ ! -s "$test_dir/a.sorted.idxstats" ] && echo "File 'a.sorted.idxstats' is empty!" && exit 1 + +echo ">>> Checking whether output is correct" +diff "$test_dir/a.sorted.idxstats" "$test_dir/a_ref.sorted.idxstats" || \ + (echo "Output file a.sorted.idxstats does not match expected output" && exit 1) + +rm "$test_dir/a.sorted.idxstats" + +############################################################################################ + +echo ">>> Testing $meta_functionality_name with singletons in the input" + +"$meta_executable" \ + --bam "$test_dir/test.paired_end.sorted.bam" \ + --bai "$test_dir/test.paired_end.sorted.bam.bai" \ + --output "$test_dir/test.paired_end.sorted.idxstats" + +echo ">>> Checking whether output exists" +[ ! -f "$test_dir/test.paired_end.sorted.idxstats" ] && \ + echo "File 'test.paired_end.sorted.idxstats' does not exist!" && exit 1 + +echo ">>> Checking whether output is non-empty" +[ ! -s "$test_dir/test.paired_end.sorted.idxstats" ] && \ + echo "File 'test.paired_end.sorted.idxstats' is empty!" && exit 1 + +echo ">>> Checking whether output is correct" +diff "$test_dir/test.paired_end.sorted.idxstats" "$test_dir/test_ref.paired_end.sorted.idxstats" || \ + (echo "Output file test.paired_end.sorted.idxstats does not match expected output" && exit 1) + +rm "$test_dir/test.paired_end.sorted.idxstats" + +############################################################################################ + +echo "All tests succeeded!" +exit 0 \ No newline at end of file diff --git a/src/samtools/idxstats/test_data/a.sorted.bam b/src/samtools/idxstats/test_data/a.sorted.bam new file mode 100644 index 00000000..1c81d7cd Binary files /dev/null and b/src/samtools/idxstats/test_data/a.sorted.bam differ diff --git a/src/samtools/idxstats/test_data/a.sorted.bam.bai b/src/samtools/idxstats/test_data/a.sorted.bam.bai new file mode 100644 index 00000000..4f08f5d5 Binary files /dev/null and b/src/samtools/idxstats/test_data/a.sorted.bam.bai differ diff --git a/src/samtools/idxstats/test_data/a_ref.sorted.idxstats b/src/samtools/idxstats/test_data/a_ref.sorted.idxstats new file mode 100644 index 00000000..27862419 --- /dev/null +++ b/src/samtools/idxstats/test_data/a_ref.sorted.idxstats @@ -0,0 +1,2 @@ +xx 20 6 0 +* 0 0 0 diff --git a/src/samtools/idxstats/test_data/script.sh b/src/samtools/idxstats/test_data/script.sh new file mode 100755 index 00000000..0e28a4c6 --- /dev/null +++ b/src/samtools/idxstats/test_data/script.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# dowload test data from snakemake wrapper +if [ ! -d /tmp/idxstats_source ]; then + git clone --depth 1 --single-branch --branch master https://github.com/snakemake/snakemake-wrappers.git /tmp/idxstats_source +fi + +cp -r /tmp/idxstats_source/bio/samtools/idxstats/test/mapped/* src/samtools/idxstats/test_data +# samtools idxstats a.sorted.bam > a.sorted.idxstats + +# dowload test data from nf-core module +wget https://github.com/nf-core/test-datasets/raw/modules/data/genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam +wget https://github.com/nf-core/test-datasets/raw/modules/data/genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai +# samtools idxstats test.paired_end.sorted.bam > test_ref.paired_end.sorted.idxstats \ No newline at end of file diff --git a/src/samtools/idxstats/test_data/test.paired_end.sorted.bam b/src/samtools/idxstats/test_data/test.paired_end.sorted.bam new file mode 100644 index 00000000..85cccf14 Binary files /dev/null and b/src/samtools/idxstats/test_data/test.paired_end.sorted.bam differ diff --git a/src/samtools/idxstats/test_data/test.paired_end.sorted.bam.bai b/src/samtools/idxstats/test_data/test.paired_end.sorted.bam.bai new file mode 100644 index 00000000..0c6d5a96 Binary files /dev/null and b/src/samtools/idxstats/test_data/test.paired_end.sorted.bam.bai differ diff --git a/src/samtools/idxstats/test_data/test_ref.paired_end.sorted.idxstats b/src/samtools/idxstats/test_data/test_ref.paired_end.sorted.idxstats new file mode 100644 index 00000000..77bc11b8 --- /dev/null +++ b/src/samtools/idxstats/test_data/test_ref.paired_end.sorted.idxstats @@ -0,0 +1,2 @@ +MT192765.1 29829 197 3 +* 0 0 0