def METHOD_NAME(ace, location_dist, location_start, rx=None):
    """Generate an angle-energy distribution from ACE data
    Parameters
    ----------
    ace : openmc.data.ace.Table
        ACE table to read from
    location_dist : int
        Index in the XSS array corresponding to the start of a block,
        e.g. JXS(11) for the the DLW block.
    location_start : int
        Index in the XSS array corresponding to the start of an energy
        distribution array
    rx : Reaction
        Reaction this energy distribution will be associated with
    Returns
    -------
    distribution : openmc.data.AngleEnergy
        Secondary angle-energy distribution
    """
    # Set starting index for energy distribution
    idx = location_dist + location_start - 1
    law = int(ace.xss[idx + 1])
    location_data = int(ace.xss[idx + 2])
    # Position index for reading law data
    idx = location_dist + location_data - 1
    # Parse energy distribution data
    if law == 2:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.DiscretePhoton.METHOD_NAME(ace, idx)
    elif law in (3, 33):
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.LevelInelastic.METHOD_NAME(ace, idx)
    elif law == 4:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.ContinuousTabular.METHOD_NAME(
            ace, idx, location_dist)
    elif law == 5:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.GeneralEvaporation.METHOD_NAME(ace, idx)
    elif law == 7:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.MaxwellEnergy.METHOD_NAME(ace, idx)
    elif law == 9:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.Evaporation.METHOD_NAME(ace, idx)
    elif law == 11:
        distribution = openmc.data.UncorrelatedAngleEnergy()
        distribution.energy = openmc.data.WattEnergy.METHOD_NAME(ace, idx)
    elif law == 44:
        distribution = openmc.data.KalbachMann.METHOD_NAME(
            ace, idx, location_dist)
    elif law == 61:
        distribution = openmc.data.CorrelatedAngleEnergy.METHOD_NAME(
            ace, idx, location_dist)
    elif law == 66:
        distribution = openmc.data.NBodyPhaseSpace.METHOD_NAME(
            ace, idx, rx.q_value)
    else:
        raise ValueError("Unsupported ACE secondary energy "
                         "distribution law {}".format(law))
    return distribution