docs: def find_omim_type(self):
          '''
          This f(x) needs to be rehomed and shared.
          Use OMIM's discription of their identifiers
          to heuristically partition them into genes | phenotypes-diseases
          type could be
              - `obsolete`  Check `omim_replaced`  populated as side effect
              - 'Suspected' (phenotype)  Ignoring thus far
              - 'gene'
              - 'Phenotype'
              - 'heritable_phenotypic_marker'   Probable phenotype
              - 'has_affected_feature'  Use as both a gene and a phenotype
  
          :return hash of omim_number to ontology_curie
          '''
          myfile = '/'.join((self.rawdir, self.files['mimtitles']['file']))
          LOG.info("Looping over: %s", myfile)
          omim_type = {}
  
          col = [
              'Prefix',                           # prefix
              'Mim Number',                       # omim_id
              'Preferred Title; symbol',          # pref_label
              'Alternative Title(s); symbol(s)',  # alt_label
              'Included Title(s); symbols'        # inc_label
          ]
  
          with open(myfile, 'r') as fh:
              reader = csv.reader(fh, delimiter='\t')
              # Copyright (c) ...
              header = next(reader)
              # Generated: 2018-11-29
              header = next(reader)
              # date_generated = header[0].split(':')[1].strip()
              header = next(reader)
              header[0] = header[0][2:]
              if header != col:
                  LOG.error(
                      'Header is not as expected: %s',
                      set(header).symmetric_difference(set(col)))
                  exit(-1)
  
              for row in reader:
                  if row[0][0] == '#':
                      continue
                  prefix = row[col.index('Prefix')]
                  pref_label = row[col.index('Preferred Title; symbol')]
                  omim_id = row[col.index('Mim Number')]
  
                  if prefix == 'Caret':  # moved|removed|split -> moved twice
                      # populating a dict from an omim to a set of omims
                      # here as a side effect which is less than ideal
  
                      destination = pref_label  # they overload the column semantics
                      if destination[:9] == 'MOVED TO ':
                          token = destination.split(' ')
                          rep = token[2]
                          if not re.match(r'^[0-9]{6}$', rep):
                              LOG.error(
                                  'Malformed omim replacement %s in %s  line %i',
                                  rep, myfile, reader.line_num)
                              # clean up oddities I know about
                              if rep[0] == '{' and rep[7] == '}':
                                  rep = rep[1:6]
                              if len(rep) == 7 and rep[6] == ',':
                                  rep = rep[:5]
                          # asuming splits are typically to both gene & phenotype
                          if len(token) > 3:
                              self.omim_replaced[omim_id] = {rep, token[4]}
                          else:
                              self.omim_replaced[omim_id] = {rep}
                  elif prefix == 'Asterisk':  # declared as gene
                      omim_type[omim_id] = self.globaltt['gene']
                  elif prefix == 'NULL':
                      #  potential model of disease?
                      omim_type[omim_id] = self.globaltt['Suspected']   # NCIT:C71458
                  elif prefix == 'Number Sign':
                      omim_type[omim_id] = self.globaltt['Phenotype']
                  elif prefix == 'Percent':
                      omim_type[omim_id] = self.globaltt['heritable_phenotypic_marker']
                  elif prefix == 'Plus':
                      # to be interperted as  a gene and/or a phenotype
                      omim_type[omim_id] = self.globaltt['has_affected_feature']
                  else:
                      LOG.error('Unknown OMIM type line %i', reader.line_num)
          return omim_type