def METHOD_NAME(source_seq, dest_seq):
    """ Find the portion of source_seq that dest_seq maps to.
    :return: a list of 1-based positions in source_seq that it mapped to.
    """
    gap_open = 15
    gap_extend = 5
    use_terminal_gap_penalty = 1
    aligned_source, aligned_dest, _score = gotoh.align_it(source_seq,
                                                          dest_seq,
                                                          gap_open,
                                                          gap_extend,
                                                          use_terminal_gap_penalty)
    positions = []
    source_pos = 1
    for source_nuc, dest_nuc in zip(aligned_source, aligned_dest):
        if dest_nuc != '-':
            positions.append(source_pos if source_nuc != '-' else None)
        if source_nuc != '-':
            source_pos += 1
    hit_count = sum(position is not None for position in positions)
    if hit_count < len(dest_seq) / 2:
        pieces = re.split('(N+)', dest_seq)
        sizes = [(len(p), i) for i, p in enumerate(pieces) if p and 'N' not in p]
        if sizes:
            sizes.sort(reverse=True)
            big_piece = sizes[0][1]
            offset = sum(len(p) for p in pieces[:big_piece])
            positions = offset*[None] + METHOD_NAME(source_seq,
                                                     pieces[big_piece])
    return positions