code: def bismark_strand_chart (self):
          
  
          # Specify the order of the different possible categories
          keys = OrderedDict()
          keys['strand_ob']   = { 'name': 'Original bottom strand' }
          keys['strand_ctob'] = { 'name': 'Complementary to original bottom strand' }
          keys['strand_ctot'] = { 'name': 'Complementary to original top strand' }
          keys['strand_ot']   = { 'name': 'Original top strand' }
  
          # See if we have any directional samples
          directional = 0
          d_mode = ''
          for sn in self.bismark_data['alignment'].values():
              if 'strand_directional' in sn.keys():
                  directional += 1
          if directional == len(self.bismark_data['alignment']):
              keys.pop('strand_ctob', None)
              keys.pop('strand_ctot', None)
              d_mode = 'All samples were run with <code>--directional</code> mode; alignments to complementary strands (CTOT, CTOB) were ignored.'
          elif directional > 0:
              d_mode = '{} samples were run with <code>--directional</code> mode; alignments to complementary strands (CTOT, CTOB) were ignored.'.format(directional)
  
          # Config for the plot
          config = {
              'id': 'bismark_strand_alignment',
              'title': 'Bismark: Alignment to Individual Bisulfite Strands',
              'ylab': '% Reads',
              'cpswitch_c_active': False,
              'cpswitch_counts_label': 'Number of Reads'
          }
  
          self.add_section (
              name = 'Strand Alignment',
              anchor = 'bismark-strands',
              description = d_mode,
              plot = bargraph.plot(self.bismark_data['alignment'], keys, config)
          )
docs: Make the strand alignment plot