Skip to main content

gwaspeek: interactive terminal viewer for GWAS summary statistics

Project description

gwaspeek

Interactive terminal Manhattan plots for GWAS summary statistics: pan and zoom in a real TTY, inspect regions, and optionally show a protein-coding gene track when the view is a single chromosome and spans ≤ 1 Mb.

Static one-shot renders (-s) are available for logs or CI. Column names are auto-detected from bundled formatbook-style aliases. Drawing uses Unicode or --ascii.

Interactive mode (default)

Interactive mode runs when you pass exactly one input path as gwaspeek FILE or gwaspeek -i FILE. More than one path (for example a positional file plus -s) is an error.

Use a real TTY when you can; the viewer is built for live keyboard input and redraw.

Try it

After installation, from a directory that contains the file:

gwaspeek t2d_bbj_p1e-5.txt.gz

Keys

Key Action
A / D Pan
W / S Zoom out / in
l Toggle lead-variant labels
t Cycle gene track: 3738off
v Toggle variants-in-view list
h Toggle help
r Reset to full genome
q Quit

The gene track appears only on a single-chromosome view with span ≤ 1 Mb. --gtf and --gtf38 (see CLI reference) apply only in interactive mode; static -s output ignores them.

Common sizing and column flags work in interactive mode too (for example --width, --height, --skip, --sig-level):

gwaspeek sumstats.tsv \
  --sep "\t" \
  --width 120 \
  --height 32 \
  --skip 2 \
  --sig-level 5e-8

Installation

pip install -e .
gwaspeek --help

Static mode (-s)

For a one-shot text snapshot (non-interactive), add -s before the path:

gwaspeek -s t2d_bbj_p1e-5.txt.gz --width 120 --ascii

Sample output:

Manhattan 1:17276978-X:153269341                                                                                gwaspeek
 205.0│
      │
      │
      │
      │                                                                     ●
      │                                                                     ●
 155.0│                                                                     ●
      │                                                                     ●
      │
      │
      │                                                                     ●
      │
 105.0│                                                                     ●
      │                                                                     ●
      │                                                           ●         ●
      │                                        ○                  ●         ●
      │                                        ○          ●       ●         ●
   55.0│                                        ○          ●                                                           ○
      │                                        ○          ●       ●         ○                                         ○
      │                         ●              ○                  ●        ○●                                         ○
      │                   ●     ○              ○          ●     ○ ●        ○○                         ●
      │         ○         ●●    ●     ○   ●    ○○   ○   ● ●  ○  ○ ●  ● ●  ○○○     ○○   ●● ●    ●●  ○ ●●   ○ ●        ○○
   5.0│╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌○
      +───+─────────+───────+───────+──────+──────+─────+─────+─────+─────+────+────+───+───+──+───+──+──+─+─+─+───+────
          1         2       3       4      5      6     7     8     9    10   11   12  13  14 15  16 17 18192022   X

Invocation at a glance

Form Mode
gwaspeek FILE Interactive (same as -i)
gwaspeek -i FILE Interactive
gwaspeek -s FILE Static

Input files

Tabular GWAS summary stats (TSV/CSV or other delimiter via --sep).

Per row you need: chromosome, base-pair position, and either P or -log10(P) (names are auto-detected; override with --chr, --pos, --p, --mlog10p). Do not pass both --p and --mlog10p. Internally rows are normalized to CHR, POS, P, and derived mlog10p.

Chromosome tokens understood by the parser include numeric 122, X, Y, MT, and chr-prefixed forms (e.g. chr1, chrX, chrM).

CLI reference

Option Type Default Description
FILE (positional) path Same as -i FILE (interactive).
-i, --interactive FILE path Interactive viewer.
-s, --static FILE path One-shot static plot.
--sep STR string tab (\t) Delimiter.
--chr NAME string auto Chromosome column.
--pos NAME string auto Position column.
--p NAME string auto P-value column (not with --mlog10p).
--mlog10p NAME string auto -log10(P) column (not with --p).
--skip FLOAT float 5.0 Drop variants below this -log10(P); also y-axis floor.
--width INT int 100 Width (chars): static size; interactive initial/fallback.
--height INT int 28 Height (lines): static size; interactive initial/fallback.
--ascii flag off ASCII drawing instead of Unicode.
--sig-level FLOAT float 5e-8 Genome-wide line in P space.
--ymax FLOAT float auto Y-axis max in -log10(P).
--gtf PATH path bundled GRCh37 GTF (.gz ok); interactive gene track.
--gtf38 PATH path GRCh38 GTF (.gz ok); interactive mode uses bundled gene-only GTF when omitted.
-h, --help flag off Help.

Examples

# Interactive (default): positional or -i
gwaspeek tests/fixtures/sumstats_small.tsv
gwaspeek -i tests/fixtures/sumstats_small.tsv

# Static
gwaspeek -s tests/fixtures/sumstats_small.tsv

# Explicit columns (flags are the same in interactive mode)
gwaspeek -s sumstats.tsv --chr CHROM --pos BP --p PVAL

# Precomputed -log10(P)
gwaspeek -s sumstats_mlog10p.tsv --chr CHR --pos POS --mlog10p LOG10P

# Narrow terminals
gwaspeek -s sumstats.tsv --ascii

Tips

  • Prefer a real TTY for interactive mode.
  • Dense sumstats: raise --skip to thin points and reduce clutter.
  • Unicode is usually clearer; --ascii when the terminal cannot draw box drawing / braille well.

For contributors

pip install -e ".[dev]"
pytest

Pipeline: gwaspeek.cli parses args and loads data with gwaspeek.io, normalizes with gwaspeek.preprocess, then gwaspeek.manhattan.render_manhattan (static) or gwaspeek.interactive.run_interactive_manhattan (interactive). Terminal drawing lives in gwaspeek.terminal_canvas. Tests live under tests/ (see tests/conftest.py for PYTHONPATH / src layout).

License

MIT.

Repository

https://github.com/Cloufield/gwaspeek

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gwaspeek-0.1.0.tar.gz (5.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gwaspeek-0.1.0-py3-none-any.whl (5.7 MB view details)

Uploaded Python 3

File details

Details for the file gwaspeek-0.1.0.tar.gz.

File metadata

  • Download URL: gwaspeek-0.1.0.tar.gz
  • Upload date:
  • Size: 5.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for gwaspeek-0.1.0.tar.gz
Algorithm Hash digest
SHA256 57c11a3cc9b751b86629d2c50d8c43832337a90fce10b7066b1e17136f39a5cb
MD5 fda95723eab3e5352b49487bd16ce1ce
BLAKE2b-256 89e3f4421ab5df1df614dd65c7da2b369ccab80f8981e1070163d6345d37f52f

See more details on using hashes here.

File details

Details for the file gwaspeek-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gwaspeek-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for gwaspeek-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04e84d5cc9524d5a68f6b967daec38775b521332f9c49e618a06693e7a731eb8
MD5 f185bd836ee489258e15319a0342e152
BLAKE2b-256 25cbf282779a5d2f65bb9badfba5ef4ed884e3933584322f1c752d9cb7a2e654

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page