docs: def merge_forev_aln(self, forward_aln_list, reverse_aln_list, outputs):
          '''
          merge_forev_aln - Merges forward and reverse alignments for a given run
  
          Parameters
          ----------
          aln_list : array
              List of the forward and reverse alignments for each of the runs
              given to graftM. **MUST** be the following pattern:
              [forward_run1, reverse_run1, forward_run2, reverse_run2 ...]
          outputs : array
              List of paths to output file to which the merged alignments from the
              aln_list will go into. Must be exactly half the size of the aln_list
              (i.e. one output file for every forward and reverse file provided)
  
          Returns
          -------
          Nothing - output files are known.
          '''
  
          orfm_regex = OrfM.regular_expression()
          def remove_orfm_end(records):
  
              new_dict = {}
  
              for key, record in records.iteritems():
                  orfmregex = orfm_regex.match(key)
                  if orfmregex:
                      new_dict[orfmregex.groups(0)[0]] = record
                  else:
                      new_dict[key] = record
              return new_dict
  
          for idx, (forward_path, reverse_path) in enumerate(zip(forward_aln_list, reverse_aln_list)):
              output_path = outputs[idx]
              logging.info('Merging pair %s, %s' % (os.path.basename(forward_path), os.path.basename(reverse_path)))
              forward_reads = SeqIO.parse(forward_path, 'fasta')
              reverse_reads = remove_orfm_end(SeqIO.to_dict(SeqIO.parse(reverse_path, 'fasta')))
  
              with open(output_path, 'w') as out:
                  for forward_record in forward_reads:
                      regex_match = orfm_regex.match(forward_record.id)
                      if regex_match:
                          id = regex_match.groups(0)[0]
                      else:
                          id = forward_record.id
                      forward_sequence = str(forward_record.seq)
                      try:
                          reverse_sequence = str(reverse_reads[id].seq)
                          new_seq = ''
                          if len(forward_sequence) == len(reverse_sequence):
                              for f, r in zip(forward_sequence, reverse_sequence):
                                  if f == r:
                                      new_seq += f
                                  elif f == '-' and r != '-':
                                      new_seq += r
                                  elif r == '-' and f != '-':
                                      new_seq += f
                                  elif f != '-' and r != '-':
                                      if f != r:
                                          new_seq += f
                                  else:
                                      new_seq += '-'
                          else:
                              logging.error('Alignments do not match')
                              raise Exception('Merging alignments failed: Alignments do not match')
                          out.write('>%s\n' % forward_record.id)
                          out.write('%s\n' % (new_seq))
                          del reverse_reads[id]
                      except:
  
                          out.write('>%s\n' % forward_record.id)
                          out.write('%s\n' % (forward_sequence))
                  for record_id, record in reverse_reads.iteritems():
                      out.write('>%s\n' % record.id)
                      out.write('%s\n' % (str(record.seq)))