def get_SELD_Results(self, pred_files_path):
        # collect predicted files info
        pred_files = os.listdir(pred_files_path)
        eval = SELD_evaluation_metrics.SELDMetrics(nb_classes=self._feat_cls.get_nb_classes(), doa_threshold=self._doa_thresh)
        for pred_cnt, pred_file in enumerate(pred_files):
            # Load predicted output format file
            pred_dict = self._feat_cls.load_output_format_file(os.path.join(pred_files_path, pred_file))
            if self._use_polar_format:
                pred_dict = self._feat_cls.convert_output_format_cartesian_to_polar(pred_dict)
            pred_labels = self._feat_cls.segment_labels(pred_dict, self._feat_cls.get_nb_frames())

            # Calculated scores
            eval.update_seld_scores(pred_labels, self._ref_labels[pred_file])

        # Overall SED and DOA scores
        ER, F, LE, LR = eval.compute_seld_scores()
        seld_scr = SELD_evaluation_metrics.early_stopping_metric([ER, F], [LE, LR])

        return ER, F, LE, LR, seld_scr
                os.path.join(ref_desc_files, pred_file.replace('.npy',
                                                               '.csv')))
            if use_polar_format:
                gt_labels = feat_cls.segment_labels(gt_dict_polar,
                                                    feat_cls.get_nb_frames())
            else:
                gt_dict = feat_cls.convert_output_format_polar_to_cartesian(
                    gt_dict_polar)
                gt_labels = feat_cls.segment_labels(gt_dict,
                                                    feat_cls.get_nb_frames())

            # Calculated scores
            if use_polar_format:
                eval.update_seld_scores(pred_labels, gt_labels)
            else:
                eval.update_seld_scores_xyz(pred_labels, gt_labels)

        # Overall SED and DOA scores
        er, f, de, de_f = eval.compute_seld_scores()
        seld_scr = SELD_evaluation_metrics.early_stopping_metric([er, f],
                                                                 [de, de_f])

        print('\nAverage score for {} {} data using {} coordinates'.format(
            score_type, 'fold' if score_type == 'all' else split_key,
            'Polar' if use_polar_format else 'Cartesian'))
        print('SELD score (early stopping metric): {:0.2f}'.format(seld_scr))
        print('SED metrics: Error rate: {:0.2f}, F-score:{:0.1f}'.format(
            er, 100 * f))
        print('DOA metrics: DOA error: {:0.1f}, F-score:{:0.1f}'.format(
            de, 100 * de_f))
    def get_consolidated_SELD_results(self,
                                      pred_files_path,
                                      score_type_list=['all', 'room']):
        '''
            Get all categories of results.
            ;score_type_list: Supported
                'all' - all the predicted files
                'room' - for individual rooms

        '''

        # collect predicted files info
        pred_files = os.listdir(pred_files_path)
        nb_pred_files = len(pred_files)

        # Calculate scores for different splits, overlapping sound events, and impulse responses (reverberant scenes)

        print('Number of predicted files: {}\nNumber of reference files: {}'.
              format(nb_pred_files, self._nb_ref_files))
        print('\nCalculating {} scores for {}'.format(
            score_type_list, os.path.basename(pred_output_format_files)))

        for score_type in score_type_list:
            print(
                '\n\n---------------------------------------------------------------------------------------------------'
            )
            print(
                '------------------------------------  {}   ---------------------------------------------'
                .format('Total score' if score_type ==
                        'all' else 'score per {}'.format(score_type)))
            print(
                '---------------------------------------------------------------------------------------------------'
            )

            split_cnt_dict = self.get_nb_files(
                pred_files,
                tag=score_type)  # collect files corresponding to score_type
            # Calculate scores across files for a given score_type
            for split_key in np.sort(list(split_cnt_dict)):
                # Load evaluation metric class
                eval = SELD_evaluation_metrics.SELDMetrics(
                    nb_classes=self._feat_cls.get_nb_classes(),
                    doa_threshold=self._doa_thresh)
                for pred_cnt, pred_file in enumerate(
                        split_cnt_dict[split_key]):
                    # Load predicted output format file
                    pred_dict = self._feat_cls.load_output_format_file(
                        os.path.join(pred_output_format_files, pred_file))
                    if self._use_polar_format:
                        pred_dict = self._feat_cls.convert_output_format_cartesian_to_polar(
                            pred_dict)
                    pred_labels = self._feat_cls.segment_labels(
                        pred_dict, self._feat_cls.get_nb_frames())

                    # Calculated scores
                    eval.update_seld_scores(pred_labels,
                                            self._ref_labels[pred_file])

                # Overall SED and DOA scores
                ER, F, LE, LR = eval.compute_seld_scores()
                seld_scr = SELD_evaluation_metrics.early_stopping_metric(
                    [ER, F], [LE, LR])

                print('\nAverage score for {} {} data using {} coordinates'.
                      format(
                          score_type,
                          'fold' if score_type == 'all' else split_key,
                          'Polar' if self._use_polar_format else 'Cartesian'))
                print('SELD score (early stopping metric): {:0.2f}'.format(
                    seld_scr))
                print(
                    'SED metrics: Error rate: {:0.2f}, F-score:{:0.1f}'.format(
                        ER, 100 * F))
                print(
                    'DOA metrics: Localization error: {:0.1f}, Localization Recall: {:0.1f}'
                    .format(LE, 100 * LR))