scDeepAPA: a deep learning framework for single-cell alternative polyadenylation identification.
The 7 matches
- [1] § Materials and methods › Sequence analysis module ↔ code/mamba2.py, lines 290–303 · score 0.79 · square layer normalization, gated root, RMSNorm, module
- [2] § Materials and methods › Feature embedding module ↔ code/model.py, lines 10–53 · score 0.78 · embedding layer, kernel_size, convolution layer, ReLU, channel, padding
- [3] § Results › Overview of the scDeepAPA framework ↔ code/model.py, lines 10–53 · score 0.74 · BiLSTM, convolutional layers, max pooling, softmax, bidirectional, embedded
- [4] § Materials and methods › Sequence analysis module ↔ code/mamba2.py, lines 71–210 · score 0.66 · conv1d, kernel_size, softplus, SiLU, module, Sequence
- [5] § Materials and methods › Feature embedding module ↔ code/mamba2.py, lines 71–210 · score 0.56 · kernel_size, channel, token, padding, convolution, module
- [6] § Materials and methods › Performance evaluation and benchmarking ↔ code/main.py, lines 42–122 · score 0.53 · F1 score, Recall, AUROC, Precision, fold, Accuracy
- [7] § Materials and methods › Sequence analysis module ↔ code/mamba2.py, lines 5–28 · score 0.52 · state space, Transformer, efficiently, SSM, Mamba, models
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 311 lines · 11 KB · no license · 4 matches
- """
- This code is from https://github.com/tommyip/mamba2-minimal.
- """
- ###############begin###############################
- """
- mamba2-minimal
- ==============
- A minimal, single-file implementation of the Mamba-2 model in PyTorch.
- > **Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality**
- > Authors: Tri Dao, Albert Gu
- > Paper: https://arxiv.org/abs/2405.21060
- """
- import json
- from dataclasses import dataclass
- from typing import Iterable, NamedTuple, cast
- import torch
- import torch.nn.functional as F
- from einops import rearrange, repeat
- from torch import LongTensor, Tensor, nn
- from typing import Union
- Device = 'cuda'
- @dataclass
- class Mamba2Config:
- d_model: int # model dimension (D)
- n_layer: int = 2 # number of Mamba-2 layers in the language model
- d_state: int = 64 # state dimension (N)
- d_conv: int = 4 # convolution kernel size
- expand: int = 2 # expansion factor (E)
- headdim: int = 64 # head dimension (P)
- chunk_size: int = 49 # matrix partition size (Q)
- vocab_size: int = 100
- pad_vocab_size_multiple: int = 16
- def __post_init__(self):
- self.d_inner = self.expand * self.d_model
- assert self.d_inner % self.headdim == 0
- self.nheads = self.d_inner // self.headdim
- if self.vocab_size % self.pad_vocab_size_multiple != 0:
- self.vocab_size += (
- self.pad_vocab_size_multiple
- - self.vocab_size % self.pad_vocab_size_multiple
- )
- class InferenceCache(NamedTuple):
- conv_state: Tensor # (batch, d_inner + 2 * d_state, d_conv)
- ssm_state: Tensor # (batch, nheads, headdim, d_state)
- @staticmethod
- def alloc(batch_size: int, args: Mamba2Config, device: Device = None):
- return InferenceCache(
- torch.zeros(
- batch_size, args.d_inner + 2 * args.d_state, args.d_conv, device=device
- ),
- torch.zeros(
- batch_size, args.nheads, args.headdim, args.d_state, device=device
- ),
- )
- class Mamba2(nn.Module):
- def __init__(self, args: Mamba2Config, device: Device = None):
- super().__init__()
- self.args = args
- self.device = device
- # Order: (z, x, B, C, dt)
- d_in_proj = 2 * args.d_inner + 2 * args.d_state + args.nheads
- self.in_proj = nn.Linear(args.d_model, d_in_proj, bias=False, device=device)
- conv_dim = args.d_inner + 2 * args.d_state
- self.conv1d = nn.Conv1d(
- in_channels=conv_dim,
- out_channels=conv_dim,
- kernel_size=args.d_conv,
- groups=conv_dim,
- padding=args.d_conv - 1,
- device=device,
- )
- self.dt_bias = nn.Parameter(torch.empty(args.nheads, device=device))
- self.A_log = nn.Parameter(torch.empty(args.nheads, device=device))
- self.D = nn.Parameter(torch.empty(args.nheads, device=device))
- self.norm = RMSNorm(args.d_inner, device=device)
- self.out_proj = nn.Linear(args.d_inner, args.d_model, bias=False, device=device)
- def forward(self, u: Tensor, h: InferenceCache | None = None):
- """
- Arguments
- u: (batch, seqlen, d_model) input. seqlen should be a multiple of chunk_size.
- h: hidden states for inference step. Initialized to 0s if not present.
- Return (y, h)
- y: (batch, seqlen, d_model) output
- h: updated inference cache after processing `u`
- """
- if h:
- return self.step(u, h)
- A = -torch.exp(self.A_log) # (nheads,) 2
- zxbcdt = self.in_proj(u) # (batch, seqlen, d_in_proj) 1 49 386
- z, xBC, dt = torch.split( # 1 49 128/ 1 49 256/ 1 49 2
- zxbcdt,
- [
- self.args.d_inner,
- self.args.d_inner + 2 * self.args.d_state,
- self.args.nheads,
- ],
- dim=-1,
- )
- dt = F.softplus(dt + self.dt_bias) # (batch, seqlen, nheads)
- # Pad or truncate xBC seqlen to d_conv
- conv_state = F.pad(
- rearrange(xBC, "b l d -> b d l"), (self.args.d_conv - u.shape[1], 0)
- )
- xBC = silu(
- self.conv1d(xBC.transpose(1, 2)).transpose(1, 2)[:, : u.shape[1], :]
- ) # (batch, seqlen, d_inner + 2 * d_state))
- x, B, C = torch.split(
- xBC, [self.args.d_inner, self.args.d_state, self.args.d_state], dim=-1
- )
- x = rearrange(x, "b l (h p) -> b l h p", p=self.args.headdim)
- y, ssm_state = ssd( # 1 49 2 64 / 1 2 64 64
- x * dt.unsqueeze(-1),
- A * dt,
- rearrange(B, "b l n -> b l 1 n"),
- rearrange(C, "b l n -> b l 1 n"),
- self.args.chunk_size,
- device=self.device,
- )
- y = y + x * self.D.unsqueeze(-1)
- y = rearrange(y, "b l h p -> b l (h p)")
- y = self.norm(y, z)
- y = self.out_proj(y)
- h = InferenceCache(conv_state, ssm_state)
- return y, h
- def step(self, u: Tensor, h: InferenceCache) -> tuple[Tensor, InferenceCache]:
- """Take a single inference step for the current input and hidden state
- Unlike attention-based models, RNN-based models (eg Mamba) does not need
- to look back at all the past tokens to generate a new token. Instead a
- hidden state (initialized to 0s initially) is updated for each input and
- passed to the next inference step. This means that the total inference
- time is linear with respect to the sequence length instead of quadratic
- in attention's case.
- Arguments
- u: (batch, 1, d_model)
- h: initial/running hidden state
- Return (y, h)
- y: (batch, 1, d_model)
- h: updated hidden state
- """
- print(u)
- assert u.shape[1] == 1, "Only one token can be decoded per inference step"
- zxbcdt = self.in_proj(u.squeeze(1)) # (batch, d_in_proj)
- z, xBC, dt = torch.split(
- zxbcdt,
- [
- self.args.d_inner,
- self.args.d_inner + 2 * self.args.d_state,
- self.args.nheads,
- ],
- dim=-1,
- )
- # Advance convolution input
- h.conv_state.copy_(torch.roll(h.conv_state, shifts=-1, dims=-1))
- h.conv_state[:, :, -1] = xBC
- # Convolution step
- xBC = torch.sum(
- h.conv_state * rearrange(self.conv1d.weight, "d 1 w -> d w"), dim=-1
- )
- xBC += self.conv1d.bias
- xBC = silu(xBC)
- x, B, C = torch.split(
- xBC, [self.args.d_inner, self.args.d_state, self.args.d_state], dim=-1
- )
- A = -torch.exp(self.A_log) # (nheads,)
- # SSM step
- dt = F.softplus(dt + self.dt_bias) # (batch, nheads)
- dA = torch.exp(dt * A) # (batch, nheads)
- x = rearrange(x, "b (h p) -> b h p", p=self.args.headdim)
- dBx = torch.einsum("bh, bn, bhp -> bhpn", dt, B, x)
- h.ssm_state.copy_(h.ssm_state * rearrange(dA, "b h -> b h 1 1") + dBx)
- y = torch.einsum("bhpn, bn -> bhp", h.ssm_state, C)
- y = y + rearrange(self.D, "h -> h 1") * x
- y = rearrange(y, "b h p -> b (h p)")
- y = self.norm(y, z)
- y = self.out_proj(y)
- return y.unsqueeze(1), h
- def segsum(x: Tensor, device: Device = None) -> Tensor:
- """Stable segment sum calculation.
- `exp(segsum(A))` produces a 1-semiseparable matrix, which is equivalent to a scalar SSM.
- Source: https://github.com/state-spaces/mamba/blob/219f03c840d5a44e7d42e4e728134834fddccf45/mamba_ssm/modules/ssd_minimal.py#L23-L32
- """
- T = x.size(-1)
- x = repeat(x, "... d -> ... d e", e=T)
- mask = torch.tril(torch.ones(T, T, dtype=torch.bool, device=device), diagonal=-1)
- x = x.masked_fill(~mask, 0)
- x_segsum = torch.cumsum(x, dim=-2)
- mask = torch.tril(torch.ones(T, T, dtype=torch.bool, device=device), diagonal=0)
- x_segsum = x_segsum.masked_fill(~mask, -torch.inf)
- return x_segsum
- def ssd(x, A, B, C, chunk_size, initial_states=None, device: Device = None):
- """Structed State Space Duality (SSD) - the core of Mamba-2
- This is almost the exact same minimal SSD code from the blog post.
- Arguments
- x: (batch, seqlen, n_heads, d_head) 1 49 2 64
- A: (batch, seqlen, n_heads) 1 49 2
- B: (batch, seqlen, n_heads, d_state) 1 49 1 64
- C: (batch, seqlen, n_heads, d_state) 1 49 1 64
- Return
- y: (batch, seqlen, n_heads, d_head)
- Source
- 1. https://tridao.me/blog/2024/mamba2-part3-algorithm/
- 2. https://github.com/state-spaces/mamba/blob/219f03c840d5a44e7d42e4e728134834fddccf45/mamba_ssm/modules/ssd_minimal.py#L34-L78
- """
- # print(x.shape[1])
- assert x.shape[1] % chunk_size == 0
- # Rearrange into chunks
- # Step 1, 2 and 4 of SSD can be computed in parallel for each chunk across devices (sequence parallel)
- # This is not implemented and left as an exercise for the reader 😜
- x, A, B, C = [ # 1 1 49 2 64/ 1 1 49 2/ 1 1 49 1 64/ 1 1 49 1 64
- rearrange(m, "b (c l) ... -> b c l ...", l=chunk_size) for m in (x, A, B, C)
- ]
- A = rearrange(A, "b c l h -> b h c l") # 1 2 1 49
- A_cumsum = torch.cumsum(A, dim=-1)
- # 1. Compute the output for each intra-chunk (diagonal blocks)
- L = torch.exp(segsum(A, device=device)) # 1 2 1 49 49
- Y_diag = torch.einsum("bclhn, bcshn, bhcls, bcshp -> bclhp", C, B, L, x) # 1 1 49 2 64
- # 2. Compute the state for each intra-chunk
- # (right term of low-rank factorization of off-diagonal blocks; B terms)
- decay_states = torch.exp(A_cumsum[:, :, :, -1:] - A_cumsum)
- states = torch.einsum("bclhn, bhcl, bclhp -> bchpn", B, decay_states, x)
- # 3. Compute the inter-chunk SSM recurrence; produces correct SSM states at chunk boundaries
- # (middle term of factorization of off-diag blocks; A terms)
- if initial_states is None:
- initial_states = torch.zeros_like(states[:, :1])
- states = torch.cat([initial_states, states], dim=1)
- decay_chunk = torch.exp(segsum(F.pad(A_cumsum[:, :, :, -1], (1, 0)), device=device))
- new_states = torch.einsum("bhzc, bchpn -> bzhpn", decay_chunk, states)
- states, final_state = new_states[:, :-1], new_states[:, -1]
- # 4. Compute state -> output conversion per chunk
- # (left term of low-rank factorization of off-diagonal blocks; C terms)
- state_decay_out = torch.exp(A_cumsum)
- Y_off = torch.einsum("bclhn, bchpn, bhcl -> bclhp", C, states, state_decay_out)
- # Add output of intra-chunk and inter-chunk terms (diagonal and off-diagonal blocks)
- Y = rearrange(Y_diag + Y_off, "b c l h p -> b (c l) h p")
- return Y, final_state
- class RMSNorm(nn.Module):
- def __init__(self, d: int, eps: float = 1e-5, device: Device = None):
- """Gated Root Mean Square Layer Normalization
- Paper: https://arxiv.org/abs/1910.07467
- """
- super().__init__()
- self.eps = eps
- self.weight = nn.Parameter(torch.ones(d, device=device))
- def forward(self, x, z=None):
- if z is not None:
- x = x * silu(z)
- return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps) * self.weight
- def silu(x):
- """Applies the Sigmoid Linear Unit (SiLU), element-wise.
- Define this manually since torch's version doesn't seem to work on MPS.
- """
- return x * F.sigmoid(x)
mamba2.py at commit c825025, no license · at the source
Overview
- Department of Health Outcomes and Biomedical Informatics, University of Florida, 1889 Museum Rd, Suite 7000, Gainesville, FL 32611, United States
- Department of Computer Science, University of Central Florida, 4328 Scorpius St. Building 116, Room 246, Orlando, FL 32816, United States
- Department of Biochemistry and Molecular Biology, University of Florida, 1200 Newell Drive, Gainesville, FL 32610, United States
- UF Health Cancer Center, University of Florida, Gainesville, FL 32610, United States
- UF Genetics Institute, University of Florida, 2033 Mowry Road, Gainesville, FL 32610, United States
Abstract
Alternative polyadenylation (APA) is a widespread post-transcriptional regulatory mechanism that diversifies transcript isoforms and modulates mRNA stability, localization, and translation. Although single-cell RNA sequencing (scRNA-seq) provides an unprecedented opportunity to study cell-type-specific APA dynamics, existing computational tools are largely designed for bulk RNA-seq data or rely heavily on gene annotations, limiting their applicability to single-cell contexts. Here, we present scDeepAPA, a deep learning framework specifically optimized for scRNA-seq data to enable accurate polyadenylation site (PAS) detection, isoform quantification, and functional interpretation of APA events at single-cell resolution. Trained on high-confidence annotations from PolyASite v3.0, scDeepAPA integrates convolutional feature extraction with Mamba-based state-space modeling and bidirectional LSTM layers to capture both long-range and local sequence dependencies. Comprehensive benchmarking against five state-of-the-art PAS prediction models demonstrates that scDeepAPA consistently achieves superior performance across accuracy, F1 score, and area under the receiver operating characteristic metrics in both human and mouse datasets. Applying scDeepAPA to Alzheimer’s disease mouse brain data revealed widespread, cell-type-specific APA remodeling across immune and glial populations, including shifts toward proximal PAS usage and 3′ UTR shortening. In KRAS-mutant small cell lung cancer, scDeepAPA uncovered global proximal PAS activation and tumor-specific intronic polyadenylation events. Notably, several intronic APA events generated truncated transcripts encoding predicted neoantigenic peptides with strong major histocompatibility complex class I binding affinity, supported by structural modeling and tumor-specific expression patterns. By enabling accurate PAS identification and quantitative APA profiling, scDeepAPA facilitates in-depth downstream analyses of regulatory mechanisms and immunogenic consequences in single-cell transcriptomics, advancing the understanding of post-transcriptional regulation in neurodegeneration and cancer.
Reproduced under the paper's license (CC BY-NC), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 7 matches between paragraphs and lines of code.
QSong-github/scDeepAPA
c825025f1dbc1291ebafabb493d396171dad763b, 2 March 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
11 files
- code/
data_process/ , Python, 36 lines10fold.py - code/
data_process/ , Python, 45 linesmerge.py - code/
data_process/ , Python, 72 linessplit.py - code/
dataloader.py , Python, 106 lines - code/
eval_ext_seq.py , Python, 129 lines - code/
eval_peaks.py , Python, 135 lines - code/
main.py , Python, 131 lines - code/
mamba2.py , Python, 311 lines - code/
model.py , Python, 72 lines - code/
tool.py , Python, 37 lines - README.md, Text, 53 lines
Zenodo 15066940
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
saketkc/gencode_regions
f1f169e394d41488df505e7ad34aa0688cb08262, 1 April 2021Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
58 files
- GTF.py, Python, 135 lines
- create_regions_from_genc
ode.R , R, 127 lines - create_without_rRNA_tRNA
.sh , Shell, 3 lines - extract_lincRNA.py, Python, 31 lines
- extract_rRNA.py, Python, 33 lines
- extract_tRNA.py, Python, 33 lines
- genepred_to_bed.py, Python, 149 lines
- notebooks/
ASM276v2.ipynb , Jupyter, 297 lines - notebooks/
ASM294v2.ipynb , Jupyter, 297 lines - notebooks/
ASM584v2.ipynb , Jupyter, 297 lines - notebooks/
BDGP6.ipynb , Jupyter, 298 lines - notebooks/
CriGri_1.0.ipynb , Jupyter, 296 lines - notebooks/
Epr1.ipynb , Jupyter, 298 lines - notebooks/
Felis_catus9.0.ipynb , Jupyter, 290 lines - notebooks/
GRCg6.ipynb , Jupyter, 291 lines - notebooks/
GRCz10.ipynb , Jupyter, 289 lines - notebooks/
GRCz11.ipynb , Jupyter, 293 lines - notebooks/
JGI_4.2.ipynb , Jupyter, 298 lines - notebooks/
MG1655.ipynb , Jupyter, 268 lines - notebooks/
Mmul8.ipynb , Jupyter, 433 lines - notebooks/
PlotCDSSize.ipynb , Jupyter, 53 lines - notebooks/
R64-1-1-get_UTRs.ipynb , Jupyter, 126 lines - notebooks/
R64.ipynb , Jupyter, 298 lines - notebooks/
Rnor6.0.ipynb , Jupyter, 296 lines - notebooks/
S_cerevisiae-BY4741-stan , Jupyter, 48 linesford.ipynb - notebooks/
TAIR10.ipynb , Jupyter, 298 lines - notebooks/
TryBru_Apr2005_chr11.ipy , Jupyter, 301 linesnb - notebooks/
WBcel235.ipynb , Jupyter, 291 lines - notebooks/
archive/ , Jupyter, 272 linesGffutils BDGP6.ipynb - notebooks/
archive/ , Jupyter, 317 linesGffutils C_albicans-A22-r50.ipynb - notebooks/
archive/ , Jupyter, 323 linesGffutils C_elegans.ipynb - notebooks/
archive/ , Jupyter, 186 linesGffutils EColiK12-MG1655.ipynb - notebooks/
archive/ , Jupyter, 275 linesGffutils Ecoli-B_subtilis.ipynb - notebooks/
archive/ , Jupyter, 275 linesGffutils Ecoli-bw25113.ipynb - notebooks/
archive/ , Jupyter, 276 linesGffutils Ecoli.ipynb - notebooks/
archive/ , Jupyter, 327 linesGffutils GRCz10.ipynb - notebooks/
archive/ , Jupyter, 320 linesGffutils Human-hg19.ipynb - notebooks/
archive/ , Jupyter, 461 linesGffutils Human.ipynb - notebooks/
archive/ , Jupyter, 312 linesGffutils Mouse.ipynb - notebooks/
archive/ , Jupyter, 356 linesGffutils Rat-Rnor6.ipynb - notebooks/
archive/ , Jupyter, 302 linesGffutils WBcel235.ipynb - notebooks/
archive/ , Jupyter, 266 linesGffutils dmel6.ipynb - notebooks/
archive/ , Jupyter, 356 linesGffutils gallus-gallus.ipynb - notebooks/
archive/ , Jupyter, 187 linesGffutils sacCerR64.ipynb - notebooks/
archive/ , Jupyter, 356 linesGffutils xenopus_tropicalis.ipynb - notebooks/
archive/ , Jupyter, 275 linesGffutils-C_elegans.ipynb - notebooks/
archive/ , Jupyter, 213 linesGffutils-S_cerevisiae-BY 4741.ipynb - notebooks/
archive/ , Jupyter, 275 linesGffutils-S_cerevisiae.ip ynb - notebooks/
hg38-v96.ipynb , Jupyter, 315 lines - notebooks/
hg38.ipynb , Jupyter, 293 lines - notebooks/
mm10.ipynb , Jupyter, 302 lines - notebooks/
panTro3.ipynb , Jupyter, 466 lines - notebooks/
rheMac8.ipynb , Jupyter, 291 lines - notebooks/
rn6.ipynb , Jupyter, 296 lines - notebooks/
sacCerR64.ipynb , Jupyter, 274 lines - plot_size_distribution.p
y , Python, 79 lines - LICENSE, License, 25 lines
- README.md, Text, 116 lines
QSong-github/scAPA
c825025f1dbc1291ebafabb493d396171dad763b, 2 March 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
11 files
- code/
data_process/ , Python, 36 lines10fold.py - code/
data_process/ , Python, 45 linesmerge.py - code/
data_process/ , Python, 72 linessplit.py - code/
dataloader.py , Python, 106 lines - code/
eval_ext_seq.py , Python, 129 lines - code/
eval_peaks.py , Python, 135 lines - code/
main.py , Python, 131 lines, 1 match - code/
mamba2.py , Python, 311 lines, 4 matches - code/
model.py , Python, 72 lines, 2 matches - code/
tool.py , Python, 37 lines - README.md, Text, 53 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 4 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 76 scripts, each with its path and the digest of its content;
- 7 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data availability
The scRNA-seq datasets analyzed in this study are publicly available from the NCBI Sequence Read Archive. The accession numbers are as follows: SCLC mutant samples (SRR1119782932), SCLC control samples (SRR2140777033), mouse WT control brain samples (SRR1471295034), and mouse AD model brain samples (SRR1471295134). Public PAS annotations were obtained from the PolyASite v3.0 database, accessible at https://
Reproduced under the paper's license (CC BY-NC), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 9 keywords, 7 MeSH terms, 3 funders, 57 references.
Cite
This paper
Liang, J., Wang, Q., Guo, S., Zhang, W., Xie, M., & Song, Q. (2026). scDeepAPA: a deep learning framework for single-cell alternative polyadenylation identification. Briefings in bioinformatics, 27(3), bbag339. https://
BibTeX
@article{liang2026scdeep
author = {Liang, Jialu and Wang, Qing and Guo, Sen and Zhang, Wei and Xie, Mingyi and Song, Qianqian},
title = {{scDeepAPA: a deep learning framework for single-cell alternative polyadenylation identification}},
journal = {Briefings in bioinformatics},
year = {2026},
month = may,
volume = {27},
number = {3},
pages = {bbag339},
publisher = {Oxford University Press},
issn = {1467-5463},
doi = {10.1093/
url = {https://
pmid = {42341216},
pmcid = {PMC13293269}
}
RIS
TY - JOUR
AU - Liang, Jialu
AU - Wang, Qing
AU - Guo, Sen
AU - Zhang, Wei
AU - Xie, Mingyi
AU - Song, Qianqian
TI - scDeepAPA: a deep learning framework for single-cell alternative polyadenylation identification
T2 - Briefings in bioinformatics
J2 - Brief Bioinform
PY - 2026
DA - 2026/
VL - 27
IS - 3
SP - bbag339
SN - 1467-5463
PB - Oxford University Press
DO - 10.1093/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1093/
"type": "article-journal",
"title": "scDeepAPA: a deep learning framework for single-cell alternative polyadenylation identification",
"container-title": "Briefings in bioinformatics",
"author": [
{
"family": "Liang",
"given": "Jialu"
},
{
"family": "Wang",
"given": "Qing"
},
{
"family": "Guo",
"given": "Sen"
},
{
"family": "Zhang",
"given": "Wei"
},
{
"family": "Xie",
"given": "Mingyi"
},
{
"family": "Song",
"given": "Qianqian"
}
],
"container-title-short":
"volume": "27",
"issue": "3",
"page": "bbag339",
"DOI": "10.1093/
"PMID": "42341216",
"PMCID": "PMC13293269",
"ISSN": "1467-5463",
"publisher": "Oxford University Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
1
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1016/j.xgen.2026.101217 [code]
- ProtoCloud: A prototypical self-explaining model for single-cell analysis.Journal: Cell genomicsIn common: PyTorch, seaborn, scikit-learn, 3 other tools, genetics / omics, 6 references
- [2] doi:10.1093/nargab/lqag050 [code]
- TSProm: deep learning framework to predict tissue-specific regulatory logic.Journal: NAR genomics and bioinformaticsIn common: Biopython, BEDTools, Hugging Face Transformers, 7 other tools
- [3] doi:10.1038/s41592-026-03211-w [code]
- Spatial isoform sequencing at single-cell resolution reveals cell-type-specific spatial isoform variability in multiple brain cell types.Journal: Nature methodsIn common: Biopython, BEDTools, seaborn, 5 other tools, genetics / omics, mouse, 1 reference
- [4] doi:10.1038/s41467-026-76675-1 [code]
- Long-read proteogenomic atlas of human neuronal differentiation reveals isoform diversity informing neurodevelopmental risk mechanisms.Journal: Nature communicationsIn common: Biopython, BEDTools, seaborn, 5 other tools, genetics / omics, 1 reference
- [5] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: Biopython, Hugging Face Transformers, PyTorch, 6 other tools, mouse
- [6] doi:10.1093/bib/bbag182 [code]
- NyxBind: enhancing deep neural representations for transcription factor binding site prediction via contrastive learning.Journal: Briefings in bioinformaticsIn common: Biopython, Hugging Face Transformers, PyTorch, 5 other tools, 1 reference
- [7] doi:10.1038/s41592-026-03057-2 [code]
- CREsted: modeling genomic and synthetic cell-type-specific enhancers across tissues and species.Journal: Nature methodsIn common: Biopython, BEDTools, PyTorch, 5 other tools, genetics / omics, mouse
- [8] doi:10.1093/bioinformatics/btag430 [code]
- SPIDER: spatially integrated denoising via embedding regularization with single cell supervision.Journal: Bioinformatics (Oxford, England)In common: PyTorch, scikit-learn, pandas, 2 other tools, genetics / omics, author Wei Zhang
- [9] doi:10.1038/s42003-026-10462-y [code]
- SpaDC enables sequence-based integrative analysis and regulatory inference of spatial chromatin accessibility data.Journal: Communications biologyIn common: Biopython, BEDTools, PyTorch, 5 other tools, genetics / omics, mouse
- [10] doi:10.1038/s44318-026-00818-9 [code]
- FAM134B-mediated ER-phagy degrades APP and suppresses Alzheimer's disease pathology.Journal: The EMBO journalIn common: Biopython, BEDTools, seaborn, 5 other tools, mouse
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 4 repositories of the authors' code, each at its verified commit and with its license, 76 scripts, and 7 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:fa69b64c432d3fd2…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
