docs: def _process_features(self, limit=None):
          """
          This module provides information for the intrinsic
          and extrinsic genotype features of zebrafish.
          All items here are 'alterations', and are therefore instances.
  
          sequence alteration ID, SO type, abbreviation, and relationship to
          the affected gene, with the gene's ID, symbol,
          and SO type (gene/pseudogene).
  
          Triples created:
          <gene id> a class:
          :param limit:
          :return:
  
          """
          if self.test_mode:
              graph = self.testgraph
          else:
              graph = self.graph
          model = Model(graph)
          LOG.info("Processing features")
          line_counter = 0
          geno = Genotype(graph)
          raw = '/'.join((self.rawdir, self.files['features']['file']))
          with open(raw, 'r', encoding="iso-8859-1") as csvfile:
              filereader = csv.reader(csvfile, delimiter='\t', quotechar='\"')
              for row in filereader:
                  line_counter += 1
                  (genomic_feature_id, feature_so_id,
                   genomic_feature_abbreviation, genomic_feature_name,
                   genomic_feature_type, mutagen, mutagee, construct_id,
                   construct_name, construct_so_id, talen_crispr_id,
                   talen_crispr_nam
                   # , empty
                  ) = row
  
                  if self.test_mode and (
                          genomic_feature_id not in self.test_ids['allele']):
                      continue
  
                  genomic_feature_id = 'ZFIN:' + genomic_feature_id.strip()
                  model.addIndividualToGraph(
                      genomic_feature_id, genomic_feature_name, feature_so_id)
  
                  model.addSynonym(
                      genomic_feature_id, genomic_feature_abbreviation)
                  if construct_id is not None and construct_id != '':
                      construct_id = 'ZFIN:' + construct_id.strip()
                      geno.addConstruct(
                          construct_id, construct_name, construct_so_id)
                      geno.addSequenceDerivesFrom(
                          genomic_feature_id, construct_id)
  
                  # Note, we don't really care about how the variant was derived.
                  # so we skip that.
  
                  # add to the id-label map
                  self.id_label_map[
                      genomic_feature_id] = genomic_feature_abbreviation
                  self.id_label_map[construct_id] = construct_name
  
                  if not self.test_mode and limit is not None and line_counter > limit:
                      break
  
          LOG.info("Done with features")
          return