Source code for dolomite_ranges.read_genomic_ranges_list
import os
from typing import Optional
import dolomite_base as dl
import h5py
from compressed_lists import Partitioning
from dolomite_base.read_object import read_object_registry
from genomicranges import CompressedGenomicRangesList
read_object_registry["genomic_ranges_list"] = "dolomite_ranges.read_genomic_ranges_list"
[docs]
def read_genomic_ranges_list(path: str, metadata: Optional[dict], **kwargs) -> CompressedGenomicRangesList:
"""Load genomic ranges into a
:py:class:`~genomicranges.grangeslist.CompressedGenomicRangesList` 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.grangeslist.CompressedGenomicRangesList` object.
"""
with h5py.File(os.path.join(path, "partitions.h5"), "r") as handle:
ghandle = handle["genomic_ranges_list"]
lengths = dl.load_vector_from_hdf5(ghandle["lengths"], expected_type=int, report_1darray=True)
names = None
if "names" in ghandle:
names = dl.load_vector_from_hdf5(ghandle["names"], expected_type=str, report_1darray=True)
_all_granges = dl.alt_read_object(path=os.path.join(path, "concatenated"), **kwargs)
counter = 0
_split_granges = []
if lengths.sum() == 0:
_split_granges = _all_granges
else:
for ilen in lengths:
_frag = _all_granges[counter : (counter + ilen)]
_split_granges.append(_frag)
counter += ilen
grl = CompressedGenomicRangesList(
unlist_data=_all_granges, partitioning=Partitioning.from_lengths(lengths=lengths, names=names)
)
_elem_annotation_path = os.path.join(path, "element_annotations")
if os.path.exists(_elem_annotation_path):
_mcols = dl.alt_read_object(_elem_annotation_path, **kwargs)
grl = grl.set_element_metadata(_mcols)
_meta_path = os.path.join(path, "other_annotations")
if os.path.exists(_meta_path):
_meta = dl.alt_read_object(_meta_path, **kwargs)
grl = grl.set_metadata(_meta.as_dict())
return grl