be8645fb43ba545dc342deb80cff297c5b677a5e braney Tue Sep 6 11:11:15 2016 -0700 allow bigGenePred to be used to optimize knownGene on hgTracks #15259 diff --git src/hg/hgTracks/bigBedTrack.c src/hg/hgTracks/bigBedTrack.c index 009f12e..e2b88de 100644 --- src/hg/hgTracks/bigBedTrack.c +++ src/hg/hgTracks/bigBedTrack.c @@ -23,30 +23,32 @@ #include "errCatch.h" #include "trackHub.h" #include "net.h" #include "bigPsl.h" struct bbiFile *fetchBbiForTrack(struct track *track) /* Fetch bbiFile from track, opening it if it is not already open. */ { struct bbiFile *bbi = track->bbiFile; if (bbi == NULL) { char *fileName = NULL; if (track->parallelLoading) // do not use mysql during parallel fetch { fileName = cloneString(trackDbSetting(track->tdb, "bigDataUrl")); + if (fileName == NULL) + fileName = cloneString(trackDbSetting(track->tdb, "bigGeneDataUrl")); } else { struct sqlConnection *conn = NULL; if (!trackHubDatabase(database)) conn = hAllocConnTrack(database, track->tdb); fileName = bbiNameFromSettingOrTable(track->tdb, conn, track->table); hFreeConn(&conn); } #ifdef USE_GBIB_PWD #include "gbib.c" #endif bbi = track->bbiFile = bigBedFileOpen(fileName); @@ -155,32 +157,36 @@ lf = lfFromPslx(psl, sizeMul, isXeno, nameGetsPos, track); lf->original = psl; if (lf->orientation == -1) reverseComplement(seq, strlen(seq)); lf->extra = seq; lf->cds = cds; } else { struct bed *bed = bedLoadN(bedRow, fieldCount); lf = bedMungToLinkedFeatures(&bed, tdb, fieldCount, scoreMin, scoreMax, useItemRgb); } - if (sameString(track->tdb->type, "bigGenePred")) - lf->original = genePredFromBigGenePred(chromName, bb); + if (sameString(track->tdb->type, "bigGenePred") || startsWith("genePred", track->tdb->type)) + { + struct genePred *gp = lf->original = genePredFromBigGenePred(chromName, bb); + lf->extra = gp->name2; + lf->isBigGenePred = TRUE; + } char* mouseOver = restField(bb, mouseOverIdx); lf->mouseOver = mouseOver; // leaks some memory, cloneString handles NULL ifself if (scoreFilter == NULL || lf->score >= minScore) slAddHead(pLfList, lf); } lmCleanup(&lm); } boolean canDrawBigBedDense(struct track *tg) /* Return TRUE if conditions are such that can do the fast bigBed dense data fetch and * draw. */ {