6f726d2bcdb4fca993c06cf2181dce97b061702d kate Thu Feb 22 08:59:49 2018 -0800 Add support for custom tracks and hub tracks. refs #17512 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index fb05ce6..9869120 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -4512,30 +4512,32 @@ ( sameWord(type, "bed") || sameWord(type, "bed5FloatScore") || sameWord(type, "bed6FloatScore") || sameWord(type, "bedDetail") || sameWord(type, "bigBed") || sameWord(type, "bigGenePred") || sameWord(type, "broadPeak") || sameWord(type, "chain") || sameWord(type, "factorSource") || sameWord(type, "genePred") || sameWord(type, "gvf") || sameWord(type, "narrowPeak") || sameWord(type, "psl") || sameWord(type, "barChart") || sameWord(type, "bigBarChart") +|| sameWord(type, "interact") +|| sameWord(type, "bigInteract") //|| track->loadItems == loadSimpleBed //|| track->bedSize >= 3 // should pick up several ENCODE BED-Plus types. ) && track->canPack ) { return TRUE; } return FALSE; } boolean isTypeUseItemNameAsKey(struct track *track) /* Check if track type is like expRatio and key is just item name. */ { @@ -6099,49 +6101,54 @@ if (ct->dbTrack) tg->loadItems = wigLoadItems; else tg->loadItems = ctWigLoadItems; tg->customPt = ct; tg->nextItemButtonable = FALSE; } else if (sameString(type, "bigWig")) { tg = trackFromTrackDb(tdb); tg->bbiFile = ct->bbiFile; tg->nextItemButtonable = FALSE; if (trackShouldUseAjaxRetrieval(tg)) tg->loadItems = dontLoadItems; } -else if (sameString(type, "bigBed")|| sameString(type, "bigGenePred")|| sameString(type, "bigNarrowPeak") || sameString(type, "bigPsl") || sameString(type, "bigMaf")|| sameString(type, "bigChain") || sameString(type, "bigBarChart")) +else if (sameString(type, "bigBed")|| sameString(type, "bigGenePred") || + sameString(type, "bigNarrowPeak") || sameString(type, "bigPsl") || + sameString(type, "bigMaf")|| sameString(type, "bigChain") || + sameString(type, "bigBarChart") || sameString(type, "bigInteract")) { struct bbiFile *bbi = ct->bbiFile; /* Find field counts, and from that revise the tdb->type to be more complete. */ char extra = (bbi->fieldCount > bbi->definedFieldCount ? '+' : '.'); char typeBuf[64]; if (sameString(type, "bigGenePred")) safef(typeBuf, sizeof(typeBuf), "bigGenePred"); else if (sameString(type, "bigNarrowPeak")) safef(typeBuf, sizeof(typeBuf), "bigNarrowPeak"); else if (sameString(type, "bigChain")) safef(typeBuf, sizeof(typeBuf), "bigChain"); else if (sameString(type, "bigMaf")) safef(typeBuf, sizeof(typeBuf), "bigMaf"); else if (sameString(type, "bigPsl")) safef(typeBuf, sizeof(typeBuf), "bigPsl"); else if (sameString(type, "bigBarChart")) safef(typeBuf, sizeof(typeBuf), "bigBarChart"); + else if (sameString(type, "bigInteract")) + safef(typeBuf, sizeof(typeBuf), "bigInteract"); else safef(typeBuf, sizeof(typeBuf), "bigBed %d %c", bbi->definedFieldCount, extra); tdb->type = cloneString(typeBuf); /* Finish wrapping track around tdb. */ tg = trackFromTrackDb(tdb); tg->bbiFile = bbi; tg->nextItemButtonable = TRUE; if (trackShouldUseAjaxRetrieval(tg)) tg->loadItems = dontLoadItems; } else if (sameString(type, "bedGraph")) { tg = trackFromTrackDb(tdb); tg->canPack = FALSE; @@ -6269,30 +6276,36 @@ tg->customPt = ct; } else if (sameString(type, "pgSnp")) { tg = trackFromTrackDb(tdb); pgSnpCtMethods(tg); //tg->mapItemName = ctMapItemName; tg->customPt = ct; } else if (sameString(type, "barChart")) { tg = trackFromTrackDb(tdb); barChartCtMethods(tg); tg->customPt = ct; } +else if (sameString(type, "interact")) + { + tg = trackFromTrackDb(tdb); + interactCtMethods(tg); + tg->customPt = ct; + } else { errAbort("Unrecognized custom track type %s", type); } tg->hasUi = TRUE; tg->customTrack = TRUE;// Explicitly declare this a custom track for flatTrack ordering freez(&typeDupe); return tg; } char *getPositionFromCustomTracks() /* Parses custom track data to get the position variable * return - The first chromosome position variable found in the * custom track data. */