Skip to main content

BOTAS

Bacterial Operon-aware Transcriptome Alignment Suite

BOTAS is a seed-and-extend RNA-seq alignment and quantification framework designed specifically for bacterial genomes. It combines bacterial read alignment, native circular-genome handling, gene-level quantification, and operon inference in a unified Python command-line application.

Unlike general-purpose RNA-seq aligners designed primarily around eukaryotic splicing, BOTAS targets features of prokaryotic transcriptomes such as dense gene organization, polycistronic transcription, strand specificity, and circular chromosomes and plasmids.

Key features

  • Seed-and-extend alignment optimized for bacterial genomes
  • Paired-end and single-end RNA-seq alignment
  • Native support for circular chromosomes and plasmids
  • BOTAS-native reusable reference indexes
  • Optional rRNA filtering using a bundled reference set
  • Multiprocessing support for alignment and coverage calculation
  • Coordinate-sorted BAM generation and indexing through pysam
  • Gene-level and operon-level expression quantification
  • Operon inference from RNA-seq coverage and genomic organization
  • Multi-BAM consensus operon inference
  • Docker and Apptainer/Singularity support for reproducible deployment

Requirements

BOTAS requires Python 3.10 or newer. Its core Python dependencies are:

  • pysam >= 0.22
  • edlib >= 1.3.9
  • biopython >= 1.81

tqdm >= 4.66 is available as an optional progress-display dependency.

BOTAS does not require external aligners such as Bowtie2, STAR, HISAT2, or BWA for its native alignment workflow.

Installation

PyPI

python -m pip install botas-rnaseq

The installed command is:

botas --help

From source

git clone https://github.com/clabe-wekesa/botas.git
cd botas
python -m pip install .

Command overview

botas
├── index       Build a BOTAS-native reference index
├── align       Align RNA-seq reads to a bacterial reference
├── quantify    Quantify gene or operon expression from BAM files
└── getOperons  Infer bacterial operons from RNA-seq alignments

Use --help with any command to see all options:

botas index --help
botas align --help
botas quantify --help
botas getOperons --help

Quick start

1. Build a reference index

For a linear reference:

botas index -r genome.fna -o genome.botas.idx

For a circular bacterial reference:

botas index -r genome.fna --circular --circular-overhang-percent 5 -o genome.circular.botas.idx

Individual contigs can instead be marked as circular with --circular-contigs.

2. Align paired-end reads

botas -d analysis align -x genome.botas.idx -1 reads_R1.fastq.gz -2 reads_R2.fastq.gz -t 8 --pool --sort-bam -o sample.bam

With --sort-bam, BOTAS also creates a coordinate-sorted BAM and .bai index.

For single-end reads, use --fq:

botas -d analysis align -x genome.botas.idx --fq reads.fastq.gz -t 8 --pool --sort-bam -o sample.bam

BOTAS can also align directly from a FASTA reference using -r/--ref, although a saved BOTAS index is preferable for repeated analyses.

3. Quantify gene expression

botas quantify -b analysis/results/sample.sorted.bam -g genome.gff -o sample_counts.tsv

The default feature type is gene, and the default identifier attribute for genes is locus_tag.

BOTAS can also quantify operon features:

botas quantify -b analysis/results/sample.sorted.bam -g operons.gff --feature-type operon --id-attribute ID -o operon_counts.tsv -d analysis

4. Infer operons

botas getOperons -b analysis/results/sample.sorted.bam -g genome.gff -t 8 --write-gff

Operon inference uses genomic adjacency, strand consistency, and RNA-seq coverage coherence. Multiple BAM files can be analyzed independently or combined using --consensus.

Docker

Official BOTAS container images are published through GitHub Container Registry:

ghcr.io/clabe-wekesa/botas

Test it:

docker run --rm ghcr.io/clabe-wekesa/botas:0.x.y --help

Run BOTAS on local files

