docs: def process_catalog(self, limit=None):
          """
          :param limit:
          :return:
  
          """
          raw = '/'.join((self.rawdir, self.files['catalog']['file']))
          LOG.info("Processing Data from %s", raw)
          efo_ontology = RDFGraph(False, "EFO")
          LOG.info("Loading EFO ontology in separate rdf graph")
          efo_ontology.parse(self.files['efo']['url'], format='xml')
          efo_ontology.bind_all_namespaces()
          LOG.info("Finished loading EFO ontology")
  
          so_ontology = RDFGraph(False, "SO")
          LOG.info("Loading SO ontology in separate rdf graph")
          so_ontology.parse(self.files['so']['url'], format='xml')
          so_ontology.bind_all_namespaces()
          LOG.info("Finished loading SO ontology")
  
          with open(raw, 'r', encoding="iso-8859-1") as csvfile:
              filereader = csv.reader(csvfile, delimiter='\t')
              header = next(filereader, None)  # the header row
              header_len = len(header)
              LOG.info('header length:\t %i', header_len)
  
              for row in filereader:
                  if not row:
                      pass
                  else:
                      if header_len != len(row):
                          LOG.error('BadRow: %i has %i columns', filereader.line_num, row)
  
                      (date_added_to_catalog,
                       pubmed_num,
                       first_author,
                       pub_date,
                       journal,
                       link,
                       study_name,
                       disease_or_trait,
                       initial_sample_description,
                       replicate_sample_description,
                       region,
                       chrom_num,
                       chrom_pos,
                       reported_gene_nums,
                       mapped_gene,
                       upstream_gene_num,
                       downstream_gene_num,
                       snp_gene_nums,
                       upstream_gene_distance,
                       downstream_gene_distance,
                       strongest_snp_risk_allele,
                       snps,
                       merged,
                       snp_id_current,
                       context,
                       intergenic_flag,
                       risk_allele_frequency,
                       pvalue,
                       pvalue_mlog,
                       pvalue_text,
                       or_or_beta,
                       confidence_interval_95,
                       platform_with_snps_passing_qc,
                       cnv_flag,
                       mapped_trait,
                       mapped_trait_uri,
                       study_accession,
                       GENOTYPING_TECHNOLOGY
                      ) = row
  
                      if self.test_mode:
                          continue
  
  # 06-May-2015	25917933
  #   Zai CC	20-Nov-2014	J Psychiatr Res	http://europepmc.org/abstract/MED/25917933
  # A genome-wide association study of suicide severity scores in bipolar disorder.
  # Suicide in bipolar disorder
  # 959 European ancestry individuals	NA
  # 10p11.22	10	32704340	C10orf68, CCDC7, ITGB1	CCDC7
  # rs7079041-A	rs7079041	0	7079041	intron	0		2E-6	5.698970
  
                      variant_curie, variant_type = self._get_curie_and_type_from_id(
                          strongest_snp_risk_allele)
  
                      if strongest_snp_risk_allele.strip() == '':
                          LOG.debug(
                              "No strongest SNP risk allele for %s:\n%s",
                              pubmed_num, str(row))
                          # still consider adding in the EFO terms
                          # for what the study measured?
                          continue
  
                      if variant_type == 'snp':
                          self._add_snp_to_graph(
                              variant_curie, strongest_snp_risk_allele, chrom_num,
                              chrom_pos, context, risk_allele_frequency)
  
                          self._add_deprecated_snp(
                              variant_curie, snp_id_current, merged, chrom_num, chrom_pos)
  
                          self._add_snp_gene_relation(
                              variant_curie, snp_gene_nums, upstream_gene_num,
                              downstream_gene_num)
                      elif variant_type == 'haplotype':
                          self._process_haplotype(
                              variant_curie, strongest_snp_risk_allele, chrom_num,
                              chrom_pos, context, risk_allele_frequency, mapped_gene,
                              so_ontology)
                      elif variant_type is None:
                          LOG.warning(
                              "There's a snp id i can't manage: %s",
                              strongest_snp_risk_allele)
                          continue
  
                      description = self._make_description(
                          disease_or_trait, initial_sample_description,
                          replicate_sample_description,
                          platform_with_snps_passing_qc, pvalue)
  
                      self._add_variant_trait_association(
                          variant_curie, mapped_trait_uri, efo_ontology,
                          pubmed_num, description)
  
                      if not self.test_mode and (
                              limit is not None and filereader.line_num > limit):
                          break
  
          # TODO loop through the location hash,
          # and make all snps at that location equivalent
          for l in self.id_location_map:
              snp_ids = self.id_location_map[l]
              if len(snp_ids) > 1:
                  LOG.info("%s has >1 snp id: %s", l, str(snp_ids))
          return