Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Quantifies alternative splicing events (PSI/percent spliced in) from RNA-seq using SUPPA2 from transcript TPM or rMATS-turbo from BAM files. Calculates inclusion levels for skipped exons, alternative splice sites, mutually exclusive exons, and retained introns. Use when measuring splice site usage or isoform ratios from RNA-seq data.
.claude/skills/bio-splicing-quantification/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-05 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
Reference examples tested with: kallisto 0.50+, pandas 2.2+
Before using code patterns, verify installed versions match. If versions differ:
pip show <package> then help(module.function) to check signatures<tool> --version then <tool> --help to confirm flagsIf code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.
Quantify alternative splicing events as PSI (percent spliced in) values from RNA-seq data.
| Type | Code | Description | |------|------|-------------| | Skipped exon | SE | Exon inclusion/exclusion | | Alternative 5' splice site | A5SS | Alternative donor site | | Alternative 3' splice site | A3SS | Alternative acceptor site | | Mutually exclusive exons | MXE | One of two exons included | | Retained intron | RI | Intron retention |
Goal: Calculate PSI values for all splicing event types from transcript-level quantification.
Approach: Generate event definitions from GTF annotation, then compute per-event PSI from transcript TPM using SUPPA2.
"Quantify splicing from RNA-seq" -> Extract splicing events from annotation, then calculate inclusion ratios from transcript abundance.
suppa.py generateEvents + suppa.py psiPerEvent (SUPPA2)rmats.py with --statoff (rMATS-turbo, BAM-based)pythonimport subprocess import pandas as pd gtf_file = 'annotation.gtf' tpm_file = 'transcript_tpm.tsv' output_prefix = 'events' # Step 1: Generate splicing events from annotation subprocess.run([ 'suppa.py', 'generateEvents', '-i', gtf_file, '-o', output_prefix, '-f', 'ioe', # IOE format for PSI calculation '-e', 'SE', 'SS', 'MX', 'RI', 'FL' # All event types ], check=True) # Step 2: Calculate PSI values for event_type in ['SE', 'A5', 'A3', 'MX', 'RI']: ioe_file = f'{output_prefix}_{event_type}_strict.ioe' subprocess.run([ 'suppa.py', 'psiPerEvent', '-i', ioe_file, '-e', tpm_file, '-o', f'psi_{event_type}' ], check=True) # Load and examine PSI values psi_se = pd.read_csv('psi_SE.psi', sep='\t', index_col=0) print(f'Quantified {len(psi_se)} skipped exon events') print(psi_se.head())
Goal: Quantify splicing events directly from aligned BAM files using junction read counting.
Approach: Run rMATS-turbo on paired BAM groups with annotation, then parse inclusion level columns from output.
bash# rMATS-turbo for BAM-based quantification rmats.py \ --b1 condition1_bams.txt \ --b2 condition2_bams.txt \ --gtf annotation.gtf \ -t paired \ --readLength 150 \ --nthread 8 \ --od output_dir \ --tmp tmp_dir \ --statoff # Use for quantification only, no differential testing
pythonimport pandas as pd # Load rMATS output se_jc = pd.read_csv('output_dir/SE.MATS.JC.txt', sep='\t') # Calculate average PSI across samples # IncLevel columns contain PSI values per sample inc_cols = [c for c in se_jc.columns if c.startswith('IncLevel')] se_jc['mean_PSI'] = se_jc[inc_cols].mean(axis=1) # Filter for reliable events (sufficient junction reads) # Minimum 10-20 junction reads recommended for reliable PSI se_jc['total_junction_reads'] = se_jc['IJC_SAMPLE_1'] + se_jc['SJC_SAMPLE_1'] reliable_events = se_jc[se_jc['total_junction_reads'] >= 20] print(f'{len(reliable_events)} events with sufficient coverage')
| Metric | Threshold | Rationale | |--------|-----------|-----------| | Junction reads | >= 10-20 | Minimum for reliable PSI estimation | | PSI range | 0.1-0.9 | Events outside this range are nearly constitutive | | Missing values | < 50% samples | High missingness indicates low expression |
PSI values range from 0 to 1:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
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. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.