long-read-sequencing/haplotype-phasing/SKILL.md
Phases small variants, SVs, and methylation from Oxford Nanopore and PacBio long reads (read-backed/physical phasing) with WhatsHap, LongPhase, or HiPhase, and haplotags the BAM (HP/PS tags) for allele-resolved downstream analysis. Covers why phase blocks break at het-sparse gaps (read length x heterozygosity), why phasing the VCF is useless until the BAM is haplotagged, the GT-pipe/PS and read HP/PS tag spec, reporting block N50 with switch error, the diploid-assumption/CNV/haploid-region traps, trio phasing as the gold standard, and the boundary to statistical panel phasing. Use when phasing long-read variants, haplotagging reads for allele-specific methylation/expression or phased SVs, choosing WhatsHap vs LongPhase vs HiPhase, trio phasing, or assessing phasing quality.
npx skillsauth add GPTomics/bioSkills bio-long-read-sequencing-haplotype-phasingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reference examples tested with: whatshap 2.3+, longphase 1.7+, samtools 1.19+, tabix/htslib 1.19+.
Before using code patterns, verify installed versions match. If versions differ:
<tool> --version then <tool> --help to confirm flagsBehavior to record:
whatshap phase --reference enables realignment mode (rescues indel phasing on error-prone long reads); omitting it falls back to lower-quality genotype-only phasing.--max-coverage 15 (WhatsHap) is a runtime downsampling cap, not a minimum-depth requirement.If code throws an error, introspect the installed tool (whatshap phase --help, longphase --help) and adapt the example to the actual API rather than retrying.
"Phase my long-read variants" -> Reconstruct haplotypes directly from reads that span heterozygous sites, then haplotag the BAM so downstream tools can see the phase.
whatshap phase -o phased.vcf.gz --reference ref.fa --indels variants.vcf.gz aln.bam then whatshap haplotag -o haplotagged.bam --reference ref.fa phased.vcf.gz aln.bamThis is read-backed (physical, panel-free) phasing of a single sample. Statistical/reference-panel phasing for imputation lives in phasing-imputation/haplotype-phasing; building phased haplotype contigs lives in genome-assembly/hifi-assembly.
Read-backed phasing is sample-intrinsic and panel-free (the haplotypes are exactly what this individual's reads physically witness), with two load-bearing consequences:
phase writes the VCF; haplotag writes the BAM - they are different products. whatshap phase / longphase phase set GT pipe (0|1) and a PS phase-set in the VCF; they do NOT touch the BAM. Every read-level downstream tool (modkit --partition-tag HP for allele-specific methylation, pb-CpG-tools --hap-tag HP, Severus for phased SVs, IGV color-by-HP, whatshap split) keys on the per-read HP tag that ONLY haplotag writes. A user who runs phase and stops has a phased VCF and an un-haplotagged BAM, and the downstream step silently produces only an ungrouped partition. Triage: samtools view haplotagged.bam | grep -m1 'HP:i:'.Switch-error accuracy is comparable across read-based tools (~0.1-0.4% on long reads); choose on speed, SV/mod co-phasing, platform, and pedigree.
| Scenario | Tool | Why |
|----------|------|-----|
| Careful default; indel phasing | WhatsHap (--reference --indels) | realignment mode rescues indels; widest downstream familiarity |
| Parents/pedigree sequenced | WhatsHap --ped (PedMEC) | the gold standard - chromosome-scale, lowest switch error |
| Whole-genome ONT speed | LongPhase (--ont) | ~10x faster; 30x human in ~1 min |
| Co-phase SVs / methylation into long blocks | LongPhase (--sv-file/--mod-file) | a phased SV bridges het-sparse gaps; block N50 ~25 Mbp |
| PacBio HiFi, joint small+SV+STR | HiPhase | PacBio-native one-pass phasing |
| Multi-tech (Hi-C / 10x) | HapCUT2 | models Hi-C/linked-read error |
| Inside PEPPER-Margin-DeepVariant | margin | legacy embedded haplotagger |
Clair3 uses WhatsHap (or LongPhase) internally to phase its het SNPs and haplotag the BAM feeding its full-alignment model - this skill owns that phase->haplotag mechanism (see clair3-variants).
| Layer | Tag | Meaning |
|-------|-----|---------|
| VCF (per variant) | GT with | vs / | 0|1 phased (order = which haplotype carries ALT); 0/1 unphased |
| VCF (per variant) | FORMAT/PS (Integer) | phase-set / block id; variants sharing a PS are phased relative to each other (conventionally the first variant's position) |
| BAM (per read) | HP:i:1 / HP:i:2 | the haplotype this read was assigned to (written by haplotag) |
| BAM (per read) | PS:i:<int> | the phase set the read's assignment belongs to (matches the VCF PS) |
Unassigned reads carry NO HP tag (not HP:i:0). Do not confuse the VCF HP FORMAT tag (GATK style) with the BAM HP read tag.
| Metric | Tool | Trap |
|--------|------|------|
| phase-block N50/NG50 | whatshap stats | contiguity, not correctness; gameable by over-joining blocks (which raises switch errors) |
| phased fraction | whatshap stats | a tool can phase fewer easy sites to look better |
| switch error rate | whatshap compare | the primary accuracy number |
| switch vs flip decomposition | whatshap compare | a long switch propagates (damaging); a flip/short switch self-corrects (one wrong variant) - quote the decomposition |
| Hamming distance | whatshap compare | hypersensitive to switch position (a switch near a block start flips half the block) |
Long blocks with a high switch rate are worse, not better, than honest short blocks. Benchmark against a trio-/strand-seq-phased GIAB truth.
# WhatsHap: phase (VCF), then haplotag (BAM). --reference enables realignment for indels.
whatshap phase -o phased.vcf.gz --reference ref.fa --indels variants.vcf.gz aln.bam
tabix -p vcf phased.vcf.gz
whatshap haplotag -o haplotagged.bam --reference ref.fa \
--output-haplotag-list htlist.tsv.gz phased.vcf.gz aln.bam
samtools index haplotagged.bam
# Quality
whatshap stats --gtf blocks.gtf phased.vcf.gz # block N50, count, fraction
whatshap compare --names truth,mine truth.vcf.gz phased.vcf.gz # switch error, flip decomposition
# Trio (gold standard) - --ped takes a PED file, not mother/father/child args
whatshap phase -o trio.vcf.gz --reference ref.fa --ped family.ped joint.vcf.gz mother.bam father.bam child.bam
# LongPhase: faster whole-genome, co-phase SNP+indel+SV(+5mC) into long blocks
longphase phase -s snps.vcf --indels --sv-file svs.vcf -b aln.bam -r ref.fa -o phased -t 16 --ont
longphase haplotag -s phased.vcf --sv-file phased_SV.vcf -b aln.bam -r ref.fa -o haplotagged -t 16
# Downstream consumer example: allele-specific methylation
modkit pileup haplotagged.bam asm/ --ref ref.fa --cpg --combine-strands --partition-tag HP
Trigger: running phase and pointing a read-level tool at the original BAM. Mechanism: phase writes the VCF only; the BAM HP tag comes from haplotag. Symptom: modkit returns only an ungrouped partition; IGV shows one color; Severus reports no phased SVs - all with no error. Fix: run haplotag; verify samtools view ... | grep HP:i:.
Trigger: a homozygosity-rich or inbred sample phasing into many short blocks. Mechanism: no intervening hets to link across a long homozygous run - intrinsic, not tool failure. Symptom: low block N50 despite good reads. Fix: expect it; use ultra-long reads or co-phase SVs (LongPhase) to bridge sparse-het gaps; only trio/Hi-C makes it chromosome-scale.
Trigger: whatshap phase without --reference. Mechanism: without realignment, allele support for indels in error-prone reads is noisy. Symptom: low indel phasing / errors. Fix: always pass --reference ref.fa (and --indels) on long reads.
Trigger: phasing chrX/Y/MT in an XY sample, or inside a CNV/segdup. Mechanism: the two-haplotype model is false there (hemizygous, >2 or 1 haplotype, or collapsed paralogs). Symptom: spurious micro-blocks, HP counts far from 50/50. Fix: treat phasing there as unreliable; do not interpret it as biology.
Trigger: comparing phasers on block N50. Mechanism: N50 is inflated by over-joining, which raises switch errors. Symptom: "longer blocks" that are actually worse. Fix: report block N50 AND switch error together; use the flip decomposition.
| Threshold | Source | Rationale |
|-----------|--------|-----------|
| Total depth ~15-20x for confident phasing | phasing practice | per-haplotype depth is ~half; below ~10x blocks fragment |
| --max-coverage 15 is a runtime cap | WhatsHap | wMEC is exponential in per-site coverage; >15x is redundant, not required |
| long-read switch error ~0.1-0.4% | benchmarks vs trio truth | the achievable accuracy band |
| LongPhase SNP+SV block N50 ~25 Mbp | Lin 2022 | co-phasing SVs bridges het-sparse gaps (vs ~10-15 Mbp SNP-only) |
| ASM wants ~20x total | methylation practice | each haplotype must clear the ~10x per-site floor |
| Error / symptom | Cause | Solution |
|-----------------|-------|----------|
| modkit --partition-tag HP has only an ungrouped partition | BAM never haplotagged | run whatshap haplotag / longphase haplotag |
| --trio flag not recognized | the flag is --ped | pass a PED file: --ped family.ped |
| Poor indel phasing | --reference omitted | add --reference ref.fa --indels |
| 0 reads usable in phase | BAM @RG sample != VCF sample | --ignore-read-groups (or fix sample names) |
| longphase --platform ont errors | platform is a bare flag | use --ont or --pb |
| Spurious phasing on chrX/CNV | diploid assumption violated | treat as unreliable; exclude haploid/CNV regions |
-Y so supplementaries are taggable)modkit --partition-tag HPdevelopment
Installs 425 bioinformatics skills covering sequence analysis, RNA-seq, single-cell, variant calling, metagenomics, structural biology, and 56 more categories. Use when setting up bioinformatics capabilities or when a bioinformatics task requires specialized skills not yet installed.
testing
Chains a somatic (tumor-normal) SNV/indel and structural-variant pipeline end to end with GATK Mutect2 (or Strelka2), wiring the somatic-specific machinery - panel-of-normals and gnomAD germline-resource priors, GetPileupSummaries/CalculateContamination, and LearnReadOrientationModel FFPE/oxoG orientation-bias filtering fed into FilterMutectCalls. Use when calling somatic mutations from a tumor-normal pair (or tumor-only with PoN caveats), deciding which artifact filter removes which class of false positive, reasoning about VAF/purity/ploidy and clonal-vs-subclonal detection, adding somatic SV/CNV or TMB/MSI/signatures, or routing variants to AMP/ASCO/CAP tier and oncogenicity interpretation (never germline ACMG).
development
End-to-end pooled and single-cell CRISPR screen analysis from FASTQ to hit genes. Orchestrates library design QC, guide counting, six-stage screen QC (plasmid Gini, replicate Pearson, CEGv2 PR-AUC, copy-number artifact), method-appropriate hit calling across MAGeCK RRA/MLE, BAGEL2, drugZ, JACKS, and Chronos, cancer-cell-line copy-number correction (CRISPRcleanR / Chronos), batch correction for multi-batch screens, and the specialized branches for combinatorial paralog screens, single-cell Perturb-seq, base-editor variant-function screens, prime-editor screens, and in vivo bottleneck-aware screens. Use when analyzing any pooled CRISPR screen end-to-end, matching the hit-calling method to the experimental design, integrating copy-number correction into the pipeline, or branching the workflow for single-cell, combinatorial, base-editor, prime-editor, or in vivo variants.
development
Transcribe DNA to RNA and translate to protein using Biopython, with NCBI codon-table selection, CDS validation, and six-frame ORF finding. Use when converting a CDS or ORF to its amino-acid sequence, selecting a non-standard (mitochondrial, bacterial, ciliate) genetic code, validating a coding sequence, or scanning all reading frames.