def reg2bins(beg, end):
    """
    Calculate the list of bins that may overlap with region [beg,end) (zero-based)
    Adapted directly from SAM spec.
    :param beg:
    :param end:
    :return:
    """
    end -= 1
    bins = [0]
    for k in range(1 + (beg >> 26), 2 + (end >> 26)):
        bins.append(k)
    for k in range(9 + (beg >> 23), 10 + (end >> 23)):
        bins.append(k)
    for k in range(73 + (beg >> 20), 74 + (end >> 20)):
        bins.append(k)
    for k in range(585 + (beg >> 17), 586 + (end >> 17)):
        bins.append(k)
    for k in range(4681 + (beg >> 14), 4682 + (end >> 14)):
        bins.append(k)
    return bins
