58ada3bc410cb2ee88828d95f2be1168328bc0d9 braney Tue Feb 7 10:11:53 2017 -0800 more tweaks to label support for big* files. Added defaultLabelFields and labelSeparator. Also support "none" for both labelFields and defaultLabelFields. diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c index 74ceb60..68ed7c8 100644 --- src/hg/hgTracks/bedTrack.c +++ src/hg/hgTracks/bedTrack.c @@ -35,30 +35,32 @@ static void calculateLabelFields(struct track *track) /* Figure out which fields are available to label a bigBed track. */ { struct bbiFile *bbi = fetchBbiForTrack(track); struct asObject *as = bigBedAsOrDefault(bbi); struct slPair *labelList = buildFieldList(track->tdb, "labelFields", as); if (labelList == NULL) { // There is no labelFields entry in the trackDb. // If there is a name, use it by default, otherwise no label by default if (track->bedSize > 3) slAddHead(&track->labelColumns, slIntNew(3)); } +else if (sameString(labelList->name, "none")) + return; // no label else { // what has the user said to use as a label char cartVar[1024]; safef(cartVar, sizeof cartVar, "%s.label", track->tdb->track); struct hashEl *labelEl = cartFindPrefix(cart, cartVar); struct hash *onHash = newHash(4); // fill hash with fields that should be used for labels if (labelEl == NULL) { // there are no cart variables, so look for defaults struct slPair *defaultLabelList = buildFieldList(track->tdb, "defaultLabelFields", as); if (defaultLabelList != NULL) { @@ -152,42 +154,46 @@ struct bedTabixFile *btf = bedTabixFileMayOpen(bigDataUrl, NULL, 0, 0); list = bedTabixReadBeds(btf, chromName, winStart, winEnd, loader); bedTabixFileClose(&btf); } else if (tg->isBigBed) { // avoid opening an unneeded db connection for bigBed; required not to use mysql for parallel fetch tracks char *scoreFilter = cartOrTdbString(cart, tg->tdb, "scoreFilter", NULL); struct lm *lm = lmInit(0); struct bigBedInterval *bb, *bbList = bigBedSelectRange(tg, chromName, winStart, winEnd, lm); char *bedRow[32]; char startBuf[16], endBuf[16]; int minScore = 0; if (scoreFilter) minScore = atoi(scoreFilter); + if (!trackDbSettingClosestToHomeOn(tg->tdb, "linkIdInName")) tg->itemName = bigBedItemName; + else + { calculateLabelFields(tg); for (bb = bbList; bb != NULL; bb = bb->next) { bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow)); bed = loader(bedRow); bed->label = makeLabel(tg, bb); if (scoreFilter == NULL || bed->score >= minScore) slAddHead(&list, bed); } lmCleanup(&lm); } + } else { struct sqlConnection *conn = hAllocConnTrack(database, tg->tdb); struct sqlResult *sr = NULL; /* limit to items above a specified score */ char *scoreFilterClause = getScoreFilterClause(cart, tg->tdb,NULL); if (doScoreCtFilter && (topTable != NULL) && hTableExists(database, topTable)) { sqlSafef(query, sizeof(query),"select * from %s order by score desc limit %d", topTable, scoreFilterCt); sr = sqlGetResult(conn, query); rowOffset = hOffsetPastBin(database, hDefaultChrom(database), topTable); } else if(scoreFilterClause != NULL && tg->bedSize >= 5) {