def make_energy_funnel_data(self, cores=1):
        """Compares models created during the minimisation to the best model.

        Returns
        -------
        energy_rmsd_gen: [(float, float, int)]
            A list of triples containing the BUFF score, RMSD to the
            top model and generation of a model generated during the
            minimisation.
        """
        if not self.parameter_log:
            raise AttributeError(
                'No parameter log data to make funnel, have you ran the '
                'optimiser?')
        model_cls = self._params['specification']
        gen_tagged = []
        for gen, models in enumerate(self.parameter_log):
            for model in models:
                gen_tagged.append((model[0], model[1], gen))
        sorted_pps = sorted(gen_tagged, key=lambda x: x[1])
        top_result = sorted_pps[0]
        top_result_model = model_cls(*top_result[0])
        if (cores == 1) or (sys.platform == 'win32'):
            energy_rmsd_gen = map(
                self.funnel_rebuild,
                [(x, top_result_model,
                  self._params['specification']) for x in sorted_pps[1:]])
        else:
            with futures.ProcessPoolExecutor(
                    max_workers=self._params['processors']) as executor:
                energy_rmsd_gen = executor.map(
                    self.funnel_rebuild,
                    [(x, top_result_model, self._params['specification'])
                     for x in sorted_pps[1:]])
        return list(energy_rmsd_gen)
Compares models created during the minimisation to the best model.

        Returns
        -------
        energy_rmsd_gen: [(float, float, int)]
            A list of triples containing the BUFF score, RMSD to the
            top model and generation of a model generated during the
            minimisation.