def coordinate_map(an_alignment_row): global args range_accumulator = [] cigar = an_alignment_row.CIGAR start_pos = an_alignment_row.POS + args.systematic_offset label = an_alignment_row.QNAME read_start_range = (0, 0) ref_start_range = (start_pos, start_pos) read_last_range = read_start_range ref_last_range = ref_start_range try: parse_results = parse_cigar_string(cigar) except ParseException: logger.critical("Parse error for cigar string %s", cigar) return [] for length, type in parse_results: if type == "M": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1] + length) elif type == "I": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1]) elif type == "D": read_current_range = (read_last_range[1], read_last_range[1]) ref_current_range = (ref_last_range[1], ref_last_range[1] + length) elif type == "S": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1]) range_accumulator.append( {"label": label, "type": type, "length": length, "ref_coord": ref_current_range, "read_coord": read_current_range}) read_last_range = read_current_range ref_last_range = ref_current_range return range_accumulator
def coordinate_map(an_alignment_row): global args range_accumulator = [] cigar = an_alignment_row.CIGAR start_pos = an_alignment_row.POS + args.systematic_offset label = an_alignment_row.QNAME read_start_range = (0, 0) ref_start_range = (start_pos, start_pos) read_last_range = read_start_range ref_last_range = ref_start_range try: parse_results = parse_cigar_string(cigar) except ParseException: logger.critical("Parse error for cigar string %s", cigar) return [] for length, type in parse_results: if type == "M": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1] + length) elif type == "I": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1]) elif type == "D": read_current_range = (read_last_range[1], read_last_range[1]) ref_current_range = (ref_last_range[1], ref_last_range[1] + length) elif type == "S": read_current_range = (read_last_range[1], read_last_range[1] + length) ref_current_range = (ref_last_range[1], ref_last_range[1]) range_accumulator.append({ "label": label, "type": type, "length": length, "ref_coord": ref_current_range, "read_coord": read_current_range }) read_last_range = read_current_range ref_last_range = ref_current_range return range_accumulator
def test_parse_cigar_string(self): starting_file = data_dir + "/alignments/C_model_GMAPno40_NM_000546.5.sam" reads = parse_sam_file(starting_file) for i,r in enumerate(reads.CIGAR): print i,parse_cigar_string(r)
def test_parse_cigar_string(self): starting_file = data_dir + "/alignments/C_model_GMAPno40_NM_000546.5.sam" reads = parse_sam_file(starting_file) for i, r in enumerate(reads.CIGAR): print i, parse_cigar_string(r)