def calculate_normalization_metrics(genome_dict: dict) ->None:
    """
    Calculates the normalized abundance values for each header's RefSeq instance in genome_dict
        1. Reads per kilobase (RPK) is calculated using the reference sequence's length and number of reads (provided
        by the user via CLI)
        2. Fragments per kilobase per million mappable reads (FPKM) is calculated from the number of fragments
        (this is different from reads by, in a paired-end library, forward and reverse pair makes up one fragment)
        normalized by the reference sequence length and the number of reads mapped.
        2. Transcripts per million (TPM) is calculated similarly to FPKM but the order of operations is different.

    :param genome_dict: A dictionary of RefSeq instances indexed by headers (sequence names)
    :return: None
    """
    rpk_sum = 0
    for header in sorted(genome_dict.keys()):
        ref_seq = genome_dict[header]
        ref_seq.calc_rpk(ref_seq.weight_total)
        rpk_sum += ref_seq.rpk
    for header in sorted(genome_dict.keys()):
        ref_seq = genome_dict[header]
        if ref_seq.weight_total == 0:
            continue
        ref_seq.calc_fpkm(ref_seq.weight_total)
    denominator = rpk_sum / 1000000.0
    for header in genome_dict.keys():
        ref_seq = genome_dict[header]
        ref_seq.calc_tpm(denominator)
    return
