From afa20de4bfb820b56bd4e6dde9f97e8e97e96937 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:08:04 +0000 Subject: [PATCH 01/31] Initial commit --- .../bampefragmentsize/environment.yaml | 6 ++ bio/deeptools/bampefragmentsize/meta.yaml | 34 ++++++++++++ .../bampefragmentsize/test/Snakefile | 23 ++++++++ bio/deeptools/bampefragmentsize/test/a.bam | Bin 0 -> 8083 bytes bio/deeptools/bampefragmentsize/test/b.bam | Bin 0 -> 9127 bytes .../bampefragmentsize/test_wrappers.py | 10 ++++ bio/deeptools/bampefragmentsize/wrapper.py | 52 ++++++++++++++++++ 7 files changed, 125 insertions(+) create mode 100644 bio/deeptools/bampefragmentsize/environment.yaml create mode 100644 bio/deeptools/bampefragmentsize/meta.yaml create mode 100644 bio/deeptools/bampefragmentsize/test/Snakefile create mode 100644 bio/deeptools/bampefragmentsize/test/a.bam create mode 100644 bio/deeptools/bampefragmentsize/test/b.bam create mode 100644 bio/deeptools/bampefragmentsize/test_wrappers.py create mode 100644 bio/deeptools/bampefragmentsize/wrapper.py diff --git a/bio/deeptools/bampefragmentsize/environment.yaml b/bio/deeptools/bampefragmentsize/environment.yaml new file mode 100644 index 00000000000..65c1c44e665 --- /dev/null +++ b/bio/deeptools/bampefragmentsize/environment.yaml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda + - nodefaults +dependencies: + - deeptools =3.5.5 diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml new file mode 100644 index 00000000000..c9162a2d3cd --- /dev/null +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -0,0 +1,34 @@ +name: deepTools computeMatrix +url: https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html +description: > + ``deepTools bamPEFragmentSize`` calculates the fragment sizes for read pairs given a BAM file from paired-end sequencing. + For usage information about ``deepTools bamPEFragmentSize``, please see the `documentation `_. + For more information about ``deepTools``, also see the `source code `_. + + +----------------------------+-----------------------------+---------------------+-------------+ + | bamPEFragmentSize | Output format | Name of output | Recommended | + | | | | | + | | | variable to be used | extension | + +============================+=============================+=====================+=============+ + | --histogram, -hist, -o | gzipped matrix file | hist | ".png" | + | | | | | + | | | (required) | | + +----------------------------+-----------------------------+---------------------+-------------+ + | --outRawFragmentLengths | tab-separated table of | raw | ".tab" | + | | | | | + | | fragments lengths and | | | + | | | | | + | | occurances | | | + +----------------------------+-----------------------------+---------------------+-------------+ + +authors: + - Niek Wit +input: + - bams: List of BAM files (.bam) + - blacklist: Optional BED file with regions to skip (.bed) +output: + - hist: Fragment size histogram (.png) + - raw: Raw fragment lengths (.tab) (optional) +params: + - title: Title of the plot + - extra: Optional parameters given to computeMatrix \ No newline at end of file diff --git a/bio/deeptools/bampefragmentsize/test/Snakefile b/bio/deeptools/bampefragmentsize/test/Snakefile new file mode 100644 index 00000000000..0b51142ec32 --- /dev/null +++ b/bio/deeptools/bampefragmentsize/test/Snakefile @@ -0,0 +1,23 @@ +rule bampe_fragmentsize: + input: + bams=expand("{sample}.bam", sample=["a", "b"]), + # Optional blacklist file + # blacklist="", + output: + # Please note that -o/hist/--histogram and --outRawFragmentLengths are exclusively defined via output files. + # Usable output variables, their extensions and which option they implicitly call are listed here: + # https://snakemake-wrappers.readthedocs.io/en/stable/wrappers/deeptools/bamPEFragmentSize.html. + # Required + hist="results/histogram.png", + # Optional output files + raw="results/raw.tab", + log: + "logs/deeptools/bampe_fragmentsize.log", + threads: 4 + params: + # Optional parameters + title="TITLE", + labels=["a", "b"], # can be changed to anything + extra="--logScale", + wrapper: + "master/bio/deeptools/bampefragmentsize" diff --git a/bio/deeptools/bampefragmentsize/test/a.bam b/bio/deeptools/bampefragmentsize/test/a.bam new file mode 100644 index 0000000000000000000000000000000000000000..a45f00b292a25aea8d2540c58a6eb0d908330e7a GIT binary patch literal 8083 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 h001A02m}BC000301^_}s0stET0{{R300000005_JZ_NMz literal 0 HcmV?d00001 diff --git a/bio/deeptools/bampefragmentsize/test/b.bam b/bio/deeptools/bampefragmentsize/test/b.bam new file mode 100644 index 0000000000000000000000000000000000000000..f4572e75b3807531be0ce91c63b35f3fcd75d9f2 GIT binary patch literal 9127 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 Date: Fri, 17 Jan 2025 14:59:02 +0000 Subject: [PATCH 02/31] added test_deeptools_bampe_fragmentsize --- test_wrappers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test_wrappers.py b/test_wrappers.py index 0a7a3e8798e..54e25448f5f 100644 --- a/test_wrappers.py +++ b/test_wrappers.py @@ -2777,6 +2777,13 @@ def test_deeptools_bamcoverage(run): ) +def test_deeptools_bampe_fragmentsize(run): + run( + "bio/deeptools/bampefragmentsize", + ["snakemake", "--cores", "1", "a.bam", "b.bam", "--use-conda", "-F"], + ) + + def test_deeptools_multibigwigsummary(run): run( "bio/deeptools/multibigwigsummary", From d8b200c3a43004dccb34960372815221d3b362cc Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:06:51 +0000 Subject: [PATCH 03/31] Initial commit --- bio/deeptools/bampefragmentsize/test/a.bam.bai | Bin 0 -> 2024 bytes bio/deeptools/bampefragmentsize/test/b.bam.bai | Bin 0 -> 2024 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bio/deeptools/bampefragmentsize/test/a.bam.bai create mode 100644 bio/deeptools/bampefragmentsize/test/b.bam.bai diff --git a/bio/deeptools/bampefragmentsize/test/a.bam.bai b/bio/deeptools/bampefragmentsize/test/a.bam.bai new file mode 100644 index 0000000000000000000000000000000000000000..09d3651b124bfa34597d846cee3caa784a19b1d3 GIT binary patch literal 2024 zcmZ>A^kh85z`(!+#Fat}42(dUfnhQam|`fG2hm=WAoA$qDG)_)(h$so=^dpZ0W(nH W0FRbY#%KtPhQMeDjE2An4gmnOtR!jx literal 0 HcmV?d00001 diff --git a/bio/deeptools/bampefragmentsize/test/b.bam.bai b/bio/deeptools/bampefragmentsize/test/b.bam.bai new file mode 100644 index 0000000000000000000000000000000000000000..cb707d7ccceb23614d59de2f7248f3bb20998295 GIT binary patch literal 2024 zcmZ>A^kh85z`(!+#Fat}42(dUfx(goOfhsTgJ`cw5P5X*6o?`?X$WS)^p4VyfElQ8 WfJe(HV>ARtLtr!nMnhl(hX4TPY7(pf literal 0 HcmV?d00001 From 32535d51edf615c3083d82a47587f2041651c482 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:37:19 +0000 Subject: [PATCH 04/31] simplified parameters --- bio/deeptools/bampefragmentsize/test/Snakefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/test/Snakefile b/bio/deeptools/bampefragmentsize/test/Snakefile index 0b51142ec32..e143074d763 100644 --- a/bio/deeptools/bampefragmentsize/test/Snakefile +++ b/bio/deeptools/bampefragmentsize/test/Snakefile @@ -1,6 +1,7 @@ -rule bampe_fragmentsize: +rule deeptools_bampe_fragmentsize: input: - bams=expand("{sample}.bam", sample=["a", "b"]), + # Input BAM file(s) + bams=["a.bam", "b.bam"], # Optional blacklist file # blacklist="", output: @@ -15,9 +16,10 @@ rule bampe_fragmentsize: "logs/deeptools/bampe_fragmentsize.log", threads: 4 params: - # Optional parameters - title="TITLE", - labels=["a", "b"], # can be changed to anything + # Labels can be changed to anything + # If left empty, the sample name will be used + # (without path and .bam extension) + labels="", extra="--logScale", wrapper: "master/bio/deeptools/bampefragmentsize" From f3ba4ca17e8e70d42d2dcc2d0645fa2a8f308865 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:37:46 +0000 Subject: [PATCH 05/31] replaced data --- bio/deeptools/bampefragmentsize/test/a.bam | Bin 8083 -> 15401 bytes .../bampefragmentsize/test/a.bam.bai | Bin 2024 -> 96 bytes bio/deeptools/bampefragmentsize/test/b.bam | Bin 9127 -> 15401 bytes .../bampefragmentsize/test/b.bam.bai | Bin 2024 -> 96 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/test/a.bam b/bio/deeptools/bampefragmentsize/test/a.bam index a45f00b292a25aea8d2540c58a6eb0d908330e7a..0faaa9d92b25a20bd2eeaa5daf34c5892d1239d6 100644 GIT binary patch literal 15401 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 h001A02m}BC000301^_}s0stET0{{R300000005_JZ_NMz diff --git a/bio/deeptools/bampefragmentsize/test/a.bam.bai b/bio/deeptools/bampefragmentsize/test/a.bam.bai index 09d3651b124bfa34597d846cee3caa784a19b1d3..d361de99f5f3d66769f033e599cac64f55614a94 100644 GIT binary patch literal 96 tcmZ>A^kigYU|?VZVoxCk1`yi`h#`R221I*Jg2|6)19$)c literal 2024 zcmZ>A^kh85z`(!+#Fat}42(dUfnhQam|`fG2hm=WAoA$qDG)_)(h$so=^dpZ0W(nH W0FRbY#%KtPhQMeDjE2An4gmnOtR!jx diff --git a/bio/deeptools/bampefragmentsize/test/b.bam b/bio/deeptools/bampefragmentsize/test/b.bam index f4572e75b3807531be0ce91c63b35f3fcd75d9f2..0faaa9d92b25a20bd2eeaa5daf34c5892d1239d6 100644 GIT binary patch literal 15401 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 literal 2024 zcmZ>A^kh85z`(!+#Fat}42(dUfx(goOfhsTgJ`cw5P5X*6o?`?X$WS)^p4VyfElQ8 WfJe(HV>ARtLtr!nMnhl(hX4TPY7(pf From 84a7eeb29fe2c7119893dfc108883158902abdbf Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:38:15 +0000 Subject: [PATCH 06/31] added output instead of input --- test_wrappers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_wrappers.py b/test_wrappers.py index 54e25448f5f..949641ecd7e 100644 --- a/test_wrappers.py +++ b/test_wrappers.py @@ -2780,7 +2780,7 @@ def test_deeptools_bamcoverage(run): def test_deeptools_bampe_fragmentsize(run): run( "bio/deeptools/bampefragmentsize", - ["snakemake", "--cores", "1", "a.bam", "b.bam", "--use-conda", "-F"], + ["snakemake", "--cores", "1", "results/histogram.png", "--use-conda", "-F"], ) From 2d404dac21bc99d1e7b1fe5da07f82f71683cec7 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:40:39 +0000 Subject: [PATCH 07/31] black formatting --- bio/deeptools/bampefragmentsize/wrapper.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 6390285f95f..643f21c547a 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -21,32 +21,31 @@ sample_label = [os.path.basename(bam.replace(".bam", "")) for bam in bam_files] # Check if the number of labels is equal to the number of bam files -assert len(sample_label) == len(bam_files), "Number of labels must be equal to the number of bam files" +assert len(sample_label) == len( + bam_files +), "Number of labels must be equal to the number of bam files" out_file = snakemake.output.get("hist") # Check output format out_format = out_file.split(".")[-1] if not out_format in ["png", "pdf", "svg", "eps", "plotly"]: - raise ValueError("Output format must be either 'png', 'pdf', 'svg', 'eps', or 'plotly'") + raise ValueError( + "Output format must be either 'png', 'pdf', 'svg', 'eps', or 'plotly'" + ) # Optional output out_raw = snakemake.output.get("raw", "") if out_raw: - optional_output = " --outFileNameMatrix {out_tab} ".format(out_tab=out_raw) - + optional_output = " --outRawFragmentLengths {out_tab} ".format(out_tab=out_raw) + # Parameters extra = snakemake.params.get("extra", "") -title = snakemake.params.get("title", "") shell( - "bamPEFragmentSize" - "{snakemake.params.command} " - "{snakemake.params.extra} " + "bamPEFragmentSize " "--numberOfProcessors {snakemake.threads} " "-b {bam_files} " - "-T {title} " "-o {out_file} " "{blacklist} {optional_output} {extra} {log}" ) - From 664675f48afe1f759d982eaee7e9c5566ac2b42d Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:41:32 +0000 Subject: [PATCH 08/31] deleted --- bio/deeptools/bampefragmentsize/test_wrappers.py | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 bio/deeptools/bampefragmentsize/test_wrappers.py diff --git a/bio/deeptools/bampefragmentsize/test_wrappers.py b/bio/deeptools/bampefragmentsize/test_wrappers.py deleted file mode 100644 index 06490c58ee9..00000000000 --- a/bio/deeptools/bampefragmentsize/test_wrappers.py +++ /dev/null @@ -1,10 +0,0 @@ -import subprocess - -def run(command, args): - subprocess.run([command] + args, check=True) - -def test_bampe_fragmentsize(): - run( - "bio/deeptools/bampefragmentsize", - ["snakemake", "--cores", "1", "--use-conda", "-F", "a.bam", "b.bam"], - ) From 9d0b5b332e18cad1acad090d58796c41461ca85c Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:17:29 +0000 Subject: [PATCH 09/31] fixed name --- bio/deeptools/bampefragmentsize/meta.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index c9162a2d3cd..48f04a231b7 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -1,4 +1,4 @@ -name: deepTools computeMatrix +name: deepTools bamPEFragmentSize url: https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html description: > ``deepTools bamPEFragmentSize`` calculates the fragment sizes for read pairs given a BAM file from paired-end sequencing. From 1651866acb33cfae870e840fd23015ee5e77b29a Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:19:34 +0000 Subject: [PATCH 10/31] updated table --- bio/deeptools/bampefragmentsize/meta.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index 48f04a231b7..bfe3e2fe512 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -10,7 +10,7 @@ description: > | | | | | | | | variable to be used | extension | +============================+=============================+=====================+=============+ - | --histogram, -hist, -o | gzipped matrix file | hist | ".png" | + | --histogram, -hist, -o | Figure | hist | ".png" | | | | | | | | | (required) | | +----------------------------+-----------------------------+---------------------+-------------+ From 3874f9c6cb8463a5b901e3a989a7d1cb304fe224 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:24:31 +0000 Subject: [PATCH 11/31] updated params --- bio/deeptools/bampefragmentsize/meta.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index bfe3e2fe512..dfa119d4732 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -31,4 +31,4 @@ output: - raw: Raw fragment lengths (.tab) (optional) params: - title: Title of the plot - - extra: Optional parameters given to computeMatrix \ No newline at end of file + - extra: Optional parameters given to bamPEFragmentSize \ No newline at end of file From 6ac5725f7c388d86a7200367f51b4bbc23bb3f4a Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:25:48 +0000 Subject: [PATCH 12/31] fixed undefined variable --- bio/deeptools/bampefragmentsize/wrapper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 643f21c547a..76f5897fb2e 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -36,6 +36,7 @@ # Optional output out_raw = snakemake.output.get("raw", "") +optional_output = "" if out_raw: optional_output = " --outRawFragmentLengths {out_tab} ".format(out_tab=out_raw) From f379c2bc9f4acf706ed835bf109c1a7ebb307527 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:02:39 +0000 Subject: [PATCH 13/31] Initial commit --- .../environment.linux-64.pin.txt | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 bio/deeptools/bampefragmentsize/environment.linux-64.pin.txt diff --git a/bio/deeptools/bampefragmentsize/environment.linux-64.pin.txt b/bio/deeptools/bampefragmentsize/environment.linux-64.pin.txt new file mode 100644 index 00000000000..8fbbad566fe --- /dev/null +++ b/bio/deeptools/bampefragmentsize/environment.linux-64.pin.txt @@ -0,0 +1,123 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda#720523eb0d6a9b0f6120c16b2aa4e7de +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda#048b02e3962f066da18efe3a21b77672 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda#0424ae29b104430108f5218a66db7260 +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda#dbcace4706afdfb7eb891f7b37d07c04 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda#cc3573974587f12dda90d96e3e55a702 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d +https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda#3cb76c3f10d3bc7f1105b2fc9db984df +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda#e2775acf57efd5af15b8e3d1d74d72d3 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda#41b599ed2b02abcfdd84302bff174b23 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda#8dfae1d2e74767e9ce36d5fa0d8605db +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda#db833e03127376d461e1e13e76f09b6c +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda#e39480b9ca41323497b05492a63bc35b +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda#9822b874ea29af082e5d36098d25427d +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda#2ecf2f1c7e4e21fcfe6423a51a992d84 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda#234a5554c53625688d51062645337328 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda#63f790534398730f59e1b899c3644d4a +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda#edb0dca6bc32e4f4789199455a1dbeb8 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda#04b34b9a40cdc48cfdab261ab176ff74 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda#4ce6875f75469b2757a65e10a5d05e31 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda#b3c17d95b5a10c6e64a21fa17573e70e +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda#f6ebe2cb3f82ba6c057dde5d9debe4f7 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda#8035c64cb77ed555e3f150b7b3972480 +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda#62ee74e96c5ebb0af99386de58cf9553 +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda#9566f0bd264fbd463002e759b8a82401 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda#06f70867945ea6a84d35836af780f1de +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda#8247f80f3dc464d9322e85007e307fe8 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172bf1cd1ff8629f2b1179945ed45055 +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda#f1fd30127802683586f768875127a987 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda#85cbdaacad93808395ac295b5667d25b +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda#84bd1c9a82b455e7a2f390375fb38f90 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda#be2de152d8073ef1c01b7728475f2fe7 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda#8371ac6457591af2cf6159439c1fd051 +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda#92ed62436b625154323d40d5f2f11dd7 +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda#5aa797f8787fe7a17d1b0821485b5adc +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda#c9f075ab2f33b3bbee9e62d4ad0a6cd8 +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda#c63b5e52939e795ba8d26e35d767a843 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda#3f43953b7d3fb3aaa1d0d0723d91e368 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda#19e57602824042dfd0446292ef90488b +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda#62857b389e42b36b686331bec0922050 +https://conda.anaconda.org/conda-forge/linux-64/python-3.12.8-h9e4cc4f_1_cpython.conda#7fd2fd79436d9b473812f14e86746844 +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda#353823361b1d27eb3960efb076dfcaf6 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda#4d056880988120e29d75bfff282e0f45 +https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda#1fd9696649f65fd6611fcdb4ffec738a +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda#98514fe74548d768907ce7a13f680e8f +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda#b0b867af6fc74b2a0aa206da29c0f3cf +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda#6feb87357ecd66733be3279f16a8c400 +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda#e83a31202d1c0a000fce3e9cf3825875 +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda#962b9857ee8e7018c22f2776ffa0b2d7 +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda#44600c4667a319d67dbe0681fc0bc833 +https://conda.anaconda.org/bioconda/linux-64/deeptoolsintervals-0.1.9-py312ha9c1134_10.tar.bz2#4a4fd1606f7a44743001f4f6696c219b +https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda#24c1ca34138ee57de72a943237cde4cc +https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda#2aa5ff7fa34a81b9196532c84c10d865 +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda#566e75c90c1d0c8c459eb0ad9833dc7a +https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda#39a4f67be3286c86d696df570b1201b7 +https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py312h84d6215_0.conda#6713467dc95509683bfa3aca08524e8a +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda#ac52800af2e0c0e7dac770b435ce768a +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda#2b3e0081006dc21e8bf53a91c83a055c +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda#0ea6510969e1296cc19966fad481f6de +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda#eb227c3e0bf58f5bd69c0532b157975b +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda#3bfed7e6228ebf2f7b9eaa47f1b4e2aa +https://conda.anaconda.org/bioconda/linux-64/py2bit-0.3.0-py312h0fa9677_11.tar.bz2#55bf99dfc8697400fa0ee77050a0ed59 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda#12c566707c80111f9799308d9e265aef +https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda#232fb4577b6687b2d503ef8e254270c9 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.1-pyhd8ed1ab_0.conda#285e237b8f351e85e7574a2c7bfa6d46 +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda#461219d1a5bd61342293efa2c0c90eac +https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda#f26ec986456c30f6dff154b670ae140f +https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda#8f28e299c11afdd79e0ec1e279dcdc52 +https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda#a451d576819089b0d672f18768be0f65 +https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda#fa839b5ff59e192f411ccc7dae6588bb +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda#959484a66b4b76befcddc4fa97c95567 +https://conda.anaconda.org/conda-forge/noarch/tenacity-9.0.0-pyhd8ed1ab_1.conda#a09f66fe95a54a92172e56a4a97ba271 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda#ac944244f1fed2eb49bae07193ae8215 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-16.0.0-py312h66e93f0_0.conda#617f5d608ff8c28ad546e5d9671cbb95 +https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda#75cb7132eb58d97896e173ef12ac9986 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda#0c3cc595284c5e8f0f9900a9b228a332 +https://conda.anaconda.org/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda#3e23f7db93ec14c80525257d8affac28 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda#a861504bbea4161a9170b85d4d2be840 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.3-py312h178313f_1.conda#bc18c46eda4c2b29431981998507e723 +https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda#825927dc7b0f287ef8d4d0011bb113b1 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda#315607a3030ad5d5227e76e0733798ff +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda#2752a6ed44105bfb18c9bef1177d9dcd +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda#ebcc5f37a435aa3c19640533c82f8d76 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda#3792604c43695d6a273bc5faaac47d48 +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda#9e5816bc95d285c115a3ebc2f8563564 +https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_2.conda#04e691b9fadd93a8a9fad87a81d4fd8f +https://conda.anaconda.org/conda-forge/noarch/plotly-5.24.1-pyhd8ed1ab_1.conda#71ac632876630091c81c50a05ec5e030 +https://conda.anaconda.org/bioconda/linux-64/pysam-0.22.1-py312h47d5410_3.tar.bz2#097eddb7479ce49b12472e9ea2b0e8e8 +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda#5ba79d7c71f03c678c8ead841f347d6e +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.2-py312h72c5963_0.conda#7e984cb31e0366d1812096b41b361425 +https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda#d3894405f05b2c0f351d5de3ae26fa9c +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda#8b7069e9792ee4e5b4919a7a306d2e67 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda#f5fbba0394ee45e9a64a73c2a994126a +https://conda.anaconda.org/bioconda/linux-64/pybigwig-0.3.23-py312h0e9d276_0.tar.bz2#41d3a8256dbcf8629b08c64e6943c2f5 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.1-py312h180e4f1_0.conda#355bcf0f629159c9bd10a406cd8b6c3a +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda#32674f8dbfb7b26410ed580dd3c10a29 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.0-py312hd3ec401_0.conda#c27a17a8c54c0d35cf83bbc0de8f7f77 +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda#a9b9368f3701a417eac9edbcae7cb737 +https://conda.anaconda.org/bioconda/noarch/deeptools-3.5.5-pyhdfd78af_0.tar.bz2#87a4bd9512e17fb7633a1386dbea5125 +https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda#5af206d64d18d6c8dfb3122b4d9e643b +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda#16e3f039c0aa6446513e94ab18a8784b +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda#910f28a05c178feba832f842155cbfff +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda#e9fb3fe8a5b758b4aff187d434f94f03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda#00534ebcc0375929b45c3039b5ba7636 +https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda#1a3281a0dc355c02b5506d87db2d78ac +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda#3bc61f7161d28137797e038263c04c54 From b9666798db976d2bcbdd554400ea13d5282bfc23 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Mon, 27 Jan 2025 13:57:48 +0000 Subject: [PATCH 14/31] Suggestions by coderabbit --- bio/deeptools/bampefragmentsize/meta.yaml | 27 +++++------- .../bampefragmentsize/test/Snakefile | 8 +++- .../bampefragmentsize/test/regions.bed | 2 + bio/deeptools/bampefragmentsize/wrapper.py | 8 ++-- test_wrappers.py | 44 ++++++++++++++++--- 5 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 bio/deeptools/bampefragmentsize/test/regions.bed diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index dfa119d4732..25357447489 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -5,21 +5,15 @@ description: > For usage information about ``deepTools bamPEFragmentSize``, please see the `documentation `_. For more information about ``deepTools``, also see the `source code `_. - +----------------------------+-----------------------------+---------------------+-------------+ - | bamPEFragmentSize | Output format | Name of output | Recommended | - | | | | | - | | | variable to be used | extension | - +============================+=============================+=====================+=============+ - | --histogram, -hist, -o | Figure | hist | ".png" | - | | | | | - | | | (required) | | - +----------------------------+-----------------------------+---------------------+-------------+ - | --outRawFragmentLengths | tab-separated table of | raw | ".tab" | - | | | | | - | | fragments lengths and | | | - | | | | | - | | occurances | | | - +----------------------------+-----------------------------+---------------------+-------------+ + +------------------------+-------------------------+-------------------+-----------+ + | bamPEFragmentSize | Output format | Output variable | Extension | + +========================+=========================+===================+===========+ + | --histogram, -hist, -o | gzipped matrix file | hist (required) | ".png" | + +------------------------+-------------------------+-------------------+-----------+ + | --outRawFragmentLengths| tab-separated table of | raw | ".tab" | + | | fragment lengths and | | | + | | occurrences | | | + +------------------------+-------------------------+-------------------+-----------+ authors: - Niek Wit @@ -31,4 +25,5 @@ output: - raw: Raw fragment lengths (.tab) (optional) params: - title: Title of the plot - - extra: Optional parameters given to bamPEFragmentSize \ No newline at end of file + - extra: Optional parameters given to bamPEFragmentSize + \ No newline at end of file diff --git a/bio/deeptools/bampefragmentsize/test/Snakefile b/bio/deeptools/bampefragmentsize/test/Snakefile index e143074d763..8919fcb4d57 100644 --- a/bio/deeptools/bampefragmentsize/test/Snakefile +++ b/bio/deeptools/bampefragmentsize/test/Snakefile @@ -2,7 +2,7 @@ rule deeptools_bampe_fragmentsize: input: # Input BAM file(s) bams=["a.bam", "b.bam"], - # Optional blacklist file + # Optional blacklist file in BED format to exclude specific regions from analysis # blacklist="", output: # Please note that -o/hist/--histogram and --outRawFragmentLengths are exclusively defined via output files. @@ -19,7 +19,11 @@ rule deeptools_bampe_fragmentsize: # Labels can be changed to anything # If left empty, the sample name will be used # (without path and .bam extension) - labels="", + # Format: comma-separated list matching the number of input BAMs + # Example: "sample1,sample2" or "" for automatic labels + labels="", + # Additional parameters for deeptools bamPEFragmentSize + # Example: --maxFragmentLength 1000 --binSize 10 extra="--logScale", wrapper: "master/bio/deeptools/bampefragmentsize" diff --git a/bio/deeptools/bampefragmentsize/test/regions.bed b/bio/deeptools/bampefragmentsize/test/regions.bed new file mode 100644 index 00000000000..6c8a5f1901e --- /dev/null +++ b/bio/deeptools/bampefragmentsize/test/regions.bed @@ -0,0 +1,2 @@ +1 10000 20000 +1 20000 40000 \ No newline at end of file diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 76f5897fb2e..423706ac308 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -29,21 +29,23 @@ # Check output format out_format = out_file.split(".")[-1] -if not out_format in ["png", "pdf", "svg", "eps", "plotly"]: +VALID_FORMATS = {"png", "pdf", "svg", "eps", "plotly"} +if not out_format in VALID_FORMATS: raise ValueError( - "Output format must be either 'png', 'pdf', 'svg', 'eps', or 'plotly'" + f"Invalid output format '{out_format}'. Must be one of: {', '.join(sorted(VALID_FORMATS))}" ) # Optional output out_raw = snakemake.output.get("raw", "") optional_output = "" if out_raw: - optional_output = " --outRawFragmentLengths {out_tab} ".format(out_tab=out_raw) + optional_output = f" --outRawFragmentLengths {out_raw} " # Parameters extra = snakemake.params.get("extra", "") shell( + "set -e; " # Exit on error "bamPEFragmentSize " "--numberOfProcessors {snakemake.threads} " "-b {bam_files} " diff --git a/test_wrappers.py b/test_wrappers.py index 949641ecd7e..ff2cb0d0b7e 100644 --- a/test_wrappers.py +++ b/test_wrappers.py @@ -196,16 +196,15 @@ def test_nonpareil(run): ) - def test_ngsbits_samplesimilarity(run): run( "bio/ngsbits/samplesimilarity", [ - "snakemake", - "--cores", - "1", - "--use-conda", - "-F", + "snakemake", + "--cores", + "1", + "--use-conda", + "-F", "similarity.tsv", ], ) @@ -2778,10 +2777,39 @@ def test_deeptools_bamcoverage(run): def test_deeptools_bampe_fragmentsize(run): + # Test basic functionality run( "bio/deeptools/bampefragmentsize", ["snakemake", "--cores", "1", "results/histogram.png", "--use-conda", "-F"], ) + # Test with multiple BAMs and custom labels + run( + "bio/deeptools/bampefragmentsize", + [ + "snakemake", + "--cores", + "1", + "results/histogram.png", + "--config", + "labels='sample1,sample2'", + "--use-conda", + "-F", + ], + ) + # Test with blacklist + run( + "bio/deeptools/bampefragmentsize", + [ + "snakemake", + "--cores", + "1", + "results/histogram.png", + "--config", + "blacklist='regions.bed'", + "--use-conda", + "-F", + ], + ) def test_deeptools_multibigwigsummary(run): @@ -4257,6 +4285,7 @@ def test_ngscheckmate_ncm(run): ["snakemake", "--cores", "1", "fastq_paired_matched.txt", "--use-conda", "-F"], ) + def test_star_index(run): run("bio/star/index", ["snakemake", "--cores", "1", "genome", "--use-conda", "-F"]) @@ -4682,6 +4711,7 @@ def test_sexdeterrmine(run): ["snakemake", "--cores", "1", "results.tsv", "-F", "--use-conda"], ) + def test_sourmash_compute(run): run( "bio/sourmash/compute/", @@ -6034,12 +6064,14 @@ def test_vg_construct(run): ["snakemake", "--cores", "1", "graph/c.vg", "--use-conda", "-F"], ) + def test_vg_giraffe(run): run( "bio/vg/giraffe", ["snakemake", "--cores", "1", "mapped/a.bam", "--use-conda", "-F"], ) + def test_vg_merge(run): run( "bio/vg/merge", From 902d46a761e65a836fb3b0fbbe337986ef624b2c Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:05:19 +0000 Subject: [PATCH 15/31] Removed white space+changed options --- bio/deeptools/bampefragmentsize/meta.yaml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index 25357447489..70dc389c76e 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -5,15 +5,19 @@ description: > For usage information about ``deepTools bamPEFragmentSize``, please see the `documentation `_. For more information about ``deepTools``, also see the `source code `_. - +------------------------+-------------------------+-------------------+-----------+ - | bamPEFragmentSize | Output format | Output variable | Extension | - +========================+=========================+===================+===========+ - | --histogram, -hist, -o | gzipped matrix file | hist (required) | ".png" | - +------------------------+-------------------------+-------------------+-----------+ - | --outRawFragmentLengths| tab-separated table of | raw | ".tab" | - | | fragment lengths and | | | - | | occurrences | | | - +------------------------+-------------------------+-------------------+-----------+ +options: + histogram: + flags: ["--histogram", "-hist", "-o"] + format: "gzipped matrix file" + variable: "hist" + extension: ".png" + required: true + raw_lengths: + flag: "--outRawFragmentLengths" + format: "tab-separated table of fragment lengths and occurrences" + variable: "raw" + extension: ".tab" + required: false authors: - Niek Wit @@ -26,4 +30,3 @@ output: params: - title: Title of the plot - extra: Optional parameters given to bamPEFragmentSize - \ No newline at end of file From c8117f311cfdb4299b8baa4a5c0a1cefb55e2485 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:05:54 +0000 Subject: [PATCH 16/31] let Snakemake deal with missing bam files --- bio/deeptools/bampefragmentsize/wrapper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 423706ac308..f66c1525fdd 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -9,7 +9,8 @@ log = snakemake.log_fmt_shell(stdout=True, stderr=True) # Get input files -bam_files = snakemake.input.get("bams", "") +# Let Snakemake handle the error if bams are missing +bam_files = snakemake.input.get("bams") blacklist = snakemake.input.get("blacklist", "") if blacklist: blacklist = f"--blackListFileName {blacklist}" From 618ef92294bb50e50169f7c2183ec83d54968d1d Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:07:05 +0000 Subject: [PATCH 17/31] changed link --- bio/deeptools/bampefragmentsize/meta.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index 70dc389c76e..239efcee6c7 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -1,9 +1,8 @@ name: deepTools bamPEFragmentSize url: https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html description: > - ``deepTools bamPEFragmentSize`` calculates the fragment sizes for read pairs given a BAM file from paired-end sequencing. - For usage information about ``deepTools bamPEFragmentSize``, please see the `documentation `_. - For more information about ``deepTools``, also see the `source code `_. + For usage information about ``deepTools bamPEFragmentSize``, please see the [documentation](https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html). + For more information about ``deepTools``, also see the [source code](https://github.com/deeptools/deepTools). options: histogram: From a716ed9a43fb86b8c994b167bd7745ad7fa072b0 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:20:28 +0000 Subject: [PATCH 18/31] added new line --- bio/deeptools/bampefragmentsize/meta.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index 239efcee6c7..cba62789aa2 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -29,3 +29,4 @@ output: params: - title: Title of the plot - extra: Optional parameters given to bamPEFragmentSize + From fe3ca357a39ecce76623667d72bbef47599797b9 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:37:26 +0000 Subject: [PATCH 19/31] updated output format description and wrapper description --- bio/deeptools/bampefragmentsize/meta.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index cba62789aa2..4faa421e82e 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -1,13 +1,15 @@ name: deepTools bamPEFragmentSize url: https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html description: > + bamPEFragmentSize calculates the fragment sizes for read pairs in paired-end sequencing BAM files. + It generates a histogram of fragment sizes and can output the raw fragment length data. For usage information about ``deepTools bamPEFragmentSize``, please see the [documentation](https://deeptools.readthedocs.io/en/latest/content/tools/bamPEFragmentSize.html). For more information about ``deepTools``, also see the [source code](https://github.com/deeptools/deepTools). options: histogram: flags: ["--histogram", "-hist", "-o"] - format: "gzipped matrix file" + format: "image file" variable: "hist" extension: ".png" required: true From 13427fbb4bb765e221e5de1a1508c30c8267eeec Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:21:36 +0000 Subject: [PATCH 20/31] suggested changes by fgvieira --- bio/deeptools/bampefragmentsize/wrapper.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index f66c1525fdd..7c592f45ad9 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -4,13 +4,14 @@ __license__ = "MIT" import os +from pathlib import Path from snakemake.shell import shell log = snakemake.log_fmt_shell(stdout=True, stderr=True) # Get input files # Let Snakemake handle the error if bams are missing -bam_files = snakemake.input.get("bams") +bam_files = snakemake.input.bams blacklist = snakemake.input.get("blacklist", "") if blacklist: blacklist = f"--blackListFileName {blacklist}" @@ -26,10 +27,8 @@ bam_files ), "Number of labels must be equal to the number of bam files" -out_file = snakemake.output.get("hist") - # Check output format -out_format = out_file.split(".")[-1] +out_format = Path(snakemake.output.get("hist")).suffix VALID_FORMATS = {"png", "pdf", "svg", "eps", "plotly"} if not out_format in VALID_FORMATS: raise ValueError( @@ -38,18 +37,16 @@ # Optional output out_raw = snakemake.output.get("raw", "") -optional_output = "" if out_raw: - optional_output = f" --outRawFragmentLengths {out_raw} " + out_raw = f" --outRawFragmentLengths {out_raw} " # Parameters extra = snakemake.params.get("extra", "") shell( - "set -e; " # Exit on error "bamPEFragmentSize " "--numberOfProcessors {snakemake.threads} " "-b {bam_files} " - "-o {out_file} " - "{blacklist} {optional_output} {extra} {log}" + "-o {snakemake.output.hist} " + "{blacklist} {out_raw} {extra} {log}" ) From d79f758d675f84d95cecbe1630f5fa03dc2a56d9 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:30:32 +0000 Subject: [PATCH 21/31] improved documentation for labels --- bio/deeptools/bampefragmentsize/meta.yaml | 2 +- bio/deeptools/bampefragmentsize/test/Snakefile | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/meta.yaml b/bio/deeptools/bampefragmentsize/meta.yaml index 4faa421e82e..20fd4bd3aee 100644 --- a/bio/deeptools/bampefragmentsize/meta.yaml +++ b/bio/deeptools/bampefragmentsize/meta.yaml @@ -29,6 +29,6 @@ output: - hist: Fragment size histogram (.png) - raw: Raw fragment lengths (.tab) (optional) params: - - title: Title of the plot + - label: Labels for plotting (list of string or "" for automatic labelling) - extra: Optional parameters given to bamPEFragmentSize diff --git a/bio/deeptools/bampefragmentsize/test/Snakefile b/bio/deeptools/bampefragmentsize/test/Snakefile index 8919fcb4d57..2da8bf29f94 100644 --- a/bio/deeptools/bampefragmentsize/test/Snakefile +++ b/bio/deeptools/bampefragmentsize/test/Snakefile @@ -19,11 +19,11 @@ rule deeptools_bampe_fragmentsize: # Labels can be changed to anything # If left empty, the sample name will be used # (without path and .bam extension) - # Format: comma-separated list matching the number of input BAMs - # Example: "sample1,sample2" or "" for automatic labels + # Format: list matching the number of input BAMs + # Example: ["sample1", "sample2"] or "" for automatic labels labels="", # Additional parameters for deeptools bamPEFragmentSize - # Example: --maxFragmentLength 1000 --binSize 10 + # Example: --maxFragmentLength 1000 --binSize 10 extra="--logScale", wrapper: "master/bio/deeptools/bampefragmentsize" From 959c4cfb40620ba1b4e13940f950a6edaace68f4 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:14:32 +0100 Subject: [PATCH 22/31] Code tweak --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 7c592f45ad9..725631c2fa4 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -28,7 +28,7 @@ ), "Number of labels must be equal to the number of bam files" # Check output format -out_format = Path(snakemake.output.get("hist")).suffix +out_format = Path(snakemake.output.hist).suffix VALID_FORMATS = {"png", "pdf", "svg", "eps", "plotly"} if not out_format in VALID_FORMATS: raise ValueError( From ecb6727d88bcf1808b2084bcd6c178304fd5a585 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:18:39 +0100 Subject: [PATCH 23/31] Remove spaces --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 725631c2fa4..c60db58254c 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -38,7 +38,7 @@ # Optional output out_raw = snakemake.output.get("raw", "") if out_raw: - out_raw = f" --outRawFragmentLengths {out_raw} " + out_raw = f"--outRawFragmentLengths {out_raw}" # Parameters extra = snakemake.params.get("extra", "") From 6473cec624adff64cad23aa05979e98daa0c726e Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:28:52 +0000 Subject: [PATCH 24/31] fixed VALID FORMATS values --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 7c592f45ad9..0bd22102e3f 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -29,7 +29,7 @@ # Check output format out_format = Path(snakemake.output.get("hist")).suffix -VALID_FORMATS = {"png", "pdf", "svg", "eps", "plotly"} +VALID_FORMATS = {".png", ".pdf", ".svg", ".eps", ".plotly"} if not out_format in VALID_FORMATS: raise ValueError( f"Invalid output format '{out_format}'. Must be one of: {', '.join(sorted(VALID_FORMATS))}" From 552a8d4e97d5b997c229221ff8bcc9f0c1c67f71 Mon Sep 17 00:00:00 2001 From: niekwit <41302859+niekwit@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:34:42 +0000 Subject: [PATCH 25/31] more robust sample_label generation --- bio/deeptools/bampefragmentsize/wrapper.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 0bd22102e3f..cb7af643cfd 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -20,7 +20,11 @@ # If no labels are provided, use the basename of the bam file sample_label = snakemake.params.get("labels", "") if not sample_label: - sample_label = [os.path.basename(bam.replace(".bam", "")) for bam in bam_files] + sample_label = [ + Path(bam).name.removesuffix(".bam") + for bam in bam_files + if Path(bam).suffix == ".bam" + ] # Check if the number of labels is equal to the number of bam files assert len(sample_label) == len( From 00becbceaf68de6280dda4fb2d62975e81e4dfc2 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:02:55 +0100 Subject: [PATCH 26/31] Fix command-line argument spacing Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index cb7af643cfd..f3febf76218 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -42,7 +42,7 @@ # Optional output out_raw = snakemake.output.get("raw", "") if out_raw: - out_raw = f" --outRawFragmentLengths {out_raw} " + out_raw = f"--outRawFragmentLengths {out_raw}" # Parameters extra = snakemake.params.get("extra", "") From ee7489a1ea615c6ab451ecc5f79fea797a4e9e3a Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:05:04 +0100 Subject: [PATCH 27/31] Code tweak --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index f3febf76218..af5cf04b550 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -32,7 +32,7 @@ ), "Number of labels must be equal to the number of bam files" # Check output format -out_format = Path(snakemake.output.get("hist")).suffix +out_format = Path(snakemake.output.hist).suffix VALID_FORMATS = {".png", ".pdf", ".svg", ".eps", ".plotly"} if not out_format in VALID_FORMATS: raise ValueError( From 5702effe1011aa1fa8f35baf29fe69b114da8c6e Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:06:15 +0100 Subject: [PATCH 28/31] Remove unneccessary import --- bio/deeptools/bampefragmentsize/wrapper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index af5cf04b550..494100ea411 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -3,7 +3,6 @@ __email__ = "niekwit@gmail.com" __license__ = "MIT" -import os from pathlib import Path from snakemake.shell import shell From 2f881597abbb0af8de1001a15ce9ed0b3333b179 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:07:02 +0100 Subject: [PATCH 29/31] Code tweak to increase readibility --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index 494100ea411..fa94a277b78 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -33,7 +33,7 @@ # Check output format out_format = Path(snakemake.output.hist).suffix VALID_FORMATS = {".png", ".pdf", ".svg", ".eps", ".plotly"} -if not out_format in VALID_FORMATS: +if out_format not in VALID_FORMATS: raise ValueError( f"Invalid output format '{out_format}'. Must be one of: {', '.join(sorted(VALID_FORMATS))}" ) From 46f76fd4f77a89ca6b673867eacdcb177c0483a2 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:09:16 +0100 Subject: [PATCH 30/31] Increase readibility --- bio/deeptools/bampefragmentsize/wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index fa94a277b78..ac83e0d891c 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -20,7 +20,7 @@ sample_label = snakemake.params.get("labels", "") if not sample_label: sample_label = [ - Path(bam).name.removesuffix(".bam") + Path(bam).stem for bam in bam_files if Path(bam).suffix == ".bam" ] From e0b453607a93e31159fbe45c016f8c528ed9e4e1 Mon Sep 17 00:00:00 2001 From: "Filipe G. Vieira" <1151762+fgvieira@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:19:47 +0100 Subject: [PATCH 31/31] Code format --- bio/deeptools/bampefragmentsize/wrapper.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bio/deeptools/bampefragmentsize/wrapper.py b/bio/deeptools/bampefragmentsize/wrapper.py index ac83e0d891c..683a155e052 100644 --- a/bio/deeptools/bampefragmentsize/wrapper.py +++ b/bio/deeptools/bampefragmentsize/wrapper.py @@ -19,11 +19,7 @@ # If no labels are provided, use the basename of the bam file sample_label = snakemake.params.get("labels", "") if not sample_label: - sample_label = [ - Path(bam).stem - for bam in bam_files - if Path(bam).suffix == ".bam" - ] + sample_label = [Path(bam).stem for bam in bam_files if Path(bam).suffix == ".bam"] # Check if the number of labels is equal to the number of bam files assert len(sample_label) == len(