def _merge_derived_parameters(self,<EOL>other_trajectory,<EOL>used_runs,<EOL>rename_dict,<EOL>allowed_translations,<EOL>ignore_data):
other_derived_parameters = other_trajectory._derived_parameters.copy()<EOL>new_first_run_idx = min(used_runs.values())<EOL>run_name_dummy = other_trajectory.f_wildcard('<STR_LIT:$>', -<NUM_LIT:1>)<EOL>for param_name in other_derived_parameters:<EOL><INDENT>if param_name in ignore_data:<EOL><INDENT>continue<EOL><DEDENT>split_name = param_name.split('<STR_LIT:.>')<EOL>if not any(x in run_name_dummy for x in split_name):<EOL><INDENT>continue<EOL><DEDENT>ignore_data.add(param_name)<EOL>param = other_derived_parameters[param_name]<EOL>new_param_name = self._rename_full_name(param_name, other_trajectory,<EOL>used_runs=used_runs)<EOL>if new_param_name in self:<EOL><INDENT>my_param = self.f_get(new_param_name, fast_access=False)<EOL>if (my_param._equal_values(my_param.f_get(), param.f_get()) and<EOL>not (my_param.f_has_range() or param.f_has_range())):<EOL><INDENT>continue<EOL><DEDENT><DEDENT>first_new_param_name = self._rename_full_name(param_name,<EOL>other_trajectory,<EOL>new_run_idx=new_first_run_idx)<EOL>rename_dict[param_name] = first_new_param_name<EOL>comment = param.v_comment<EOL>param_type = param.f_get_class_name()<EOL>param_type = self._create_class(param_type)<EOL>first_param = self.f_add_leaf(param_type,<EOL>first_new_param_name,<EOL>comment=comment)<EOL>for run_idx in used_runs.values():<EOL><INDENT>if run_idx == new_first_run_idx:<EOL><INDENT>continue<EOL><DEDENT>next_name = self._rename_full_name(param_name, other_trajectory,<EOL>new_run_idx=run_idx)<EOL>split_name = next_name.split('<STR_LIT:.>')<EOL>link_name = split_name.pop()<EOL>location_name = '<STR_LIT:.>'.join(split_name)<EOL>if not self.f_contains(location_name, shortcuts=False):<EOL><INDENT>the_group = self.f_add_group(location_name)<EOL><DEDENT>else:<EOL><INDENT>the_group = self.f_get(location_name)<EOL><DEDENT>the_group.f_add_link(link_name, first_param)<EOL><DEDENT><DEDENT>for param_name in other_derived_parameters:<EOL><INDENT>if param_name in ignore_data:<EOL><INDENT>continue<EOL><DEDENT>split_name = param_name.split('<STR_LIT:.>')<EOL>ignore_data.add(param_name)<EOL>if any(x in other_trajectory._reversed_wildcards and x not in allowed_translations<EOL>for x in split_name):<EOL><INDENT>continue<EOL><DEDENT>new_name = self._rename_full_name(param_name, other_trajectory,<EOL>used_runs=used_runs)<EOL>if self.f_contains(new_name):<EOL><INDENT>my_param = self.f_get(new_name, fast_access=False)<EOL>param = other_derived_parameters[param_name]<EOL>if (my_param._equal_values(my_param.f_get(), param.f_get()) and<EOL>not (my_param.f_has_range() or param.f_has_range())):<EOL><INDENT>continue<EOL><DEDENT>else:<EOL><INDENT>self._logger.error('<STR_LIT>'<EOL>'<STR_LIT>' % new_name)<EOL><DEDENT><DEDENT>rename_dict[param_name] = new_name<EOL><DEDENT>
Merges derived parameters that have the `run_ALL` in a name.

        Creates a new parameter with the name of the first new run and links to this
        parameter to avoid copying in all other runs.