def store_gff_as_dict(gff_path, evalue_threshold=1e-06):
    """
    :param gff_path: path to gff file from barrnap
    :param evalue_threshold: max similarity e-value of predicted subunit to add to the dictionary
    :return: dictionary: {read_name: [(subunit_name, start_pos, end_pos, strand, e-value), ...]}
    """
    gff_dict = {}
    gff_set_dict = {}
    with open(gff_path) as gff:
        gff.readline()  # skip header
        for line in gff:
            read_name = line.split('\t')[0]
            start_pos = int(line.split('\t')[3]) - 1
            end_pos = int(line.split('\t')[4]) - 1
            strand = line.split('\t')[6]
            evalue = float(line.split('\t')[5])
            if evalue > float(evalue_threshold):
                continue
            subunit_name = line.split('\t')[8].split(';')[0].split('=')[1]
            gff_reduced_entry = (subunit_name, start_pos, end_pos, strand)
            if read_name in gff_dict:
                if gff_reduced_entry not in gff_set_dict[read_name]:
                    gff_dict[read_name].append(gff_reduced_entry)
                    gff_set_dict[read_name].add(gff_reduced_entry)
            else:
                gff_dict[read_name] = [gff_reduced_entry]
                gff_set_dict[read_name] = {gff_reduced_entry}
    return gff_dict