docs: def parse_ss_def_file(self, contents):
          '''This parser is forgiving and allows leading whitespace.'''
          mapping = {}
          for l in [l.strip() for l in contents.split('\n') if l.strip() and not(l.strip().startswith('#'))]:
              tokens = l.split()
              if len(tokens) != 2:
                  raise RosettaFileParsingException('Lines in a secondary structure definition file must have exactly two entries.')
  
              positions = parse_range(tokens[0])
              ss = sorted(set(tokens[1].upper()))
              for p in positions:
                  if mapping.get(p) and mapping[p] != ss:
                      raise RosettaFileParsingException('There are conflicting definitions for residue %d (%s and %s).' % (p, ''.join(mapping[p]), ''.join(ss)))
                  mapping[p] = ss
          self.data = mapping