From 8dd9ad4d4b337b102f579dfdc0d9019578b33fce Mon Sep 17 00:00:00 2001 From: Brian Haas Date: Fri, 11 Oct 2024 16:13:33 +0000 Subject: [PATCH] bugfix for printing alignment, making use of cigar strings that have more than one digit for the numeric length value --- ssw/alignmentmgr.pyx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ssw/alignmentmgr.pyx b/ssw/alignmentmgr.pyx index 9353d68..029bd72 100644 --- a/ssw/alignmentmgr.pyx +++ b/ssw/alignmentmgr.pyx @@ -107,6 +107,7 @@ from typing import ( Tuple, Union, ) +import re from .alignmenttuple import Alignment @@ -379,13 +380,14 @@ cdef class AlignmentMgr: if cigar_array == NULL: raise OSError('Memory allocation issue') j = 0 - for i in range(0, len(cigar), 2): - length = int(cigar[i]) - letter = ord(cigar[i+1]) + cigar_tuples = re.findall(r"(\d+)([A-Za-z])", cigar) + for cigar_tuple in cigar_tuples: + length = int(cigar_tuple[0]) + letter = ord(cigar_tuple[1]) cigar_array[j] = to_cigar_int(length, letter) j += 1 res_align.cigar = cigar_array - res_align.cigarLen = len(cigar)//2 + res_align.cigarLen = len(cigar_tuples) else: res_align.cigar = NULL