Skills Agentes

Pysam

Flujos de trabajo Python/HTSlib para archivos genómicos: lee, consulta, filtra o escribe SAM/BAM/CRAM, VCF/BCF, FASTA/FASTQ o datos tabix con pysam, incluyendo pileup, cobertura, indexado y referencias CRAM.

Solicitaread write edit bash
Estrellas
34.8k

en todo el repo

Actividad
58

0–100, la ruta de este skill

Actualizado
el mes pasado

último commit aquí

Commits
3

últimos 90 días

Contexto
2.9k tok

53 tok en reposo

Paquete
14 archivos

134 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add K-Dense-AI/scientific-agent-skills --skill pysam --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Da acceso Python/HTSlib de bajo nivel y en streaming a formatos genómicos (SAM/BAM/CRAM, VCF/BCF, FASTA/FASTQ, tabix)
  • Explica el contrato de coordenadas: las APIs numéricas son 0-based half-open, mientras las region strings son 1-based inclusive
  • Incluye scripts para inspeccionar, filtrar y resumir archivos de alineamiento y variantes sin escribir código nuevo
  • Documenta reglas de escritura seguras (preservar headers, no sobrescribir, usar CSI para coordenadas grandes)
  • Envuelve comandos de samtools y bcftools como dispatchers de Python para operaciones masivas maduras

