Spaces:
No application file
No application file
# Copyright 2022 by Michiel de Hoon. All rights reserved. | |
# | |
# This file is part of the Biopython distribution and governed by your | |
# choice of the "Biopython License Agreement" or the "BSD 3-Clause License". | |
# Please see the LICENSE file that should have been included as part of this | |
# package. | |
"""Bio.Align support for the "bigmaf" multiple alignment format. | |
The bigMaf format stores multiple alignments in a format compatible with | |
the MAF (Multiple Alignment Format) format. BigMaf files are binary and are | |
indexed as a bigBed file. | |
See https://genome.ucsc.edu/goldenPath/help/bigMaf.html | |
""" | |
from io import StringIO | |
from Bio.Align import interfaces, bigbed, maf | |
class AlignmentIterator(bigbed.AlignmentIterator, maf.AlignmentIterator): | |
"""Alignment iterator for bigMaf files. | |
The file may contain multiple alignments, which are loaded and returned | |
incrementally. | |
Alignment annotations are stored in the ``.annotations`` attribute of the | |
``Alignment`` object, except for the alignment score, which is stored as an | |
attribute. Sequence information of empty parts in the alignment block | |
(sequences that connect the previous alignment block to the next alignment | |
block, but do not align to the current alignment block) is stored in the | |
alignment annotations under the ``"empty"`` key. Annotations specific to | |
each line in the alignment are stored in the ``.annotations`` attribute of | |
the corresponding sequence record. | |
""" | |
fmt = "bigMaf" | |
mode = "b" | |
def _create_alignment(self, chunk): | |
chromId, chromStart, chromEnd, rest = chunk | |
data = rest.decode().replace(";", "\n") | |
stream = StringIO() | |
stream.write(data) | |
stream.seek(0) | |
alignment = maf.AlignmentIterator._create_alignment(self, stream) | |
return alignment | |