docs: def _process_targeting_reagents(self, reagent_type, limit=None):
          """
          This method processes the gene targeting knockdown reagents,
          such as morpholinos, talens, and crisprs.
          We create triples for the reagents and pass the data into a hash map
          for use in the pheno_enviro method.
  
          Morpholinos work similar to RNAi.
          TALENs are artificial restriction enzymes
              that can be used for genome editing in situ.
          CRISPRs are knockdown reagents, working similar to RNAi
              but at the transcriptional level instead of mRNA level.
  
          You can read more about TALEN and CRISPR techniques in review
          [Gaj et al]
          http://www.cell.com/trends/biotechnology/abstract/S0167-7799%2813%2900087-5
  
          TODO add sequences
  
          Triples created:
          <reagent_id> is a gene_targeting_reagent
          <reagent_id> rdfs:label <reagent_symbol>
          <reagent_id> has type <reagent_so_id>
          <reagent_id> has comment <note>
  
          <publication_id> is an individual
          <publication_id> mentions <morpholino_id>
          :param reagent_type: should be one of: morph, talen, crispr
          :param limit:
          :return:
  
          """
  
          LOG.info("Processing Gene Targeting Reagents")
          if self.test_mode:
              graph = self.testgraph
          else:
              graph = self.graph
          line_counter = 0
          model = Model(graph)
          geno = Genotype(graph)
  
          if reagent_type not in ['morph', 'talen', 'crispr']:
              LOG.error("You didn't specify the right kind of file type.")
              return
  
          raw = '/'.join((self.rawdir, self.files[reagent_type]['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
  
                  if reagent_type in ['morph', 'crispr']:
                      try:
                          (gene_num, gene_so_id, gene_symbol, reagent_num,
                           reagent_so_id, reagent_symbol, reagent_sequence,
                           publication, note) = row
                      except ValueError:
                          # Catch lines without publication or note
                          (gene_num, gene_so_id, gene_symbol, reagent_num,
                           reagent_so_id, reagent_symbol, reagent_sequence,
                           publication) = row
                  elif reagent_type == 'talen':
                      (gene_num, gene_so_id, gene_symbol, reagent_num,
                       reagent_so_id, reagent_symbol, reagent_sequence,
                       reagent_sequence2, publication, note) = row
                  else:
                      # should not get here
                      return
  
                  reagent_id = 'ZFIN:' + reagent_num.strip()
                  gene_id = 'ZFIN:' + gene_num.strip()
  
                  self.id_label_map[reagent_id] = reagent_symbol
  
                  if self.test_mode and (
                          reagent_num not in self.test_ids['morpholino'] and
                          gene_num not in self.test_ids['gene']):
                      continue
  
                  geno.addGeneTargetingReagent(reagent_id, reagent_symbol,
                                               reagent_so_id, gene_id)
                  # The reagent targeted gene is added
                  # in the pheno_environment processing function.
  
                  # Add publication
                  # note that the publications can be comma-delimited,
                  # like: ZDB-PUB-100719-4,ZDB-PUB-130703-22
                  if publication != '':
                      pubs = re.split(r',', publication.strip())
                      for pub in pubs:
                          pub_id = 'ZFIN:' + pub.strip()
                          ref = Reference(graph, pub_id)
                          ref.addRefToGraph()
                          graph.addTriple(pub_id, self.globaltt['mentions'], reagent_id)
  
                  # Add comment?
                  if note != '':
                      model.addComment(reagent_id, note)
  
                  # use the variant hash for reagents to list the affected genes
                  if reagent_id not in self.variant_loci_genes:
                      self.variant_loci_genes[reagent_id] = [gene_id]
                  else:
                      if gene_id not in self.variant_loci_genes[reagent_id]:
                          self.variant_loci_genes[reagent_id] += [gene_id]
  
                  if not self.test_mode and limit is not None and line_counter > limit:
                      break
  
          LOG.info("Done with Reagent type %s", reagent_type)
          return