Úsalo cuando

  • El usuario lee, consulta, filtra o escribe archivos SAM/BAM/CRAM, VCF/BCF, FASTA/FASTQ o tabix con pysam
  • Necesita hacer pileup, calcular cobertura, indexar o convertir formatos genómicos
  • Trabaja con archivos CRAM y necesita resolver la referencia correcta
  • Va a envolver comandos samtools/bcftools desde Python de forma segura

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Filtra las lecturas secundarias de este BAM sin cambiar el orden
    • Haz un pileup exacto de esta región con calidad mínima 20
    • Resume las variantes y genotipos de este VCF por región
    • Indexa este CRAM usando la referencia correcta

    SKILL.md

    En inglés

    pysam

    Overview

    Use pysam for low-level, streaming access to HTSlib-supported genomic formats:

    • AlignmentFile and AlignedSegment for SAM/BAM/CRAM
    • VariantFile, VariantHeader, and VariantRecord for VCF/BCF
    • FastaFile for indexed FASTA and FastxFile for sequential FASTA/FASTQ
    • TabixFile for BGZF-compressed, tabix-indexed BED/GFF/GTF/custom tables
    • pysam.samtools and pysam.bcftools for wrapped command dispatchers

    Current upstream baseline: pysam 0.24.0 (27 April 2026), wrapping HTSlib/samtools/bcftools 1.23.1. Read references/sources.md before updating version-specific guidance.

    Installation

    Use the pinned release for reproducible work:

    uv pip install "pysam==0.24.0"
    

    Confirm the runtime:

    import pysam
    
    print(pysam.__version__)           # 0.24.0
    print(pysam.__samtools_version__)  # 1.23.1
    

    Prebuilt wheels are available for supported macOS and Linux platforms. A source build needs a C compiler and HTSlib build dependencies; read the official installation guide linked from references/sources.md.

    First Decide

    Before writing code:

    1. Identify the real format, compression, sort order, and available index.
    2. Decide whether coordinates are numeric Python coordinates or a region string. Do not mix them.
    3. For CRAM, identify the exact reference assembly and FASTA.
    4. Prefer indexed region access; use sequential iteration only when intended.
    5. Preserve headers when writing and write to a new path by default.
    6. State filtering semantics: mapping/base quality, flags, overlap handling, duplicate handling, and pileup depth cap.

    For unfamiliar files, start with the bundled read-only inspector:

    python scripts/inspect_hts.py sample.bam
    python scripts/inspect_hts.py cohort.vcf.gz
    python scripts/inspect_hts.py reference.fa
    

    Bundled Scripts

    Script Purpose Typical call
    scripts/inspect_hts.py Metadata-only inspection for alignment, variant, FASTA, FASTQ, and tabix files python scripts/inspect_hts.py sample.cram --reference ref.fa
    scripts/alignment_qc.py Streaming aggregate read/QC counts as JSON python scripts/alignment_qc.py sample.bam --max-records 100000
    scripts/variant_summary.py Streaming variant, FILTER, and genotype summary as JSON python scripts/variant_summary.py cohort.vcf.gz --region chr1:1-1000000
    scripts/filter_alignments.py Filter SAM/BAM/CRAM without changing record order python scripts/filter_alignments.py input.bam output.bam --exclude-secondary

    All scripts refuse to overwrite existing outputs. Run each with --help for coordinate, index, and privacy notes.

    Coordinate Contract

    Numeric coordinates accepted by pysam APIs are 0-based, half-open. This includes numeric AlignmentFile.fetch(), VariantFile.fetch(), FastaFile.fetch(), TabixFile.fetch(), and pileup() arguments.

    Region strings are samtools-style: 1-based and inclusive.

    # The same 100 bases:
    bam.fetch("chr1", 99, 199)          # [99, 199)
    bam.fetch(region="chr1:100-199")    # 1-based inclusive
    

    VCF text uses 1-based POS, while record properties expose both systems:

    record.pos    # 1-based
    record.start  # 0-based inclusive
    record.stop   # 0-based exclusive
    

    Read references/coordinates_and_indexing.md for format conversions, overlap semantics, index choices, and contig-name checks.

    Alignment Files

    Use context managers and explicit modes:

    import pysam
    
    with pysam.AlignmentFile("sample.bam", "rb", threads=4) as bam:
        for read in bam.fetch("chr1", 1_000, 2_000):
            if (
                not read.is_unmapped
                and not read.is_secondary
                and not read.is_supplementary
                and read.mapping_quality >= 30
            ):
                print(read.query_name, read.reference_start, read.cigarstring)
    

    Use fetch(until_eof=True) to stream every record in file order, including unplaced unmapped reads, without requiring an index:

    with pysam.AlignmentFile("sample.bam", "rb") as bam:
        for read in bam.fetch(until_eof=True):
            ...
    

    Important distinctions:

    • fetch() returns alignment records overlapping a region.
    • count() counts records and defaults to read_callback="nofilter".
    • count_coverage() returns A/C/G/T base counts and defaults to base quality 15 plus read_callback="all".
    • pileup() exposes per-column reads and has its own filtering, base-quality, overlap, orphan, and max_depth=8000 defaults.

    For exact-region pileups, set truncate=True and explicit filters:

    with pysam.FastaFile("reference.fa") as fasta, pysam.AlignmentFile(
        "sample.bam", "rb"
    ) as bam:
        for column in bam.pileup(
            "chr1",
            1_000,
            2_000,
            truncate=True,
            stepper="samtools",
            fastafile=fasta,
            min_mapping_quality=20,
            min_base_quality=20,
            max_depth=100_000,
        ):
            print(column.reference_pos, column.get_num_aligned())
    

    Read references/alignment_files.md for flags, CIGAR operations, tags, modified bases, writing records, pileup details, and iterator lifetime.

    Variant Files

    Input format is auto-detected. Numeric fetch coordinates remain 0-based:

    import pysam
    
    with pysam.VariantFile("cohort.vcf.gz", threads=4) as variants:
        for record in variants.fetch("chr1", 999_999, 2_000_000):
            print(record.contig, record.pos, record.ref, record.alts)
            for sample_name, call in record.samples.items():
                print(sample_name, call.get("GT"))
    

    Subset samples before retrieving records:

    with pysam.VariantFile("cohort.bcf") as variants:
        variants.subset_samples(["sample_A", "sample_B"])
        for record in variants:
            ...
    

    When changing a header, copy each record and translate it to the destination header before assigning newly declared INFO/FORMAT/FILTER fields. Do not manually clear and rebuild header.samples.

    Read references/variant_files.md for safe headers, writing, sample subsetting, missing genotypes, symbolic alleles, filtering, translation, and indexing.

    FASTA, FASTQ, and Tabix

    Indexed FASTA uses numeric 0-based coordinates:

    with pysam.FastaFile("reference.fa") as fasta:
        sequence = fasta.fetch("chr1", 999, 1_099)
    

    FastxFile is sequential. persist=False is faster but yielded records become invalid after iteration advances:

    with pysam.FastxFile("reads.fastq.gz", persist=False) as reads:
        for read in reads:
            qualities = read.get_quality_array()
            ...
    

    Tabix input must be coordinate-sorted and BGZF-compressed, not ordinary gzip. Use a non-destructive two-step workflow:

    pysam.tabix_compress("regions.bed", "regions.bed.gz")
    pysam.tabix_index("regions.bed.gz", preset="bed")
    
    with pysam.TabixFile("regions.bed.gz", parser=pysam.asBed()) as tbx:
        for interval in tbx.fetch("chr1", 1_000, 2_000):
            print(interval.contig, interval.start, interval.end)
    

    Read references/sequence_files.md for FASTA/FASTQ records and safe tabix creation.

    CRAM, Remote I/O, and Threads

    pysam 0.24 changed inherited HTSlib behavior:

    • Newly written CRAM defaults to CRAM 3.1, not 3.0.
    • HTSlib no longer contacts the EBI reference server by default.
    • Prefer reference_filename="reference.fa" for deterministic local reads and writes.
    with pysam.AlignmentFile(
        "sample.cram",
        "rc",
        reference_filename="reference.fa",
        threads=4,
    ) as cram:
        for read in cram.fetch("chr1", 1_000, 2_000):
            ...
    

    Only configure REF_PATH/REF_CACHE when reference-by-MD5 lookup is intentional. Do not assume a CRAM is self-contained. threads= accelerates compression/decompression; it does not parallelize Python analysis.

    Read references/cram_and_performance.md before CRAM conversion, remote access, or concurrent iteration.

    Wrapped samtools and bcftools

    Import command modules explicitly. Pass each command-line token as a separate string:

    import pysam.samtools
    import pysam.bcftools
    
    pysam.samtools.sort(
        "-@", "4", "-o", "sorted.bam", "input.bam", catch_stdout=False
    )
    pysam.samtools.index("-@", "4", "sorted.bam", catch_stdout=False)
    
    pysam.bcftools.index("--csi", "variants.vcf.gz", catch_stdout=False)
    

    Dispatchers capture stdout by default. For large or binary output, use the tool's -o option with catch_stdout=False, or save_stdout=..., rather than returning the complete output in memory.

    try:
        pysam.samtools.quickcheck("-v", "sample.bam")
    except pysam.SamtoolsError as error:
        messages = pysam.samtools.quickcheck.get_messages()
        raise RuntimeError(messages or str(error)) from error
    

    Use the Python API for record-level logic and dispatchers for mature bulk operations such as sort, index, merge, view, and normalization. Never compose dispatcher arguments by splitting an untrusted shell command.

    Writing Rules

    • Copy or construct a valid header before opening output.
    • Write to a new path; do not use force=True unless replacement is explicit.
    • Preserve sort order if the output will be indexed.
    • Set query_sequence before query_qualities.
    • Prefer pysam.CIGAR_OPS enum members; top-level constants such as pysam.CMATCH are compatibility aliases slated for future removal.
    • Validate outputs with pysam.samtools.quickcheck() for alignments and reopen variant/sequence outputs before downstream use.
    • Use CSI rather than BAI/TBI when references or coordinates exceed legacy index limits.

    Reference Map

    Need Read
    Alignment API, flags, CIGAR, pileup, modified bases references/alignment_files.md
    VCF/BCF headers, records, samples, writing references/variant_files.md
    FASTA/FASTQ and tabix-indexed tables references/sequence_files.md
    Coordinate conversion and index selection references/coordinates_and_indexing.md
    CRAM references, remote I/O, threads, performance references/cram_and_performance.md
    Correct integrated analysis patterns references/common_workflows.md
    Compact current API signatures and defaults references/api_reference.md
    Upgrade notes for existing environments references/migration_to_0_24.md
    Official docs, specifications, and release sources references/sources.md

    Common Failure Modes

    • Treating numeric VariantFile.fetch() coordinates as 1-based
    • Using ordinary gzip where BGZF plus tabix/CSI is required
    • Calling region fetch without an index
    • Assuming fetch() includes unplaced unmapped alignments
    • Forgetting truncate=True for an exact pileup interval
    • Ignoring pileup defaults such as base quality 13 and depth cap 8000
    • Sharing one file handle across active iterators or threads
    • Decoding CRAM without its exact reference
    • Assigning a new VCF field before declaring it in the output header
    • Capturing large samtools/bcftools output in memory
    • Using a SNP base-counting method for indels or symbolic alleles

    Reproducido de K-Dense-AI/scientific-agent-skills bajo licencia MIT. Leer esta página en markdown.

    Archivos

    14 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere Python 3.8-3.14 y pysam 0.24.0; decodificar CRAM puede necesitar el FASTA de referencia exacto o REF_PATH/REF_CACHE configurado.

    Necesita en el PATH:python

    Detalles

    Creador
    K-Dense-AI
    Categoría
    Investigación
    Licencia
    MIT
    Recursos incluidos
    scripts en python + referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de K-Dense-AI/scientific-agent-skills

    Este repo incluye 163 skills. Si instalas uno, normalmente ya tienes los demás.

    Gestión integral de citas académicas: busca en OpenAlex, PubMed y Google Scholar, extrae metadatos precisos, valida citas y genera entradas BibTeX correctamente formateadas.

    Costo de contexto al activarse
    3.7k tok
    Tamaño del paquete
    21 archivos
    Última actualización
    hace 28 días
    investigacion

    Realiza revisiones bibliográficas sistemáticas y completas usando varias bases académicas (PubMed, arXiv, bioRxiv, Semantic Scholar). Genera markdown y PDF con citas verificadas en varios estilos (APA, Nature, Vancouver).

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    12 archivos
    Última actualización
    hace 15 días
    investigacion

    Crea decks de diapositivas y presentaciones para charlas de investigación: PowerPoint, presentaciones de conferencia, seminarios, defensas de tesis. Da estructura, plantillas, guía de tiempos y validación visual.

    Costo de contexto al activarse
    5.1k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 15 días
    documentos

    Crea infografías profesionales con Nano Banana Pro AI y refinamiento iterativo inteligente. Usa Gemini 3.6 Flash para revisar la calidad e integra investigación con Perplexity Sonar. Soporta 10 tipos, 8 estilos y paletas para daltonismo.

    Costo de contexto al activarse
    2.7k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 15 días
    diseno ui

    Crea pósteres de investigación profesionales en LaTeX con beamerposter, tikzposter o baposter, para conferencias y comunicación científica: layout, colores, columnas múltiples e integración de figuras.

    Costo de contexto al activarse
    3.9k tok
    Tamaño del paquete
    17 archivos
    Última actualización
    hace 15 días
    documentos

    Crea diagramas científicos de calidad de publicación con la IA Nano Banana 2 y refinamiento iterativo inteligente. Gemini 3.6 Flash revisa la calidad y solo regenera si está por debajo del umbral de tu tipo de documento.

    Costo de contexto al activarse
    4.1k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 15 días
    diseno ui

    Skills relacionados

    Astropy

    34.8k

    Librería Python central para astronomía y astrofísica: unidades/cantidades, coordenadas, E/S de FITS, tablas, sistemas de tiempo, WCS y cosmología, para implementar o depurar código con Astropy.

    Costo de contexto al activarse
    3.6k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    el mes pasado
    investigacion

    Integración con el SDK de Python de Benchling y su API REST para entidades del registro, inventario, entradas del cuaderno electrónico (ELN), workflows, Benchling Apps y consultas al Data Warehouse.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    el mes pasado
    investigacion

    Busca papers científicos y obtiene datos experimentales estructurados extraídos de estudios a texto completo vía el servidor MCP de BGPT: más de 25 campos por paper (métodos, resultados, muestras, calidad, conclusiones).

    Costo de contexto al activarse
    713 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    investigacion