/bio-genome-intervals-coverage-analysis
<!--
$ npx -y skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-coverage-analysis --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/bio-genome-intervals-coverage-analysis
Context preview
The summary Claude sees to decide when to auto-load this skill.
<!--
SKILL.md
bio-genome-intervals-coverage-analysis.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-coverage-analysis description: Calculate read depth and coverage across genomic intervals using bedtools genomecov and coverage. Generate bedGraph files, compute per-base depth, and summarize coverage statistics. Use when assessing sequencing depth, creating coverage tracks, or evaluating target capture efficiency. tool_type: mixed primary_tool: bedtools measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
Coverage Analysis
Calculate coverage and depth across genomic regions using bedtools and pybedtools.
genomecov - Genome-wide Coverage
Per-base Coverage (bedGraph)
# Generate bedGraph from BAM (per-base depth)
bedtools genomecov -ibam alignments.bam -bg > coverage.bedGraph
# Include zero-coverage regions
bedtools genomecov -ibam alignments.bam -bga > coverage_with_zeros.bedGraph
# Split by strand
bedtools genomecov -ibam alignments.bam -bg -strand + > plus_strand.bedGraph
bedtools genomecov -ibam alignments.bam -bg -strand - > minus_strand.bedGraph
# Scale by total reads (RPM normalization)
TOTAL=$(samtools view -c alignments.bam)
SCALE=$(echo "scale=10; 1000000/$TOTAL" | bc)
bedtools genomecov -ibam alignments.bam -bg -scale $SCALE > normalized.bedGraph
# Use only 5' end of reads
bedtools genomecov -ibam alignments.bam -bg -5 > five_prime.bedGraph
# Use only 3' end of reads
bedtools genomecov -ibam alignments.bam -bg -3 > three_prime.bedGraph
Coverage Histogram
# Genome-wide coverage histogram
bedtools genomecov -ibam alignments.bam > coverage_hist.txt
# Output format: chr, depth, bases_at_depth, chr_size, fraction
# genome 0 1000000 10000000 0.1
# genome 1 5000000 10000000 0.5
# ...
Coverage from BED
# Coverage from BED intervals
bedtools genomecov -i regions.bed -g genome.txt -bg > coverage.bedGraph
# BED must be sorted
bedtools sort -i regions.bed | bedtools genomecov -i stdin -g genome.txt -bg > coverage.bedGraph
Python
import pybedtools
# From BAM
bam = pybedtools.BedTool('alignments.bam')
coverage = bam.genome_coverage(bg=True)
coverage.saveas('coverage.bedGraph')
# With zeros
coverage = bam.genome_coverage(bga=True)
# Normalized
coverage = bam.genome_coverage(bg=True, scale=0.001)
# From BED
bed = pybedtools.BedTool('regions.bed')
coverage = bed.genome_coverage(bg=True, g='genome.txt')coverage - Coverage per Feature
Basic Coverage
# Calculate how much of each region in A is covered by B
bedtools coverage -a targets.bed -b reads.bed > coverage_per_target.bed
# Output adds 4 columns: overlaps, bases_covered, region_length, fraction
# chr1 100 200 region1 5 50 100 0.5
# From BAM
bedtools coverage -a targets.bed -b alignments.bam > coverage.bed
# Count only (no coverage calculation)
bedtools coverage -a targets.bed -b reads.bed -counts > counts.bed
Coverage Options
# Mean coverage per region
bedtools coverage -a targets.bed -b alignments.bam -mean > mean_coverage.bed
# Same strand only
bedtools coverage -a targets.bed -b alignments.bam -s > same_strand.bed
# Report depth at each position (histogram)
bedtools coverage -a targets.bed -b alignments.bam -d > per_base.bed
# Require minimum overlap
bedtools coverage -a targets.bed -b reads.bed -f 0.5 > min_overlap.bed
# Split alignments (for RNA-seq)
bedtools coverage -a exons.bed -b alignments.bam -split > exon_coverage.bed
Python
import pybedtools
a = pybedtools.BedTool('targets.bed')
b = pybedtools.BedTool('alignments.bam')
# Basic coverage
result = a.coverage(b)
# Mean coverage
result = a.coverage(b, mean=True)
# Counts only
result = a.coverage(b, counts=True)
# Per-base depth
result = a.coverage(b, d=True)
result.saveas('coverage.bed')multicov - Counts Across Multiple BAMs
# Count reads in regions across multiple samples
bedtools multicov -bams sample1.bam sample2.bam sample3.bam -bed regions.bed > counts.txt
# Require mapping quality
bedtools multicov -bams sample1.bam sample2.bam -bed regions.bed -q 30 > counts.txt
# Split alignments
bedtools multicov -bams sample1.bam sample2.bam -bed regions.bed -s -split > counts.txt
Calculate Coverage Statistics
Mean/Median Depth
import pybedtools
import pandas as pd
import numpy as np
# Load coverage BED (from bedtools coverage -d)
bed = pybedtools.BedTool('per_base_coverage.bed')
df = bed.to_dataframe()
# Calculate stats per region
stats = df.groupby(['chrom', 'start', 'end']).agg({
'score': ['mean', 'median', 'std', 'max']
}).reset_index()
print(stats)Coverage Distribution
import pybedtools
# Get coverage histogram
bam = pybedtools.BedTool('alignments.bam')
hist = bam.genome_coverage()
# Parse histogram
depths = []
fractions = []
for line in open(hist.fn):
fields = line.strip().split('\t')
if fields[0] == 'genome':
depths.append(int(fields[1]))
fractions.append(float(fields[4]))
# Calculate metrics
import numpy as np
mean_depth = sum(d * f for d, f in zip(depths, fractions))
print(f'Mean depth: {mean_depth:.1f}x')Common Patterns
Target Region Coverage Summary
# Get per-region coverage stats
bedtools coverage -a targets.bed -b alignments.bam | \
awk -v OFS='\t' '{
mean = ($NF > 0) ? $5/$6 : 0;
print $1, $2, $3, $4, $7, mean
}' > summary.bed
# Regions with low coverage
bedtools coverage -a targets.bed -b alignments.bam | \
awk '$NF < 0.8' > low_coverage.bedNormalize to CPM (Counts Per M
Read 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-coverage-analysis description: Calculate read depth and coverage across genomic intervals using bedtools genomecov and coverage. Generate bedGraph files, compute per-base depth, and summarize coverage statistics. Use when assessing sequencing depth, creating coverage tracks, or evaluating target capture efficiency. tool_type: mixed primary_tool: bedtools measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
Coverage Analysis
Calculate coverage and depth across genomic regions using bedtools and pybedtools.
genomecov - Genome-wide Coverage
Per-base Coverage (bedGraph)
# Generate bedGraph from BAM (per-base depth) bedtools genomecov -ibam alignments.bam -bg > coverage.bedGraph # Include zero-coverage regions bedtools genomecov -ibam alignments.bam -bga > coverage_with_zeros.bedGraph # Split by strand bedtools genomecov -ibam alignments.bam -bg -strand + > plus_strand.bedGraph bedtools genomecov -ibam alignments.bam -bg -strand - > minus_strand.bedGraph # Scale by total reads (RPM normalization) TOTAL=$(samtools view -c alignments.bam) SCALE=$(echo "scale=10; 1000000/$TOTAL" | bc) bedtools genomecov -ibam alignments.bam -bg -scale $SCALE > normalized.bedGraph # Use only 5' end of reads bedtools genomecov -ibam alignments.bam -bg -5 > five_prime.bedGraph # Use only 3' end of reads bedtools genomecov -ibam alignments.bam -bg -3 > three_prime.bedGraph
Coverage Histogram
# Genome-wide coverage histogram bedtools genomecov -ibam alignments.bam > coverage_hist.txt # Output format: chr, depth, bases_at_depth, chr_size, fraction # genome 0 1000000 10000000 0.1 # genome 1 5000000 10000000 0.5 # ...
Coverage from BED
# Coverage from BED intervals bedtools genomecov -i regions.bed -g genome.txt -bg > coverage.bedGraph # BED must be sorted bedtools sort -i regions.bed | bedtools genomecov -i stdin -g genome.txt -bg > coverage.bedGraph
Python
import pybedtools
# From BAM
bam = pybedtools.BedTool('alignments.bam')
coverage = bam.genome_coverage(bg=True)
coverage.saveas('coverage.bedGraph')
# With zeros
coverage = bam.genome_coverage(bga=True)
# Normalized
coverage = bam.genome_coverage(bg=True, scale=0.001)
# From BED
bed = pybedtools.BedTool('regions.bed')
coverage = bed.genome_coverage(bg=True, g='genome.txt')coverage - Coverage per Feature
Basic Coverage
# Calculate how much of each region in A is covered by B bedtools coverage -a targets.bed -b reads.bed > coverage_per_target.bed # Output adds 4 columns: overlaps, bases_covered, region_length, fraction # chr1 100 200 region1 5 50 100 0.5 # From BAM bedtools coverage -a targets.bed -b alignments.bam > coverage.bed # Count only (no coverage calculation) bedtools coverage -a targets.bed -b reads.bed -counts > counts.bed
Coverage Options
# Mean coverage per region bedtools coverage -a targets.bed -b alignments.bam -mean > mean_coverage.bed # Same strand only bedtools coverage -a targets.bed -b alignments.bam -s > same_strand.bed # Report depth at each position (histogram) bedtools coverage -a targets.bed -b alignments.bam -d > per_base.bed # Require minimum overlap bedtools coverage -a targets.bed -b reads.bed -f 0.5 > min_overlap.bed # Split alignments (for RNA-seq) bedtools coverage -a exons.bed -b alignments.bam -split > exon_coverage.bed
Python
import pybedtools
a = pybedtools.BedTool('targets.bed')
b = pybedtools.BedTool('alignments.bam')
# Basic coverage
result = a.coverage(b)
# Mean coverage
result = a.coverage(b, mean=True)
# Counts only
result = a.coverage(b, counts=True)
# Per-base depth
result = a.coverage(b, d=True)
result.saveas('coverage.bed')multicov - Counts Across Multiple BAMs
# Count reads in regions across multiple samples bedtools multicov -bams sample1.bam sample2.bam sample3.bam -bed regions.bed > counts.txt # Require mapping quality bedtools multicov -bams sample1.bam sample2.bam -bed regions.bed -q 30 > counts.txt # Split alignments bedtools multicov -bams sample1.bam sample2.bam -bed regions.bed -s -split > counts.txt
Calculate Coverage Statistics
Mean/Median Depth
import pybedtools
import pandas as pd
import numpy as np
# Load coverage BED (from bedtools coverage -d)
bed = pybedtools.BedTool('per_base_coverage.bed')
df = bed.to_dataframe()
# Calculate stats per region
stats = df.groupby(['chrom', 'start', 'end']).agg({
'score': ['mean', 'median', 'std', 'max']
}).reset_index()
print(stats)Coverage Distribution
import pybedtools
# Get coverage histogram
bam = pybedtools.BedTool('alignments.bam')
hist = bam.genome_coverage()
# Parse histogram
depths = []
fractions = []
for line in open(hist.fn):
fields = line.strip().split('\t')
if fields[0] == 'genome':
depths.append(int(fields[1]))
fractions.append(float(fields[4]))
# Calculate metrics
import numpy as np
mean_depth = sum(d * f for d, f in zip(depths, fractions))
print(f'Mean depth: {mean_depth:.1f}x')Common Patterns
Target Region Coverage Summary
# Get per-region coverage stats
bedtools coverage -a targets.bed -b alignments.bam | \
awk -v OFS='\t' '{
mean = ($NF > 0) ? $5/$6 : 0;
print $1, $2, $3, $4, $7, mean
}' > summary.bed
# Regions with low coverage
bedtools coverage -a targets.bed -b alignments.bam | \
awk '$NF < 0.8' > low_coverage.bedNormalize to CPM (Counts Per M
The largest open-source medical AI skill library for OpenClaw.
Other skills on openclaw-medical-skills.
adaptyv
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding…
adhd-daily-planner
Time-blind friendly planning, executive function support, and daily structure for ADHD brains. Specializes in realistic time estimation, dopamine-aware task…
aeon
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection,…
agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…

