Skip to main content

Mimosa

Mimosa is a Python 3.12+ package and command-line tool for DNA motif comparison. It supports PWM/PFM, BaMM, SiteGA, Dimont, Slim, and precomputed score profiles. Mimosa compares heterogeneous motif models through their behavior on the same DNA sequences rather than by forcing their internal representations into a common matrix.

Background

Transcription factors (TFs) are key regulators of gene expression. They bind specific DNA sequences, termed transcription factor binding sites (TFBSs), located in gene regulatory regions. Because TFBSs are highly variable, they are typically described using motifs, which capture the nucleotide preferences of a TF across a range of binding sites. The position weight matrix (PWM) is the de facto standard motif model, assuming independence between positions and additive nucleotide contributions. However, numerous studies have demonstrated the presence of dependencies between positions within TFBSs. To account for such dependencies, alternative models have been proposed, including Markov-based approaches (BaMM, InMoDe, Dimont, Slim, MODER2), discriminative methods (SiteGA), and deep learning models (DeepBind, DeepGRN, BERT-TFBS). However, a mature ecosystem of databases and tools has been developed primarily for PWMs, including motif comparison methods that are critical for result interpretation. Comparison of alternative motif models usually requires their conversion into PWMs, which inevitably leads to loss of information about positional dependencies. At present, no universal tool exists for their direct comparison. Mimosa (Model-Independent Motif Similarity Assessment) addresses this gap by evaluating motif similarity based on functional behavior, namely the scores models assign to DNA sequences rather than their internal parameters.

Mimosa uses the following profile comparison pipeline:

  1. Scan sequences by motifs to obtain score profiles.
  2. Convert raw scores to empirical -log10(ERR) values, where ERR is the expectation recognition rate, optionally using a separate background sequence set for calibration.
  3. Select one strict best anchor per non-empty sequence when min_logerr <= 0, or all anchors with -log10(ERR) >= min_logerr for a positive threshold.
  4. Compare site-centered windows over shifts and the four strand orientations.
  5. Return the highest-scoring alignment, its offset, orientation, and number of contributing sites.

See Method and Statistics for metric definitions, statistical significance, and references.

Supported Models

Model Source formats CLI type
PWM/PFM MEME, plain PFM, model bundle pwm
BaMM .ihbcp, model bundle bamm
SiteGA .mat, model bundle sitega
Dimont Jstacs XML, model bundle dimont
Slim Jstacs XML, model bundle slim
Score profile FASTA-like numeric rows scores

Installation

Mimosa requires Python 3.12 or newer. It is published on PyPI as mimosa-tool.

python -m pip install mimosa-tool

For development from a source checkout:

uv sync

CLI

Compare two PWM models on a FASTA batch:

mimosa profile examples/foxa2.meme examples/gata2.meme \
  --model1-type pwm --model2-type pwm \
  --fasta examples/foreground.fa --metric co

Compare precomputed score profiles:

mimosa profile examples/scores_1.fasta examples/scores_2.fasta \
  --model1-type scores --model2-type scores --metric cosine

Build and use an empirical null distribution:

mimosa build-null examples/ \
  --output output/null_bundle \
  --fasta examples/foreground.fa --num-samples 2000 --seed 127

mimosa profile examples/foxa2.meme examples/gata2.meme \
  --model1-type pwm --model2-type pwm \
  --fasta examples/foreground.fa \
  --pvalue --null-distribution output/null_bundle

Manage the optional prepared-profile cache:

mimosa cache clear --cache-dir .mimosa-cache

Successful profile results are JSON on stdout. Diagnostics and errors are written to stderr. Run mimosa --help for the complete CLI reference.

Python API

from mimosa import compare, read_fasta, read_model

query = read_model("examples/foxa2.meme")
target = read_model("examples/gata2.meme")
sequences, names = read_fasta("examples/foreground.fa")

result = compare(query, target, sequences, metric="co")
print(result.to_dict())

For repeated comparisons, prepare the query once:

from mimosa import compare_many, prepare_profile

prepared = prepare_profile(query, sequences)
results = compare_many(prepared, [target], sequences, metric="cosine")

The public API also includes scan, read_scores, select_sites, reconstruct_pfm, build_null, annotate_results, and write_model.

Documentation

Development

Run the test suite with:

uv run pytest -q

Run the production-path performance benchmark with:

uv run python benchmarks/benchmark_performance.py

License

MIT. See LICENSE.

Metadata

Release files for mimosa-tool 1.4.3

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

Source distribution (sdist)

Source distribution for mimosa-tool 1.4.3
File Size Uploaded
mimosa_tool-1.4.3.tar.gz 46.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mimosa-tool 1.4.3
File Interpreter ABI Platform
mimosa_tool-1.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 101.1 kB

Release files / mimosa_tool-1.4.3.tar.gz

Download URL mimosa_tool-1.4.3.tar.gz
Size 46.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9457b8ff399da300ae0b1d347c0af3815b54c02158aff913039e4a3461546b62
BLAKE2b-256 checksum
How to use checksums
0ca25d7a432275492dca78bf86ffb410a9c6074ce8f28952c95a7aaaab6b7aae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / mimosa_tool-1.4.3-py3-none-any.whl

Download URL mimosa_tool-1.4.3-py3-none-any.whl
Size 55.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c63c4d6ea8edae3d62293b76ea5914d8946411e0331d453916df423a2b5289f1
BLAKE2b-256 checksum
How to use checksums
fc566c03300da361c08a6ee9b74c1d2f8e8d7eb033bb11cdd567571db8a3b55c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

2.0.0

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

This release

1.4.3 This release

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.4

16 release files

1.1.2

16 release files

1.1.1

16 release files

1.1.0

16 release files

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