Source code for dolomite_ranges.read_genomic_ranges
import os
from typing import Optional
import dolomite_base as dl
import h5py
from dolomite_base.read_object import read_object_registry
from genomicranges import GenomicRanges
from iranges import IRanges
read_object_registry["genomic_ranges"] = "dolomite_ranges.read_genomic_ranges"
[docs]
def read_genomic_ranges(path: str, metadata: Optional[dict], **kwargs) -> GenomicRanges:
"""Load genomic ranges into a
:py:class:`~genomicranges.GenomicRanges.GenomicRanges` object.
This method
should generally not be called directly but instead be invoked by
:py:meth:`~dolomite_base.read_object.read_object`.
Args:
path:
Path to the directory containing the object.
metadata:
Metadata for the object.
kwargs:
Further arguments, ignored.
Returns:
A :py:class:`~genomicranges.GenomicRanges.GenomicRanges` object.
"""
_seqinfo_path = os.path.join(path, "sequence_information")
seqinfo = dl.alt_read_object(path=_seqinfo_path, **kwargs)
with h5py.File(os.path.join(path, "ranges.h5"), "r") as handle:
ghandle = handle["genomic_ranges"]
seqnames = dl.load_vector_from_hdf5(
ghandle["sequence"], expected_type=int, report_1darray=True
)
starts = dl.load_vector_from_hdf5(
ghandle["start"], expected_type=int, report_1darray=True
)
widths = dl.load_vector_from_hdf5(
ghandle["width"], expected_type=int, report_1darray=True
)
strand = dl.load_vector_from_hdf5(
ghandle["strand"], expected_type=int, report_1darray=True
)
gr = GenomicRanges(
seqnames=seqnames,
ranges=IRanges(starts, widths),
strand=strand,
seqinfo=seqinfo,
)
_range_annotation_path = os.path.join(path, "range_annotations")
if os.path.exists(_range_annotation_path):
_mcols = dl.alt_read_object(_range_annotation_path, **kwargs)
gr = gr.set_mcols(_mcols)
_meta_path = os.path.join(path, "other_annotations")
if os.path.exists(_meta_path):
_meta = dl.alt_read_object(_meta_path, **kwargs)
gr = gr.set_metadata(_meta.as_dict())
return gr