Ming Tommy Tang
@tommytang.bsky.social
4.1K followers 1.4K following 7.2K posts
Director of bioinformatics at AstraZeneca. subscribe to my youtube channel @chatomics. On my way to helping 1 million people learn bioinformatics. Educator, Biotech, single cell. Also talks about leadership. tommytang.bio.link
Posts Media Videos Starter Packs
tommytang.bsky.social
A secure web-based, collaborative terminal sshx.io/ might be good for teaching
tommytang.bsky.social
11/
Full 10x tech note on introns:
assets.ctfassets.net/an68im79xit...
If you see intronic reads in your UMI matrix—don’t panic.
They’re part of the story.
Let your data tell it.
tommytang.bsky.social
10/
Key Takeaways
Intronic reads in 10x 3′ data are normal

Caused by internal poly-A priming & pre-mRNA capture

They enhance sensitivity, not noise

<0.1% gDNA contamination

Use introns unless you have a reason not to
tommytang.bsky.social
9/
You Still Have Control
Don’t want introns?
Cell Ranger 7.0+ includes them by default.
Use --gex-exclude-introns to disable if needed
Just know that excluding them = lower detection rates.
tommytang.bsky.social
8/
Impact on Downstream Analysis?
Almost none.
Using introns still retains 97.27% clustering agreement with exon-only analysis in PBMCs
You won’t distort your results—but you’ll gain sensitivity.
tommytang.bsky.social
7/
Strand Invasion During Reverse Transcription
Poly(dT) primers can bind to the cDNA itself during RT.
This can result in “self-primed” captures of intronic fragments
Yes—it’s weird. But it’s real.
tommytang.bsky.social
6/
Longer Genes = More Introns = More Signal
There’s a gene-length bias.
Longer transcripts naturally have more internal poly-A sequences.
So introns in long genes are more likely to get captured.
tommytang.bsky.social
5/
Still Worried About Genomic DNA?
Don’t be.
Less than 0.1% of UMIs are from gDNA
That’s negligible.
The intronic signal is from real RNA, not DNA contamination.
tommytang.bsky.social
4/
What You Gain with Introns
Including intronic reads increases:
+59% median genes per cell

+48% total UMI counts

Detection of genes with no exonic reads

That’s more power, not more noise.
tommytang.bsky.social
3/
Pre-mRNA Is Everywhere—Especially in Nuclei
When working with nuclear RNA, unspliced pre-mRNA dominates.
Result?
34–58% of UMIs map to introns in nuclei samples
And that’s not bad—it boosts sensitivity.
tommytang.bsky.social
2/
Internal Poly-A Priming
Poly(dT) primers don’t only bind the 3′ poly-A tail.
They sometimes bind internal poly-A stretches in introns—especially in pre-mRNA.
Introns have ~21× more poly-A 7-mers than exons
tommytang.bsky.social
1/
Yes, 10x 3′ single-cell RNA-seq targets poly-A tails.
So why are 30–50% of reads mapping to introns?
Because of both biology and tech.
You’re not doing it wrong.
tommytang.bsky.social
You’re analyzing 10x Genomics single-cell RNA-seq and notice lots of intronic reads.
Wait—wasn’t this a 3′ UMI-based assay for mature mRNA?
Let’s unpack why introns show up—and why they matter. 🧵
tommytang.bsky.social
The genomic landscape of relapsed infant and childhood KMT2A-rearranged acute leukemia www.nature.com/articles/s4...
tommytang.bsky.social
14/14
Bioinformatics isn’t just code.
It’s systems engineering in disguise.
Every error conquered = deeper understanding.
You’ve got this. 💪
tommytang.bsky.social
13/14
Key Takeaways:
Red text = clues, not failure

90% of errors are missing system libs

Isolate issues with clean environments

Document every fix—you’ll forget
tommytang.bsky.social
12/14
Windows users:
Install Rtools for C/C++ dependencies:
cran.r-project.org/bin/windows...

Restart RStudio after installing!
tommytang.bsky.social
11/14
Permission denied?
Never use sudo R. Instead:

install.packages("pkg", lib="~/R/libs") # User directory

Add export R_LIBS_USER=~/R/libs to .bashrc.
tommytang.bsky.social
10/14
Nuclear option: Start fresh.

R --vanilla # No startup configs
install.packages("problematic_pkg")

Or use renv/conda for isolated environments.
tommytang.bsky.social
9/14
ChatGPT Prompt Template:
"I’m on macOS Ventura, R 4.3.0. Trying to install DESeq2 with BiocManager::install(). Got this error: [paste]. Whats wrong?
Context matters.
tommytang.bsky.social
8/14
Still stuck?
Google the exact error in quotes:
"error: X11 headers not found" site:stackoverflow.com (you search with that site! cool google trick).
Add R or Bioconductor to narrow results.
Newest Questions
Stack Overflow | The World’s Largest Online Community for Developers
stackoverflow.com
tommytang.bsky.social
7/14
Bioconductor packages: Always use:
BiocManager::install("limma") # Not install.packages()!

Bioconductor has its own dependency tree.
tommytang.bsky.social
6/14
Installing Seurat? Common error:
libgfortran.so.3: cannot open...
Linux:
sudo apt install libgfortran3

macOS:
brew install gcc # Installs Fortran libs