def _rm_parse_header_line(parts, meta_data):
meta_data[ALIG_SCORE_KEY] = parts[<NUM_LIT:0>]<EOL>meta_data[PCENT_SUBS_KEY] = float(parts[<NUM_LIT:1>])<EOL>meta_data[PCENT_S1_INDELS_KEY] = float(parts[<NUM_LIT:2>])<EOL>meta_data[PCENT_S2_INDELS_KEY] = float(parts[<NUM_LIT:3>])<EOL>meta_data[ANNOTATION_KEY] = "<STR_LIT>"<EOL>if parts[<NUM_LIT:8>] == "<STR_LIT:C>":<EOL><INDENT>meta_data[UNKNOWN_RM_HEADER_FIELD_KEY] = parts[<NUM_LIT>]<EOL>meta_data[RM_ID_KEY] = int(parts[<NUM_LIT>])<EOL><DEDENT>else:<EOL><INDENT>meta_data[UNKNOWN_RM_HEADER_FIELD_KEY] = parts[<NUM_LIT:12>]<EOL>meta_data[RM_ID_KEY] = int(parts[<NUM_LIT>])<EOL><DEDENT>
parse a repeatmasker alignment header line and place the extracted meta-data
into the provided dictionary. An example header line is::

  239 29.42 1.92 0.97 chr1 11 17 (41) C XX#YY (74) 104 1 m_b1s502i1 4

If the alignment is to the consensus, this will have 14 fields; to the
reverse complement of the repeat consensus and it'll have 15. Fields as
follows:

=====  ========    ==========================================================
Num    Value       description
=====  ========    ==========================================================
0      239         Smith-Waterman score of the match
1      29.42       percent substitutions in match compared to the consensus
2      1.92        percent bases opposite gap in query seq (deleted bp)
3      0.97        percent bases opposite gap in repeat consensus (insert bp)
4      chr1        The name of the reference sequence (usually genomic chrom)
5      11          Start location in reference; always pos strand, I think..
6      17          End location in reference; always pos strand, I think..
7      (41)        Distance to end of ref (alt., neg strand co-ord of end)
8      C           Alignment is to rev. comp. of consensus. Ommited otherwise
8/9    XX#YY       XX is the name of the repeat and YY is the family
9/10   (74)        if +'ve, strt coord; else bases before start on neg strand
10/11  104         if +'ve, end coord; else start of match in pos strand
11/12  1           if +'ve, num bases aftr mtch to end; else end in + coords
12/13  m_b1s5..    ....?
13/14  4           unique ID
=====  ========    ==========================================================

Note that repeat-masker calls the larger coordinate the start when the match
is to the reverse complement; we swap these internally so start < end always,
regardless of whether the match is to the consensus or the reverse complement
of the consensus

Each field is mapped to a key as follows

=====  =================================================================
Num    Key (these are defined in pyokit.datastruct.multipleAlignment.py)
=====  =================================================================
0      ALIG_SCORE_KEY
1      PCENT_SUBS_KEY
2      PCENT_S1_INDELS_KEY
3      PCENT_S2_INDELS_KEY
4      S1_NAME_KEY
5      S1_START_KEY
6      S1_END_KEY
7      S1_END_NEG_STRAND_KEY
8      S2_REVERSE_COMP_KEY
8/9    S2_NAME_KEY
9/10   S2_START_KEY (S2 + strand) / S2_START_NEG_STRAND_KEY (S2 - strand)
10/11  S2_END_KEY (S2 + strand) / S2_START_KEY (S2 - strand)
11/12  S2_END_NEG_STRAND_KEY (S2 + strand) / S2_END_KEY (S2 - strand)
12/13  UNKNOWN_RM_HEADER_FIELD_KEY
13/14  RM_ID_KEY
=====  =================================================================

:param parts:     the header line, as a tokenized list.
:param meta_data: dictionary; resultant key-value pairs placed into this.