Polaris reads the megabase-scale architecture around each contact — the stripes, domain boundaries and co-occurring loops along its entire row and column — not just the local signal. One model annotates loops in bulk Hi-C, single-cell Hi-C, Micro-C and DNA SPRITE, without retraining.
Polaris combines axial attention with a U-Net backbone. It takes a 224×224 region of a contact map and predicts a loop score for every pixel at once, so each prediction is informed by the stripes, domain boundaries and co-occurring loops that share its row and column.
One model, every assay. Trained once on bulk Hi-C, Polaris annotates loops from bulk Hi-C, single-cell Hi-C, Micro-C and DNA SPRITE contact maps without any retraining or manual tuning.
Loops from as few as ~25 cells. On aggregated single-cell Hi-C, Polaris recovers known long-range interactions (for example the Sox2 promoter–super-enhancer contact) from far fewer cells than existing tools.
More experimentally supported loops. Across CTCF/RAD21 ChIA-PET and H3K27ac/SMC1 HiChIP validation sets, Polaris recovers more supported loops per called loop than alternative methods, and its anchors are more strongly enriched for CTCF binding sites and convergent CTCF motifs.
Robust and fast. Performance holds across sequencing depths, resolutions, cell types and species (human, mouse, zebrafish), with essentially no false positives on cohesin-depleted controls — and a genome-wide run finishes in minutes on a single GPU.
Most loop callers decide whether a contact is a loop by looking at a small window around it: is this pixel brighter than its immediate surroundings? That works when the signal is strong, but it throws away the context that makes a loop recognisable in the first place. Loops sit at the corners of domains, line up along architectural stripes, and co-occur with other loops in the same row or column — structure that extends far beyond any local window.
Polaris is built around that observation. Axial attention lets every position exchange information along its entire row and its entire column of the contact map, so the model can see a stripe or a domain boundary that is megabases away while still resolving the loop at kilobase precision. This is what makes it robust when the data are sparse: even when the central pixel is noisy, the surrounding architecture is still informative.
Polaris architecture, its pre-training / fine-tuning paradigm, and loop annotation across bulk Hi-C, single-cell Hi-C, Micro-C and DNA SPRITE. Bottom right: a loop detected from only 25 aggregated mES cells at the Sox2 locus, aligned with CTCF and H3K27ac ChIP-seq.
Chromatin loops are a needle-in-a-haystack labelling problem: experimentally validated loops cover a vanishing fraction of all contact pairs, which makes it hard to train a model that scores every pixel of a large region at once. Polaris sidesteps this with knowledge distillation: it is first pre-trained on a large collection of unlabelled Hi-C maps using the continuous predictions of an existing reference-panel method as soft targets, then fine-tuned on ChIA-PET and HiChIP-supported loops.
The result is a model that inherits the accuracy of a reference-panel method without needing a reference panel at prediction time. That is what frees Polaris from being tied to a particular species or resolution, and lets it be applied directly to data — such as zebrafish embryos — for which no reference panel exists.
Comparison on GM12878 Hi-C (500M valid read pairs, held-out test chromosomes 15–17). Loops annotated by Polaris are more frequently supported by CTCF/RAD21 ChIA-PET and SMC1 HiChIP, show anchor distances matching experimentally supported loops, and are strongly enriched for CTCF binding sites and convergent CTCF motifs.
Single-cell Hi-C (mouse embryonic stem cells, all 19 autosomes). Polaris detects loops from as few as 25 cells and keeps a stable detection rate as more cells are added; its loops show clearer aggregate enrichment and its anchors fall at domain boundaries more often than those of alternative tools.
Polaris is a command line tool. Install it, point it at a contact map, and it writes a .bedpe file of loops:
# install
git clone https://github.com/ai4nucleome/Polaris.git
cd Polaris && conda create -n polaris python=3.9 && conda activate polaris
./setup.sh
# annotate loops
polaris loop pred -i [contact map .mcool/.bcool] -o [loops .bedpe]
Single-cell Hi-C uses the same command. Aggregate the cells of one type into a pseudo-bulk
.mcool first (for example with cooler merge), then run Polaris exactly as above.
See the tutorials for worked examples with data
and expected outputs, and the documentation for the full
CLI reference.
Aggregate peak analysis of Polaris loops, produced with polaris util pileup: bulk Hi-C (left) and
aggregated single-cell Hi-C (right).
@article{Hou2024Polaris,
title = {A versatile tool for chromatin loop annotation in bulk and single-cell Hi-C data},
author = {Hou, Yusen and Baguette, Audrey and Blanchette, Mathieu and Zhang, Yanlin},
journal = {bioRxiv},
year = {2024},
doi = {10.1101/2024.12.24.630215}
}
Polaris builds on RefHiC (Zhang & Blanchette, Nat. Commun. 2022), whose predictions serve as the teacher for our knowledge-distillation pre-training. We are grateful to the 4D Nucleome and ENCODE consortia, and to the authors of the datasets and tools used in this work, for making their data and software openly available. Polaris also depends on the open-source cooler and PyTorch ecosystems.