Skip to main content

A Python wrapper for BBTools

Project description

bbmapy

A Python wrapper for BBTools. Current version of bbmapy is v39.59.

Installation

conda install -c bioconda -c conda-forge bbmapy # not yet available on conda-forge

Also available on pip (but does not ensure java is available):

pip install bbmapy

Usage

bbmapy let's you call bbtools stuff from python. To the shell only one CLI is available:

  • bbmapy-test: Run tests to verify installation

Example

from bbmapy import bbmap

# Run bbmap.sh
bbmap.bbmap(
    in1="reads1.fastq",
    in2="reads2.fastq",
    out="mapped.sam",
    ref="reference.fasta"
)

Dependencies

  • Python >= 3.9
  • rich
  • install-jdk (this will be used to install a JRE if needed)

Usage

After installation, you can use bbmapy in your Python scripts like this:

from bbmapy import bbduk

# Basic usage
bbduk(
    in_file="input.fastq",
    out="output.fastq",
    ktrim="r",
    k="23",
    mink="11",
    hdist="1",
    tbo=True,
    tpe=True,
    minlen="45",
    ref="adapters",
    ftm="5",
    maq="6",
    maxns="1",
    ordered=True,
    threads="4",
    overwrite="t",
    stats="stats.txt"
)

Using Java flags alongside other arguments

bbduk(
    Xmx="2g",  # Set maximum heap size
    da=True,   # Enable assertions
    eoom=True, # Enable out-of-memory termination
    in_file="input.fastq",
    out="output.fastq",
    ktrim="r",
    k="23"
)

To capture output

You need to set capture_output=True in the function call, AND out="stdout.fastq" (or any other file format you like).

stdout, stderr = bbduk(
    capture_output=True,
    Xmx="2g",
    in_file="input.fastq",
    out="stdout.fastq",
    # ... other parameters ...
)

Getting java executable

Can be a pain, see this PR discussion.
bioconda's recipes that require java will usually bring a really bloated set of stuff. not good. way too much useless bandwidth (I see no reason that getting bbmap would require alsa).
But pip and bioconda recipies allow using other pip and conda recipes. Good. A workaround - adding a custom function that recognizes the os + arch and fetches during install or test.
Technically - this does not count as preloading a binary/executable. The actual JRE is tiny, and getting it can be done via install-jdk.

tl;dr: after installing from pypi (via pip/uv/pixi)

bbmapy-ensure-java

Notes:

  • in can be a protected word in python and other code, it is replaced by in_file in function calls. in1, in2 are still valid.
  • Java flags (such as Xmx, Xms, da, ea, eoom) are automatically recognized and handled appropriately. Include them in your function calls just like any other argument.
  • the capture_output argument might be switched (stderr --> out and vice verse).
  • Flags (i.e. argument that do not take value in the OG bbmap version) are set with Boolean values. e.g.:
flag : True

Not to be mistaken for lower case, fouble qouted "true" and "false" for boolian arguments to be passed to bbtools, e.g.:

argument : "true"

Citation

BBMerge manuscript: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0185056 Please cite this paper if you use bbmap in your work.

License

This project is only a wrapper, please see the actual bbtools repository for (license)[https://bitbucket.org/berkeleylab/jgi-bbtools/src/master/license.txt] etc.
Neither the developers of bbtools nor of bbmapy take any responsibility for how you use this code. All accountability is on you.

Acknowledgments

This project only (crudely) wraps BBTools (a.k.a bbmap), which is developed by Brian Bushnell.
If you use bbmapy and things don't quite work like you'd like, don't expect the developer of bbmap to help you with this whacky python wrapper.
Please see the BBTools website for more information about the underlying tools.

to build and upload to pypi

rm -rf dist build egg-info
pixi run python bbmapy/update.py # fetch latest version of bbtools and update version in pyproject.toml
rm bbmapy/vendor/bbmap/pytools -rf # remove the pytools folder
pixi run pip install --upgrade build twine
pixi run python -m build
pixi run twine upload dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bbmapy-0.0.56.tar.gz (16.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bbmapy-0.0.56-py3-none-any.whl (18.8 MB view details)

Uploaded Python 3

File details

Details for the file bbmapy-0.0.56.tar.gz.

File metadata

  • Download URL: bbmapy-0.0.56.tar.gz
  • Upload date:
  • Size: 16.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for bbmapy-0.0.56.tar.gz
Algorithm Hash digest
SHA256 a6b06ec315737afa0edc33ba3fb7f43ee6906817d93a2beb3f0de0a08af2fa0c
MD5 47804f18325a750d451aa8521f0ffc9d
BLAKE2b-256 6a6ae3fb3e28bbe70e4f81717c96ca13a261873800d74c30a7e10b0e8d8b9758

See more details on using hashes here.

File details

Details for the file bbmapy-0.0.56-py3-none-any.whl.

File metadata

  • Download URL: bbmapy-0.0.56-py3-none-any.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for bbmapy-0.0.56-py3-none-any.whl
Algorithm Hash digest
SHA256 18a564f628c8bfa78fb9528013c47dfa6ea5902a3f429f0d4afa9c276dc300a9
MD5 d8060793b6042452f251f791bfc005f1
BLAKE2b-256 86f2a76d343fa8b152c70a351abd3dc31d51a8571e238af4f22c0130ddbde7e7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page