/bio-genome-intervals-interval-arithmetic
<!--
$ npx -y skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-genome-intervals-interval-arithmetic --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-interval-arithmetic
Context preview
The summary Claude sees to decide when to auto-load this skill.
<!--
SKILL.md
bio-genome-intervals-interval-arithmetic.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-interval-arithmetic description: Core interval arithmetic operations including intersect, subtract, merge, complement, map, and groupby using bedtools and pybedtools. Use when finding overlapping regions, removing overlaps, combining adjacent intervals, or transferring annotations between interval files. 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
---
Interval Arithmetic
Core set operations on genomic intervals using bedtools (CLI) and pybedtools (Python).
Intersect - Find Overlapping Regions
CLI
# Find overlapping intervals (report A entries that overlap B)
bedtools intersect -a peaks.bed -b genes.bed > overlapping.bed
# Report original A intervals (default behavior)
bedtools intersect -a peaks.bed -b genes.bed > peaks_in_genes.bed
# Report overlapping portion only
bedtools intersect -a peaks.bed -b genes.bed > overlap_regions.bed
# Report both A and B fields
bedtools intersect -a peaks.bed -b genes.bed -wa -wb > with_gene_info.bed
# Write original A entries that overlap B (-u for unique)
bedtools intersect -a peaks.bed -b genes.bed -u > peaks_overlapping_genes.bed
# Report A entries that do NOT overlap B
bedtools intersect -a peaks.bed -b genes.bed -v > peaks_not_in_genes.bed
# Require minimum overlap fraction (50% of A must overlap)
bedtools intersect -a peaks.bed -b genes.bed -f 0.5 > min_50pct.bed
# Reciprocal overlap (both A and B must have 50% overlap)
bedtools intersect -a peaks.bed -b genes.bed -f 0.5 -r > reciprocal_50pct.bed
# Count overlaps
bedtools intersect -a peaks.bed -b genes.bed -c > with_counts.bed
# Multiple B files
bedtools intersect -a peaks.bed -b genes.bed promoters.bed enhancers.bed -names genes promoters enhancers > multi.bed
Python
import pybedtools
a = pybedtools.BedTool('peaks.bed')
b = pybedtools.BedTool('genes.bed')
# Basic intersection
result = a.intersect(b)
# Keep original A entries that overlap
result = a.intersect(b, u=True)
# Report both A and B
result = a.intersect(b, wa=True, wb=True)
# Non-overlapping (inverse)
result = a.intersect(b, v=True)
# Minimum overlap fraction
result = a.intersect(b, f=0.5)
# Reciprocal overlap
result = a.intersect(b, f=0.5, r=True)
# Count overlaps
result = a.intersect(b, c=True)
# Save result
result.saveas('output.bed')Subtract - Remove Overlapping Regions
CLI
# Remove portions of A that overlap B
bedtools subtract -a regions.bed -b exclude.bed > remaining.bed
# Remove entire A interval if ANY overlap with B
bedtools subtract -a regions.bed -b exclude.bed -A > non_overlapping.bed
# Require minimum overlap before removal
bedtools subtract -a regions.bed -b exclude.bed -f 0.5 > subtract_50pct.bed
Python
import pybedtools
a = pybedtools.BedTool('regions.bed')
b = pybedtools.BedTool('exclude.bed')
# Basic subtraction (remove overlapping portions)
result = a.subtract(b)
# Remove entire interval if any overlap
result = a.subtract(b, A=True)
# Require minimum overlap
result = a.subtract(b, f=0.5)
result.saveas('remaining.bed')Merge - Combine Overlapping/Adjacent Intervals
CLI
# Merge overlapping intervals (input must be sorted)
bedtools sort -i peaks.bed | bedtools merge > merged.bed
# Merge intervals within N bp of each other
bedtools sort -i peaks.bed | bedtools merge -d 100 > merged_100bp.bed
# Report number of merged intervals
bedtools sort -i peaks.bed | bedtools merge -c 1 -o count > merged_counts.bed
# Aggregate columns (e.g., concatenate names, sum scores)
bedtools sort -i peaks.bed | bedtools merge -c 4,5 -o collapse,sum > merged_agg.bed
# Keep max score
bedtools sort -i peaks.bed | bedtools merge -c 5 -o max > merged_max.bed
# Strand-specific merge
bedtools sort -i peaks.bed | bedtools merge -s > merged_stranded.bed
Python
import pybedtools
bed = pybedtools.BedTool('peaks.bed')
# Basic merge (auto-sorts)
merged = bed.sort().merge()
# Merge within distance
merged = bed.sort().merge(d=100)
# Count merged intervals
merged = bed.sort().merge(c=1, o='count')
# Aggregate columns (collapse names, sum scores)
merged = bed.sort().merge(c='4,5', o='collapse,sum')
# Strand-specific
merged = bed.sort().merge(s=True)
merged.saveas('merged.bed')Complement - Get Uncovered Regions
CLI
# Get regions NOT covered by intervals (requires genome file)
bedtools complement -i covered.bed -g genome.txt > uncovered.bed
# genome.txt format: chr<TAB>size
# chr1 248956422
# chr2 242193529
# ...
Python
import pybedtools
bed = pybedtools.BedTool('covered.bed')
genome = 'genome.txt' # or dict: {'chr1': (0, 248956422), ...}
# Get complement
uncovered = bed.complement(g=genome)
uncovered.saveas('uncovered.bed')
# Using genome dict
genome_dict = pybedtools.chromsizes('hg38') # Built-in genome sizes
uncovered = bed.complement(genome=genome_dict)Cluster - Group Overlapping Intervals
CLI
# Assign cluster IDs to overlapping intervals
bedtools sort -i peaks.bed | bedtools cluster > clustered.bed
# Cluster within distance
bedtools sort -i peaks.bed | bedtools cluster -d 100 > clustered_100bp.bed
Python
import pybedtools
bed = pybedtools.BedTool('peaks.bed')
clustered = bed.sort().cluster()
clustered.saveas('clustered.bed')Multiinter - Find Multi-way Overlaps
CLI
# Find regions covered by multiple files
bedtools multiinter -i sample1.bed sample2.bed sample3.bed > multi_over
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-interval-arithmetic description: Core interval arithmetic operations including intersect, subtract, merge, complement, map, and groupby using bedtools and pybedtools. Use when finding overlapping regions, removing overlaps, combining adjacent intervals, or transferring annotations between interval files. 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
---
Interval Arithmetic
Core set operations on genomic intervals using bedtools (CLI) and pybedtools (Python).
Intersect - Find Overlapping Regions
CLI
# Find overlapping intervals (report A entries that overlap B) bedtools intersect -a peaks.bed -b genes.bed > overlapping.bed # Report original A intervals (default behavior) bedtools intersect -a peaks.bed -b genes.bed > peaks_in_genes.bed # Report overlapping portion only bedtools intersect -a peaks.bed -b genes.bed > overlap_regions.bed # Report both A and B fields bedtools intersect -a peaks.bed -b genes.bed -wa -wb > with_gene_info.bed # Write original A entries that overlap B (-u for unique) bedtools intersect -a peaks.bed -b genes.bed -u > peaks_overlapping_genes.bed # Report A entries that do NOT overlap B bedtools intersect -a peaks.bed -b genes.bed -v > peaks_not_in_genes.bed # Require minimum overlap fraction (50% of A must overlap) bedtools intersect -a peaks.bed -b genes.bed -f 0.5 > min_50pct.bed # Reciprocal overlap (both A and B must have 50% overlap) bedtools intersect -a peaks.bed -b genes.bed -f 0.5 -r > reciprocal_50pct.bed # Count overlaps bedtools intersect -a peaks.bed -b genes.bed -c > with_counts.bed # Multiple B files bedtools intersect -a peaks.bed -b genes.bed promoters.bed enhancers.bed -names genes promoters enhancers > multi.bed
Python
import pybedtools
a = pybedtools.BedTool('peaks.bed')
b = pybedtools.BedTool('genes.bed')
# Basic intersection
result = a.intersect(b)
# Keep original A entries that overlap
result = a.intersect(b, u=True)
# Report both A and B
result = a.intersect(b, wa=True, wb=True)
# Non-overlapping (inverse)
result = a.intersect(b, v=True)
# Minimum overlap fraction
result = a.intersect(b, f=0.5)
# Reciprocal overlap
result = a.intersect(b, f=0.5, r=True)
# Count overlaps
result = a.intersect(b, c=True)
# Save result
result.saveas('output.bed')Subtract - Remove Overlapping Regions
CLI
# Remove portions of A that overlap B bedtools subtract -a regions.bed -b exclude.bed > remaining.bed # Remove entire A interval if ANY overlap with B bedtools subtract -a regions.bed -b exclude.bed -A > non_overlapping.bed # Require minimum overlap before removal bedtools subtract -a regions.bed -b exclude.bed -f 0.5 > subtract_50pct.bed
Python
import pybedtools
a = pybedtools.BedTool('regions.bed')
b = pybedtools.BedTool('exclude.bed')
# Basic subtraction (remove overlapping portions)
result = a.subtract(b)
# Remove entire interval if any overlap
result = a.subtract(b, A=True)
# Require minimum overlap
result = a.subtract(b, f=0.5)
result.saveas('remaining.bed')Merge - Combine Overlapping/Adjacent Intervals
CLI
# Merge overlapping intervals (input must be sorted) bedtools sort -i peaks.bed | bedtools merge > merged.bed # Merge intervals within N bp of each other bedtools sort -i peaks.bed | bedtools merge -d 100 > merged_100bp.bed # Report number of merged intervals bedtools sort -i peaks.bed | bedtools merge -c 1 -o count > merged_counts.bed # Aggregate columns (e.g., concatenate names, sum scores) bedtools sort -i peaks.bed | bedtools merge -c 4,5 -o collapse,sum > merged_agg.bed # Keep max score bedtools sort -i peaks.bed | bedtools merge -c 5 -o max > merged_max.bed # Strand-specific merge bedtools sort -i peaks.bed | bedtools merge -s > merged_stranded.bed
Python
import pybedtools
bed = pybedtools.BedTool('peaks.bed')
# Basic merge (auto-sorts)
merged = bed.sort().merge()
# Merge within distance
merged = bed.sort().merge(d=100)
# Count merged intervals
merged = bed.sort().merge(c=1, o='count')
# Aggregate columns (collapse names, sum scores)
merged = bed.sort().merge(c='4,5', o='collapse,sum')
# Strand-specific
merged = bed.sort().merge(s=True)
merged.saveas('merged.bed')Complement - Get Uncovered Regions
CLI
# Get regions NOT covered by intervals (requires genome file) bedtools complement -i covered.bed -g genome.txt > uncovered.bed # genome.txt format: chr<TAB>size # chr1 248956422 # chr2 242193529 # ...
Python
import pybedtools
bed = pybedtools.BedTool('covered.bed')
genome = 'genome.txt' # or dict: {'chr1': (0, 248956422), ...}
# Get complement
uncovered = bed.complement(g=genome)
uncovered.saveas('uncovered.bed')
# Using genome dict
genome_dict = pybedtools.chromsizes('hg38') # Built-in genome sizes
uncovered = bed.complement(genome=genome_dict)Cluster - Group Overlapping Intervals
CLI
# Assign cluster IDs to overlapping intervals bedtools sort -i peaks.bed | bedtools cluster > clustered.bed # Cluster within distance bedtools sort -i peaks.bed | bedtools cluster -d 100 > clustered_100bp.bed
Python
import pybedtools
bed = pybedtools.BedTool('peaks.bed')
clustered = bed.sort().cluster()
clustered.saveas('clustered.bed')Multiinter - Find Multi-way Overlaps
CLI
# Find regions covered by multiple files bedtools multiinter -i sample1.bed sample2.bed sample3.bed > multi_over
The largest open-source medical AI skill library for OpenClaw.
Other skills on openclaw-medical-skills.
- /aav-vector-design-agent
<!--
Open skill - /adaptyv
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use
Open skill - /adhd-daily-planner
Time-blind friendly planning, executive function support, and daily structure for ADHD brains. Specializes in realistic time estimation, dopamine-aware task design, and building systems that
Open skill - /aeon
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations
Open skill - /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 whenever a browser would be useful, not just when the user explicitly asks.
Open skill - /agentd-drug-discovery
<!--
Open skill

