.. _`bio/bustools/count`: BUSTOOLS COUNT ============== .. image:: https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/bustools/count?label=version%20update%20pull%20requests :target: https://github.com/snakemake/snakemake-wrappers/pulls?q=is%3Apr+is%3Aopen+label%3Abio/bustools/count BUS files can be converted into a barcode-feature matrix **URL**: https://github.com/BUStools/bustools#count Example ------- This wrapper can be used in the following way: .. code-block:: python rule test_bustools_count: input: bus="file.bus", ecmap="matrix.ec", txnames="transcripts.txt", genemap="t2g.txt", output: multiext( "buscount", ".barcodes.txt", ".CUPerCell.txt", ".cu.txt", ".genes.txt", ".hist.txt", ".mtx", ), threads: 1 params: extra="", log: "bustools.log", wrapper: "v3.0.1/bio/bustools/count" Note that input, output and log file paths can be chosen freely. When running with .. code-block:: bash snakemake --use-conda the software dependencies will be automatically deployed into an isolated environment before execution. Notes ----- When multiple bus files are provided, only one count matrix is returned. When an output endswith: ".hist.txt", then `--hist` parameter is automatically used. When an output endswith: ".genes.txt", then `--genemap` parameter is automatically used. Software dependencies --------------------- * ``bustools=0.43.1`` Input/Output ------------ **Input:** * ``bus``: Single bus-file, or List of bus-files * ``genemap``: Transcript to gene mapping * ``txnames``: List of transcripts * ``ecmap``: Equivalence classes for transcripts **Output:** * barcodes, equivalence classes, and count matrix Params ------ * ``extra``: Optional parameters, besides `--output`, `--ecmap`, and `--genemap` Authors ------- Code ---- .. code-block:: python #!/usr/bin/env python3 # coding: utf-8 """Snakemake wrapper for bustools count""" __author__ = "Thibault Dayris" __copyright__ = "Copyright 2022, Thibault Dayris" __email__ = "thibault.dayris@gustaveroussy.fr" __license__ = "MIT" from snakemake.shell import shell from os.path import commonprefix log = snakemake.log_fmt_shell(stdout=True, stderr=True) # Get IO files and prefixes bus_files = snakemake.input["bus"] if isinstance(bus_files, list): bus_files = " ".join(bus_files) out_prefix = commonprefix(snakemake.output)[:-1] # Fill extra parameters if needed extra = snakemake.params.get("extra", "") if any(outfile.endswith(".hist.txt") for outfile in snakemake.output): if "--hist" not in extra: extra += " --hist" if any(outfile.endswith(".genes.txt") for outfile in snakemake.output): if "--genecounts" not in extra: extra += " --genecounts" shell( "bustools count {extra} " "--output {out_prefix} " "--genemap {snakemake.input.genemap} " "--ecmap {snakemake.input.ecmap} " "--txnames {snakemake.input.txnames} " "{bus_files} " "{log}" ) .. |nl| raw:: html