/bio-genome-intervals-bigwig-tracks
<!--
Claude Code
$ npx -y skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks --agent claude-code
Codex
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a codex -y
Cursor
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a cursor -y
Gemini CLI
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a gemini-cli -y
GitHub Copilot
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a github-copilot -y
OpenCode
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a opencode -y
Windsurf
$ npx skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-bigwig-tracks -a windsurf -y
SKILL.md
bio-genome-intervals-bigwig-tracks.SKILL.md<!--
COPYRIGHT NOTICE
This file is part of the "Universal Biomedical Skills" project.
Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
All Rights Reserved.
#
This code is proprietary and confidential.
Unauthorized copying of this file, via any medium is strictly prohibited.
#
Provenance: Authenticated by MD BABU MIA
-->
--- name: bio-genome-intervals-bigwig-tracks description: Create and read bigWig browser tracks for visualizing continuous genomic data. Convert bedGraph to bigWig, extract signal values, and generate coverage tracks using UCSC tools and pyBigWig. Use when preparing coverage tracks for genome browsers or extracting signal at specific regions. tool_type: mixed primary_tool: pyBigWig measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
BigWig Tracks
BigWig is an indexed binary format for continuous genomic data. Efficient for genome browsers and programmatic access.
Why BigWig?
| Format | Size | Random Access | Browser Support | |--------|------|---------------|-----------------| | bedGraph | Large | No | Limited | | bigWig | ~10x smaller | Yes (indexed) | Excellent |
Convert bedGraph to bigWig (CLI)
Installation
# UCSC tools
conda install -c bioconda ucsc-bedgraphtobigwig ucsc-bigwigtobedgraph
# Or download directly
wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/bedGraphToBigWig
chmod +x bedGraphToBigWig
Basic Conversion
# Sort bedGraph first (required)
sort -k1,1 -k2,2n coverage.bedGraph > coverage.sorted.bedGraph
# Convert to bigWig
bedGraphToBigWig coverage.sorted.bedGraph chrom.sizes output.bw
# chrom.sizes format: chr<TAB>size
# chr1 248956422
# chr2 242193529
Get Chromosome Sizes
# From FASTA index
cut -f1,2 reference.fa.fai > chrom.sizes
# Download from UCSC
wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes
# From BAM header
samtools view -H alignments.bam | grep @SQ | sed 's/@SQ\tSN:\|LN://g' > chrom.sizes
Full Workflow
# Generate bedGraph from BAM
bedtools genomecov -ibam alignments.bam -bg > coverage.bedGraph
# Sort bedGraph
sort -k1,1 -k2,2n coverage.bedGraph > coverage.sorted.bedGraph
# Convert to bigWig
bedGraphToBigWig coverage.sorted.bedGraph hg38.chrom.sizes coverage.bw
# Clean up intermediate files
rm coverage.bedGraph coverage.sorted.bedGraph
Read BigWig with pyBigWig (Python)
Installation
pip install pyBigWig
Open and Inspect
import pyBigWig
# Open file
bw = pyBigWig.open('coverage.bw')
# File info
print(f'Chromosomes: {bw.chroms()}')
print(f'Header: {bw.header()}')
# Check if file is bigWig (not bigBed)
print(f'Is bigWig: {bw.isBigWig()}')
# Close when done
bw.close()Extract Values
import pyBigWig
bw = pyBigWig.open('coverage.bw')
# Get values for a region (returns numpy array)
values = bw.values('chr1', 1000000, 1001000)
print(f'Mean: {values.mean():.2f}')
print(f'Max: {values.max():.2f}')
# Get specific intervals with values
intervals = bw.intervals('chr1', 1000000, 1001000)
# Returns: [(start, end, value), ...]
for start, end, val in intervals:
print(f'{start}-{end}: {val}')
# Statistics for region
stats = bw.stats('chr1', 1000000, 1001000, type='mean')
print(f'Mean coverage: {stats[0]:.2f}')
# Available stat types: mean, min, max, coverage, std, sum
max_val = bw.stats('chr1', 1000000, 1001000, type='max')
coverage = bw.stats('chr1', 1000000, 1001000, type='coverage')
bw.close()Binned Statistics
import pyBigWig
bw = pyBigWig.open('coverage.bw')
# Get mean values in 100bp bins across region
region_start, region_end = 1000000, 2000000
n_bins = 1000 # 100bp bins
binned = bw.stats('chr1', region_start, region_end, type='mean', nBins=n_bins)
# Returns list of n_bins values
bw.close()Extract for BED Regions
import pyBigWig
import pybedtools
bw = pyBigWig.open('coverage.bw')
bed = pybedtools.BedTool('regions.bed')
# Get mean signal per region
results = []
for interval in bed:
chrom, start, end = interval.chrom, interval.start, interval.end
mean_signal = bw.stats(chrom, start, end, type='mean')[0]
results.append({
'chrom': chrom,
'start': start,
'end': end,
'name': interval.name,
'signal': mean_signal if mean_signal else 0
})
bw.close()
# Convert to DataFrame
import pandas as pd
df = pd.DataFrame(results)
print(df)Create BigWig with pyBigWig
import pyBigWig
# Create new bigWig
bw = pyBigWig.open('output.bw', 'w')
# Add header (chromosome sizes)
bw.addHeader([('chr1', 248956422), ('chr2', 242193529)])
# Add entries (must be sorted by position)
# Method 1: Individual entries
bw.addEntries(['chr1', 'chr1'], [0, 100], ends=[100, 200], values=[1.5, 2.3])
# Method 2: Chromosome at a time (more efficient)
bw.addEntries('chr1', [0, 100, 200], ends=[100, 200, 300], values=[1.5, 2.3, 3.1])
# Method 3: Fixed-width spans (most efficient for dense data)
bw.addEntries('chr2', 0, values=[1.0, 2.0, 3.0, 4.0], span=100, step=100)
# Creates: chr2:0-100=1.0, chr2:100-200=2.0, chr2:200-300=3.0, chr2:300-400=4.0
bw.close()deepTools for BigWig Operations
Installation
conda install -c bioconda deeptools
Generate Normalized BigWig from BAM
# RPKM normalization
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing RPKM
# CPM normalization
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing CPM
# BPM (bins per million) - like TPM for ChIP-seq
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing BPM
# With bin size and smoothing
bamCoverage -b alignments.bam -o coverage.bw \
--binSize 10 \
--normalizeUsing CPM \
--smoothLength 30
# Extend reads to fragment length
bamCoverage -b alignments.bam -o coverage.bw \
--extendReads 200 \
--normalizeUsiRead more
<!--
COPYRIGHT NOTICE
This file is part of the "Universal Biomedical Skills" project.
Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
All Rights Reserved.
#
This code is proprietary and confidential.
Unauthorized copying of this file, via any medium is strictly prohibited.
#
Provenance: Authenticated by MD BABU MIA
-->
--- name: bio-genome-intervals-bigwig-tracks description: Create and read bigWig browser tracks for visualizing continuous genomic data. Convert bedGraph to bigWig, extract signal values, and generate coverage tracks using UCSC tools and pyBigWig. Use when preparing coverage tracks for genome browsers or extracting signal at specific regions. tool_type: mixed primary_tool: pyBigWig measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
BigWig Tracks
BigWig is an indexed binary format for continuous genomic data. Efficient for genome browsers and programmatic access.
Why BigWig?
| Format | Size | Random Access | Browser Support | |--------|------|---------------|-----------------| | bedGraph | Large | No | Limited | | bigWig | ~10x smaller | Yes (indexed) | Excellent |
Convert bedGraph to bigWig (CLI)
Installation
# UCSC tools conda install -c bioconda ucsc-bedgraphtobigwig ucsc-bigwigtobedgraph # Or download directly wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/bedGraphToBigWig chmod +x bedGraphToBigWig
Basic Conversion
# Sort bedGraph first (required) sort -k1,1 -k2,2n coverage.bedGraph > coverage.sorted.bedGraph # Convert to bigWig bedGraphToBigWig coverage.sorted.bedGraph chrom.sizes output.bw # chrom.sizes format: chr<TAB>size # chr1 248956422 # chr2 242193529
Get Chromosome Sizes
# From FASTA index cut -f1,2 reference.fa.fai > chrom.sizes # Download from UCSC wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes # From BAM header samtools view -H alignments.bam | grep @SQ | sed 's/@SQ\tSN:\|LN://g' > chrom.sizes
Full Workflow
# Generate bedGraph from BAM bedtools genomecov -ibam alignments.bam -bg > coverage.bedGraph # Sort bedGraph sort -k1,1 -k2,2n coverage.bedGraph > coverage.sorted.bedGraph # Convert to bigWig bedGraphToBigWig coverage.sorted.bedGraph hg38.chrom.sizes coverage.bw # Clean up intermediate files rm coverage.bedGraph coverage.sorted.bedGraph
Read BigWig with pyBigWig (Python)
Installation
pip install pyBigWig
Open and Inspect
import pyBigWig
# Open file
bw = pyBigWig.open('coverage.bw')
# File info
print(f'Chromosomes: {bw.chroms()}')
print(f'Header: {bw.header()}')
# Check if file is bigWig (not bigBed)
print(f'Is bigWig: {bw.isBigWig()}')
# Close when done
bw.close()Extract Values
import pyBigWig
bw = pyBigWig.open('coverage.bw')
# Get values for a region (returns numpy array)
values = bw.values('chr1', 1000000, 1001000)
print(f'Mean: {values.mean():.2f}')
print(f'Max: {values.max():.2f}')
# Get specific intervals with values
intervals = bw.intervals('chr1', 1000000, 1001000)
# Returns: [(start, end, value), ...]
for start, end, val in intervals:
print(f'{start}-{end}: {val}')
# Statistics for region
stats = bw.stats('chr1', 1000000, 1001000, type='mean')
print(f'Mean coverage: {stats[0]:.2f}')
# Available stat types: mean, min, max, coverage, std, sum
max_val = bw.stats('chr1', 1000000, 1001000, type='max')
coverage = bw.stats('chr1', 1000000, 1001000, type='coverage')
bw.close()Binned Statistics
import pyBigWig
bw = pyBigWig.open('coverage.bw')
# Get mean values in 100bp bins across region
region_start, region_end = 1000000, 2000000
n_bins = 1000 # 100bp bins
binned = bw.stats('chr1', region_start, region_end, type='mean', nBins=n_bins)
# Returns list of n_bins values
bw.close()Extract for BED Regions
import pyBigWig
import pybedtools
bw = pyBigWig.open('coverage.bw')
bed = pybedtools.BedTool('regions.bed')
# Get mean signal per region
results = []
for interval in bed:
chrom, start, end = interval.chrom, interval.start, interval.end
mean_signal = bw.stats(chrom, start, end, type='mean')[0]
results.append({
'chrom': chrom,
'start': start,
'end': end,
'name': interval.name,
'signal': mean_signal if mean_signal else 0
})
bw.close()
# Convert to DataFrame
import pandas as pd
df = pd.DataFrame(results)
print(df)Create BigWig with pyBigWig
import pyBigWig
# Create new bigWig
bw = pyBigWig.open('output.bw', 'w')
# Add header (chromosome sizes)
bw.addHeader([('chr1', 248956422), ('chr2', 242193529)])
# Add entries (must be sorted by position)
# Method 1: Individual entries
bw.addEntries(['chr1', 'chr1'], [0, 100], ends=[100, 200], values=[1.5, 2.3])
# Method 2: Chromosome at a time (more efficient)
bw.addEntries('chr1', [0, 100, 200], ends=[100, 200, 300], values=[1.5, 2.3, 3.1])
# Method 3: Fixed-width spans (most efficient for dense data)
bw.addEntries('chr2', 0, values=[1.0, 2.0, 3.0, 4.0], span=100, step=100)
# Creates: chr2:0-100=1.0, chr2:100-200=2.0, chr2:200-300=3.0, chr2:300-400=4.0
bw.close()deepTools for BigWig Operations
Installation
conda install -c bioconda deeptools
Generate Normalized BigWig from BAM
# RPKM normalization
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing RPKM
# CPM normalization
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing CPM
# BPM (bins per million) - like TPM for ChIP-seq
bamCoverage -b alignments.bam -o coverage.bw --normalizeUsing BPM
# With bin size and smoothing
bamCoverage -b alignments.bam -o coverage.bw \
--binSize 10 \
--normalizeUsing CPM \
--smoothLength 30
# Extend reads to fragment length
bamCoverage -b alignments.bam -o coverage.bw \
--extendReads 200 \
--normalizeUsiOther skills on openclaw-medical-skills.
adaptyv
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental…
adhd-daily-planner
Time-blind friendly planning, executive function support, and daily structure for ADHD brains. Specializes in realistic time…
aeon
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting,…
agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data,…
More skills from other plugins.
paddleocr-doc-parsing
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
13c-metabolic-flux
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…
Questions about bio-genome-intervals-bigwig-tracks.
- Which coding agents can use bio-genome-intervals-bigwig-tracks?
- bio-genome-intervals-bigwig-tracks installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

