def _which_asm_has_finer_mesh(asm, neighbor=None):
    """Determine which assembly has finer meshing

    Parameters
    ----------
    asm1 : DASSH Assembly object
        Active assembly around which we are creating mesh
    asm2 (optional) : DASSH Assembly object
        Neighboring assembly across active hex side

    Returns
    -------
    tuple
        DASSH Assembly object
            One of the two input DASSH Assembly objects with the
            finer meshing in its pin bundle region
        int
            Number of gap edge subchannels per side

    """
    if neighbor is None:  # Use active asm parameters on this hex side
        sc_per_side = 0
        if asm.has_rodded:
            sc_per_side = asm.rodded.n_ring - 1
        return asm, sc_per_side

    else:  # Need to compare them
        # If one asm is rodded and the other isn't, use the rodded asm
        if asm.has_rodded and not neighbor.has_rodded:
            return asm, asm.rodded.n_ring - 1
        elif not asm.has_rodded and neighbor.has_rodded:
            return neighbor, neighbor.rodded.n_ring - 1
        # If both unrodded, trivial
        elif not asm.has_rodded and not neighbor.has_rodded:
            return asm, 0
        # If both rodded, need to compare
        else:
            sc_per_side = asm.rodded.n_ring - 1
            sc_per_side_adj = neighbor.rodded.n_ring - 1

            # If both assemblies have same number of sc_per_side:
            # Choose the spacing with the smaller pin pitch
            if sc_per_side == sc_per_side_adj:
                if asm.rodded.pin_pitch < neighbor.rodded.pin_pitch:
                    return asm, sc_per_side
                else:
                    return neighbor, sc_per_side_adj
            # Otherwise, choose the meshing with more edge subchannels
            elif sc_per_side < sc_per_side_adj:
                return neighbor, sc_per_side_adj
            else:
                return asm, sc_per_side