def METHOD_NAME(self, catalog: cat.Catalog, replace_params: bool) -> None:
    """
    Merge the provided new catalog controls into the original catalog in this catalog interface.
    Args:
        catalog: catalog containing controls that are merged into the current catalog of the interface
        replace_params: replace all params in the control with the new ones
    Notes:
        This is mainly to support the reading of a catalog from markdown.  It allows retention of content such as
        metadata and backmatter, along with labels and other parameter attributes that aren't in markdown.
        The list of controls and group structure is specified by the markdown structure - but this doesn't allow
        controls to contain controls.  Group lists are specified per directory.
        Reading the markdown tells you groups and controls in them - and groups in groups.
        Controls cannot change groups.  If the control was in the original json, its parts are replaced,
        including its parameters.  Only values may be specified.  If no value specified, the value is unset in json.
    """
    cat_interface = CatalogInterface(catalog)
    for src in cat_interface.get_all_controls_from_dict():
        group_id, _, _ = cat_interface.get_group_info_by_control(src.id)
        dest = self._catalog_interface.get_control(src.id)
        if dest:
            dest_group, _, _ = self._catalog_interface.get_group_info_by_control(dest.id)
            if dest_group != group_id:
                raise TrestleError(f'Markdown for control {src.id} has different group id.')
            CatalogMerger.merge_controls(dest, src, replace_params)
            self._catalog_interface.replace_control(dest)
        else:
            # this is a new control that isn't already in the merge destination
            # need to add the control knowing its group must already exist
            # get group info from an arbitrary control already present in group
            _, control_handle = self._catalog_interface._find_control_in_group(group_id)
            new_control_handle = copy.deepcopy(control_handle)
            new_control_handle.control = src
            # add the control and its handle to the param_dict
            self._catalog_interface._control_dict[src.id] = new_control_handle  # type: ignore
    # now need to cull any controls that are not in the src catalog
    handled_ids = set(cat_interface._control_dict.keys())
    orig_ids = set(self._catalog_interface._control_dict.keys())
    extra_ids = orig_ids.difference(handled_ids)
    for extra_id in sorted(extra_ids):
        self._catalog_interface._control_dict.pop(extra_id)
    self._catalog_interface.update_catalog_controls()