Skip to content

Commit

Permalink
add genomic variants modules
Browse files Browse the repository at this point in the history
  • Loading branch information
chaochungkuo committed Feb 19, 2024
1 parent 5291957 commit 81066e9
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 0 deletions.
11 changes: 11 additions & 0 deletions docs/source/genomic_variants.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Genomic Variants
=======================

.. automodule:: genomkit.variants
:members:

.. automodule:: genomkit.variants.gvariant
:members:

.. automodule:: genomkit.variants.gvariants
:members:
1 change: 1 addition & 0 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ Contents
genomic_regions
genomic_annotation
genomic_coverage
genomic_variants

2 changes: 2 additions & 0 deletions genomkit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
from .annotation.gannotation import GAnnotation
from .alignments.galignments import GAlignments
from .coverages.gcoverages import GCoverage
from .variants.gvariant import GVariant
from .variants.gvariants import GVariants

__version__ = "0.2.4"
9 changes: 9 additions & 0 deletions genomkit/variants/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"""
Genomic Variants Modules
These modules contain functions and classes for working with genomic variants.
It provides utilities for handling and analyzing genomic variants.
- **GVariants** is a collection of many genomic variants.
- **GVariantsSet** is a set of many GVariants which represent different genomic variants.
"""
21 changes: 21 additions & 0 deletions genomkit/variants/gvariant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class GVariant:
__slot__ = ["chrom", "pos", "vid", "ref", "alt", "qual", "filter_status",
"info"]

def __init__(self, chrom: str, pos: int, vid: str, ref: str, alt: str,
qual: int, filter_status: str, info: str = []):
self.chrom = chrom
self.pos = pos
self.vid = vid
self.ref = ref
self.alt = alt
self.qual = qual
self.filter_status = filter_status
self.info = info

def to_GRegion(self):
from genomkit import GRegion
region = GRegion(sequence=self.chrom, start=self.pos, end=self.pos,
name=self.vid, data=[self.ref, self.alt, self.qual,
self.filter_status] + self.info)
return region
63 changes: 63 additions & 0 deletions genomkit/variants/gvariants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
from genomkit import GVariant


###########################################################################
# GVariants
###########################################################################
class GVariants:
"""
GVariants module
This module contains functions and classes for working with a collection of
genomic variants. It provides utilities for handling and analyzing the
interactions of many genomic variants.
"""
def __init__(self, name: str = "", load: str = ""):
"""Initiate GVariants object.
:param name: Define the name, defaults to ""
:type name: str, optional
:param load: Define the filename for loading a VCF file, defaults to ""
:type load: str, optional
"""
self.name = name
self.variants = []
if load:
self.load(filename=load)

def load(self, filename):
"""Load variants from a VCF file.
:param filename: Define the filename for loading a VCF file
:type filename: str
"""
with open(filename, 'r') as vcf_file:
for line in vcf_file:
if line.startswith('#'):
continue # Skip header lines
fields = line.strip().split('\t')
chrom = fields[0]
pos = int(fields[1])
vid = fields[2]
ref = fields[3]
alt = fields[4]
qual = fields[5]
filter_status = fields[6]
info = fields[7:]
variant = GVariant(chrom=chrom, pos=pos, vid=vid, ref=ref,
alt=alt, qual=qual,
filter_status=filter_status,
info=info)
self.variants.append(variant)

def to_GRegions(self):
"""Convert the GVariants to a GRegions object.
:return: A GRegions object
:rtype: GRegions
"""
from genomkit import GRegions
regions = GRegions(name=self.name)
for variant in self.variants:
regions.add(variant.to_GRegion())
return regions

0 comments on commit 81066e9

Please sign in to comment.