예제 #1
0
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
예제 #2
0
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
예제 #3
0
	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)
예제 #4
0
 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)