code: def parse_chromosome_string(job, chromosome_string):
      
      if chromosome_string is None:
          return []
      else:
          assert isinstance(chromosome_string, str)
          chroms = [c.strip() for c in chromosome_string.split(',')]
          if 'canonical' in chroms:
              assert 'canonical_chr' not in chroms, 'Cannot have canonical and canonical_chr'
              chr_prefix = False
              chroms.remove('canonical')
              out_chroms = [str(c) for c in range(1, 23)] + ['X', 'Y']
          elif 'canonical_chr' in chroms:
              assert 'canonical' not in chroms, 'Cannot have canonical and canonical_chr'
              chr_prefix = True
              chroms.remove('canonical_chr')
              out_chroms = ['chr' + str(c) for c in range(1, 23)] + ['chrX', 'chrY']
          else:
              chr_prefix = None
              out_chroms = []
          for chrom in chroms:
              if chr_prefix is not None and chrom.startswith('chr') is not chr_prefix:
                  job.fileStore.logToMaster('chromosome %s does not match the rest that %s begin '
                                            'with "chr".' % (chrom,
                                                             'all' if chr_prefix else 'don\'t'),
                                            level=logging.WARNING)
              out_chroms.append(chrom)
          return chrom_sorted(out_chroms)
docs: Parse a chromosome string into a list.
  
      :param chromosome_string: Input chromosome string
      :return: list of chromosomes to handle
      :rtype: list