d9ed1a589b8ab2d03412919fc2e8461cb18d7765 braney Fri Jul 20 12:56:28 2018 -0700 a few more Gencode2 changes diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index c2a8b2f..ddbd396 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -5737,30 +5737,44 @@ if (filterBySet != NULL) { boolean passesThroughFilter = genePredClassFilterBySet(tg, classTable, filterBySet, lf); filterBySetFree(&filterBySet); return passesThroughFilter; } if (sameString(tg->table, "acembly")) { return genePredClassFilterAcembly(tg, classTable, lf); } } return TRUE; } +boolean knownGencodePseudoFilter(struct track *tg, void *item) +/* return TRUE is the user wants to see gencode pseudo genes. */ +{ +struct linkedFeatures *lf = item; +char buffer[1024]; + +safef(buffer, sizeof buffer, "kgId=\"%s\" and transcriptClass=\"pseudo\"", lf->name); +char *class = sqlGetField(database, "knownAttrs", "transcriptClass", buffer); + +if (class != NULL) + return TRUE; +return FALSE; +} + boolean knownGencodeClassFilter(struct track *tg, void *item) { struct linkedFeatures *lf = item; char buffer[1024]; safef(buffer, sizeof buffer, "name=\"%s\" and value=\"basic\"", lf->name); char *class = sqlGetField(database, "knownToTag", "value", buffer); if (class != NULL) return TRUE; return FALSE; } static void loadFrames(struct sqlConnection *conn, struct linkedFeatures *lf) /* Load the CDS part of a genePredExt for codon display */ @@ -5789,39 +5803,44 @@ if (sizeOne != gp->exonCount) errAbort("loadFrames: %s number of exonFrames (%d) != number of exons (%d)", gp->name, sizeOne, gp->exonCount); } sqlFreeResult(&sr); } } void loadKnownGencode(struct track *tg) /* Convert gene pred in window to linked feature. Include alternate name * in "extra" field (usually gene name) */ { char varName[SMALLBUF]; safef(varName, sizeof(varName), "%s.show.comprehensive", tg->tdb->track); boolean showComprehensive = cartUsualBoolean(cart, varName, FALSE); +safef(varName, sizeof(varName), "%s.show.pseudo", tg->tdb->track); +boolean showPseudo = cartUsualBoolean(cart, varName, FALSE); struct sqlConnection *conn = hAllocConn(database); tg->items = connectedLfFromGenePredInRangeExtra(tg, conn, tg->table, chromName, winStart, winEnd, TRUE); /* filter items on selected criteria if filter is available */ if (!showComprehensive) filterItems(tg, knownGencodeClassFilter, "include"); +if (!showPseudo) + filterItems(tg, knownGencodePseudoFilter, "exclude"); + /* if we're close enough to see the codon frames, we better load them! */ if (zoomedToCdsColorLevel) loadFrames(conn, tg->items); hFreeConn(&conn); } void loadGenePredWithName2(struct track *tg) /* Convert gene pred in window to linked feature. Include alternate name * in "extra" field (usually gene name) */ { struct sqlConnection *conn = hAllocConn(database); tg->items = connectedLfFromGenePredInRangeExtra(tg, conn, tg->table, chromName, winStart, winEnd, TRUE); hFreeConn(&conn); @@ -6037,40 +6056,42 @@ } else return lf->name; } char *knownGeneMapName(struct track *tg, void *item) /* Return un-abbreviated gene name. */ { char str2[255]; struct linkedFeatures *lf = item; /* piggy back the protein ID (hgg_prot variable) on hgg_gene variable */ safef(str2, sizeof(str2), "%s&hgg_prot=%s", lf->name, ((struct knownGenesExtra *)(lf->extra))->hgg_prot); return(cloneString(str2)); } -void lookupKnownGeneNames(struct linkedFeatures *lfList, boolean isBigGenePred) +void lookupKnownGeneNames(struct track *tg, boolean isBigGenePred) /* This converts the known gene ID to a gene symbol */ { +struct linkedFeatures *lfList = tg->items; struct linkedFeatures *lf; struct sqlConnection *conn = hAllocConn(database); char *geneSymbol; char *protDisplayId; char *gencodeId; char *mimId; char cond_str[256]; +boolean isGencode2 = trackDbSettingOn(tg->tdb, "isGencode2"); boolean useGeneSymbol= FALSE; boolean useKgId = FALSE; boolean useProtDisplayId = FALSE; boolean useMimId = FALSE; boolean useGencodeId = FALSE; struct hashEl *knownGeneLabels = cartFindPrefix(cart, "knownGene.label"); struct hashEl *label; boolean labelStarted = FALSE; if (hTableExists(database, "kgXref")) { char omimLabel[48]; safef(omimLabel, sizeof(omimLabel), "omim%s", cartString(cart, "db")); @@ -6123,43 +6144,55 @@ sqlSafefFrag(cond_str, sizeof cond_str,"kgID='%s'", lf->name); geneSymbol = sqlGetField(database, "kgXref", "geneSymbol", cond_str); } if (geneSymbol != NULL) { dyStringAppend(name, geneSymbol); } labelStarted = TRUE; } if (useGencodeId) { if (labelStarted) dyStringAppendC(name, '/'); else labelStarted = TRUE; if ( isBigGenePred ) { - gencodeId = gp->name2; + gencodeId = isGencode2 ? gp->name : gp->name2; } else { + if (isGencode2) + gencodeId = lf->name; + else + { sqlSafefFrag(cond_str, sizeof(cond_str), "name='%s'", lf->name); gencodeId = sqlGetField(database, "knownGene", "alignID", cond_str); } + } dyStringAppend(name, gencodeId); } if (useKgId) { if (labelStarted) dyStringAppendC(name, '/'); else labelStarted = TRUE; + if (isGencode2) + { + sqlSafefFrag(cond_str, sizeof(cond_str), "name='%s'", lf->name); + char *ucId = sqlGetField(database, "knownGene", "alignID", cond_str); + dyStringAppend(name, ucId); + } + else dyStringAppend(name, lf->name); } if (useProtDisplayId) { if (labelStarted) dyStringAppendC(name, '/'); else labelStarted = TRUE; if ( isBigGenePred ) { dyStringAppend(name, gp->geneName2); } else { if (lf->extra != NULL) { dyStringAppend(name, (char *)lf->extra); @@ -6261,42 +6294,42 @@ boolean showComprehensive = cartUsualBoolean(cart, varName, FALSE); if (!showComprehensive) newList = stripLinkedFeaturesWithoutBitInScore(lfList, BIT_BASIC); } slSort(&newList, linkedFeaturesCmp); tg->items = newList; tg->itemColor = bigGenePredColor; tg->itemNameColor = bigGenePredColor; } void loadKnownGene(struct track *tg) /* Load up known genes. */ { struct trackDb *tdb = tg->tdb; -char *isGencode = trackDbSetting(tdb, "isGencode"); +boolean isGencode = trackDbSettingOn(tdb, "isGencode") || trackDbSettingOn(tdb, "isGencode2"); char *bigGenePred = trackDbSetting(tdb, "bigGeneDataUrl"); struct udcFile *file; boolean isBigGenePred = FALSE; if ((bigGenePred != NULL) && ((file = udcFileMayOpen(bigGenePred, udcDefaultDir())) != NULL)) { isBigGenePred = TRUE; udcFileClose(&file); - loadKnownBigGenePred(tg, isGencode != NULL); + loadKnownBigGenePred(tg, isGencode); } -else if (isGencode == NULL) +else if (!isGencode) loadGenePredWithName2(tg); else loadKnownGencode(tg); char varName[SMALLBUF]; safef(varName, sizeof(varName), "%s.show.noncoding", tdb->track); boolean showNoncoding = cartUsualBoolean(cart, varName, TRUE); safef(varName, sizeof(varName), "%s.show.spliceVariants", tdb->track); boolean showSpliceVariants = cartUsualBoolean(cart, varName, TRUE); if (!showNoncoding) tg->items = stripShortLinkedFeatures(tg->items); if (!showSpliceVariants) { if (isBigGenePred) { @@ -6315,31 +6348,31 @@ "select transcript from %s where chrom=\"%s\" and chromStart < %d && chromEnd > %d", canonicalTable, chromName, winEnd, winStart); struct sqlResult *sr = sqlGetResult(conn, query); char **row; while ((row = sqlNextRow(sr)) != NULL) hashAdd(hash, row[0], NULL); sqlFreeResult(&sr); hFreeConn(&conn); /* Get rid of non-canonical items. */ tg->items = stripLinkedFeaturesNotInHash(tg->items, hash); hashFree(&hash); } } } -lookupKnownGeneNames(tg->items, isBigGenePred); +lookupKnownGeneNames(tg, isBigGenePred); limitVisibility(tg); } Color knownGeneColorCalc(struct track *tg, void *item, struct hvGfx *hvg) /* Return color to draw known gene in. */ { struct linkedFeatures *lf = item; int col = tg->ixColor; struct rgbColor *normal = &(tg->color); struct rgbColor lighter; struct rgbColor lightest; struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256];