6c16a029709c60f4d88f5a2a01ef7422c78c89c4
braney
  Fri Sep 19 15:30:36 2014 -0700
show SNPs as red in maf and wigMaf tracks if "showSnp on" is set in the trackDb
diff --git src/hg/hgTracks/wigMafTrack.c src/hg/hgTracks/wigMafTrack.c
index 1eec4a6..90459ae 100644
--- src/hg/hgTracks/wigMafTrack.c
+++ src/hg/hgTracks/wigMafTrack.c
@@ -1239,30 +1239,31 @@
 
 static boolean drawPairsFromMultipleMaf(struct track *track,
         int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font,
         Color color, enum trackVisibility vis)
 /* Draw pairwise display from maf of multiple alignment.
  * Extract pairwise alignments from maf and rescore.
  * This is used only when zoomed-in.
  */
 {
 struct wigMafItem *miList = track->items, *mi = miList;
 int graphHeight = 0;
 Color pairColor = (vis == tvFull ? track->ixAltColor : color);
 boolean useIrowChains = TRUE;
 char option[64];
+boolean doSnpMode = (vis == tvPack) &&(trackDbSetting(track->tdb, "snpMode") != NULL);
 
 char *prefix = track->track; // use when setting things to the cart
 if (tdbIsContainerChild(track->tdb))
     prefix = track->tdb->parent->track;
 
 struct mafPriv *mp = getMafPriv(track);
 if (miList == NULL || mp->list == NULL)
     return FALSE;
 
 if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,MAF_CHAIN_VAR))
     useIrowChains = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, MAF_CHAIN_VAR,TRUE);
 else
     {
     char *irowString = trackDbSetting(track->tdb, "irows");
     if (irowString && sameString(irowString, "off"))
@@ -1314,31 +1315,31 @@
         mcMaster->size = mcThis->size;
         mcMaster->text = cloneString(mcThis->text);
         mcMaster->next = mcPair;
 
         AllocVar(pairMaf);
         pairMaf->components = mcMaster;
         pairMaf->textSize = maf->textSize;
         slAddHead(&mafList, pairMaf);
         }
     slReverse(&mafList);
 
     /* compute a graph or density on-the-fly from mafs */
     hvGfxSetClip(hvg, xOff, yOff, width, mi->height);
     drawMafRegionDetails(mafList, mi->height, seqStart, seqEnd, hvg, xOff, yOff,
                          width, font, pairColor, pairColor, vis, FALSE,
-                         useIrowChains);
+                         useIrowChains, doSnpMode);
     hvGfxUnclip(hvg);
 
     /* need to add extra space between graphs ?? (for now) */
     if (vis == tvFull)
         mi->height = graphHeight;
 
     yOff += mi->height;
     mafAliFreeList(&mafList);
     }
 return TRUE;
 }
 
 static boolean wigMafDrawPairwise(struct track *track, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font,
         Color color, enum trackVisibility vis)
@@ -2303,45 +2304,47 @@
 return y;
 }
 
 static int wigMafDrawScoreGraph(struct track *track, int seqStart, int seqEnd,
                                 struct hvGfx *hvg, int xOff, int yOff, int width,
                                 MgFont *font, Color color, enum trackVisibility vis)
 {
 /* Draw routine for score graph, returns new Y offset */
 struct track *wigTrack = track->subtracks;
 enum trackVisibility scoreVis;
 
 scoreVis = (vis == tvDense ? tvDense : tvFull);
 
 if (wigTrack == NULL)
     {
+    boolean doSnpMode = (vis == tvPack) &&(trackDbSetting(track->tdb, "snpMode") != NULL);
     /* no wiggle */
     int height = tl.fontHeight * 4;
     if (vis == tvFull || vis == tvPack)
         /* suppress graph if other items displayed (bases or pairs) */
         return yOff;
     else if (vis == tvDense)
         height = track->height; // Evidence that track-height comes in as 9 but should be 10!
     /* draw some kind of graph from multiple alignment */
     struct mafPriv *mp = getMafPriv(track);
     if (mp->list != (char *)-1 && mp->list != NULL)
         {
         /* use mafs */
         drawMafRegionDetails(mp->list, height, seqStart, seqEnd,
                                 hvg, xOff, yOff, width, font,
-                                color, color, scoreVis, FALSE, FALSE);
+                                color, color, scoreVis, FALSE, FALSE,
+				doSnpMode);
         }
     else if (mp->ct != NULL)
         {
         /* use or scored refs from maf table*/
         drawScoreOverviewCT(mp->ct->dbTableName, height, seqStart, seqEnd,
 		hvg, xOff, yOff, width, font, color, color, scoreVis);
         yOff++;
         }
     else
         {
         /* use or scored refs from maf table*/
         drawScoreOverview(track->table, height, seqStart, seqEnd, hvg,
                             xOff, yOff, width, font, color, color, scoreVis);
         yOff++;
         }