scATrans
scATrans answers a simple follow-up after differential expression (DE): among the genes that changed, which look transcription-driven and which look stabilization-driven? It uses the nascent (unspliced) residual on top of a normal DE step—something total-count fold change alone cannot sort out.
| Step | What it does |
|---|---|
| DE | Chooses which genes make the list |
| Mechanism | Labels those genes (transcription vs. stabilization) |
| Detection (optional) | Extra nascent-activity scores; does not rewrite mechanism labels |
Pathway- or program-level summaries (gene_sets=) are usually more useful than
single-gene labels. Without spliced/unspliced layers, the package still runs
ordinary DE, enrichment, and plots.
Docs: Read the Docs.
What you need
- Python 3.9+ (tested 3.9–3.12)
- An AnnData object with a condition column in
.obs - For mechanism analysis:
spliced/unspliced(ormature/nascent) layers - Nothing yet?
scat.datasets.load_toy()ships a synthetic example — see First run.
Install
pip install scatrans
# or: conda install -c conda-forge -c bioconda scatrans
Optional extras (PyDESeq2, GSEA, scVelo, …): installation guide.
First run
This uses a bundled synthetic AnnData (load_toy()). No download. Swap in
your own object after the call works.
import scatrans as scat
adata = scat.datasets.load_toy() # Control/Disease, sample, spliced/unspliced
result = scat.partition_de_by_mechanism(
adata,
groupby="condition",
target_group="Disease",
reference_group="Control",
organism="mouse", # "human" for human gene symbols
sample_col="sample", # toy has this column; pass yours when you have replicates
)
print(result.regime) # capture quality (reliability in [0, 1])
print(result.selected.head()) # DE genes + mechanism labels
print(result.summary()) # cutoffs used, how many genes were selected
What to expect:
result.selectedis the DE gene list. Mechanism columns annotate it; they do not drop genes.- Default gates are
padj < 0.05andlogFC > 1.0. Ifselectedis empty, lowerlogfc_cutoff(for example0.25) or check the contrast. - Omit
sample_colonly when you have no biological replicates (cell-level DE). - Per-gene
mechanism_classis exploratory. For claims, passgene_sets=and/or runprogram_mechanism_permutation_calibrated.
No spliced/unspliced (or mature/nascent) layers? You can still run
DE and enrichment — see
Quickstart.
To build those layers:
Preparing spliced/unspliced data.
Next: Quickstart · Tutorials · FAQ
Status
0.10.x (Beta). Import as import scatrans as scat and stick to names in
scatrans.__all__, scat.pl, and scat.qc. Details:
API stability.
Citation
Please cite the preprint:
Li, Z., James, A. W. & Li, S. scATrans: annotating single-cell differential expression as transcription- or stabilization-weighted using unspliced RNA. bioRxiv (2026). doi:10.64898/2026.08.03.740741
For the software itself, cite the Zenodo DOI above. Pin the installed
version in Methods (this tree is scatrans==0.10.18). See CITATION.cff.
License
Software: Apache License 2.0. Bundled GO/KEGG data may carry separate terms—see the license page before commercial redistribution.
Author
Zhao Li (李钊)
Email: leelieber@gmail.com
Metadata
Release files for scatrans 0.10.18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| scatrans-0.10.18.tar.gz | 16.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scatrans-0.10.18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.2 MB
Release files / scatrans-0.10.18.tar.gz
| Download URL | scatrans-0.10.18.tar.gz |
|---|---|
| Size | 16.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
375c54bfbd7c36bbbc2f614ecfedfdc12fc1591d5c35c5445baa54b4588ce81c
|
|
BLAKE2b-256 checksum How to use checksums |
49f39830c3526340a69bdbae44e7307badf631988cc3de520e4737e40922cdc2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logRelease files / scatrans-0.10.18-py3-none-any.whl
| Download URL | scatrans-0.10.18-py3-none-any.whl |
|---|---|
| Size | 9.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d2370e0303dfc08662e01be6e42a500c37d57415eb27771730f833f98e7e179e
|
|
BLAKE2b-256 checksum How to use checksums |
5b6bc2b48db755488e7f1fd4b8b56f480ee02354a5cf40e136aec7f2121a28c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency log