Skip to main content

viewtools

Tests PyPI version Python 3.8+

Tools for rearranging genomic sequences and coordinates using bioframe-style view files.

Features

  • 🧬 Genome Rearrangement: Extract, concatenate, and reverse complement genomic regions
  • 📍 Coordinate Transformation: Remap genomic intervals (BED files) to match rearranged assemblies
  • 🧵 Strand Handling: Automatic strand orientation for both sequences and coordinates
  • 🔄 Flexible I/O: Support for stdin/stdout, gzip compression, and multiple file formats
  • 🐍 Python API: Programmatic access with pandas DataFrames
  • ⚡ Fast: Built on bioframe for efficient genomic interval operations

Installation

# Using uv (recommended)
uv pip install viewtools

# Using pip
pip install viewtools

Development Installation

git clone https://github.com/phlya/viewtools.git
cd viewtools
uv pip install -e ".[dev]"

Quick Start

Command Line

Rearrange a genome

# Create a view file (TSV)
cat > view.tsv << EOF
chrom	start	end	name	strand	new_chrom
chr1	1000000	2000000	region1	+	custom_chr1
chr2	500000	1500000	region2	-	custom_chr1
EOF

# Rearrange genome
viewtools rearrange-genome genome.fasta --view view.tsv --out custom_genome.fasta

Rearrange BED coordinates

# Rearrange genomic intervals to match the new assembly
viewtools rearrange-bedframe intervals.bed --view view.tsv --out rearranged.bed

# Use with pipes
cat intervals.bed | viewtools rearrange-bedframe --view view.tsv | head

Python API

import pandas as pd
from viewtools.core.utils import read_fastas, read_view, write_fasta
from viewtools.api.rearrange import rearrange_genome, rearrange_bedframe

# Rearrange genome sequences
sequences = read_fastas(["genome.fasta"])
view = read_view("view.tsv")
custom_sequences = rearrange_genome(sequences, view, out_name_col="new_chrom")
write_fasta(custom_sequences, "custom_genome.fasta")

# Rearrange BED coordinates
bedframe = pd.read_csv("intervals.bed", sep="\t")
rearranged = rearrange_bedframe(bedframe, view, out_name_col="new_chrom")
rearranged.to_csv("rearranged.bed", sep="\t", index=False)

View File Format

View files are TSV/CSV files that define how to rearrange genomic regions:

Required columns:

  • chrom: Source chromosome name
  • start: Start position (0-based)
  • end: End position (exclusive)
  • new_chrom: Target chromosome name (or custom column via --out-name-col)

Optional columns:

  • name: Region name
  • strand: Orientation (+ or -)

Example:

chrom	start	end	name	strand	new_chrom
chr1	0	1000000	seg1	+	custom1
chr1	2000000	3000000	seg2	-	custom1
chr2	0	1000000	seg3	+	custom2

Commands

rearrange-genome

Build a custom reference FASTA from input FASTA(s) using a bioframe-style view file.

viewtools rearrange-genome [OPTIONS] FASTA...

Options:

  • --view, -v PATH: View table path (required)
  • --out, -o PATH: Output FASTA path, use '-' for stdout (required)
  • --chroms, -c TEXT: Restrict output to specific chromosomes
  • --sep, -s TEXT: Separator used in view file (default: tab)

Examples:

# Basic usage
viewtools rearrange-genome genome.fasta --view regions.tsv --out custom.fasta

# Multiple input files
viewtools rearrange-genome chr*.fasta --view regions.tsv --out custom.fasta

# Output to stdout and pipe
viewtools rearrange-genome genome.fasta --view regions.tsv --out - | gzip > custom.fasta.gz

rearrange-bedframe

Rearrange BED-like coordinates according to a bioframe-style view file.

viewtools rearrange-bedframe [OPTIONS] [BEDFRAME]

Options:

  • --view, -v PATH: View table path (required)
  • --out, -o PATH: Output path, use '-' for stdout (default: stdout)
  • --out-name-col, -n TEXT: Column name for new chromosome names (default: 'new_chrom')
  • --split-overlaps/--no-split-overlaps: Split intervals overlapping multiple segments (default: True)
  • --sep, -s TEXT: Separator for input and view files (default: tab)

Examples:

# Read from file, write to file
viewtools rearrange-bedframe intervals.bed --view view.tsv --out rearranged.bed

# Use pipes (stdin/stdout)
cat intervals.bed | viewtools rearrange-bedframe --view view.tsv > rearranged.bed

# Don't split overlapping intervals
viewtools rearrange-bedframe intervals.bed --view view.tsv --no-split-overlaps

# Integrate with bedtools
cat intervals.bed | viewtools rearrange-bedframe --view view.tsv | \
    bedtools intersect -a stdin -b features.bed

Use Cases

1. Create Custom Reference Genomes

Extract and concatenate specific genomic regions to create custom reference assemblies:

# Extract centromeric regions from multiple chromosomes
viewtools rearrange-genome genome.fasta \
    --view centromeres.tsv \
    --out centromeric_assembly.fasta \
    --only-modified

2. Generate Reverse Complement Sequences

# Reverse complement specific regions
echo -e "chr1\t0\t1000000\trc_region\t-\tchr1_rc" > reverse.tsv
viewtools rearrange-genome genome.fasta --view reverse.tsv --out rc.fasta

3. Update Genomic Annotations

After rearranging a genome, update BED files, gene annotations, or other interval-based data:

# Rearrange genome
viewtools rearrange-genome genome.fasta --view regions.tsv --out custom.fasta

# Rearrange corresponding gene annotations
viewtools rearrange-bedframe genes.bed --view regions.tsv --out custom_genes.bed

# Rearrange ChIP-seq peaks
viewtools rearrange-bedframe peaks.bed --view regions.tsv --out custom_peaks.bed

4. Strand-Aware Coordinate Transformation

The tool automatically handles strand orientation:

# Input: intervals with strand information
# View: segments with strand orientation
# Output: Combined strand logic (same=+, opposite=-)
viewtools rearrange-bedframe stranded_intervals.bed \
    --view stranded_view.tsv \
    --out transformed.bed

Documentation

Full documentation is available at: https://viewtools.readthedocs.io/

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Running Tests

# Install dev dependencies
uv pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=viewtools --cov-report=html

# Run linting
ruff check .
black --check .

License

MIT License - see LICENSE file for details.

Citation

If you use viewtools in your research, please cite this repository

Acknowledgments

  • Built with bioframe for genomic interval operations
  • Inspired by the need for flexible genome rearrangement in Hi-C and other genomics workflows

Metadata

Release files for viewtools 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for viewtools 0.1.2
File Size Uploaded
viewtools-0.1.2.tar.gz 28.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for viewtools 0.1.2
File Interpreter ABI Platform
viewtools-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 43.1 kB

Release files / viewtools-0.1.2.tar.gz

Download URL viewtools-0.1.2.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a4fd629ccd03d003e728784df538f59156b27ac74f266040a11a35f3f19b7b34
BLAKE2b-256 checksum
How to use checksums
7061a8a5aaeacdad96fe691182ed0f538d9d3a1e916df7802c51b3478d3f76ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / viewtools-0.1.2-py3-none-any.whl

Download URL viewtools-0.1.2-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f0a5d41a79bbb1dcca7afb3b0ff1b3b80c2a7d57b5b0fece83583fb86a61f47
BLAKE2b-256 checksum
How to use checksums
6d9c356ff4597494b0199c69681526e6e0d2832fbfb904901309eb541f295ccd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page