Calls 3'UTR shortening and lengthening across every expressed gene, not just a curated panel.
A learned model separates true polyadenylation shifts from coverage noise, cutting false positives.
Per-gene APA indices and differential results you can take straight into a figure.
Published step by step in STAR Protocols so any lab can run it.
Get started
# clone and install
git clone https://github.com/YalamanchiliLab/PolyAMiner-Bulk.git
cd PolyAMiner-Bulk
pip install -r requirements.txt
# example: compare two conditions
python PolyA-miner.py -mode bam -o results/ \
-c1 control_1.bam control_2.bam \
-c2 treatment_1.bam treatment_2.bam \
-ref annotation/
Illustrative usage. See the repository README for the full set of options and a worked example.
The idea
Most genes can end their messenger RNA in more than one place. PolyAMiner-Bulk reads ordinary RNA-seq coverage and infers which polyadenylation site a cell is using, then quantifies how that choice shifts between conditions. The interactive diagram on the research page walks through why that matters.
See the 3'UTR switch explainerCite
Jonnakuti VS, Wagner EJ, Maletić-Savatić M, Liu Z, Yalamanchili HK. PolyAMiner-Bulk is a deep learning-based algorithm that decodes alternative polyadenylation dynamics from bulk RNA-seq data. Cell Reports Methods. 2024;4(2):100707. doi:10.1016/j.crmeth.2024.100707
I am glad to help you get it running or talk through your data.