58f241185a4522bb0dd6bac6df5b1abe4f5d6a4f kate Wed May 4 13:22:25 2016 -0700 Shift alleles section code from exists to print routine to allow hide of section to speed up hgGene which is slow on hg19. Part of perf improvements when adding GTEx to hgGene. refs #17244 diff --git src/hg/hgGene/alleles.c src/hg/hgGene/alleles.c index ffccbb0..e930104 100644 --- src/hg/hgGene/alleles.c +++ src/hg/hgGene/alleles.c @@ -1,100 +1,108 @@ // alleles - common Gene haplotype alleles. */ /* Copyright (C) 2014 The Regents of the University of California * See README in this or parent directory for licensing information. */ #include "common.h" #include "web.h" #include "genePredReader.h" #include "vcf.h" #include "haplotypes.h" #include "hgGene.h" +static struct allelesInfo { + struct genePred *gp; + struct vcfFile *vcf; + struct haploExtras *he; + } allelesInfo; + static boolean allelesExists(struct section *section, struct sqlConnection *conn, char *geneId) // Return TRUE if common haplotype alleles exist. { // If there was a reset then clear out settings if (cartUsualBoolean(cart, HAPLO_RESET_ALL, FALSE)) cartRemovePrefix(cart,HAPLO_TABLE "_" ); // Start with the default variables for haplotype retrieval struct haploExtras *he = haplotypeExtrasDefault(database, 0); -section->extras = he; // Need to get genePred struct from geneId char where[128]; -safef(where,sizeof(where),"name = '%s'",geneId); +sqlSafefFrag(where, sizeof(where),"name = '%s'",geneId); struct genePred *gp = genePredReaderLoadQuery(conn,he->geneTable, where); if (gp == NULL || gp->cdsStart == gp->cdsEnd) // Ain't interested in non-protein coding genes { haplotypeExtrasFree(&he); return FALSE; } he->chrom = gp->chrom; // Probably not needed he->justModel = lmCloneString(he->lm, geneId); //he->growTree = FALSE; // Tree growing not needed here // Need to determine the correct vcf file and open it if (haplotypesDiscoverVcfFile(he, gp->chrom) == NULL) { haplotypeExtrasFree(&he); return FALSE; } - -struct vcfFile *vcff = vcfTabixFileMayOpen(he->inFile, NULL, 0, 0,VCF_IGNORE_ERRS, 0); -if (vcff == NULL) +struct vcfFile *vcf = vcfTabixFileMayOpen(he->inFile, NULL, 0, 0,VCF_IGNORE_ERRS, 0); +if (vcf == NULL) { haplotypeExtrasFree(&he); return FALSE; } -vcfFileMakeReusePool(vcff,1024 * 1024); +allelesInfo.gp = gp; +allelesInfo.he = he; +allelesInfo.vcf = vcf; +section->items = &allelesInfo; +return TRUE; +} + +static void allelesPrint(struct section *section, struct sqlConnection *conn, char *geneId) +// Print out common gene haplotype alleles. +{ +struct allelesInfo *info = section->items; +struct vcfFile *vcf = info->vcf; +struct haploExtras *he = info->he; +struct genePred *gp = info->gp; + +vcfFileMakeReusePool(vcf,1024 * 1024); // All or Limit to the 99% boolean rareVars = cartUsualBoolean(cart, HAPLO_RARE_VAR, FALSE); if (rareVars) he->synonymous = TRUE; else he->variantMinPct = HAPLO_COMMON_VARIANT_MIN_PCT; // Lets show the population distribution he->populationsToo = cartUsualBoolean(cart, HAPLO_MAJOR_DIST, FALSE); he->populationsMinor = cartUsualBoolean(cart, HAPLO_MINOR_DIST, FALSE); if (he->populationsToo) he->populationMinPct = 5; else if (he->populationsMinor) { he->populationsMinor = FALSE; cartRemove(cart, HAPLO_MINOR_DIST ); } // Need to generate haplotypes -section->items = geneHapSetForOneModel(he,vcff,gp,TRUE); - -return TRUE;// (section->items != NULL); -} - -static void allelesPrint(struct section *section, - struct sqlConnection *conn, char *geneId) -// Print out common gene haplotype alleles. -{ -struct haploExtras *he = section->extras; -struct haplotypeSet *hapSet = section->items; +struct haplotypeSet *hapSet = geneHapSetForOneModel(he, vcf, gp, TRUE); geneAllelesTableAndControls(cart, geneId, he, hapSet); - haplotypeExtrasFree(&he); } struct section *allelesSection(struct sqlConnection *conn, struct hash *sectionRa) // Create UCSC KG Method section. { struct section *section = sectionNew(sectionRa, HGG_GENE_ALLELES); if (section != NULL) { section->exists = allelesExists; section->print = allelesPrint; } return section; }