src/hg/hgTracks/goldTrack.c 1.5

1.5 2010/05/11 01:43:27 kent
Refactoring to split the trackDb.tableName field into separate track and table fields. Similarly track.mapName field goes to the same track and table fields.
Index: src/hg/hgTracks/goldTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/goldTrack.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -b -B -U 1000000 -r1.4 -r1.5
--- src/hg/hgTracks/goldTrack.c	3 Sep 2008 19:19:02 -0000	1.4
+++ src/hg/hgTracks/goldTrack.c	11 May 2010 01:43:27 -0000	1.5
@@ -1,165 +1,165 @@
 /* goldTrack - also known as assembly track. */
 
 #include "common.h"
 #include "hash.h"
 #include "linefile.h"
 #include "jksql.h"
 #include "hdb.h"
 #include "hgTracks.h"
 #include "agpFrag.h"
 #include "agpGap.h"
 
 static int cmpAgpFrag(const void *va, const void *vb)
 /* Compare two agpFrags by chromStart. */
 {
 const struct agpFrag *a = *((struct agpFrag **)va);
 const struct agpFrag *b = *((struct agpFrag **)vb);
 return a->chromStart - b->chromStart;
 }
 
 static void goldLoad(struct track *tg)
 /* Load up golden path from database table to track items. */
 {
 struct sqlConnection *conn = hAllocConn(database);
 struct sqlResult *sr = NULL;
 char **row;
 struct agpFrag *fragList = NULL, *frag;
 struct agpGap *gapList = NULL, *gap;
 int rowOffset;
 
 /* Get the frags and load into tg->items. */
 sr = hRangeQuery(conn, "gold", chromName, winStart, winEnd, NULL, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     frag = agpFragLoad(row+rowOffset);
     slAddHead(&fragList, frag);
     }
 slSort(&fragList, cmpAgpFrag);
 sqlFreeResult(&sr);
 tg->items = fragList;
 
 /* Get the gaps into tg->customPt. */
 sr = hRangeQuery(conn, "gap", chromName, winStart, winEnd, NULL, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     gap = agpGapLoad(row+rowOffset);
     slAddHead(&gapList, gap);
     }
 slReverse(&gapList);
 sqlFreeResult(&sr);
 tg->customPt = gapList;
 hFreeConn(&conn);
 }
 
 static void goldFree(struct track *tg)
 /* Free up goldTrackGroup items. */
 {
 agpFragFreeList((struct agpFrag**)&tg->items);
 agpGapFreeList((struct agpGap**)&tg->customPt);
 }
 
 static char *goldName(struct track *tg, void *item)
 /* Return name of gold track item. */
 {
 struct agpFrag *frag = item;
 return frag->frag;
 }
 
 static void goldDrawDense(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw golden path items. */
 {
 int baseWidth = seqEnd - seqStart;
 struct agpFrag *frag;
 struct agpGap *gap;
 int y = yOff;
 int heightPer = tg->heightPer;
 int lineHeight = tg->lineHeight;
 int x1,x2,w;
 int midLineOff = heightPer/2;
 boolean isFull = (vis == tvFull);
 Color brown = color;
 Color gold = tg->ixAltColor;
 Color pink = 0;
 Color pink1 = hvGfxFindColorIx(hvg, 240, 140, 140);
 Color pink2 = hvGfxFindColorIx(hvg, 240, 100, 100);
 int ix = 0;
 double scale = scaleForPixels(width);
 
 /* Draw gaps if any. */
 if (!isFull)
     {
     int midY = y + midLineOff;
     for (gap = tg->customPt; gap != NULL; gap = gap->next)
 	{
 	if (!sameWord(gap->bridge, "no"))
 	    {
 	    drawScaledBox(hvg, gap->chromStart, gap->chromEnd, scale, xOff, midY, 1, brown);
 	    }
 	}
     }
 
 for (frag = tg->items; frag != NULL; frag = frag->next)
     {
     x1 = round((double)((int)frag->chromStart-winStart)*scale) + xOff;
     x2 = round((double)((int)frag->chromEnd-winStart)*scale) + xOff;
     w = x2-x1;
     color =  ((ix&1) ? gold : brown);
     pink = ((ix&1) ? pink1 : pink2);
     if (w < 1)
 	w = 1;
     if (sameString(frag->type, "A")) color = pink;
     hvGfxBox(hvg, x1, y, w, heightPer, color);
     if (isFull)
 	y += lineHeight;
     else if (baseWidth < 10000000)
 	{
 	char status[256];
 	sprintf(status, "%s:%d-%d %s %s:%d-%d", 
 	    frag->frag, frag->fragStart, frag->fragEnd,
 	    frag->strand,
 	    frag->chrom, frag->chromStart, frag->chromEnd);
 
-	mapBoxHc(hvg, frag->chromStart, frag->chromEnd, x1,y,w,heightPer, tg->mapName, 
+	mapBoxHc(hvg, frag->chromStart, frag->chromEnd, x1,y,w,heightPer, tg->track, 
 	    frag->frag, status);
 	}
     ++ix;
     }
 }
 
 static void goldDraw(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw golden path items. */
 {
 if (vis == tvDense)
     goldDrawDense(tg, seqStart, seqEnd, hvg, xOff, yOff, width,
     	font, color, vis);
 else
     genericDrawItems(tg, seqStart, seqEnd, hvg, xOff, yOff, width,
     	font, color, vis);
 }
 
 static Color goldColor(struct track *tg, void *item, struct hvGfx *hvg)
 /* Return color to draw known gene in. */
 {
 struct agpFrag *frag = item;
 Color pink = hvGfxFindColorIx(hvg, 240, 140, 140);
 Color color = (sameString(frag->type, "A") ? pink : tg->ixColor);
 
 return color;
 }
 
 void goldMethods(struct track *tg)
 /* Make track for golden path (assembly track). */
 {
 tg->loadItems = goldLoad;
 tg->freeItems = goldFree;
 tg->drawItems = goldDraw;
 tg->drawItemAt = bedDrawSimpleAt;
 tg->itemName = goldName;
 tg->mapItemName = goldName;
 tg->itemColor = goldColor;
 }