def get_best_hits(matches, evalue_cutoff):
    """
      get the best hit: one with smallest evalue and highest score.
      if at least two hits have same evalue and score, report them all
    """
    best_hits = []
    evalue_sorted = sorted(matches, key=lambda x: x[2])
    best_evalue = evalue_sorted[0][2]
    if best_evalue <= evalue_cutoff:
        scores = []
        for el in evalue_sorted:
            if best_evalue == el[2]:
                scores.append(el)
        score_sorted = sorted(scores, key=lambda x: x[3], reverse=True)
        best_score = score_sorted[0][3]
        for el in score_sorted:
            if best_score == el[3]:
                best_hits.append(el)
    return best_hits