code: def _process_phenotypicseries(self, limit):
          
          if self.test_mode:
              graph = self.testgraph
          else:
              graph = self.graph
          LOG.info("getting phenotypic series titles")
          model = Model(graph)
          line_counter = 0
          src_key = 'phenotypicSeries'
          col = self.files[src_key]['columns']
          raw = '/'.join((self.rawdir, self.files[src_key]['file']))
          with open(raw) as reader:
              line = reader.readline()  # title
              line = reader.readline()  # date downloaded
              line = reader.readline()  # copyright
              line = reader.readline()  # <blank>
  
              line = reader.readline().strip()  # column headers
              line_counter = 5
              row = line.split('\t')
              if row != col:  # assert
                  LOG.error('Expected  %s to have columns: %s', raw, col)
                  LOG.error('But Found %s to have columns: %s', raw, row)
                  raise AssertionError('Incomming data headers have changed.')
  
              for line in reader:
                  line_counter += 1
                  row = line.strip().split('\t')
                  if row and len(row) != len(col):
                      LOG.warning(
                          'Unexpected input on line: %i  got: %s', line_counter, row)
                      continue
                  ps_label = row[col.index('Phenotypic Series Title')].strip()
                  ps_num = row[col.index('Phenotypic Series number')].strip()
                  omimps_curie = 'OMIMPS:' + ps_num
                  model.addClassToGraph(omimps_curie, ps_label)
  
                  if not self.test_mode and limit is not None and line_counter > limit:
                      break
docs: Creates classes from the OMIM phenotypic series list.
          These are grouping classes to hook the more granular OMIM diseases.
          # TEC what does 'hook' mean here?
  
          :param limit:
          :return: