docs: def process_samples(kraken_reports_fp, max_rank, min_rank):
      """
      Parse all kraken-report data files into sample counts dict
      and store global taxon id -> taxonomy data
      """
      taxa = OrderedDict()
      sample_counts = OrderedDict()
      for krep_fp in kraken_reports_fp:
          if not osp.isfile(krep_fp):
              raise RuntimeError("ERROR: File '{}' not found.".format(krep_fp))
  
          # use the kraken report filename as the sample ID
          sample_id = osp.splitext(osp.split(krep_fp)[1])[0]
  
          with open(krep_fp, "rt") as kf:
              try:
                  kdr = csv.DictReader(kf, fieldnames=field_names, 
                                       delimiter="\t")
                  kdata = [entry for entry in kdr][1:]
              except OSError as oe:
                  raise RuntimeError("ERROR: {}".format(oe))
  
          scounts, staxa = parse_kraken_report(kdata, max_rank=max_rank, 
                                               min_rank=min_rank)
  
          # update master records
          taxa.update(staxa)
          sample_counts[sample_id] = scounts
  
      return sample_counts, taxa