ff4af73ba2a52b18ce5423aae3104fae1d1a3473 hiram Fri Nov 20 17:25:43 2020 -0800 converted to single file for json data instead of one file for each track refs #21980 diff --git src/hg/hgTracks/wigTrack.c src/hg/hgTracks/wigTrack.c index 5375908..488f7b1 100644 --- src/hg/hgTracks/wigTrack.c +++ src/hg/hgTracks/wigTrack.c @@ -13,32 +13,30 @@ #include "hdb.h" #include "hgTracks.h" #include "wiggle.h" #include "hmmstats.h" #include "scoredRef.h" #ifndef GBROWSE #include "customTrack.h" #endif /* GBROWSE */ #include "wigCommon.h" #include "imageV2.h" #include "memgfx.h" #include "udc.h" #include "trashDir.h" #include "jsonWrite.h" -extern boolean enableMouseOver; - struct wigItem /* A wig track item. */ { struct wigItem *next; int start, end; /* Start/end in chrom (aka browser) coordinates. */ char *db; /* Database */ int ix; /* Position in list. */ int height; /* Pixel height of item. */ unsigned span; /* each value spans this many bases */ unsigned count; /* number of values to use */ unsigned offset; /* offset in File to fetch data */ char *file; /* path name to data file, one byte per value */ double lowerLimit; /* lowest data value in this block */ double dataRange; /* lowerLimit + dataRange = upperLimit */ unsigned validCount; /* number of valid data values in this block */ @@ -929,30 +927,31 @@ else /* perhaps entered region without values after some data already */ { if (mouseOverX2 > 0) /* yes, been in data, end it here */ { mouseOverData->x2 = mouseOverX2; mouseOverX2 = -1; /* start over with new data when found*/ } } /* potentially end the last mouseOver box */ if (mouseOverX2 > 0 && mouseOverX2 > mouseOverData->x2) mouseOverData->x2 = mouseOverX2; } // if (enableMouseOver) else skipMouseOvers = TRUE; + /* ===== done with mouseOver calculations===== */ assert(x1/pixelBins->binSize < pixelBins->binCount); unsigned long *bitCount = &pixelBins->bins[x1/pixelBins->binSize]; Color drawColor = colorArray[x1]; if (drawColor != oldDrawColor) { mediumColor = somewhatLighterColor32(drawColor); lightColor = somewhatLighterColor32(mediumColor); oldDrawColor = drawColor; } /* count is non-zero meaning valid data exists here */ if (p->count) @@ -1427,63 +1426,47 @@ struct wigMouseOver *mouseOverData = graphPreDrawContainer(preContainer, preDrawZero, width, tg, hvg, xOff, yOff, graphUpperLimit, graphLowerLimit, graphRange, vis, wigCart); drawZeroLine(vis, wigCart->horizontalGrid, graphUpperLimit, graphLowerLimit, hvg, xOff, yOff, width, tg->lineHeight); drawArbitraryYLine(vis, (enum wiggleGridOptEnum)wigCart->yLineOnOff, graphUpperLimit, graphLowerLimit, hvg, xOff, yOff, width, tg->lineHeight, wigCart->yLineMark, graphRange, wigCart->yLineOnOff); if (enableMouseOver && mouseOverData) { - static boolean beenHereDoneThat = FALSE; - struct tempName jsonData; - trashDirFile(&jsonData, "hgt", tg->track, ".json"); - FILE *trashJson = mustOpen(jsonData.forCgi, "w"); - struct jsonWrite *jw = jsonWriteNew(); - jsonWriteObjectStart(jw, NULL); - jsonWriteListStart(jw, tg->track); + jsonWriteListStart(mouseOverJson, tg->track); slReverse(&mouseOverData); struct wigMouseOver *dataItem = mouseOverData; for (; dataItem; dataItem = dataItem->next) { - jsonWriteObjectStart(jw, NULL); - jsonWriteNumber(jw, "x1", (long long)dataItem->x1); - jsonWriteNumber(jw, "x2", (long long)dataItem->x2); - jsonWriteDouble(jw, "v", dataItem->value); - jsonWriteNumber(jw, "c", dataItem->valueCount); - jsonWriteObjectEnd(jw); - } - jsonWriteListEnd(jw); - jsonWriteObjectEnd(jw); - fputs(jw->dy->string,trashJson); - carefulClose(&trashJson); - slFreeList(&mouseOverData); - if (! beenHereDoneThat ) - { - hPrintf("<div id='mouseOverVerticalLine' class='mouseOverVerticalLine'></div>\n"); - hPrintf("<div id='mouseOverText' class='mouseOverText'></div>\n"); -// hPrintf("<div id='mouseDbg'><span id='debugMsg'><p>. . . mouseDbg</p></span></div>\n"); - beenHereDoneThat = TRUE; + jsonWriteObjectStart(mouseOverJson, NULL); + jsonWriteNumber(mouseOverJson, "x1", (long long)dataItem->x1); + jsonWriteNumber(mouseOverJson, "x2", (long long)dataItem->x2); + jsonWriteDouble(mouseOverJson, "v", dataItem->value); + jsonWriteNumber(mouseOverJson, "c", dataItem->valueCount); + jsonWriteObjectEnd(mouseOverJson); } - // hidden element to pass along jsonData file name and also the trigger + jsonWriteListEnd(mouseOverJson); + slFreeList(&mouseOverData); + // hidden element to pass along jsonUrl file name and also the trigger // that this track has data to display. - hPrintf("<div id='mouseOver_%s' name='%s' class='hiddenText mouseOverData' jsonData='%s'></div>\n", tg->track, tg->track, jsonData.forCgi); + hPrintf("<div id='mouseOver_%s' name='%s' class='hiddenText mouseOverData' jsonUrl='%s'></div>\n", tg->track, tg->track, mouseOverJsonFile->forCgi); } // Might need something like this later for other purposes // else if (enableMouseOver) // system enabled, but no data for this track // { /* signal to indicate zoom in required to see data */ // hPrintf("<div id='mouseOver_%s' name='%s' class='hiddenText mouseOverData'></div>\n", tg->track, tg->track); // } wigMapSelf(tg, hvg, seqStart, seqEnd, xOff, yOff, width); } struct preDrawContainer *wigLoadPreDraw(struct track *tg, int seqStart, int seqEnd, int width) /* Do bits that load the predraw buffer tg->preDrawContainer. */ { /* Just need to do this once... */