docs: def build_bam_tags():
      '''builds the list of BAM tags to be added to output BAMs'''
      #pylint: disable=unused-argument
      def _combine_filters(fam, paired_align, align):
          filters = [x.filter_value for x in [fam, align] if x and x.filter_value]
          if filters:
              return ";".join(filters).replace('; ', ';')
          return None
  
      boolean_tag_value = {True:1}
      tags = [
          BamTag("X0", "Z",
                 ("filter (why the alignment was excluded)"),
                 _combine_filters),
          BamTag("X1", "Z",
                 ("leftmost~rightmost matched pair positions"),
                 lambda fam, pair, align: pair.positions('{left}~{right}')),
          BamTag("X2", "Z",
                 ("L~R CIGARs"),
                 lambda fam, pair, align: pair.cigars('{left}~{right}')),
          BamTag("X3", "i",
                 "unique identifier for this alignment family",
                 lambda fam, pair, align: fam.umi_sequence),
          BamTag("X4", "Z",
                 ("L~R UMT barcodes for this alignment family; because "
                  "of fuzzy matching the family UMT may be distinct "
                  "from the UMT of the original alignment"),
                 lambda fam, pair, align: fam.umt('{left}~{right}')),
          BamTag("X5", "i",
                 "family size (number of align pairs in this family)",
                 lambda fam, pair, align: fam.included_pair_count),
          BamTag("X6", "i",
                 ("presence of this tag signals that this alignment "
                  "would be the template for the consensus alignment"),
                 lambda fam, pair, align: boolean_tag_value.get(fam.is_consensus_template(align), None))]
      return tags