install
source · Clone the upstream repo
git clone https://github.com/FreedomIntelligence/OpenClaw-Medical-Skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/FreedomIntelligence/OpenClaw-Medical-Skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bio-sam-bam-basics" ~/.claude/skills/freedomintelligence-openclaw-medical-skills-bio-sam-bam-basics && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/FreedomIntelligence/OpenClaw-Medical-Skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/bio-sam-bam-basics" ~/.openclaw/skills/freedomintelligence-openclaw-medical-skills-bio-sam-bam-basics && rm -rf "$T"
manifest:
skills/bio-sam-bam-basics/SKILL.mdsource content
<!--
# COPYRIGHT NOTICE
# This file is part of the "Universal Biomedical Skills" project.
# Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
# All Rights Reserved.
#
# This code is proprietary and confidential.
# Unauthorized copying of this file, via any medium is strictly prohibited.
#
# Provenance: Authenticated by MD BABU MIA
-->
name: bio-sam-bam-basics description: View, convert, and understand SAM/BAM/CRAM alignment files using samtools and pysam. Use when inspecting alignments, converting between formats, or understanding alignment file structure. tool_type: cli primary_tool: samtools measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
SAM/BAM/CRAM Basics
View and convert alignment files using samtools and pysam.
Format Overview
| Format | Description | Use Case |
|---|---|---|
| SAM | Text format, human-readable | Debugging, small files |
| BAM | Binary compressed SAM | Standard storage format |
| CRAM | Reference-based compression | Long-term archival, smaller than BAM |
SAM Format Structure
@HD VN:1.6 SO:coordinate @SQ SN:chr1 LN:248956422 @RG ID:sample1 SM:sample1 @PG ID:bwa PN:bwa VN:0.7.17 read1 0 chr1 100 60 50M * 0 0 ACGT... FFFF... NM:i:0
Header lines start with
@:
- Header metadata (version, sort order)@HD
- Reference sequence dictionary@SQ
- Read group information@RG
- Program used to create file@PG
Alignment fields (tab-separated):
- QNAME - Read name
- FLAG - Bitwise flag
- RNAME - Reference name
- POS - 1-based position
- MAPQ - Mapping quality
- CIGAR - Alignment description
- RNEXT - Mate reference
- PNEXT - Mate position
- TLEN - Template length
- SEQ - Read sequence
- QUAL - Base qualities
- Optional tags (NM:i:0, MD:Z:50, etc.)
samtools view
View BAM as SAM
samtools view input.bam | head
View with Header
samtools view -h input.bam | head -100
View Header Only
samtools view -H input.bam
View Specific Region
samtools view input.bam chr1:1000-2000
Count Alignments
samtools view -c input.bam
Format Conversion
BAM to SAM
samtools view -h -o output.sam input.bam
SAM to BAM
samtools view -b -o output.bam input.sam
BAM to CRAM
samtools view -C -T reference.fa -o output.cram input.bam
CRAM to BAM
samtools view -b -T reference.fa -o output.bam input.cram
Pipe Conversion
samtools view -b input.sam > output.bam
Common Flags
| Flag | Decimal | Meaning |
|---|---|---|
| 0x1 | 1 | Paired |
| 0x2 | 2 | Proper pair |
| 0x4 | 4 | Unmapped |
| 0x8 | 8 | Mate unmapped |
| 0x10 | 16 | Reverse strand |
| 0x20 | 32 | Mate reverse strand |
| 0x40 | 64 | First in pair |
| 0x80 | 128 | Second in pair |
| 0x100 | 256 | Secondary alignment |
| 0x200 | 512 | Failed QC |
| 0x400 | 1024 | PCR duplicate |
| 0x800 | 2048 | Supplementary |
Decode Flags
samtools flags 147 # 0x93 147 PAIRED,PROPER_PAIR,REVERSE,READ2
CIGAR Operations
| Op | Description |
|---|---|
| M | Alignment match (can be mismatch) |
| I | Insertion to reference |
| D | Deletion from reference |
| N | Skipped region (introns in RNA-seq) |
| S | Soft clipping |
| H | Hard clipping |
| = | Sequence match |
| X | Sequence mismatch |
Example:
50M2I30M = 50 bases match, 2 base insertion, 30 bases match
pysam Python Alternative
Open and Iterate
import pysam with pysam.AlignmentFile('input.bam', 'rb') as bam: for read in bam: print(f'{read.query_name}\t{read.reference_name}:{read.reference_start}')
Access Header
with pysam.AlignmentFile('input.bam', 'rb') as bam: for sq in bam.header['SQ']: print(f'{sq["SN"]}: {sq["LN"]} bp')
Read Alignment Properties
with pysam.AlignmentFile('input.bam', 'rb') as bam: for read in bam: print(f'Name: {read.query_name}') print(f'Flag: {read.flag}') print(f'Chrom: {read.reference_name}') print(f'Pos: {read.reference_start}') # 0-based print(f'MAPQ: {read.mapping_quality}') print(f'CIGAR: {read.cigarstring}') print(f'Seq: {read.query_sequence}') print(f'Qual: {read.query_qualities}') break
Check Flag Properties
with pysam.AlignmentFile('input.bam', 'rb') as bam: for read in bam: if read.is_paired and read.is_proper_pair: if read.is_reverse: strand = '-' else: strand = '+' print(f'{read.query_name} on {strand} strand')
Fetch Region
with pysam.AlignmentFile('input.bam', 'rb') as bam: for read in bam.fetch('chr1', 1000, 2000): print(read.query_name)
Convert BAM to SAM
with pysam.AlignmentFile('input.bam', 'rb') as infile: with pysam.AlignmentFile('output.sam', 'w', header=infile.header) as outfile: for read in infile: outfile.write(read)
Convert to CRAM
with pysam.AlignmentFile('input.bam', 'rb') as infile: with pysam.AlignmentFile('output.cram', 'wc', reference_filename='reference.fa', header=infile.header) as outfile: for read in infile: outfile.write(read)
Quick Reference
| Task | samtools | pysam |
|---|---|---|
| View BAM | | |
| View header | | |
| Count reads | | |
| Get region | | |
| BAM to SAM | | Open with 'w' mode |
| SAM to BAM | | Open with 'wb' mode |
| BAM to CRAM | | Open with 'wc' mode |
Related Skills
- alignment-indexing - Create indices for random access (required for fetch/region queries)
- alignment-sorting - Sort alignments by coordinate or name
- alignment-filtering - Filter alignments by flags, quality, regions
- bam-statistics - Generate statistics from alignment files
- sequence-io/read-sequences - Parse FASTA/FASTQ input files