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
No data on hand yet? This runs standalone, with no download, against a bundled synthetic example — good for checking your install works before touching real data:
import scatrans as scat
adata = scat.datasets.load_toy() # synthetic, spliced/unspliced included
result = scat.partition_de_by_mechanism(
adata,
groupby="condition",
target_group="Disease",
reference_group="Control",
organism="mouse", # or "human"
de="builtin",
# sample_col="sample", # set this when you have biological replicates
# gene_sets=my_pathways, # optional pathway / program table
# induction_matched=True,
)
print(result.regime) # data-quality check on unspliced capture
print(result.selected.head()) # DE genes + soft mechanism labels
print(result.summary())
# Absolute program placement (optional):
# scat.program_mechanism_permutation_calibrated(adata, gene_sets, de=frozen_de, ...)
Swap in your own AnnData once that works end to end. Don't have
spliced/unspliced (or mature/nascent) layers yet? See
Preparing spliced/unspliced data
for velocyto / kb-python / STARsolo / alevin-fry commands.
That is the recommended entry point. Next:
- Quickstart
- Tutorials
- FAQ if something looks off
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. For analyses tied to
package version 0.10.9, use scatrans==0.10.9. 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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scatrans-0.10.10.tar.gz.
File metadata
- Download URL: scatrans-0.10.10.tar.gz
- Upload date:
- Size: 14.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b154d3cd4cf17806b18add24f01f6f3fc9820df59d545a330314526ec12a6a18
|
|
| MD5 |
cdabe71ae5aea0086f66826b983673a5
|
|
| BLAKE2b-256 |
beb1bee771573ad820affa8a32468241ebf6dbac096f62d6026e1d9431c4bd2d
|
Provenance
The following attestation bundles were made for scatrans-0.10.10.tar.gz:
Publisher:
publish.yml on leelieber2025/scATrans
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scatrans-0.10.10.tar.gz -
Subject digest:
b154d3cd4cf17806b18add24f01f6f3fc9820df59d545a330314526ec12a6a18 - Sigstore transparency entry: 2377013423
- Sigstore integration time:
-
Permalink:
leelieber2025/scATrans@43718e6e7fa5d42ae62eeb843fcead2f507428b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/leelieber2025
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@43718e6e7fa5d42ae62eeb843fcead2f507428b6 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file scatrans-0.10.10-py3-none-any.whl.
File metadata
- Download URL: scatrans-0.10.10-py3-none-any.whl
- Upload date:
- Size: 9.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b117d698cd38701f5dd3cfe8b4f54d1217350cc7b328c77cdb2efa727ea69b9
|
|
| MD5 |
78550bc3e1a11a99fc061bafe1a73c9a
|
|
| BLAKE2b-256 |
97158511ecfed1b5363b8b942f9a9299e66a52b4b659f557049d8b7c2170fe50
|
Provenance
The following attestation bundles were made for scatrans-0.10.10-py3-none-any.whl:
Publisher:
publish.yml on leelieber2025/scATrans
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scatrans-0.10.10-py3-none-any.whl -
Subject digest:
4b117d698cd38701f5dd3cfe8b4f54d1217350cc7b328c77cdb2efa727ea69b9 - Sigstore transparency entry: 2377013652
- Sigstore integration time:
-
Permalink:
leelieber2025/scATrans@43718e6e7fa5d42ae62eeb843fcead2f507428b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/leelieber2025
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@43718e6e7fa5d42ae62eeb843fcead2f507428b6 -
Trigger Event:
workflow_dispatch
-
Statement type: