Skip to content

v0.4.3

Latest

Choose a tag to compare

@esohkevin esohkevin released this 01 Oct 03:12
· 6 commits to main since this release
d41c33e

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.
  • VariantMatcher: reconciles variant IDs across formats (rsID, CHR:POS:REF:ALT, chr prefixes, swapped alleles, X/23 aliases).
  • CLI: -ldr/--ld_reference (pre-built .npz/.ldz LDGraph), -ldr2/--ld_r2, --harmonize_variants.
  • Bundled hg38 functional tracks: GeneHancer, GTEx CAVIAR eQTL (per tissue), ENCODE cCRE, TFBS and DNase clusters, CpG islands. -no_gh/--no_genehancer turns them off.
  • 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).
  • pycmplot.stats.get_signif_snps(); liftover_position(..., return_unmapped=True).

Changed

  • 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.