Skip to content

Commit

Permalink
Bedtools bed12tobed6 (#140)
Browse files Browse the repository at this point in the history
* Initial commit

* Update test.sh

* help file + n option

* adding n_score option

* small changes

* Update CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: Jakub Majercik <[email protected]>
  • Loading branch information
tgaspe and jakubmajercik authored Sep 2, 2024
1 parent 2b29a47 commit f3e87e5
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
- `bedtools/bedtools_merge`: Merges overlapping BED/GFF/VCF entries into a single interval (PR #118).
- `bedtools/bedtools_bamtofastq`: Convert BAM alignments to FASTQ files (PR #101).
- `bedtools/bedtools_bedtobam`: Converts genomic feature records (bed/gff/vcf) to BAM format (PR #111).
- `bedtools/bedtools_bed12tobed6`: Converts BED12 files to BED6 files (PR #140).
- `bedtools/bedtools_links`: Creates an HTML file with links to an instance of the UCSC Genome Browser for all features / intervals in a (bed/gff/vcf) file (PR #137).

* `qualimap/qualimap_rnaseq`: RNA-seq QC analysis using qualimap (PR #74).
Expand Down
67 changes: 67 additions & 0 deletions src/bedtools/bedtools_bed12tobed6/config.vsh.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: bedtools_bed12tobed6
namespace: bedtools
description: |
Converts BED features in BED12 (a.k.a. “blocked” BED features such as genes) to discrete BED6 features.
For example, in the case of a gene with six exons, bed12ToBed6 would create six separate BED6 features (i.e., one for each exon).
keywords: [Converts, BED12, BED6]
links:
documentation: https://bedtools.readthedocs.io/en/latest/content/tools/bed12tobed6.html
repository: https://github.com/arq5x/bedtools2
homepage: https://bedtools.readthedocs.io/en/latest/#
issue_tracker: https://github.com/arq5x/bedtools2/issues
references:
doi: 10.1093/bioinformatics/btq033
license: MIT
requirements:
commands: [bedtools]
authors:
- __merge__: /src/_authors/theodoro_gasperin.yaml
roles: [ author, maintainer ]

argument_groups:

- name: Inputs
arguments:
- name: --input
alternatives: -i
type: file
description: Input BED12 file.
required: true

- name: Outputs
arguments:
- name: --output
alternatives: -o
type: file
direction: output
description: Output BED6 file to be written.

- name: Options
arguments:
- name: --n_score
alternatives: -n
type: boolean_true
description: |
Force the score to be the (1-based) block number from the BED12.
resources:
- type: bash_script
path: script.sh

test_resources:
- type: bash_script
path: test.sh

engines:
- type: docker
image: debian:stable-slim
setup:
- type: apt
packages: [bedtools, procps]
- type: docker
run: |
echo "bedtools: \"$(bedtools --version | sed -n 's/^bedtools //p')\"" > /var/software_versions.txt
runners:
- type: executable
- type: nextflow
13 changes: 13 additions & 0 deletions src/bedtools/bedtools_bed12tobed6/help.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
```
bedtools bed12tobed6 -h
```

Tool: bedtools bed12tobed6 (aka bed12ToBed6)
Version: v2.30.0
Summary: Splits BED12 features into discrete BED6 features.

Usage: bedtools bed12tobed6 [OPTIONS] -i <bed12>

Options:
-n Force the score to be the (1-based) block number from the BED12.

15 changes: 15 additions & 0 deletions src/bedtools/bedtools_bed12tobed6/script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

## VIASH START
## VIASH END

set -eo pipefail

# Unset parameters
[[ "$par_n_score" == "false" ]] && unset par_n_score

# Execute bedtools bed12tobed6 conversion
bedtools bed12tobed6 \
${par_n_score:+-n} \
-i "$par_input" \
> "$par_output"
85 changes: 85 additions & 0 deletions src/bedtools/bedtools_bed12tobed6/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/bin/bash

# exit on error
set -eo pipefail

#############################################
# helper functions
assert_file_exists() {
[ -f "$1" ] || { echo "File '$1' does not exist" && exit 1; }
}
assert_file_not_empty() {
[ -s "$1" ] || { echo "File '$1' is empty but shouldn't be" && exit 1; }
}
assert_file_contains() {
grep -q "$2" "$1" || { echo "File '$1' does not contain '$2'" && exit 1; }
}
assert_identical_content() {
diff -a "$2" "$1" \
|| (echo "Files are not identical!" && exit 1)
}
#############################################

# Create directories for tests
echo "Creating Test Data..."
TMPDIR=$(mktemp -d "$meta_temp_dir/XXXXXX")
function clean_up {
[[ -d "$TMPDIR" ]] && rm -r "$TMPDIR"
}
trap clean_up EXIT

# Create example BED12 file
cat <<EOF > "$TMPDIR/example.bed12"
chr21 10079666 10120808 uc002yiv.1 0 - 10081686 1 0 1 2 0 6 0 8 0 4 528,91,101,215, 0,1930,39750,40927,
chr21 10080031 10081687 uc002yiw.1 0 - 10080031 1 0 0 8 0 0 3 1 0 2 200,91, 0,1565,
chr21 10081660 10120796 uc002yix.2 0 - 10081660 1 0 0 8 1 6 6 0 0 3 27,101,223, 0,37756,38913,
EOF

# Expected output bed6 file
cat <<EOF > "$TMPDIR/expected.bed6"
chr21 10079666 10120808 uc002yiv.1 0 -
chr21 10080031 10081687 uc002yiw.1 0 -
chr21 10081660 10120796 uc002yix.2 0 -
EOF
# Expected output bed6 file with -n option
cat <<EOF > "$TMPDIR/expected_n.bed6"
chr21 10079666 10120808 uc002yiv.1 1 -
chr21 10080031 10081687 uc002yiw.1 1 -
chr21 10081660 10120796 uc002yix.2 1 -
EOF

# Test 1: Default conversion BED12 to BED6
mkdir "$TMPDIR/test1" && pushd "$TMPDIR/test1" > /dev/null

echo "> Run bedtools_bed12tobed6 on BED12 file"
"$meta_executable" \
--input "../example.bed12" \
--output "output.bed6"

# checks
assert_file_exists "output.bed6"
assert_file_not_empty "output.bed6"
assert_identical_content "output.bed6" "../expected.bed6"
echo "- test1 succeeded -"

popd > /dev/null

# Test 2: Conversion BED12 to BED6 with -n option
mkdir "$TMPDIR/test2" && pushd "$TMPDIR/test2" > /dev/null

echo "> Run bedtools_bed12tobed6 on BED12 file with -n option"
"$meta_executable" \
--input "../example.bed12" \
--output "output.bed6" \
--n_score

# checks
assert_file_exists "output.bed6"
assert_file_not_empty "output.bed6"
assert_identical_content "output.bed6" "../expected_n.bed6"
echo "- test2 succeeded -"

popd > /dev/null

echo "---- All tests succeeded! ----"
exit 0

0 comments on commit f3e87e5

Please sign in to comment.