68caf43f9cc2b29f3bd764cc1c0c82aa9c0183e4
kate
Mon Mar 23 15:59:04 2015 -0700
GTEX track display: Add hgc to show tissue color table. Add debug statements for hgTracks. Also doc. This is version demoed at SAB. refs #13504
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 56e32e2..512e032 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -1230,30 +1230,31 @@
y += tHeight;
break;
case tvFull:
if (isCenterLabelIncluded(track))
y += fontHeight;
start = 1;
if( track->subType == lfSubSample && track->items == NULL )
y += track->height;
for (item = track->items; item != NULL; item = item->next)
{
char *rootName;
char *name = track->itemName(track, item);
int itemHeight = track->itemHeight(track, item);
+ //warn("GTEX: track %s, itemHeight %d\n", track->shortLabel, itemHeight);
newy = y;
if (track->itemLabelColor != NULL)
labelColor = track->itemLabelColor(track, item, hvg);
/* Do some fancy stuff for sample tracks.
* Draw y-value limits for 'sample' tracks. */
if (track->subType == lfSubSample )
{
if( prev == NULL )
newy += itemHeight;
else
newy += sampleUpdateY(name,
track->itemName(track, prev), itemHeight);
if( newy == y )
@@ -2338,30 +2339,31 @@
{
y += trackPlusLabelHeight(track, fontHeight);
yEnd = y;
h = yEnd - yStart - 1;
/* alternate button colors for track groups*/
if (track->group != lastGroup)
grayButtonGroup = !grayButtonGroup;
lastGroup = track->group;
if (theImgBox)
{
// Mini-buttons (side label slice) for tracks
sliceHeight = yEnd - yStart;
sliceOffsetY = yStart - 1;
curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
+ //warn("GTEX 2: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stButton,NULL,NULL,
sliceWidth[stButton],sliceHeight,
sliceOffsetX[stButton],sliceOffsetY);
}
else if (!trackImgOnly) // Side buttons only need to be drawn when drawing page
{ // with js advanced features off
if (grayButtonGroup)
drawGrayButtonBox(hvgSide, trackTabX, yStart, trackTabWidth, h, track->hasUi);
else
drawBlueButtonBox(hvgSide, trackTabX, yStart, trackTabWidth, h, track->hasUi);
}
if (track->hasUi)
{
if (tdbIsCompositeChild(track->tdb))
@@ -2387,30 +2389,31 @@
{
Color lightRed = hvGfxFindColorIx(hvgSide, 255, 180, 180);
hvGfxBox(hvgSide, leftLabelX + leftLabelWidth, 0,
gfxBorder, pixHeight, lightRed);
}
y = gfxBorder;
if (rulerMode != tvHide)
{
if (theImgBox)
{
// side label slice for ruler
sliceHeight = basePositionHeight + (rulerCds ? rulerTranslationHeight : 0) + 1;
sliceOffsetY = 0;
curImgTrack = imgBoxTrackFind(theImgBox,NULL,RULER_TRACK_NAME);
+ //warn("GTEX 3: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stSide,theSideImg,NULL,
sliceWidth[stSide],sliceHeight,
sliceOffsetX[stSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
if (baseTitle)
{
hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, titleHeight,
MG_BLACK, font, WIN_TITLE_LABEL);
y += titleHeight;
}
if (baseShowPos||baseShowAsm)
{
hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, showPosHeight,
MG_BLACK, font, WIN_POS_LABEL);
@@ -2455,30 +2458,31 @@
}
if (rulerCds)
y += rulerTranslationHeight;
}
for (flatTrack = flatTracks; flatTrack != NULL; flatTrack = flatTrack->next)
{
track = flatTrack->track;
if (track->limitedVis == tvHide)
continue;
if (theImgBox)
{
// side label slice for tracks
sliceHeight = trackPlusLabelHeight(track, fontHeight);
sliceOffsetY = y;
curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
+ //warn("GTEX 4: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stSide,theSideImg,NULL,
sliceWidth[stSide],sliceHeight,
sliceOffsetX[stSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->track,NULL); // No common linkRoot
}
if (trackShouldUseAjaxRetrieval(track))
y += REMOTE_TRACK_HEIGHT;
else
{
#ifdef IMAGEv2_NO_LEFTLABEL_ON_FULL
if (theImgBox && track->limitedVis != tvDense)
y += sliceHeight;
else
#endif ///def IMAGEv2_NO_LEFTLABEL_ON_FULL
y = doLeftLabels(track, hvgSide, font, y);
@@ -2526,56 +2530,58 @@
hvGfxUnclip(bgImg);
if (bgImg != hvg)
hvGfxClose(&bgImg);
}
}
/* Show ruler at top. */
if (rulerMode != tvHide)
{
if (theImgBox)
{
// data slice for ruler
sliceHeight = basePositionHeight + (rulerCds ? rulerTranslationHeight : 0) + 1;
sliceOffsetY = 0;
curImgTrack = imgBoxTrackFind(theImgBox,NULL,RULER_TRACK_NAME);
+ //warn("GTEX 5: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stData,theOneImg,rulerTtl,
sliceWidth[stData],sliceHeight,
sliceOffsetX[stData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
y = doDrawRuler(hvg,&newWinWidth,&rulerClickHeight,rulerHeight,yAfterRuler,yAfterBases,font,
fontHeight,rulerCds);
}
/* Draw center labels. */
if (withCenterLabels)
{
hvGfxSetClip(hvg, insideX, gfxBorder, insideWidth, pixHeight - 2*gfxBorder);
y = yAfterRuler;
for (flatTrack = flatTracks; flatTrack != NULL; flatTrack = flatTrack->next)
{
track = flatTrack->track;
if (track->limitedVis == tvHide)
continue;
if (theImgBox)
{
// center label slice of tracks Must always make, even if the centerLabel is empty
sliceHeight = fontHeight;
sliceOffsetY = y;
curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
+ //warn("GTEX 6: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stCenter,theOneImg,NULL,
sliceWidth[stData],sliceHeight,
sliceOffsetX[stData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->track,NULL); // No common linkRoot
if (isCenterLabelConditional(track))
imgTrackUpdateCenterLabelSeen(curImgTrack,isCenterLabelConditionallySeen(track) ?
clNowSeen : clNotSeen);
}
if (trackShouldUseAjaxRetrieval(track))
y += REMOTE_TRACK_HEIGHT;
else
y = doCenterLabels(track, track, hvg, font, y);
}
hvGfxUnclip(hvg);
}
@@ -2591,30 +2597,31 @@
track = flatTrack->track;
if (track->limitedVis == tvHide)
continue;
int centerLabelHeight = (isCenterLabelIncluded(track) ? fontHeight : 0);
int yStart = y + centerLabelHeight;
int yEnd = y + trackPlusLabelHeight(track, fontHeight);
if (theImgBox)
{
// data slice of tracks
sliceOffsetY = yStart;
sliceHeight = yEnd - yStart - 1;
curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
if (sliceHeight > 0)
{
+ //warn("GTEX 7: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stData,theOneImg,NULL,
sliceWidth[stData],sliceHeight,
sliceOffsetX[stData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->track,NULL); // No common linkRoot
}
}
if (trackShouldUseAjaxRetrieval(track))
y += REMOTE_TRACK_HEIGHT;
else
y = doDrawItems(track, hvg, font, y, &lastTime);
if (theImgBox && track->limitedVis == tvDense && tdbIsCompositeChild(track->tdb))
mapBoxToggleVis(hvg, 0, yStart,tl.picWidth, sliceHeight,track);
// Strange mapBoxToggleLogic handles reverse complement itself so x=0,width=tl.picWidth
@@ -2629,30 +2636,31 @@
*/
if (withLeftLabels)
{
y = yAfterRuler;
for (flatTrack = flatTracks; flatTrack != NULL; flatTrack = flatTrack->next)
{
track = flatTrack->track;
if (track->limitedVis == tvHide)
continue;
if (theImgBox)
{
// side label slice of tracks
sliceHeight = trackPlusLabelHeight(track, fontHeight);
sliceOffsetY = y;
curImgTrack = imgBoxTrackFind(theImgBox,track->tdb,NULL);
+ //warn("WARN 8: track %s, sliceHeight=%d\n", track->shortLabel, sliceHeight);
curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,stSide,theSideImg,NULL,
sliceWidth[stSide],sliceHeight,
sliceOffsetX[stSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->track,NULL); // No common linkRoot
}
if (trackShouldUseAjaxRetrieval(track))
y += REMOTE_TRACK_HEIGHT;
#ifdef IMAGEv2_NO_LEFTLABEL_ON_FULL
else if (track->drawLeftLabels != NULL
&& (theImgBox == NULL || track->limitedVis == tvDense))
#else ///ndef IMAGEv2_NO_LEFTLABEL_ON_FULL
else if (track->drawLeftLabels != NULL)
#endif ///ndef IMAGEv2_NO_LEFTLABEL_ON_FULL
y = doOwnLeftLabels(track, hvgSide, font, y);
@@ -5682,34 +5690,34 @@
cgiTableFieldEnd();
}
cgiTableRowEnd();
}
sqlFreeResult(&sr);
hFreeConn(&conn);
}
static void chromSizesDownloadRow()
/* Show link to chrom.sizes file at end of chromInfo table (unless this is a hub) */
{
if (! trackHubDatabase(database))
{
cgiSimpleTableRowStart();
cgiSimpleTableFieldStart();
- puts("download as file");
+ puts("Download as file");
cgiTableFieldEnd();
cgiSimpleTableFieldStart();
- printf("%s.chrom.sizes",
+ printf("%s.chrom.sizes",
hDownloadsServer(), database, database, database);
cgiTableFieldEnd();
cgiTableRowEnd();
}
}
void chromInfoPage()
/* Show list of chromosomes (or scaffolds, etc) on which this db is based. */
{
char *position = cartUsualString(cart, "position", hDefaultPos(database));
char *defaultChrom = hDefaultChrom(database);
char *freeze = hFreezeFromDb(database);
struct dyString *title = dyStringNew(512);
if (freeze == NULL)
dyStringPrintf(title, "%s Browser Sequences",