Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Call protein-RNA binding site peaks from CLIP-seq data using CLIPper, PureCLIP, or Piranha. Use when identifying RBP binding sites from aligned CLIP reads.
.claude/skills/bio-clip-seq-clip-peak-calling/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 124% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 392% | 0% |
<!--
#
#
-->
bash# Basic peak calling clipper \ -b deduped.bam \ -s hg38 \ -o peaks.bed \ --save-pickle # With FDR threshold clipper \ -b deduped.bam \ -s hg38 \ -o peaks.bed \ --FDR 0.05 \ --superlocal # Specify gene annotations clipper \ -b deduped.bam \ -s hg38 \ --gene genes.bed \ -o peaks.bed
| Option | Description | |--------|-------------| | -b | Input BAM file | | -s | Species (hg38, mm10) | | -o | Output BED file | | --FDR | FDR threshold (default 0.05) | | --superlocal | Use superlocal background | | --gene | Custom gene annotation BED | | --save-pickle | Save intermediate data |
PureCLIP uses an HMM to model crosslink sites, incorporating enrichment and truncation signals.
bash# Installation conda install -c bioconda pureclip # Basic peak calling pureclip \ -i deduped.bam \ -bai deduped.bam.bai \ -g genome.fa \ -o crosslink_sites.bed \ -or binding_regions.bed \ -nt 4 # -nt 4: Number of threads. Adjust based on CPU cores. # -o: Single-nucleotide crosslink sites # -or: Broader binding regions
| Option | Description | |--------|-------------| | -i | Input BAM file | | -bai | BAM index file | | -g | Reference genome FASTA | | -o | Crosslink sites output | | -or | Binding regions output | | -nt | Number of threads | | -iv | Interval file to restrict analysis | | -dm | Min distance for merging |
bash# With SMInput control BAM pureclip \ -i clip.bam \ -bai clip.bam.bai \ -g genome.fa \ -ibam sminput.bam \ -ibai sminput.bam.bai \ -o crosslinks.bed \ -or regions.bed \ -nt 8 # -ibam/-ibai: Input control BAM for background modeling
bash# Crosslink sites BED contains: # chr start end name score strand # Score interpretation: # Higher scores = more confident crosslink sites # Filter by score # score>=3: Medium confidence. Use 5+ for high confidence. awk '$5 >= 3' crosslink_sites.bed > filtered_sites.bed
bash# eCLIP (recommended settings) pureclip -i eclip.bam -bai eclip.bam.bai -g genome.fa \ -o sites.bed -or regions.bed -nt 4 -dm 8 # iCLIP (single-nucleotide resolution) pureclip -i iclip.bam -bai iclip.bam.bai -g genome.fa \ -o sites.bed -or regions.bed -nt 4 # PAR-CLIP (T-to-C transitions) pureclip -i parclip.bam -bai parclip.bam.bai -g genome.fa \ -o sites.bed -or regions.bed -nt 4
bash# Basic usage Piranha -s deduped.bam -o peaks.bed # With p-value threshold Piranha -s deduped.bam -o peaks.bed -p 0.01 # Stranded analysis Piranha -s deduped.bam -o peaks.bed -p 0.01 -u # Zero-truncated negative binomial Piranha -s deduped.bam -o peaks.bed -d ZeroTruncatedNegativeBinomial
bash# PAR-CLIP specific caller peakachu adaptive \ -c control.bam \ -t treatment.bam \ -r reference.fa \ -o peakachu_peaks.gff
bash# Use narrow peak calling mode macs3 callpeak \ -t deduped.bam \ -f BAM \ -g hs \ -n clip_peaks \ --nomodel \ --extsize 50 \ -q 0.01
bash# Split BAM by strand samtools view -h -F 16 deduped.bam | samtools view -Sb - > plus_strand.bam samtools view -h -f 16 deduped.bam | samtools view -Sb - > minus_strand.bam # Call peaks on each strand clipper -b plus_strand.bam -s hg38 -o peaks_plus.bed clipper -b minus_strand.bam -s hg38 -o peaks_minus.bed # Combine cat peaks_plus.bed peaks_minus.bed | sort -k1,1 -k2,2n > peaks_all.bed
bash# By score awk '$5 >= 10' peaks.bed > peaks_filtered.bed # By size awk '($3 - $2) >= 20 && ($3 - $2) <= 200' peaks.bed > peaks_sized.bed # By read count (if in name field) awk '$5 >= 5' peaks.bed > peaks_min5reads.bed
bash# Use bedtools to find consensus peaks bedtools intersect -a rep1_peaks.bed -b rep2_peaks.bed -wa | \ sort -u > consensus_peaks.bed # Require overlap in N replicates bedtools multiinter -i rep1.bed rep2.bed rep3.bed | \ awk '$4 >= 2' | \ bedtools merge > consensus_peaks.bed
pythonimport pandas as pd def load_clip_peaks(bed_path): peaks = pd.read_csv(bed_path, sep='\t', header=None, names=['chrom', 'start', 'end', 'name', 'score', 'strand']) return peaks def peak_stats(peaks): stats = { 'n_peaks': len(peaks), 'mean_width': (peaks['end'] - peaks['start']).mean(), 'median_score': peaks['score'].median(), 'peaks_per_chrom': peaks.groupby('chrom').size().to_dict() } return stats peaks = load_clip_peaks('peaks.bed') print(peak_stats(peaks))
| Metric | Good Value | Description | |--------|------------|-------------| | Peak count | 1,000-50,000 | Depends on RBP | | Peak width | 20-100 nt | Typical for RBP footprint | | FRiP | >0.1 | Fraction reads in peaks |
bash# Reads in peaks reads_in_peaks=$(bedtools intersect -a deduped.bam -b peaks.bed -u | samtools view -c -) # Total reads total_reads=$(samtools view -c deduped.bam) # FRiP frip=$(echo "scale=4; $reads_in_peaks / $total_reads" | bc) echo "FRiP: $frip"
<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 17,518 | 4,492 | -74% | 1 | 1 | 0% | 1,317 | 2,950 | +124% | 0 | 0 | — |
case-06 | fail→pass | 14,140 | 2,619 | -81% | 1 | 1 | 0% | 1,248 | 2,502 | +100% | 0 | 0 | — |
case-07 | fail→pass | 19,967 | 3,977 | -80% | 1 | 1 | 0% | 1,448 | 2,726 | +88% | 0 | 0 | — |
case-16 | fail→pass | 9,727 | 2,295 | -76% | 1 | 1 | 0% | 1,598 | 2,438 | +53% | 0 | 0 | — |
case-17 | fail→pass | 2,850 | 2,972 | +4% | 1 | 1 | 0% | 522 | 2,567 | +392% | 0 | 0 | — |
case-18 | pass→pass | 4,477 | 2,216 | -51% | 1 | 1 | 0% | 779 | 2,443 | +214% | 0 | 0 | — |
case-19 | pass→pass | 7,530 | 2,713 | -64% | 1 | 1 | 0% | 1,464 | 2,565 | +75% | 0 | 0 | — |
case-20 | fail→pass | 14,151 | 9,330 | -34% | 1 | 1 | 0% | 2,710 | 3,933 | +45% | 0 | 0 | — |
case-21 | fail→fail | 13,369 | 9,499 | -29% | 1 | 1 | 0% | 2,373 | 3,693 | +56% | 0 | 0 | — |
case-22 | fail→fail | 16,476 | 13,107 | -20% | 1 | 1 | 0% | 3,236 | 4,664 | +44% | 0 | 0 | — |
case-02 | pass→pass | 13,177 | 8,658 | -34% | 1 | 1 | 0% | 2,644 | 3,833 | +45% | 0 | 0 | — |
case-03 | fail→pass | 4,781 | 2,956 | -38% | 1 | 1 | 0% | 946 | 2,589 | +174% | 0 | 0 | — |
case-04 | fail→pass | 17,678 | 3,651 | -79% | 1 | 1 | 0% | 1,086 | 2,773 | +155% | 0 | 0 | — |
case-05 | pass→pass | 6,730 | 4,382 | -35% | 1 | 1 | 0% | 1,293 | 2,906 | +125% | 0 | 0 | — |
case-08 | pass→pass | 7,276 | 3,031 | -58% | 1 | 1 | 0% | 1,356 | 2,636 | +94% | 0 | 0 | — |
case-09 | pass→pass | 10,313 | 9,534 | -8% | 1 | 1 | 0% | 2,100 | 3,969 | +89% | 0 | 0 | — |
case-10 | pass→pass | 19,725 | 4,711 | -76% | 1 | 1 | 0% | 3,966 | 2,950 | -26% | 0 | 0 | — |
case-11 | pass→pass | 5,681 | 2,349 | -59% | 1 | 1 | 0% | 1,121 | 2,473 | +121% | 0 | 0 | — |
case-12 | pass→pass | 7,649 | 5,205 | -32% | 1 | 1 | 0% | 1,748 | 3,231 | +85% | 0 | 0 | — |
case-13 | pass→pass | 7,427 | 2,728 | -63% | 1 | 1 | 0% | 1,448 | 2,630 | +82% | 0 | 0 | — |
case-14 | fail→pass | 11,368 | 2,207 | -81% | 1 | 1 | 0% | 2,125 | 2,409 | +13% | 0 | 0 | — |
case-15 | fail→pass | 16,367 | 2,732 | -83% | 1 | 1 | 0% | 3,304 | 2,517 | -24% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/24/2026 | +45% |
Other measured skills in the registry, with their headline benchmark lift.