docs: def convert_likelihoods_to_probabilities(tree, feature, states):
      """
      Normalizes each node marginal likelihoods to convert them to marginal probabilities.
  
      :param states: numpy array of states in the order corresponding to the marginal likelihood arrays
      :param tree: ete3.Tree, the tree of interest
      :param feature: str, character for which the probabilities are calculated
      :return: pandas DataFrame, that maps node names to their marginal likelihoods.
      """
      lh_feature = get_personalized_feature_name(feature, LH)
  
      name2probs = {}
  
      for node in tree.traverse():
          lh = getattr(node, lh_feature)
          name2probs[node.name] = lh / lh.sum()
  
      return pd.DataFrame.from_dict(name2probs, orient='index', columns=states)