docs: def add_drop_down(self, col_number, col_label):
          """
          Add a correctly formatted drop-down-menu for given col_label,
          if required or suggested.
          Otherwise do nothing.
  
          Parameters
          ----------
          col_number : int
                  grid position at which to add a drop down menu
          col_label : str
                  column name
          """
          if col_label.endswith('**') or col_label.endswith('^^'):
              col_label = col_label[:-2]
          # add drop-down for experiments
          if col_label == "experiments":
              if 'measurements' in self.contribution.tables:
                  meas_table = self.contribution.tables['measurements'].df
                  if 'experiment' in meas_table.columns:
                      exps = meas_table['experiment'].unique()
                      self.choices[col_number] = (sorted(exps), False)
                      self.grid.SetColLabelValue(col_number, col_label + "**")
              return
          #
          if col_label == 'method_codes':
              self.add_method_drop_down(col_number, col_label)
          elif col_label == 'magic_method_codes':
              self.add_method_drop_down(col_number, 'method_codes')
          elif col_label in ['specimens', 'samples', 'sites', 'locations']:
              if col_label in self.contribution.tables:
                  item_df = self.contribution.tables[col_label].df
                  item_names = item_df.index.unique() #[col_label[:-1]].unique()
                  self.choices[col_number] = (sorted(item_names), False)
          elif col_label in ['specimen', 'sample', 'site', 'location']:
              if col_label + "s" in self.contribution.tables:
                  item_df = self.contribution.tables[col_label + "s"].df
                  item_names = item_df.index.unique() #[col_label[:-1]].unique()
                  self.choices[col_number] = (sorted(item_names), False)
          # add vocabularies
          if col_label in self.contribution.vocab.suggested:
              typ = 'suggested'
          elif col_label in self.contribution.vocab.vocabularies:
              typ = 'controlled'
          else:
              return
  
          # add menu, if not already set
          if col_number not in list(self.choices.keys()):
              if typ == 'suggested':
                  self.grid.SetColLabelValue(col_number, col_label + "^^")
                  controlled_vocabulary = self.contribution.vocab.suggested[col_label]
              else:
                  self.grid.SetColLabelValue(col_number, col_label + "**")
                  controlled_vocabulary = self.contribution.vocab.vocabularies[col_label]
              #
              stripped_list = []
              for item in controlled_vocabulary:
                  try:
                      stripped_list.append(str(item))
                  except UnicodeEncodeError:
                      # skips items with non ASCII characters
                      pass
  
              if len(stripped_list) > 100:
              # split out the list alphabetically, into a dict of lists {'A': ['alpha', 'artist'], 'B': ['beta', 'beggar']...}
                  dictionary = {}
                  for item in stripped_list:
                      letter = item[0].upper()
                      if letter not in list(dictionary.keys()):
                          dictionary[letter] = []
                      dictionary[letter].append(item)
                  stripped_list = dictionary
  
              two_tiered = True if isinstance(stripped_list, dict) else False
              self.choices[col_number] = (stripped_list, two_tiered)
          return