def _all_good_hits_with_scores(hits_scores, max_bit_score_delta_for_good_hits):
    """
    return a list of (id, score, evalue) tuples representing good scores
    based on difference between alignment score for each hit and score of the best hit.

    :param hits_scores: list of tuples [(id,score,evalue),(id,score,evalue)] ranked by score
    :param max_bit_score_delta_for_good_hits: integer
    :return: list of 3-part tuples (str,int,float) for (id,score,evalue)
    """
    top_bit_score = hits_scores[0][1]
    return([x for x in hits_scores if (top_bit_score - x[1]) <= max_bit_score_delta_for_good_hits])