<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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