Mount the current analysis directory at /work inside the container:

docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" ghcr.io/clabe-wekesa/botas:0.x.y index -r /work/genome.fna -o /work/genome.botas.idx

The --user option is recommended on Linux so files created by Docker remain owned by the current user.

A paired-end alignment can then be run as:

docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" ghcr.io/clabe-wekesa/botas:0.x.y -d /work/analysis align -x /work/genome.botas.idx -1 /work/reads_R1.fastq.gz -2 /work/reads_R2.fastq.gz -t 8 --pool --sort-bam -o sample.bam

Build the image locally

From the BOTAS repository root:

docker build -t botas:0.x.y .
docker run --rm botas:0.x.y --help

Apptainer / Singularity

Apptainer can consume the same public GHCR image, so no separate container definition is required.

Pull a SIF image

apptainer pull botas_0.x.y.sif \
  docker://ghcr.io/clabe-wekesa/botas:0.1.6

Test it:

apptainer exec botas_0.x.y.sif botas --help

Run with local data

apptainer exec --bind "$PWD:/work" botas_0.x.y.sif botas index -r /work/genome.fna -o /work/genome.botas.idx

This workflow is particularly useful on HPC systems where Apptainer or Singularity is available but users do not have permission to install system-wide software.

Container release policy

A GitHub Actions workflow builds and smoke-tests the container whenever a GitHub Release is published. A release tagged, for example, v0.1.7 publishes:

ghcr.io/clabe-wekesa/botas:0.1.7
ghcr.io/clabe-wekesa/botas:latest

latest is updated only for non-prerelease releases. For reproducibility, scientific workflows should pin a numbered BOTAS release.

Architecture

botas/
├── core/       Alignment engine, indexing, pairing, and circular handling
├── io/         FASTQ, BAM, reference, and working-directory handling
├── operons/    Operon inference and consensus logic
├── quantify/   Gene and operon quantification
├── rrna/       rRNA detection and bundled rRNA reference support
├── data/       Packaged runtime data
└── cli/        Command-line interface

The alignment engine includes k-mer/minimizer indexing, seed clustering, edit-distance extension using edlib, CIGAR construction, pairing logic, MAPQ scoring, and circular-coordinate handling.

Citation

If you use BOTAS in your research, please cite:

Wekesa, C. S. (2026). BOTAS: Bacterial Operon-aware Transcriptome Alignment System. Software manuscript in preparation.

The citation information should be updated when the BOTAS manuscript is published.

License

BOTAS is distributed under the MIT License. See LICENSE.

Author

Clabe Wekesa
GitHub: clabe-wekesa

Metadata

Release files for botas-rnaseq 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for botas-rnaseq 0.1.7
File Size Uploaded Provenance
botas_rnaseq-0.1.7.tar.gz 2.3 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for botas-rnaseq 0.1.7
File Interpreter ABI Platform
botas_rnaseq-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 4.7 MB

Release files / botas_rnaseq-0.1.7.tar.gz

Download URL botas_rnaseq-0.1.7.tar.gz
Size 2.3 MB
Tags Source
SHA-256 checksum
How to use checksums
5ef2bcb7b8dd2ffbafa92aee35e11169c3a80bda5dd38ce2feb12b32ad3bae16
BLAKE2b-256 checksum
How to use checksums
851b2c94e8c2dfd4d71156eb2d6d82ab5929d4134cdcf8b28529bc7fe1a02057
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / botas_rnaseq-0.1.7-py3-none-any.whl

Download URL botas_rnaseq-0.1.7-py3-none-any.whl
Size 2.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
635d2e1fe7d2ec5714569788dea71e7f65cc9a7755703fd941405b0ae3caee7d
BLAKE2b-256 checksum
How to use checksums
3aebbbe193b340b65b1182c47ea806616286abe8f9dbf3840a687fc57e4e9108
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Security for botas-rnaseq 0.1.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page