You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
pycmplot v0.4.3
Highlights
Functional annotation of GWAS hits. Gene assignment now uses GeneHancer enhancer–gene links and GTEx CAVIAR fine-mapped eQTLs, and the hits table reports GeneHancer, eQTL, ENCODE cCRE/TFBS/DNase and CpG-island evidence for every lead.
LD-based clumping. New LDGraph reference format, pycmplot.clump(), and --ld_reference / --ld_r2 / --harmonize_variants on the CLI.
More accurate gene assignment. A reworked priority score that favours protein-coding genes and nearby genes.
Faster liftover. Switched from pyliftover to liftover (same results, about 3× faster), and liftover losses are now reported instead of silently dropped.
Added
LDGraph: compact sparse LD reference (LDGraph.from_plink_ld(..., build=...), save(compact=True) / load), carrying its genome build so build mismatches with your summary statistics raise a clear error.
pycmplot.clump(): PLINK-style greedy LD clumping, with a distance-based fallback for variants missing from the reference.
New hits-table columns: gh_id, gh_feature, eqtl (GENE_TISSUE), tfbs (TF_SCORE), ccre_id, ccre, ccre_class, dnase_score, dnase_sources, cpg_island, plus gene_label, annot_pos/annot_snp, annot_window_kb, clump_window_kb.
Two-layer lead annotation: leads are chosen on statistics alone; when several variants tie at the lead's P-value, the one with the most functional evidence (preferring links to candidate genes) is used for gene assignment.
-cw/--clump_window_kb and -aw/--annotation_window_kb as separate settings.
Plot-time filters: -pht/--plot_highlight_thresh (per-locus highlight filter, judged within each track) and -psig/--plot_signif_threshold (labels).
Liftover report: variants that can't be lifted to hg38 are written to <prefix>.liftover_unmapped.tsv with the reason; a warning lists any significant ones and suggests alternatives.
Highlight legend size and padding options (-hll_size, legend padding).
Gene assignment: new priority score (distance decay, genic, promoter and distance-weighted upstream bonuses, multiplied by biotype weight), protein-coding preference with LEFT-RIGHT flanking labels for intergenic hits, lncRNA weights lowered (0.70 → 0.55). Expect some gene labels to differ from 0.4.2.
Defaults: lead clumping window 500 kb → 250 kb; gene search window 2 Mb → 500 kb.
Gene-labelled plots show one label per gene locus (the strongest hit); SNP-labelled plots label every lead. The hits table keeps every lead.
Lead SNPs are now selected across all tracks together; a locus significant in several tracks gets one lead.
Linear plots: -cl_size/-tl_size now apply to linear plots too; chromosome labels default to size 6 (was 10; use -cl_size 10 for the old look).
Dependency pyliftover replaced by liftover.
Hits caches regenerate automatically when annotation logic or track files change.
Fixed
annotate="GENE" picked one label column for all hits based on the last hit, so intergenic and genic hits could get the wrong label type.
Variants lifted to a different chromosome kept their old chromosome; they are now reported as unmapped.
pycmplot.qq_single was not exported and from pycmplot import * failed.
Circular plots crashed when no chromosome's data started near its first base (e.g. regional data).
ax= and chrom_label_size on the linear plotter had no effect; multi-panel linear figures now work.
Duplicate rsIDs across build-mixed tracks no longer produce duplicate hits.
Corrected highlight_thresh documentation.
Upgrade notes
hg19 data is lifted to hg38 by default (GeneHancer is on by default and is hg38-only). Use --no_genehancer to keep native-build coordinates.
Package size grows from about 2 MB to about 80 MB because of the bundled annotation tracks.
--ld_reference requires a pre-built LDGraph: LDGraph.from_plink_ld("ref.ld", build="hg19").save("ref.npz").
The old plot_* function names still work but are deprecated; use linear, circular, qq_single, qq_combined, qq_separate, qq_overlay.