bio-vcf-basics
View, query, and understand VCF/BCF variant files using bcftools and cyvcf2. Use when inspecting variants, extracting specific fields, or understanding VCF format structure.
What this skill does
## Version Compatibility Reference examples tested with: bcftools 1.19+, numpy 1.26+ Before using code patterns, verify installed versions match. If versions differ: - Python: `pip show <package>` then `help(module.function)` to check signatures - CLI: `<tool> --version` then `<tool> --help` to confirm flags If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying. # VCF/BCF Basics View and query variant files using bcftools and cyvcf2. ## Format Overview | Format | Description | Use Case | |--------|-------------|----------| | VCF | Text format, human-readable | Debugging, small files | | VCF.gz | Compressed VCF (bgzip) | Standard distribution | | BCF | Binary VCF | Fast processing, large files | ## VCF Format Structure ``` ##fileformat=VCFv4.2 ##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth"> ##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype"> ##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth"> #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1 chr1 1000 rs123 A G 30 PASS DP=50 GT:DP 0/1:25 ``` ### Header Lines (##) - `##fileformat` - VCF version - `##INFO` - INFO field definitions - `##FORMAT` - FORMAT field definitions - `##FILTER` - Filter definitions - `##contig` - Reference contigs - `##reference` - Reference genome ### Column Header (#CHROM) Fixed columns: CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO, FORMAT Followed by sample columns ### Data Columns | Column | Description | |--------|-------------| | CHROM | Chromosome | | POS | 1-based position of the first base in REF | | ID | Variant identifier (e.g., rs number) or `.` if novel | | REF | Reference allele | | ALT | Alternate allele(s), comma-separated. `*` indicates an overlapping deletion at this site | | QUAL | Phred-scaled probability that a variant exists at this site (site-level, NOT per-sample) | | FILTER | PASS or semicolon-separated filter names. `.` means filters were not applied | | INFO | Semicolon-separated key=value pairs (site-level annotations) | | FORMAT | Colon-separated format keys defining per-sample field order | | SAMPLE | Colon-separated values matching FORMAT order | ## Critical Field Interpretation Understanding what each field actually measures -- and what it does not -- is essential for filtering and interpretation decisions. ### QUAL vs GQ: Different Questions | Metric | Scope | Question Answered | When Most Useful | |--------|-------|-------------------|------------------| | QUAL | Site-level | "Is there any variant here at all?" | Multi-sample calling where site confidence matters | | GQ | Sample-level | "Is this specific genotype assignment correct?" | Per-sample genotype confidence | | QD | Site-level | QUAL normalized by allele depth | Preferred over raw QUAL for filtering (depth-independent) | QUAL can be high even when an individual sample's genotype is uncertain. Conversely, a sample may have a confident genotype (high GQ) at a site with moderate QUAL. ### AD vs DP Discrepancy The sum of AD (allelic depth) values is often less than DP (total depth). This is expected behavior, not an error: - **DP** counts all reads spanning the position, including uninformative reads (low base quality, ambiguous alignment) - **AD** counts only reads that confidently support a specific allele - INFO/DP (site-level) differs from FORMAT/DP (per-sample) -- site DP is the sum across all samples ### Key INFO Annotations for Filtering | Annotation | Meaning | What It Detects | |-----------|---------|-----------------| | QD | QUAL / allele depth | Low values suggest variant quality not supported by reads | | FS | Fisher strand bias (phred-scaled) | Variant reads predominantly on one strand (artifact) | | SOR | Strand odds ratio | Same as FS but handles high-depth sites better | | MQ | Root mean square mapping quality | Low values indicate reads map ambiguously (paralogous regions) | | MQRankSum | MQ difference: ref vs alt reads | Very negative = alt reads map much worse than ref (suspicious) | | ReadPosRankSum | Read position: ref vs alt reads | Very negative = variant only at read ends (misalignment artifact) | ### PL (Phred-Scaled Likelihoods) PL encodes the relative likelihood of each possible genotype. For a biallelic site: `PL = [P(0/0), P(0/1), P(1/1)]`. The most likely genotype always has PL=0; GQ equals the difference between the lowest and second-lowest PL values. For multiallelic sites with n alleles, PL contains n*(n+1)/2 values covering all possible diploid genotypes. ## bcftools view **Goal:** View, subset, and convert VCF/BCF files from the command line. **Approach:** Use bcftools view with flags for header control, region selection, sample extraction, and format conversion. **"Show me what's in this VCF file"** -> Display VCF contents with optional filtering by header, region, or sample. ### View VCF ```bash bcftools view input.vcf.gz | head ``` ### View Header Only ```bash bcftools view -h input.vcf.gz ``` ### View Without Header ```bash bcftools view -H input.vcf.gz | head ``` ### View Specific Region ```bash bcftools view input.vcf.gz chr1:1000000-2000000 ``` ### View Specific Samples ```bash bcftools view -s sample1,sample2 input.vcf.gz ``` ### Exclude Samples ```bash bcftools view -s ^sample3 input.vcf.gz ``` ## bcftools query **Goal:** Extract specific fields from a VCF in a custom tabular format. **Approach:** Use bcftools query with format specifiers for CHROM, POS, INFO, and FORMAT fields. **"Extract positions and genotypes from my VCF"** -> Pull specific columns from variant records into a flat text format. Extract specific fields in custom format. ### Basic Query ```bash bcftools query -f '%CHROM\t%POS\t%REF\t%ALT\n' input.vcf.gz ``` ### Query with INFO Fields ```bash bcftools query -f '%CHROM\t%POS\t%INFO/DP\t%INFO/AF\n' input.vcf.gz ``` ### Query with Sample Fields ```bash bcftools query -f '%CHROM\t%POS[\t%GT]\n' input.vcf.gz ``` ### Query Specific Samples ```bash bcftools query -f '%CHROM\t%POS[\t%SAMPLE=%GT]\n' -s sample1,sample2 input.vcf.gz ``` ### Include Header ```bash bcftools query -H -f '%CHROM\t%POS\t%REF\t%ALT\n' input.vcf.gz ``` ### Common Format Specifiers | Specifier | Description | |-----------|-------------| | `%CHROM` | Chromosome | | `%POS` | Position | | `%ID` | Variant ID | | `%REF` | Reference allele | | `%ALT` | Alternate allele | | `%QUAL` | Quality score | | `%FILTER` | Filter status | | `%INFO/TAG` | INFO field value | | `%TYPE` | Variant type (snp, indel, etc.) | | `[%GT]` | Genotype (per sample) | | `[%DP]` | Depth (per sample) | | `[%SAMPLE]` | Sample name | | `\n` | Newline | | `\t` | Tab | ## Format Conversion **Goal:** Convert between VCF, compressed VCF, and BCF formats. **Approach:** Use bcftools view with output format flags (-Ov, -Oz, -Ob) and bgzip/index for compression and indexing. ### VCF to BCF ```bash bcftools view -Ob -o output.bcf input.vcf.gz ``` ### BCF to VCF ```bash bcftools view -Ov -o output.vcf input.bcf ``` ### Compress VCF (bgzip) ```bash bgzip input.vcf # Creates input.vcf.gz ``` ### Index VCF/BCF ```bash bcftools index input.vcf.gz # Creates input.vcf.gz.csi bcftools index -t input.vcf.gz # Creates input.vcf.gz.tbi (tabix index) ``` ## Output Format Options | Flag | Format | |------|--------| | `-Ov` | Uncompressed VCF | | `-Oz` | Compressed VCF (bgzip) | | `-Ou` | Uncompressed BCF | | `-Ob` | Compressed BCF | ## Genotype Encoding | Genotype | Meaning | |----------|---------| | `0/0` | Homozygous reference | | `0/1` | Heterozygous | | `1/1` | Homozygous alternate | | `1/2` | Heterozygous for two different ALT alleles (compound het at multiallelic site) | | `./.` | Missing genotype (no confident call) | | `0\|1` | Phased heterozygous (allele before `\|` is on haplotype 1) | ### Phased vs Unphased - `/` separates **unphased** alleles -- the two
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.