Variant Analysis using AlphaGenome
Prerequisites
uv: Read the uv skill and follow its Setup instructions to ensure
uv is installed and on PATH.
- User Notification: If
.licenses/alphagenome_single_variant_analysis_LICENSE.txt does not already
exist in the workspace root directory then (1) prominently notify the user
to check the terms at https://deepmind.google.com/science/alphagenome/, then
(2) create the file recording the notification text and timestamp.
.env file: Make sure the .env file exists in your home directory.
Create one if it does not exist.
ALPHAGENOME_API_KEY: This skill requires an API key to function.
You can register for a key at https://deepmind.google.com/science/alphagenome/.
You MUST use the safe credentials protocol in the credentials skill to
check for and request this key if this skill looks relevant to the user's request.
Core Rules
- NEVER run
python3 or python3 -c directly. The system Python does not
necessarily have pandas, numpy, and other key dependencies. ALWAYS use uv run to run ALL Python code — including scripts, ad-hoc analysis files, and
one-liners. Do not attempt to pip install or create new venvs — uv
manages an isolated enprojectnment automatically.
- Offline Only: NEVER use external APIs (e.g., MyGene.info, Ensembl REST)
for gene/transcript lookup. Use
lookup_gene_info.py with the local GTF. If
it fails, fix the enprojectnment/paths, do not switch to external APIs.
- API Key is required:
ALPHAGENOME_API_KEY must be set before running
any script.
- Notification: If this skill is used, ensure this is mentioned in the
output.
- Report Format: Always use the templates in
docs/report-templates.md
for generating analysis reports, and ensure to include the table of top hits
from the discovery scan.
Enprojectnment Setup & Troubleshooting
Python Enprojectnment
All scripts must be executed using uv run, which manages an isolated virtual
enprojectnment with the correct dependencies via uv.
uv run <script_name> [args...]
For ad-hoc scripts (e.g., inline analysis code saved to a temp file), pass the
full path instead of a short name:
uv run --project $SKILL_DIR /tmp/my_analysis.py --arg1 val1
[!NOTE] The first invocation resolves and installs dependencies (10s).
Subsequent runs use the cached enprojectnment and start instantly. The cache
lives in `/.cache/uv/`.
Common Issues
- Column Names:
tidy_scores and metadata often use gene_name (not
gene_symbol) and output_type (not modality). Always inspect
df.columns before filtering.
- Large Genes: Genes > 500kb (e.g.,
USH2A) break the whole_gene view.
Use --view detail or manual regional windows instead.
- Sashimi Strand Error:
plot_components.Sashimi does NOT accept a
strand argument directly. Filter input tracks instead.
- KeyError: 'ontology_curie': Not all tracks have
ontology_curie. Check
track.metadata.columns before filtering.
- Python Path: If
exec: "python": executable file not found occurs,
ensure you are using uv run instead of bare python/python3.
- NotImplementedError (pandas): "iLocation based boolean indexing on an
integer type is not available". This occurs when using boolean masks with
.iloc on integer-indexed DataFrames in newer pandas versions. Fix:
Convert boolean masks to integer indices using np.flatnonzero(mask).
- GTF Feather Case Sensitivity: The AlphaGenome GTF Feather file uses
Capitalized column names (
Feature, Start, End, Strand) unlike
standard GTF files. Always check df.columns if getting KeyErrors.
score_variant ontology filtering: score_variant does NOT accept
ontology_terms as an argument. You must filter the returned AnnData
objects manually by inspecting adata.var columns. In contrast,
predict_variant DOES accept ontology_terms directly.
- Sashimi Zoom Logic: To ensure "skipping" arcs are visible, expand the
zoom to include the flanking exons rather than relying on junction
overlap alone.
- Junction Scores: Raw
Junction objects from prediction may be simple
Intervals. Use junction_data.get_junctions_to_plot(predictions=..., name=...) to retrieve objects with the .k (abundance/score) attribute.
uv Not Found: If exec: uv: not found, follow the installation
instructions in Prerequisites.
- Registry Authentication Error (401): If
uv fails with 401 Unauthorized
for a private registry, set UV_INDEX_URL=https://pypi.org/simple before
running the script.
References
- alphagenome-api.md — API reference and code
patterns
- interpretation-guide.md — Interpretation
guide, score magnitude rules, ISM, and checklist.
- report-templates.md — Full report templates
scripts/visualize_variant_effects.py
— Single-variant visualization template (Ref/Alt comparisons, Splicing).
- Splicing Zoom Strategy: Uses a Hybrid Approach for optimal
visibility:
- Base Interval: Variant +/- 1 downstream and upstream exon
(Structural Context).
- Junction Expansion: Expands to include the full span of any
significant splicing junction (e.g., exon skipping events that
span multiple exons).
- Anchor Enforcement: Ensures the exons anchoring these long
junctions are fully visible. Lesson: Simple fixed windows (e.g.,
2kb) or nearest-exon logic often fail for skipping events. Always
use the observed junction data to drive zoom levels.
examples/splicing/ — Splicing analysis examples
examples/model_limitation_RNU4ATAC/
— ncRNA structure limitation case study
examples/polyadenylation_HBA2/ — 3'
UTR / Polyadenylation case study
examples/regulatory/ — Regulatory variant
examples
examples/negative_result_GATA4/ —
Negative results (mathematical artefact)
examples/negative_result_TGFB3/ —
Negative results (proxies)
scripts/lookup_gene_info.py — Gene &
transcript lookup
scripts/resolve_ontology_terms.py —
Ontology term resolution (UBERON/CL IDs)
Code Patterns
Broad Discovery Scan
Use score_variant across differential scorers only to discover unexpected
tissue effects.
from alphagenome.models import dna_client
from alphagenome.models import variant_scorers
from alphagenome.data import genome
import os
import pandas as pd
import dotenv
# Load enprojectnment variables from ~/.env
dotenv.load_dotenv(os.path.expanduser('~/.env'))
# Setup API Key and Client
dna_model = dna_client.create(api_key=os.enprojectn.get('ALPHAGENOME_API_KEY'),
address='dns:///gdmscience.googleapis.com:443')
# Define Variant (example)
variant_str = "chr2:1234:A>C"
chrom, pos_str, ref_alt = variant_str.split(':')
ref, alt = ref_alt.split('>')
pos = int(pos_str)
# Use supported sequence length (e.g., 2**20 for optimal performance)
SEQ_LENGTH = 2**20
interval = genome.Interval(chrom, pos - SEQ_LENGTH // 2, pos + SEQ_LENGTH // 2)
variant = genome.Variant(chrom, pos, ref, alt)
scorers = [
variant_scorers.RECOMMENDED_VARIANT_SCORERS[m]
for m in variant_scorers.RECOMMENDED_VARIANT_SCORERS
if "ACTIVE" not in m and "CAGE" not in m and "PROCAP" not in m
]
print(f"Scoring variant {variant_str}...")
scores_list = dna_model.score_variant(interval=interval, variant=variant, variant_scorers=scorers)
# Process and Display Results
all_dfs = []
for score_adata in scores_list:
df = variant_scorers.tidy_scores([score_adata], match_gene_strand=True)
if df is not None:
all_dfs.append(df)
if all_dfs:
df = pd.concat(all_dfs)
significant = df[df['quantile_score'].abs() > 0.995]
ranked = significant.sort_values('raw_score', key=abs, ascending=False)
print("Top Significant Hits:")
print(ranked[['biosample_name', 'gene_name', 'output_type', 'quantile_score', 'raw_score']])
Extended Search for Disease-Relevant Tissues
# Define keywords based on disease context
disease_keywords = ["liver", "hepatocyte"]
# Filter for any match
mask = df['biosample_name'].str.contains('|'.join(disease_keywords), case=False, na=False)
relevant_hits = df[mask].sort_values('raw_score', key=abs, ascending=False)
print(f"\n--- Extended Analysis (Keywords: {disease_keywords}) ---")
print(relevant_hits.head(20)[['biosample_name', 'output_type', 'raw_score', 'quantile_score']])
Workflow Checklist
Variant Analysis Progress:
- [ ] Step 0: Review Golden Examples (MANDATORY)
- [ ] Step 1: Create Output Folder and Setup
- [ ] Step 2: Parse User Query & Research
- [ ] Step 3: Resolve Tissues & Modalities
- [ ] Step 4: Visualize & Save Plots
- [ ] Step 5: Analyze Predictions (view plots, no code). MANDATORY: Read [interpretation-guide.md](docs/interpretation-guide.md) before interpreting results.
- [ ] Step 6: Write Report, save it as `report.md` (MANDATORY)
- [ ] Step 7: Self-Critique (view `report.md` to verify links & claims)
- [ ] Step 8: Make artifact out of `report.md`
Multi-Variant Workflow
If multiple variants are specified, spawn sub-agents to run each variant
analysis and then synthesize each report.md into a single report.
Script Reference
| Script |
Purpose |
lookup_gene_info |
Comprehensive gene and transcript lookup using |
| : : GTF data : |
|
resolve_ontology_terms |
Biological terms → UBERON/CL/EFO IDs |
visualize_variant_effects |
REF/ALT visualization (expression, regulatory, |
| : : splicing) : |
|
analyze_ism |
In-Silico Mutagenesis SeqLogo generation |
interpret_splicing |
Quantitative splicing analysis (delta scores, |
| : : junctions) : |
|
visualize_genome_tracks |
Genomic track visualization for a region |
1---2name: alphagenome-single-variant-analysis3description: >4 Analyzes genetic variant effects on gene expression (RNA-seq), chromatin5 accessibility (DNASE), histone marks (ChIP), and transcription factors6 using the AlphaGenome API. Use when the user asks about non-coding variant effects,7 pathogenicity, clinical significance, disease associations, functional8 effects, gene expression changes, splicing disruption, or regulatory effects9 in promoters and enhancers. Also use for resolving biological terms to10 tissue/cell-type ontologies (UBERON/CL) or analyzing variants in11 chr:pos:ref>alt format.12---1314# Variant Analysis using AlphaGenome1516## Prerequisites17181. **`uv`**: Read the `uv` skill and follow its Setup instructions to ensure19 `uv` is installed and on PATH.202. **User Notification**: If21 .licenses/alphagenome_single_variant_analysis_LICENSE.txt does not already22 exist in the workspace root directory then (1) prominently notify the user23 to check the terms at https://deepmind.google.com/science/alphagenome/, then24 (2) create the file recording the notification text and timestamp.253. **`.env` file**: Make sure the `.env` file exists in your home directory.26 Create one if it does not exist.274. **`ALPHAGENOME_API_KEY`**: This skill requires an API key to function.28 You can register for a key at https://deepmind.google.com/science/alphagenome/.29 You **MUST** use the safe credentials protocol in the `credentials` skill to30 check for and request this key if this skill looks relevant to the user's request.3132## Core Rules3334- **NEVER run `python3` or `python3 -c` directly.** The system Python does not35 necessarily have pandas, numpy, and other key dependencies. ALWAYS use `uv36 run` to run ALL Python code — including scripts, ad-hoc analysis files, and37 one-liners. Do not attempt to `pip install` or create new venvs — `uv`38 manages an isolated enprojectnment automatically.39- **Offline Only**: NEVER use external APIs (e.g., MyGene.info, Ensembl REST)40 for gene/transcript lookup. Use `lookup_gene_info.py` with the local GTF. If41 it fails, fix the enprojectnment/paths, do not switch to external APIs.42- **API Key is required**: `ALPHAGENOME_API_KEY` must be set before running43 any script.44- **Notification**: If this skill is used, ensure this is mentioned in the45 output.46- **Report Format**: Always use the templates in `docs/report-templates.md`47 for generating analysis reports, and ensure to include the table of top hits48 from the discovery scan.4950## Enprojectnment Setup & Troubleshooting5152### Python Enprojectnment5354All scripts must be executed using `uv run`, which manages an isolated virtual55enprojectnment with the correct dependencies via `uv`.5657```bash58uv run <script_name> [args...]59```6061For ad-hoc scripts (e.g., inline analysis code saved to a temp file), pass the62full path instead of a short name:6364```bash65uv run --project $SKILL_DIR /tmp/my_analysis.py --arg1 val166```6768> [!NOTE] The first invocation resolves and installs dependencies (~10s).69> Subsequent runs use the cached enprojectnment and start instantly. The cache70> lives in `~/.cache/uv/`.7172### Common Issues7374- **Column Names**: `tidy_scores` and metadata often use `gene_name` (not75 `gene_symbol`) and `output_type` (not `modality`). Always inspect76 `df.columns` before filtering.77- **Large Genes**: Genes > 500kb (e.g., `USH2A`) break the `whole_gene` view.78 Use `--view detail` or manual regional windows instead.79- **Sashimi Strand Error**: `plot_components.Sashimi` does NOT accept a80 `strand` argument directly. Filter input tracks instead.81- **KeyError: 'ontology_curie'**: Not all tracks have `ontology_curie`. Check82 `track.metadata.columns` before filtering.83- **Python Path**: If `exec: "python": executable file not found` occurs,84 ensure you are using `uv run` instead of bare `python`/`python3`.85- **NotImplementedError (pandas)**: "iLocation based boolean indexing on an86 integer type is not available". This occurs when using boolean masks with87 `.iloc` on integer-indexed DataFrames in newer pandas versions. **Fix**:88 Convert boolean masks to integer indices using `np.flatnonzero(mask)`.89- **GTF Feather Case Sensitivity**: The AlphaGenome GTF Feather file uses90 **Capitalized** column names (`Feature`, `Start`, `End`, `Strand`) unlike91 standard GTF files. Always check `df.columns` if getting KeyErrors.92- **`score_variant` ontology filtering**: `score_variant` does NOT accept93 `ontology_terms` as an argument. You must filter the returned AnnData94 objects manually by inspecting `adata.var` columns. In contrast,95 `predict_variant` DOES accept `ontology_terms` directly.96- **Sashimi Zoom Logic**: To ensure "skipping" arcs are visible, expand the97 zoom to include the **flanking exons** rather than relying on junction98 overlap alone.99- **Junction Scores**: Raw `Junction` objects from `prediction` may be simple100 Intervals. Use `junction_data.get_junctions_to_plot(predictions=...,101 name=...)` to retrieve objects with the `.k` (abundance/score) attribute.102- **`uv` Not Found**: If `exec: uv: not found`, follow the installation103 instructions in [Prerequisites](#prerequisites).104- **Registry Authentication Error (401)**: If `uv` fails with 401 Unauthorized105 for a private registry, set `UV_INDEX_URL=https://pypi.org/simple` before106 running the script.107108## References109110- [alphagenome-api.md](docs/alphagenome-api.md) — API reference and code111 patterns112- [interpretation-guide.md](docs/interpretation-guide.md) — Interpretation113 guide, score magnitude rules, ISM, and checklist.114- [report-templates.md](docs/report-templates.md) — Full report templates115- [`scripts/visualize_variant_effects.py`](scripts/visualize_variant_effects.py)116 — Single-variant visualization template (Ref/Alt comparisons, Splicing).117 - **Splicing Zoom Strategy**: Uses a **Hybrid Approach** for optimal118 visibility:119 1. **Base Interval**: Variant +/- 1 downstream and upstream exon120 (Structural Context).121 2. **Junction Expansion**: Expands to include the full span of any122 **significant splicing junction** (e.g., exon skipping events that123 span multiple exons).124 3. **Anchor Enforcement**: Ensures the exons *anchoring* these long125 junctions are fully visible. *Lesson*: Simple fixed windows (e.g.,126 2kb) or nearest-exon logic often fail for skipping events. Always127 use the *observed junction data* to drive zoom levels.128- [`examples/splicing/`](docs/examples/splicing/) — Splicing analysis examples129- [`examples/model_limitation_RNU4ATAC/`](docs/examples/model_limitation_RNU4ATAC/)130 — ncRNA structure limitation case study131- [`examples/polyadenylation_HBA2/`](docs/examples/polyadenylation_HBA2/) — 3'132 UTR / Polyadenylation case study133- [`examples/regulatory/`](docs/examples/regulatory/) — Regulatory variant134 examples135- [`examples/negative_result_GATA4/`](docs/examples/negative_result_GATA4/) —136 Negative results (mathematical artefact)137- [`examples/negative_result_TGFB3/`](docs/examples/negative_result_TGFB3/) —138 Negative results (proxies)139- [`scripts/lookup_gene_info.py`](scripts/lookup_gene_info.py) — Gene &140 transcript lookup141- [`scripts/resolve_ontology_terms.py`](scripts/resolve_ontology_terms.py) —142 Ontology term resolution (UBERON/CL IDs)143144--------------------------------------------------------------------------------145146## Code Patterns147148### Broad Discovery Scan149150Use `score_variant` across **differential scorers only** to discover unexpected151tissue effects.152153```python154from alphagenome.models import dna_client155from alphagenome.models import variant_scorers156from alphagenome.data import genome157import os158import pandas as pd159import dotenv160161# Load enprojectnment variables from ~/.env162dotenv.load_dotenv(os.path.expanduser('~/.env'))163164# Setup API Key and Client165dna_model = dna_client.create(api_key=os.enprojectn.get('ALPHAGENOME_API_KEY'),166 address='dns:///gdmscience.googleapis.com:443')167168# Define Variant (example)169variant_str = "chr2:1234:A>C"170chrom, pos_str, ref_alt = variant_str.split(':')171ref, alt = ref_alt.split('>')172pos = int(pos_str)173174# Use supported sequence length (e.g., 2**20 for optimal performance)175SEQ_LENGTH = 2**20176interval = genome.Interval(chrom, pos - SEQ_LENGTH // 2, pos + SEQ_LENGTH // 2)177variant = genome.Variant(chrom, pos, ref, alt)178179scorers = [180 variant_scorers.RECOMMENDED_VARIANT_SCORERS[m]181 for m in variant_scorers.RECOMMENDED_VARIANT_SCORERS182 if "ACTIVE" not in m and "CAGE" not in m and "PROCAP" not in m183]184185print(f"Scoring variant {variant_str}...")186scores_list = dna_model.score_variant(interval=interval, variant=variant, variant_scorers=scorers)187188# Process and Display Results189all_dfs = []190for score_adata in scores_list:191 df = variant_scorers.tidy_scores([score_adata], match_gene_strand=True)192 if df is not None:193 all_dfs.append(df)194195if all_dfs:196 df = pd.concat(all_dfs)197 significant = df[df['quantile_score'].abs() > 0.995]198 ranked = significant.sort_values('raw_score', key=abs, ascending=False)199 print("Top Significant Hits:")200 print(ranked[['biosample_name', 'gene_name', 'output_type', 'quantile_score', 'raw_score']])201```202203### Extended Search for Disease-Relevant Tissues204205```python206# Define keywords based on disease context207disease_keywords = ["liver", "hepatocyte"]208209# Filter for any match210mask = df['biosample_name'].str.contains('|'.join(disease_keywords), case=False, na=False)211212relevant_hits = df[mask].sort_values('raw_score', key=abs, ascending=False)213print(f"\n--- Extended Analysis (Keywords: {disease_keywords}) ---")214print(relevant_hits.head(20)[['biosample_name', 'output_type', 'raw_score', 'quantile_score']])215```216217## Workflow Checklist218219```220Variant Analysis Progress:221- [ ] Step 0: Review Golden Examples (MANDATORY)222- [ ] Step 1: Create Output Folder and Setup223- [ ] Step 2: Parse User Query & Research224- [ ] Step 3: Resolve Tissues & Modalities225- [ ] Step 4: Visualize & Save Plots226- [ ] Step 5: Analyze Predictions (view plots, no code). MANDATORY: Read [interpretation-guide.md](docs/interpretation-guide.md) before interpreting results.227- [ ] Step 6: Write Report, save it as `report.md` (MANDATORY)228- [ ] Step 7: Self-Critique (view `report.md` to verify links & claims)229- [ ] Step 8: Make artifact out of `report.md`230```231232--------------------------------------------------------------------------------233234## Multi-Variant Workflow235236If multiple variants are specified, spawn sub-agents to run each variant237analysis and then synthesize each `report.md` into a single report.238239### Script Reference240241| Script | Purpose |242| --------------------------- | ---------------------------------------------- |243| `lookup_gene_info` | Comprehensive gene and transcript lookup using |244: : GTF data :245| `resolve_ontology_terms` | Biological terms → UBERON/CL/EFO IDs |246| `visualize_variant_effects` | REF/ALT visualization (expression, regulatory, |247: : splicing) :248| `analyze_ism` | In-Silico Mutagenesis SeqLogo generation |249| `interpret_splicing` | Quantitative splicing analysis (delta scores, |250: : junctions) :251| `visualize_genome_tracks` | Genomic track visualization for a region |