code: def eval_file(self, result_filename):
      # evaluation of each category
      gt_frame_dict = read_results(
          self.gt_filename,
          self.data_type,
          is_gt=True,
          multi_class=True,
          union=False,
      )
      result_frame_dict = read_results(
          result_filename,
          self.data_type,
          is_gt=False,
          multi_class=True,
          union=False,
      )
  
      for cid in range(self.num_classes):
          self.reset_accumulator()
          cls_result_frame_dict = result_frame_dict.setdefault(
              cid, dict()
          )
          cls_gt_frame_dict = gt_frame_dict.setdefault(cid, dict())
  
          # only labeled frames will be evaluated
          frames = sorted(list(set(cls_gt_frame_dict.keys())))
  
          for frame_id in frames:
              trk_objs = cls_result_frame_dict.get(frame_id, [])
              gt_objs = cls_gt_frame_dict.get(frame_id, [])
              self.eval_frame_dict(trk_objs, gt_objs, rtn_events=False)
  
          self.class_accs.append(self.acc)
  
      return self.class_accs
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import copy
  import sys
  import math
  from collections import defaultdict
  import numpy
  import pandas
  from .metrics import Metric
  from ppdet.utils.logger import setup_logger
label_desc: Use image node_id 5 for calling the MCMOTEvaluator obj's underlying member method code with example usage: obj.eval_file(result_filename) and returns: self